diff --git a/config.toml b/config.toml index db0c457c..eff0e53c 100644 --- a/config.toml +++ b/config.toml @@ -1,5 +1,4 @@ [module] [module.hugoVersion] extended = true - min = "0.87.0 " - max = "0.112.0" \ No newline at end of file + min = "0.87.0" \ No newline at end of file diff --git a/exampleSite/content/users/index.md b/exampleSite/content/users/index.md index d1b60624..563dd7dc 100644 --- a/exampleSite/content/users/index.md +++ b/exampleSite/content/users/index.md @@ -76,6 +76,10 @@ Real websites that are built with Blowfish. | [clemsau.com](https://clemsau.com/) | Personal site | | [lelouvincx.github.io](https://lelouvincx.github.io/) | Personal site | | [weaxsey.org](https://weaxsey.org/) | Personal site | +| [nikarashihatsu.github.io](https://nikarashihatsu.github.io/) | Personal site | +| [blog.enmanuelmoreira.com](https://blog.enmanuelmoreira.com) | Personal site | +| [halcyonstraits.com](https://www.halcyonstraits.com/) | Doll photography | + {{< alert >}} diff --git a/i18n/fr.yaml b/i18n/fr.yaml index e34db8f4..2a601ae3 100644 --- a/i18n/fr.yaml +++ b/i18n/fr.yaml @@ -18,7 +18,7 @@ article: part_of_series: "Cet article fait partie d'une série." part: "Partie" this_article: "Cet article" - related_articles: "Related" + related_articles: "Articles connexes" author: byline_title: "Auteur" @@ -30,7 +30,7 @@ code: error: 404_title: "Cette page n'existe pas :confused:" 404_error: "Erreur 404" - 404_description: "Il semble que la page que vous cherchiez n'existe pas." + 404_description: "Il semble que la page que vous cherchez n'existe pas." footer: dark_appearance: "Passer au thème sombre" @@ -62,4 +62,4 @@ shortcode: recent_articles: "Articles récents" recent: - show_more: "Montre Plus" \ No newline at end of file + show_more: "Voir plus" diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index dc02c58d..3aaa9f41 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,4 +1,3 @@ -{{- partial "partials/functions/warnings.html" .Site -}} - {{ else }} - - {{ end }} - {{ end }} - {{ template "_internal/google_analytics.html" . }} +{{ with site.Params.fathomAnalytics.site }} +{{ if isset $.Site.Params.fathomanalytics "domain" }} + +{{ else }} + {{ end }} +{{ end }} +{{/* template "_internal/google_analytics.html" . */}} +{{ partial "ga-analytics.html" }} \ No newline at end of file diff --git a/layouts/partials/functions/warnings.html b/layouts/partials/functions/warnings.html deleted file mode 100644 index 886b1de3..00000000 --- a/layouts/partials/functions/warnings.html +++ /dev/null @@ -1,6 +0,0 @@ -{{ if ne .Site.Params.showAppearanceSwitcher nil }} - {{ warnf "[BLOWFISH] Theme parameter `showAppearanceSwitcher` has been renamed to `footer.showAppearanceSwitcher`. Please update your site configuration." }} -{{ end }} -{{ if ne .Site.Params.showScrollToTop nil }} - {{ warnf "[BLOWFISH] Theme parameter `showScrollToTop` has been renamed to `footer.showScrollToTop`. Please update your site configuration." }} -{{ end }} diff --git a/layouts/partials/ga-analytics.html b/layouts/partials/ga-analytics.html new file mode 100644 index 00000000..2d37f8ec --- /dev/null +++ b/layouts/partials/ga-analytics.html @@ -0,0 +1,10 @@ +{{ if site.Config.Services.GoogleAnalytics.ID }} + + +{{ end }} \ No newline at end of file diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 23de7dda..157b3883 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -113,7 +113,7 @@ {{/* Vendor */}} {{ partial "vendor.html" . }} {{/* Analytics */}} - {{ partialCached "analytics.html" .Site }} + {{ partial "analytics.html" .Site }} {{/* Extend head - eg. for custom analytics scripts, etc. */}} {{ if templates.Exists "partials/extend-head.html" }} {{ partialCached "extend-head.html" .Site }} diff --git a/layouts/shortcodes/gallery.html b/layouts/shortcodes/gallery.html index 19677588..a5a9f4d3 100644 --- a/layouts/shortcodes/gallery.html +++ b/layouts/shortcodes/gallery.html @@ -1,12 +1,11 @@ -{{ $time := now.UnixNano }} -{{ $id := delimit (slice "gallery" .Ordinal $time) "-" }} +{{ $id := delimit (slice "gallery" .Ordinal) "-" }}
{{ .Inner }}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to main content -
- - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- -

Page Not Found 😕

-

- Error 404 -

-
-

It seems that the page you've requested does not exist.

-
- - -
- -
- - - +404 Page not found · Blowfish + + + + + +
Skip to main content

Page Not Found 😕

Error 404

It seems that the page you've requested does not exist.

\ No newline at end of file diff --git a/public/authors/index.html b/public/authors/index.html index 35b417e5..4e6ba3cd 100644 --- a/public/authors/index.html +++ b/public/authors/index.html @@ -1,423 +1,25 @@ - - - - - - - - - - - - Authors · Blowfish - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to main content -
- - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- - - - - -
- -

Authors

-
- - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
- - - - - - - - - -
- -
- - - - - - -
- -
- - - +Authors Taxonomy Listing Example · Blowfish + + + + + +
Skip to main content

Authors Taxonomy Listing Example

0 +· +0 +· +

A quick example of how to start using author taxonomies in your articles.

\ No newline at end of file diff --git a/public/authors/index.xml b/public/authors/index.xml index a1a10dfe..d08d1ea3 100644 --- a/public/authors/index.xml +++ b/public/authors/index.xml @@ -1,10 +1 @@ - - - - Authors on Blowfish - /authors/ - Recent content in Authors on Blowfish - Hugo -- gohugo.io - en - - +Authors Taxonomy Listing Example on Blowfishhttps://nunocoracao.github.io/blowfish/authors/Recent content in Authors Taxonomy Listing Example on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Dummy Second Authorhttps://nunocoracao.github.io/blowfish/authors/secondauthor/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/authors/secondauthor/Dummy Second Author&rsquo;s awesome dummy bio.Nuno Coraçãohttps://nunocoracao.github.io/blowfish/authors/nunocoracao/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/authors/nunocoracao/Nuno&rsquo;s awesome dummy bio. \ No newline at end of file diff --git a/public/authors/nunocoracao/index.html b/public/authors/nunocoracao/index.html new file mode 100644 index 00000000..68bda446 --- /dev/null +++ b/public/authors/nunocoracao/index.html @@ -0,0 +1,32 @@ +Nuno Coração · Blowfish + + + + + +
Skip to main content

Nuno Coração

0 +· +0 +· +

Nuno’s awesome dummy bio.

Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
Multiple Authors
4 mins· +0 +· +0 +
authors +config +docs
\ No newline at end of file diff --git a/public/authors/nunocoracao/index.xml b/public/authors/nunocoracao/index.xml new file mode 100644 index 00000000..0b9c099e --- /dev/null +++ b/public/authors/nunocoracao/index.xml @@ -0,0 +1 @@ +Nuno Coração on Blowfishhttps://nunocoracao.github.io/blowfish/authors/nunocoracao/Recent content in Nuno Coração on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature. \ No newline at end of file diff --git a/public/authors/nunocoracao/page/1/index.html b/public/authors/nunocoracao/page/1/index.html new file mode 100644 index 00000000..ed132af7 --- /dev/null +++ b/public/authors/nunocoracao/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/authors/nunocoracao/ \ No newline at end of file diff --git a/public/authors/secondauthor/index.html b/public/authors/secondauthor/index.html new file mode 100644 index 00000000..04946efd --- /dev/null +++ b/public/authors/secondauthor/index.html @@ -0,0 +1,26 @@ +Dummy Second Author · Blowfish + + + + + +
Skip to main content

Dummy Second Author

0 +· +0 +· +

Dummy Second Author’s awesome dummy bio.

Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
\ No newline at end of file diff --git a/public/authors/secondauthor/index.xml b/public/authors/secondauthor/index.xml new file mode 100644 index 00000000..17d1a5f0 --- /dev/null +++ b/public/authors/secondauthor/index.xml @@ -0,0 +1 @@ +Dummy Second Author on Blowfishhttps://nunocoracao.github.io/blowfish/authors/secondauthor/Recent content in Dummy Second Author on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used. \ No newline at end of file diff --git a/public/authors/secondauthor/page/1/index.html b/public/authors/secondauthor/page/1/index.html new file mode 100644 index 00000000..032842b0 --- /dev/null +++ b/public/authors/secondauthor/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/authors/secondauthor/ \ No newline at end of file diff --git a/public/blowfish/js/appearance.min.516a16745bea5a9bd011138d254cc0fd3973cd55ce6e15f3dec763e7c7c2c7448f8fe7b54cca811cb821b0c7e12cd161caace1dd794ac3d34d40937cbcc9ee12.js b/public/blowfish/js/appearance.min.516a16745bea5a9bd011138d254cc0fd3973cd55ce6e15f3dec763e7c7c2c7448f8fe7b54cca811cb821b0c7e12cd161caace1dd794ac3d34d40937cbcc9ee12.js new file mode 100644 index 00000000..dfe7d81d --- /dev/null +++ b/public/blowfish/js/appearance.min.516a16745bea5a9bd011138d254cc0fd3973cd55ce6e15f3dec763e7c7c2c7448f8fe7b54cca811cb821b0c7e12cd161caace1dd794ac3d34d40937cbcc9ee12.js @@ -0,0 +1 @@ +const sitePreference=document.documentElement.getAttribute("data-default-appearance"),userPreference=localStorage.getItem("appearance");(sitePreference==="dark"&&userPreference===null||userPreference==="dark")&&document.documentElement.classList.add("dark"),document.documentElement.getAttribute("data-auto-appearance")==="true"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&userPreference!=="light"&&document.documentElement.classList.add("dark"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})),window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("appearance-switcher"),n=document.getElementById("appearance-switcher-mobile");updateMeta(),this.updateLogo?.(getTargetAppearance()),t&&(t.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),this.updateLogo?.(e)}),t.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")})),n&&(n.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");var e=getTargetAppearance();localStorage.setItem("appearance",e),updateMeta(),this.updateLogo?.(e)}),n.addEventListener("contextmenu",e=>{e.preventDefault(),localStorage.removeItem("appearance")}))});var updateMeta=()=>{var e=document.querySelector("body"),t=getComputedStyle(e);document.querySelector('meta[name="theme-color"]').setAttribute("content",t.backgroundColor)},getTargetAppearance=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.addEventListener("DOMContentLoaded",e=>{const t=document.getElementById("top-scroller"),n=document.getElementById("site-footer");t&&n&&t.getBoundingClientRect().top>n.getBoundingClientRect().top&&(t.hidden=!0)}) \ No newline at end of file diff --git a/public/categories/index.html b/public/categories/index.html index 5e49ade2..e2757776 100644 --- a/public/categories/index.html +++ b/public/categories/index.html @@ -1,423 +1,21 @@ - - - - - - - - - - - - Categories · Blowfish - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to main content -
- - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- - - - - -
- -

Categories

-
- - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
- - - - - - - - - -
- -
- - - - - - -
- -
- - - +Categories · Blowfish + + + + + +
Skip to main content

Categories

0 +· +0 +· +
\ No newline at end of file diff --git a/public/categories/index.xml b/public/categories/index.xml index 9925aee3..9d5adcf8 100644 --- a/public/categories/index.xml +++ b/public/categories/index.xml @@ -1,10 +1 @@ - - - - Categories on Blowfish - /categories/ - Recent content in Categories on Blowfish - Hugo -- gohugo.io - en - - +Categories on Blowfishhttps://nunocoracao.github.io/blowfish/categories/Recent content in Categories on BlowfishHugo -- gohugo.ioen \ No newline at end of file diff --git a/public/css/main.bundle.min.c6116b9ed1c907a8c0eb015f377d3eecc07e448d75729e31fc3de5881465c6c172ba9fa9a6800c030116caf2a110d92242bb816639484ca791f7cd107a8d49b5.css b/public/css/main.bundle.min.c6116b9ed1c907a8c0eb015f377d3eecc07e448d75729e31fc3de5881465c6c172ba9fa9a6800c030116caf2a110d92242bb816639484ca791f7cd107a8d49b5.css new file mode 100644 index 00000000..2b47ad2e --- /dev/null +++ b/public/css/main.bundle.min.c6116b9ed1c907a8c0eb015f377d3eecc07e448d75729e31fc3de5881465c6c172ba9fa9a6800c030116caf2a110d92242bb816639484ca791f7cd107a8d49b5.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:248, 250, 252;--color-neutral-100:241, 245, 249;--color-neutral-200:226, 232, 240;--color-neutral-300:203, 213, 225;--color-neutral-400:148, 163, 184;--color-neutral-500:100, 116, 139;--color-neutral-600:71, 85, 105;--color-neutral-700:51, 65, 85;--color-neutral-800:30, 41, 59;--color-neutral-900:15, 23, 42;--color-primary-50:239, 246, 255;--color-primary-100:219, 234, 254;--color-primary-200:191, 219, 254;--color-primary-300:147, 197, 253;--color-primary-400:96, 165, 250;--color-primary-500:59, 130, 246;--color-primary-600:37, 99, 235;--color-primary-700:29, 78, 216;--color-primary-800:30, 64, 175;--color-primary-900:30, 58, 138;--color-secondary-50:236, 254, 255;--color-secondary-100:207, 250, 254;--color-secondary-200:165, 243, 252;--color-secondary-300:103, 232, 249;--color-secondary-400:34, 211, 238;--color-secondary-500:6, 182, 212;--color-secondary-600:8, 145, 178;--color-secondary-700:14, 116, 144;--color-secondary-800:21, 94, 117;--color-secondary-900:22, 78, 99}/*!Blowfish | MIT License | https://github.com/nunocoracao/blowfish*//*!tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding-top:.5rem;padding-right:.75rem;padding-bottom:.5rem;padding-left:.75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000}[type=text]:focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:853px){.container{max-width:853px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:none;font-weight:500;text-decoration-color:rgba(var(--color-primary-300),1)}.prose :where(a):not(:where([class~=not-prose] *)):hover{color:rgba(var(--color-primary-600),1);text-decoration:none;border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em;background-color:rgba(var(--color-neutral-50),1);padding-top:3px;padding-bottom:3px;padding-left:5px;padding-right:5px;border-radius:.25rem}.prose :where(code):not(:where([class~=not-prose] *))::before{content:"`";display:none}.prose :where(code):not(:where([class~=not-prose] *))::after{content:"`";display:none}.prose :where(a code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(h1 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-right:1.1428571em;padding-bottom:.8571429em;padding-left:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose{--tw-prose-body:rgba(var(--color-neutral-700), 1);--tw-prose-headings:rgba(var(--color-neutral-800), 1);--tw-prose-lead:rgba(var(--color-neutral-500), 1);--tw-prose-links:rgba(var(--color-primary-600), 1);--tw-prose-bold:rgba(var(--color-neutral-900), 1);--tw-prose-counters:rgba(var(--color-neutral-800), 1);--tw-prose-bullets:rgba(var(--color-neutral-500), 1);--tw-prose-hr:rgba(var(--color-neutral-200), 1);--tw-prose-quotes:rgba(var(--color-neutral-700), 1);--tw-prose-quote-borders:rgba(var(--color-primary-200), 1);--tw-prose-captions:rgba(var(--color-neutral-500), 1);--tw-prose-code:rgba(var(--color-secondary-700), 1);--tw-prose-pre-code:rgba(var(--color-neutral-700), 1);--tw-prose-pre-bg:rgba(var(--color-neutral-50), 1);--tw-prose-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-td-borders:rgba(var(--color-neutral-300), 1);--tw-prose-invert-body:rgba(var(--color-neutral-300), 1);--tw-prose-invert-headings:rgba(var(--color-neutral-50), 1);--tw-prose-invert-lead:rgba(var(--color-neutral-500), 1);--tw-prose-invert-links:rgba(var(--color-primary-400), 1);--tw-prose-invert-bold:rgba(var(--color-neutral), 1);--tw-prose-invert-counters:rgba(var(--color-neutral-400), 1);--tw-prose-invert-bullets:rgba(var(--color-neutral-600), 1);--tw-prose-invert-hr:rgba(var(--color-neutral-500), 1);--tw-prose-invert-quotes:rgba(var(--color-neutral-200), 1);--tw-prose-invert-quote-borders:rgba(var(--color-primary-900), 1);--tw-prose-invert-captions:rgba(var(--color-neutral-400), 1);--tw-prose-invert-code:rgba(var(--color-secondary-400), 1);--tw-prose-invert-pre-code:rgba(var(--color-neutral-200), 1);--tw-prose-invert-pre-bg:rgba(var(--color-neutral-700), 1);--tw-prose-invert-th-borders:rgba(var(--color-neutral-500), 1);--tw-prose-invert-td-borders:rgba(var(--color-neutral-700), 1);font-size:1rem;line-height:1.75}.prose :where(video):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding-top:.5714286em;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose :where(kbd):not(:where([class~=not-prose] *)){background-color:rgba(var(--color-neutral-200),1);padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose :where(mark):not(:where([class~=not-prose] *)){color:rgba(var(--color-neutral-800),1);background-color:rgba(var(--color-primary-600),1);padding:.1rem .2rem;border-radius:.25rem}.prose :where(p):not(:where([class~=not-prose] *))::before{display:none}.prose :where(p):not(:where([class~=not-prose] *))::after{display:none}.prose :where(a.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-600),1)}.prose :where(p.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-600),1)}.prose-invert :where(a.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-400),1)}.prose-invert :where(p.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-400),1)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.\!absolute{position:absolute!important}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.\!left-auto{left:auto!important}.\!top-auto{top:auto!important}.-bottom-\[47px\]{bottom:-47px}.-left-\[15px\]{left:-15px}.-top-\[21px\]{top:-21px}.-top-\[35px\]{top:-35px}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.bottom-\[2px\]{bottom:2px}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.left-\[calc\(50\%-1px\)\]{left:calc(50% - 1px)}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-3{right:.75rem}.right-9{right:2.25rem}.right-\[2px\]{right:2px}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-20{top:5rem}.top-\[110vh\]{top:110vh}.top-\[11px\]{top:11px}.top-\[13px\]{top:13px}.top-\[calc\(100vh-5\.5rem\)\]{top:calc(100vh - 5.5rem)}.z-10{z-index:10}.z-30{z-index:30}.z-50{z-index:50}.z-\[1040\]{z-index:1040}.z-\[1065\]{z-index:1065}.z-\[1066\]{z-index:1066}.z-\[1070\]{z-index:1070}.z-\[1080\]{z-index:1080}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.z-\[999\]{z-index:999}.order-first{order:-9999}.float-right{float:right}.float-left{float:left}.\!-m-px{margin:-1px!important}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-auto{margin:auto}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-\[15\%\]{margin-left:15%;margin-right:15%}.mx-\[3px\]{margin-left:3px;margin-right:3px}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-\[5px\]{margin-top:5px;margin-bottom:5px}.\!mb-0{margin-bottom:0!important}.\!mb-9{margin-bottom:2.25rem!important}.\!mt-0{margin-top:0!important}.-mb-1{margin-bottom:-.25rem}.-ml-12{margin-left:-3rem}.-mr-2{margin-right:-.5rem}.-mr-48{margin-right:-12rem}.-mr-\[100\%\]{margin-right:-100%}.-mt-3{margin-top:-.75rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-\[10px\]{margin-bottom:10px}.mb-\[2px\]{margin-bottom:2px}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-\[30px\]{margin-left:30px}.ml-\[3px\]{margin-left:3px}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-6{margin-right:1.5rem}.mr-\[8px\]{margin-right:8px}.mr-auto{margin-right:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.15rem\]{margin-top:.15rem}.mt-\[0\.1rem\]{margin-top:.1rem}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.\!h-0{height:0!important}.\!h-px{height:1px!important}.h-0{height:0}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2\/5{height:40%}.h-24{height:6rem}.h-3{height:.75rem}.h-36{height:9rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1\.125rem\]{height:1.125rem}.h-\[1000px\]{height:1000px}.h-\[100px\]{height:100px}.h-\[120px\]{height:120px}.h-\[150px\]{height:150px}.h-\[15px\]{height:15px}.h-\[160px\]{height:160px}.h-\[260px\]{height:260px}.h-\[30px\]{height:30px}.h-\[32px\]{height:32px}.h-\[380px\]{height:380px}.h-\[3px\]{height:3px}.h-\[40px\]{height:40px}.h-\[42px\]{height:42px}.h-\[48px\]{height:48px}.h-\[4px\]{height:4px}.h-\[512px\]{height:512px}.h-\[56px\]{height:56px}.h-\[6px\]{height:6px}.h-\[72px\]{height:72px}.h-\[800px\]{height:800px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[5rem\]{max-height:5rem}.max-h-\[calc\(100\%-64px\)\]{max-height:calc(100% - 64px)}.min-h-0{min-height:0}.min-h-\[148px\]{min-height:148px}.min-h-\[305px\]{min-height:305px}.min-h-\[325px\]{min-height:325px}.min-h-\[auto\]{min-height:auto}.min-h-full{min-height:100%}.\!w-px{width:1px!important}.w-0{width:0}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[1\.125rem\]{width:1.125rem}.w-\[15\%\]{width:15%}.w-\[150px\]{width:150px}.w-\[15px\]{width:15px}.w-\[160px\]{width:160px}.w-\[260px\]{width:260px}.w-\[2px\]{width:2px}.w-\[304px\]{width:304px}.w-\[30px\]{width:30px}.w-\[328px\]{width:328px}.w-\[32px\]{width:32px}.w-\[4px\]{width:4px}.w-\[6px\]{width:6px}.w-\[72px\]{width:72px}.w-\[76px\]{width:76px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[100px\]{min-width:100px}.min-w-\[220px\]{min-width:220px}.min-w-\[30px\]{min-width:30px}.min-w-\[310px\]{min-width:310px}.min-w-\[48px\]{min-width:48px}.min-w-\[64px\]{min-width:64px}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[1600px\]{max-width:1600px}.max-w-\[200px\]{max-width:200px}.max-w-\[267px\]{max-width:267px}.max-w-\[325px\]{max-width:325px}.max-w-\[5rem\]{max-width:5rem}.max-w-\[64rem\]{max-width:64rem}.max-w-\[90\%\]{max-width:90%}.max-w-\[calc\(100\%-1rem\)\]{max-width:calc(100% - 1rem)}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.max-w-xl{max-width:36rem}.flex-1{flex:1}.flex-auto{flex:auto}.flex-initial{flex:initial}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.origin-\[0_0\]{transform-origin:0 0}.origin-\[center_bottom_0\]{transform-origin:center bottom 0}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.-translate-x-\[150\%\]{--tw-translate-x:-150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.translate-x-\[150\%\]{--tw-translate-x:150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.scale-\[0\.8\]{--tw-scale-x:0.8;--tw-scale-y:0.8;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.transform-none{transform:none}.animate-\[fade-in_0\.15s_both\]{animation:fade-in .15s both}.animate-\[fade-in_0\.3s_both\]{animation:fade-in .3s both}.animate-\[fade-in_350ms_ease-in-out\]{animation:fade-in 350ms ease-in-out}.animate-\[fade-out_0\.15s_both\]{animation:fade-out .15s both}.animate-\[fade-out_0\.3s_both\]{animation:fade-out .3s both}.animate-\[fade-out_350ms_ease-in-out\]{animation:fade-out 350ms ease-in-out}.animate-\[show-up-clock_350ms_linear\]{animation:show-up-clock 350ms linear}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x)var(--tw-pan-y)var(--tw-pinch-zoom)}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\!flex-row{flex-direction:row!important}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-4{gap:1rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.25rem * var(--tw-space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.\!overflow-hidden{overflow:hidden!important}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.\!whitespace-nowrap{white-space:nowrap!important}.whitespace-nowrap{white-space:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.\!rounded-md{border-radius:.375rem!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[0\.25rem\]{border-radius:.25rem}.rounded-\[0\.6rem\]{border-radius:.6rem}.rounded-\[100\%\]{border-radius:100%}.rounded-\[10px\]{border-radius:10px}.rounded-\[16px\]{border-radius:16px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[999px\]{border-radius:999px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-\[0\.25rem\]{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-\[0\.25rem\]{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-t-\[0\.6rem\]{border-top-left-radius:.6rem;border-top-right-radius:.6rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.\!border-0{border-width:0!important}.\!border-\[3px\]{border-width:3px!important}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-\[\.125rem\]{border-width:.125rem}.border-\[0\.125rem\]{border-width:.125rem}.border-\[14px\]{border-width:14px}.border-y-\[10px\]{border-top-width:10px;border-bottom-width:10px}.border-b-2{border-bottom-width:2px}.border-l-0{border-left-width:0}.border-l-2{border-left-width:2px}.border-l-\[0\.125rem\]{border-left-width:.125rem}.border-r-0{border-right-width:0}.border-t{border-top-width:1px}.\!border-solid{border-style:solid!important}.border-solid{border-style:solid}.border-dotted{border-style:dotted}.border-none{border-style:none}.\!border-\[\#b2b3b4\]{--tw-border-opacity:1 !important;border-color:rgb(178 179 180/var(--tw-border-opacity))!important}.border-\[\#3b71ca\]{--tw-border-opacity:1;border-color:rgb(59 113 202/var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-100),var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--color-primary-500),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-transparent{border-top-color:transparent}.\!bg-\[\#858585\]{--tw-bg-opacity:1 !important;background-color:rgb(133 133 133/var(--tw-bg-opacity))!important}.\!bg-primary-100{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))!important}.bg-\[\#00000012\]{background-color:#00000012}.bg-\[\#00000066\]{background-color:#0006}.bg-\[\#3b71ca\]{--tw-bg-opacity:1;background-color:rgb(59 113 202/var(--tw-bg-opacity))}.bg-\[\#6d6d6d\]{--tw-bg-opacity:1;background-color:rgb(109 109 109/var(--tw-bg-opacity))}.bg-\[\#aaa\]{--tw-bg-opacity:1;background-color:rgb(170 170 170/var(--tw-bg-opacity))}.bg-\[\#eceff1\]{--tw-bg-opacity:1;background-color:rgb(236 239 241/var(--tw-bg-opacity))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity))}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity))}.bg-neutral-100\/50{background-color:rgba(var(--color-neutral-100),.5)}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity))}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-neutral{--tw-gradient-from:rgba(var(--color-neutral), 1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(var(--color-neutral), 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary-500{--tw-gradient-from:rgba(var(--color-primary-500), 1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(var(--color-primary-500), 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.to-neutral{--tw-gradient-to:rgba(var(--color-neutral), 1) var(--tw-gradient-to-position)}.to-neutral-100{--tw-gradient-to:rgba(var(--color-neutral-100), 1) var(--tw-gradient-to-position)}.to-secondary-700{--tw-gradient-to:rgba(var(--color-secondary-700), 1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.bg-clip-padding{background-clip:padding-box}.fill-\[\#afafaf\]{fill:#afafaf}.object-cover{-o-object-fit:cover;object-fit:cover}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.\!p-0{padding:0!important}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[5px\]{padding:5px}.p-\[auto\]{padding:auto}.\!py-0{padding-top:0!important;padding-bottom:0!important}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[0\.4rem\]{padding-left:.4rem;padding-right:.4rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[30px\]{padding-left:30px;padding-right:30px}.px-\[auto\]{padding-left:auto;padding-right:auto}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[0\.32rem\]{padding-top:.32rem;padding-bottom:.32rem}.py-\[0\.33rem\]{padding-top:.33rem;padding-bottom:.33rem}.py-\[0\.4rem\]{padding-top:.4rem;padding-bottom:.4rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-\[5px\]{padding-top:5px;padding-bottom:5px}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-32{padding-bottom:8rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-\[24px\]{padding-left:24px}.pl-\[50px\]{padding-left:50px}.pl-\[8px\]{padding-left:8px}.pr-\[24px\]{padding-right:24px}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.pt-\[0\.37rem\]{padding-top:.37rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.-indent-\[999px\]{text-indent:-999px}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-bottom{vertical-align:text-bottom}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9rem\]{font-size:.9rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[10px\]{font-size:10px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[2\.5rem\]{font-size:2.5rem}.text-\[3\.75rem\]{font-size:3.75rem}.text-\[34px\]{font-size:34px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.leading-10{line-height:2.5rem}.leading-3{line-height:.75rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-9{line-height:2.25rem}.leading-\[1\.2\]{line-height:1.2}.leading-\[1\.5\]{line-height:1.5}.leading-\[1\.6\]{line-height:1.6}.leading-\[2\.15\]{line-height:2.15}.leading-\[40px\]{line-height:40px}.leading-loose{line-height:2}.leading-normal{line-height:1.5}.tracking-\[-0\.00833em\]{letter-spacing:-.00833em}.tracking-\[\.1rem\]{letter-spacing:.1rem}.tracking-\[0\.1rem\]{letter-spacing:.1rem}.tracking-\[1\.7px\]{letter-spacing:1.7px}.tracking-normal{letter-spacing:0}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity))!important}.\!text-primary-700{--tw-text-opacity:1 !important;color:rgba(var(--color-primary-700),var(--tw-text-opacity))!important}.text-\[\#212529\]{--tw-text-opacity:1;color:rgb(33 37 41/var(--tw-text-opacity))}.text-\[\#3b71ca\]{--tw-text-opacity:1;color:rgb(59 113 202/var(--tw-text-opacity))}.text-\[\#4f4f4f\]{--tw-text-opacity:1;color:rgb(79 79 79/var(--tw-text-opacity))}.text-\[\#b3afaf\]{--tw-text-opacity:1;color:rgb(179 175 175/var(--tw-text-opacity))}.text-\[\#ffffff8a\]{color:#ffffff8a}.text-\[rgb\(220\2c 76\2c 100\)\]{--tw-text-opacity:1;color:rgb(220 76 100/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.text-neutral-50{--tw-text-opacity:1;color:rgba(var(--color-neutral-50),var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity))}.text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity))}.underline{text-decoration-line:underline}.\!no-underline{text-decoration-line:none!important}.no-underline{text-decoration-line:none}.decoration-neutral-300{text-decoration-color:rgba(var(--color-neutral-300),1)}.decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.underline-offset-auto{text-underline-offset:auto}.\!opacity-0{opacity:0!important}.\!opacity-100{opacity:1!important}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-\[\.53\]{opacity:.53}.opacity-\[\.54\]{opacity:.54}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-multiply{mix-blend-mode:multiply}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgb(0 0 0 / 0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0px_3px_0_rgba\(0\2c 0\2c 0\2c 0\.07\)\2c 0_2px_2px_0_rgba\(0\2c 0\2c 0\2c 0\.04\)\]{--tw-shadow:0 0px 3px 0 rgba(0,0,0,0.07),0 2px 2px 0 rgba(0,0,0,0.04);--tw-shadow-colored:0 0px 3px 0 var(--tw-shadow-color), 0 2px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_15px_-3px_rgba\(0\2c 0\2c 0\2c 0\.07\)\2c 0_4px_6px_-2px_rgba\(0\2c 0\2c 0\2c 0\.05\)\]{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.07),0 4px 6px -2px rgba(0,0,0,0.05);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_5px_0_rgba\(0\2c 0\2c 0\2c 0\.16\)\2c _0_2px_10px_0_rgba\(0\2c 0\2c 0\2c 0\.12\)\]{--tw-shadow:0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12);--tw-shadow-colored:0 2px 5px 0 var(--tw-shadow-color), 0 2px 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0px_2px_15px_-3px_rgba\(0\2c 0\2c 0\2c \.07\)\2c _0px_10px_20px_-2px_rgba\(0\2c 0\2c 0\2c \.04\)\]{--tw-shadow:0px 2px 15px -3px rgba(0,0,0,.07), 0px 10px 20px -2px rgba(0,0,0,.04);--tw-shadow-colored:0px 2px 15px -3px var(--tw-shadow-color), 0px 10px 20px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(40px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[background-color\2c box-shadow\2c border\]{transition-property:background-color,box-shadow,border;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[opacity\]{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[transform\2c _opacity\]{transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[transform\2c height\]{transition-property:transform,height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.delay-\[0ms\]{transition-delay:0ms}.duration-150{transition-duration:150ms}.duration-200{transition-duration:200ms}.duration-300{transition-duration:300ms}.duration-\[250ms\]{transition-duration:250ms}.duration-\[350ms\]{transition-duration:350ms}.duration-\[400ms\]{transition-duration:400ms}.duration-\[600ms\]{transition-duration:600ms}.ease-\[cubic-bezier\(0\2c 0\2c 0\.15\2c 1\)\2c _cubic-bezier\(0\2c 0\2c 0\.15\2c 1\)\]{transition-timing-function:cubic-bezier(0,0,.15,1),cubic-bezier(0,0,.15,1)}.ease-\[cubic-bezier\(0\.25\2c 0\.1\2c 0\.25\2c 1\)\]{transition-timing-function:cubic-bezier(.25,.1,.25,1)}.ease-\[cubic-bezier\(0\.25\2c 0\.1\2c 0\.25\2c 1\.0\)\]{transition-timing-function:cubic-bezier(.25,.1,.25,1)}.ease-\[cubic-bezier\(0\.4\2c 0\2c 0\.2\2c 1\)\]{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-\[ease\]{transition-timing-function:ease}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\!\[clip\:rect\(0\2c 0\2c 0\2c 0\)\]{clip:rect(0,0,0,0)!important}.\[direction\:ltr\]{direction:ltr}.\[overflow-anchor\:none\]{overflow-anchor:none}.\[overflow-style\:none\]{overflow-style:none}.\[transition\:background-color_\.2s_linear\2c _height_\.2s_ease-in-out\]{transition:background-color .2s linear,height .2s ease-in-out}.\[transition\:background-color_\.2s_linear\2c _opacity_\.2s_linear\]{transition:background-color .2s linear,opacity .2s linear}.\[transition\:background-color_\.2s_linear\2c _width_\.2s_ease-in-out\]{transition:background-color .2s linear,width .2s ease-in-out}.\[transition\:background-color_250ms_cubic-bezier\(0\.4\2c 0\2c 0\.2\2c 1\)_0ms\2c box-shadow_250ms_cubic-bezier\(0\.4\2c 0\2c 0\.2\2c 1\)_0ms\2c border_250ms_cubic-bezier\(0\.4\2c 0\2c 0\.2\2c 1\)_0ms\]{transition:background-color 250ms cubic-bezier(.4,0,.2,1)0ms,box-shadow 250ms cubic-bezier(.4,0,.2,1)0ms,border 250ms cubic-bezier(.4,0,.2,1)0ms}body a,body button{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}body:has(#menu-controller:checked){overflow-y:hidden}#menu-button:has(#menu-controller:checked){visibility:hidden}#menu-controller:checked~#menu-wrapper{visibility:visible;opacity:1}:is([dir=rtl] .prose blockquote){border-left-width:0;border-right-width:4px;padding-right:1rem}:is([dir=rtl] .prose ul>li),:is([dir=rtl] .prose ol>li){margin-right:1.75rem;padding-left:0;padding-right:.5rem}:is([dir=rtl] .prose ol>li):before,:is([dir=rtl] .prose ul>li):before{left:auto;right:.25rem}:is([dir=rtl] .prose thead td:first-child),:is([dir=rtl] .prose thead th:first-child){padding-right:0}:is([dir=rtl] .prose thead td:last-child),:is([dir=rtl] .prose thead th:last-child){padding-left:0}.prose div.min-w-0.max-w-prose>*:first-child{margin-top:.75rem}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}:is([dir=ltr] .toc ul ul){padding-left:1rem}:is([dir=rtl] .toc ul ul){padding-right:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}:is(.dark .toc a){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}:is([dir=rtl] .toc ul>li){margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;top:0;right:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity));opacity:.9}:is(.dark .copy-button){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}:is(.dark .copy-button:hover),:is(.dark .copy-button:focus),:is(.dark .copy-button:active),:is(.dark .copy-button:active:hover){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.prose .chroma{position:static;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}:is(.dark .prose .chroma){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding-left:1rem;padding-right:1rem;padding-top:.75rem;padding-bottom:.75rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}:is(.dark .chroma .hl){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt,.chroma .ln{margin-right:.4em;padding-left:.4em;padding-right:.4em;padding-top:0;padding-bottom:0;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity))}:is(.dark .chroma .lnt),:is(.dark .chroma .ln){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}:is(.dark .chroma .k),:is(.dark .chroma .kd),:is(.dark .chroma .kn),:is(.dark .chroma .kp),:is(.dark .chroma .kr),:is(.dark .chroma .nc),:is(.dark .chroma .fm),:is(.dark .chroma .nn),:is(.dark .chroma .vc),:is(.dark .chroma .o){--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}:is(.dark .chroma .kc){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}:is(.dark .chroma .kt),:is(.dark .chroma .nv),:is(.dark .chroma .vi),:is(.dark .chroma .vm),:is(.dark .chroma .m),:is(.dark .chroma .mb),:is(.dark .chroma .mf),:is(.dark .chroma .mh),:is(.dark .chroma .mi),:is(.dark .chroma .il),:is(.dark .chroma .mo){--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity))}:is(.dark .chroma .n),:is(.dark .chroma .nd),:is(.dark .chroma .ni),:is(.dark .chroma .nl){--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity))}:is(.dark .chroma .na),:is(.dark .chroma .nb),:is(.dark .chroma .bp),:is(.dark .chroma .nx),:is(.dark .chroma .py),:is(.dark .chroma .nt){--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}:is(.dark .chroma .no),:is(.dark .chroma .ne),:is(.dark .chroma .vg){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity))}:is(.dark .chroma .nf){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity))}:is(.dark .chroma .l),:is(.dark .chroma .ld),:is(.dark .chroma .s),:is(.dark .chroma .sa),:is(.dark .chroma .sb),:is(.dark .chroma .sc),:is(.dark .chroma .dl),:is(.dark .chroma .sd),:is(.dark .chroma .s2),:is(.dark .chroma .sh),:is(.dark .chroma .si),:is(.dark .chroma .sx),:is(.dark .chroma .s1),:is(.dark .chroma .gi),:is(.dark .chroma .go),:is(.dark .chroma .gp){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}:is(.dark .chroma .se){--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity))}:is(.dark .chroma .sr),:is(.dark .chroma .ss){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}:is(.dark .chroma .ow){--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}:is(.dark .chroma .c),:is(.dark .chroma .cm),:is(.dark .chroma .c1),:is(.dark .chroma .cs),:is(.dark .chroma .cp),:is(.dark .chroma .cpf){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}:is(.dark .chroma .ch){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.chroma .gl{text-decoration-line:underline}.thumbnail{min-width:300px;height:180px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card{height:200px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card_related{height:150px;background-repeat:no-repeat;background-size:cover;background-position:50%}.thumbnail_card_term{height:150px;background-repeat:no-repeat;background-size:cover;background-position:50%}.single_hero_basic{background-repeat:no-repeat;background-size:cover;background-position:50%}.single_hero_round{max-height:50vh;-o-object-fit:cover;object-fit:cover}.single_hero_background{background-repeat:no-repeat;background-size:cover;background-position:50%;width:calc(100% + 40px);z-index:-10;margin-left:-20px}.hero_gradient{width:100%;height:100%}.thumbnailshadow{box-shadow:5px 5px 20px 1px rgba(0,0,0,.3)}.anchor{display:block;position:relative;top:-100px;height:0;visibility:hidden}@media(min-width:640px){.thumbnail{min-width:100%;height:180px}.article{flex-wrap:wrap}}@media(min-width:853px){.thumbnail{min-width:300px;min-height:180px;height:auto}.article{flex-wrap:nowrap}}.medium-zoom-image--opened{z-index:100}.nested-menu:hover+.menuhide{visibility:visible;opacity:1;transition:visibility .3s,opacity .3s ease-in-out}.menuhide:hover{visibility:visible;opacity:1;transition:visibility .3s,opacity .3s ease-in-out}.menuhide{visibility:hidden;opacity:0;transition:visibility .3s,opacity .3s ease-in-out;z-index:1000}.active{text-decoration-line:underline;text-decoration-thickness:3px;text-underline-offset:4px}.grid-w10{width:calc(10% - 5px);margin:0!important}.grid-w15{width:calc(15% - 5px);margin:0!important}.grid-w20{width:calc(20% - 5px);margin:0!important}.grid-w25{width:calc(25% - 5px);margin:0!important}.grid-w30{width:calc(30% - 5px);margin:0!important}.grid-w33{width:calc(33% - 5px);margin:0!important}.grid-w35{width:calc(35% - 5px);margin:0!important}.grid-w40{width:calc(40% - 5px);margin:0!important}.grid-w45{width:calc(45% - 5px);margin:0!important}.grid-w50{width:calc(50% - 5px);margin:0!important}.grid-w55{width:calc(55% - 5px);margin:0!important}.grid-w60{width:calc(60% - 5px);margin:0!important}.grid-w65{width:calc(65% - 5px);margin:0!important}.grid-w66{width:calc(66% - 5px);margin:0!important}.grid-w70{width:calc(70% - 5px);margin:0!important}.grid-w75{width:calc(75% - 5px);margin:0!important}.grid-w80{width:calc(80% - 5px);margin:0!important}.grid-w85{width:calc(85% - 5px);margin:0!important}.grid-w90{width:calc(90% - 5px);margin:0!important}.grid-w95{width:calc(95% - 5px);margin:0!important}.grid-w100{width:calc(100% - 5px);margin:0!important}@media(min-width:640px){.sm\:grid-w10{width:calc(10% - 5px);margin:0!important}.sm\:grid-w15{width:calc(15% - 5px);margin:0!important}.sm\:grid-w20{width:calc(20% - 5px);margin:0!important}.sm\:grid-w25{width:calc(25% - 5px);margin:0!important}.sm\:grid-w30{width:calc(30% - 5px);margin:0!important}.sm\:grid-w33{width:calc(33% - 5px);margin:0!important}.sm\:grid-w35{width:calc(35% - 5px);margin:0!important}.sm\:grid-w40{width:calc(40% - 5px);margin:0!important}.sm\:grid-w45{width:calc(45% - 5px);margin:0!important}.sm\:grid-w50{width:calc(50% - 5px);margin:0!important}.sm\:grid-w55{width:calc(55% - 5px);margin:0!important}.sm\:grid-w60{width:calc(60% - 5px);margin:0!important}.sm\:grid-w65{width:calc(65% - 5px);margin:0!important}.sm\:grid-w66{width:calc(66% - 5px);margin:0!important}.sm\:grid-w70{width:calc(70% - 5px);margin:0!important}.sm\:grid-w75{width:calc(75% - 5px);margin:0!important}.sm\:grid-w80{width:calc(80% - 5px);margin:0!important}.sm\:grid-w85{width:calc(85% - 5px);margin:0!important}.sm\:grid-w90{width:calc(90% - 5px);margin:0!important}.sm\:grid-w95{width:calc(95% - 5px);margin:0!important}.sm\:grid-w100{width:calc(100% - 5px);margin:0!important}}@media(min-width:853px){.md\:grid-w10{width:calc(10% - 5px);margin:0!important}.md\:grid-w15{width:calc(15% - 5px);margin:0!important}.md\:grid-w20{width:calc(20% - 5px);margin:0!important}.md\:grid-w25{width:calc(25% - 5px);margin:0!important}.md\:grid-w30{width:calc(30% - 5px);margin:0!important}.md\:grid-w33{width:calc(33% - 5px);margin:0!important}.md\:grid-w35{width:calc(35% - 5px);margin:0!important}.md\:grid-w40{width:calc(40% - 5px);margin:0!important}.md\:grid-w45{width:calc(45% - 5px);margin:0!important}.md\:grid-w50{width:calc(50% - 5px);margin:0!important}.md\:grid-w55{width:calc(55% - 5px);margin:0!important}.md\:grid-w60{width:calc(60% - 5px);margin:0!important}.md\:grid-w65{width:calc(65% - 5px);margin:0!important}.md\:grid-w66{width:calc(66% - 5px);margin:0!important}.md\:grid-w70{width:calc(70% - 5px);margin:0!important}.md\:grid-w75{width:calc(75% - 5px);margin:0!important}.md\:grid-w80{width:calc(80% - 5px);margin:0!important}.md\:grid-w85{width:calc(85% - 5px);margin:0!important}.md\:grid-w90{width:calc(90% - 5px);margin:0!important}.md\:grid-w95{width:calc(95% - 5px);margin:0!important}.md\:grid-w100{width:calc(100% - 5px);margin:0!important}}@media(min-width:1024px){.lg\:grid-w10{width:calc(10% - 5px);margin:0!important}.lg\:grid-w15{width:calc(15% - 5px);margin:0!important}.lg\:grid-w20{width:calc(20% - 5px);margin:0!important}.lg\:grid-w25{width:calc(25% - 5px);margin:0!important}.lg\:grid-w30{width:calc(30% - 5px);margin:0!important}.lg\:grid-w33{width:calc(33% - 5px);margin:0!important}.lg\:grid-w35{width:calc(35% - 5px);margin:0!important}.lg\:grid-w40{width:calc(40% - 5px);margin:0!important}.lg\:grid-w45{width:calc(45% - 5px);margin:0!important}.lg\:grid-w50{width:calc(50% - 5px);margin:0!important}.lg\:grid-w55{width:calc(55% - 5px);margin:0!important}.lg\:grid-w60{width:calc(60% - 5px);margin:0!important}.lg\:grid-w65{width:calc(65% - 5px);margin:0!important}.lg\:grid-w66{width:calc(66% - 5px);margin:0!important}.lg\:grid-w70{width:calc(70% - 5px);margin:0!important}.lg\:grid-w75{width:calc(75% - 5px);margin:0!important}.lg\:grid-w80{width:calc(80% - 5px);margin:0!important}.lg\:grid-w85{width:calc(85% - 5px);margin:0!important}.lg\:grid-w90{width:calc(90% - 5px);margin:0!important}.lg\:grid-w95{width:calc(95% - 5px);margin:0!important}.lg\:grid-w100{width:calc(100% - 5px);margin:0!important}}@media(min-width:1280px){.xl\:grid-w10{width:calc(10% - 5px);margin:0!important}.xl\:grid-w15{width:calc(15% - 5px);margin:0!important}.xl\:grid-w20{width:calc(20% - 5px);margin:0!important}.xl\:grid-w25{width:calc(25% - 5px);margin:0!important}.xl\:grid-w30{width:calc(30% - 5px);margin:0!important}.xl\:grid-w33{width:calc(33% - 5px);margin:0!important}.xl\:grid-w35{width:calc(35% - 5px);margin:0!important}.xl\:grid-w40{width:calc(40% - 5px);margin:0!important}.xl\:grid-w45{width:calc(45% - 5px);margin:0!important}.xl\:grid-w50{width:calc(50% - 5px);margin:0!important}.xl\:grid-w55{width:calc(55% - 5px);margin:0!important}.xl\:grid-w60{width:calc(60% - 5px);margin:0!important}.xl\:grid-w65{width:calc(65% - 5px);margin:0!important}.xl\:grid-w66{width:calc(66% - 5px);margin:0!important}.xl\:grid-w70{width:calc(70% - 5px);margin:0!important}.xl\:grid-w75{width:calc(75% - 5px);margin:0!important}.xl\:grid-w80{width:calc(80% - 5px);margin:0!important}.xl\:grid-w85{width:calc(85% - 5px);margin:0!important}.xl\:grid-w90{width:calc(90% - 5px);margin:0!important}.xl\:grid-w95{width:calc(95% - 5px);margin:0!important}.xl\:grid-w100{width:calc(100% - 5px);margin:0!important}}@media(min-width:1536px){.2xl\:grid-w10{width:calc(10% - 5px);margin:0!important}.2xl\:grid-w15{width:calc(15% - 5px);margin:0!important}.2xl\:grid-w20{width:calc(20% - 5px);margin:0!important}.2xl\:grid-w25{width:calc(25% - 5px);margin:0!important}.2xl\:grid-w30{width:calc(30% - 5px);margin:0!important}.2xl\:grid-w33{width:calc(33% - 5px);margin:0!important}.2xl\:grid-w35{width:calc(35% - 5px);margin:0!important}.2xl\:grid-w40{width:calc(40% - 5px);margin:0!important}.2xl\:grid-w45{width:calc(45% - 5px);margin:0!important}.2xl\:grid-w50{width:calc(50% - 5px);margin:0!important}.2xl\:grid-w55{width:calc(55% - 5px);margin:0!important}.2xl\:grid-w60{width:calc(60% - 5px);margin:0!important}.2xl\:grid-w65{width:calc(65% - 5px);margin:0!important}.2xl\:grid-w66{width:calc(66% - 5px);margin:0!important}.2xl\:grid-w70{width:calc(70% - 5px);margin:0!important}.2xl\:grid-w75{width:calc(75% - 5px);margin:0!important}.2xl\:grid-w80{width:calc(80% - 5px);margin:0!important}.2xl\:grid-w85{width:calc(85% - 5px);margin:0!important}.2xl\:grid-w90{width:calc(90% - 5px);margin:0!important}.2xl\:grid-w95{width:calc(95% - 5px);margin:0!important}.2xl\:grid-w100{width:calc(100% - 5px);margin:0!important}}.ratio-16-9{padding-top:56.25%}.ratio-21-9{padding-top:42.85%}.ratio-32-9{padding-top:28.125%}@media(min-width:640px){.sm\:ratio-16-9{padding-top:56.25%}.sm\:ratio-21-9{padding-top:42.85%}.sm\:ratio-32-9{padding-top:28.125%}}@media(min-width:853px){.md\:ratio-16-9{padding-top:56.25%}.md\:ratio-21-9{padding-top:42.85%}.md\:ratio-32-9{padding-top:28.125%}}@media(min-width:1024px){.lg\:ratio-16-9{padding-top:56.25%}.lg\:ratio-21-9{padding-top:42.85%}.lg\:ratio-32-9{padding-top:28.125%}}@media(min-width:1280px){.xl\:ratio-16-9{padding-top:56.25%}.xl\:ratio-21-9{padding-top:42.85%}.xl\:ratio-32-9{padding-top:28.125%}}@media(min-width:1536px){.2xl\:ratio-16-9{padding-top:56.25%}.2xl\:ratio-21-9{padding-top:42.85%}.2xl\:ratio-32-9{padding-top:28.125%}}:is(.dark .dark\:prose-invert){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}:is(.dark .dark\:prose-invert) :where(a):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-neutral-600),1)}:is(.dark .dark\:prose-invert) :where(a):not(:where([class~=not-prose] *)):hover{color:rgba(var(--color-primary-400),1)}:is(.dark .dark\:prose-invert) :where(kbd):not(:where([class~=not-prose] *)){color:rgba(var(--color-neutral-200),1);background-color:rgba(var(--color-neutral-700),1)}:is(.dark .dark\:prose-invert) :where(mark):not(:where([class~=not-prose] *)){background-color:rgba(var(--color-primary-400),1)}:is(.dark .dark\:prose-invert) :where(code):not(:where([class~=not-prose] *)){background-color:rgba(var(--color-neutral-700),1)}:is(.dark .dark\:prose-invert) :where(a.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-400),1)}:is(.dark .dark\:prose-invert) :where(p.active):not(:where([class~=not-prose] *)){text-decoration-color:rgba(var(--color-primary-400),1)}.selection\:bg-transparent *::-moz-selection{background-color:transparent}.selection\:bg-transparent *::selection{background-color:transparent}.selection\:bg-transparent::-moz-selection{background-color:transparent}.selection\:bg-transparent::selection{background-color:transparent}.before\:pointer-events-none::before{content:var(--tw-content);pointer-events:none}.before\:absolute::before{content:var(--tw-content);position:absolute}.before\:h-\[0\.875rem\]::before{content:var(--tw-content);height:.875rem}.before\:w-\[0\.875rem\]::before{content:var(--tw-content);width:.875rem}.before\:scale-0::before{content:var(--tw-content);--tw-scale-x:0;--tw-scale-y:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.before\:rounded-full::before{content:var(--tw-content);border-radius:9999px}.before\:bg-transparent::before{content:var(--tw-content);background-color:transparent}.before\:opacity-0::before{content:var(--tw-content);opacity:0}.before\:shadow-\[0px_0px_0px_13px_transparent\]::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px transparent;--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.before\:content-\[\'\'\]::before{--tw-content:'';content:var(--tw-content)}.after\:clear-both::after{content:var(--tw-content);clear:both}.after\:block::after{content:var(--tw-content);display:block}.after\:content-\[\'\'\]::after{--tw-content:'';content:var(--tw-content)}.first\:mt-8:first-child{margin-top:2rem}.checked\:before\:opacity-\[0\.16\]:checked::before{content:var(--tw-content);opacity:.16}.checked\:after\:absolute:checked::after{content:var(--tw-content);position:absolute}.checked\:after\:-mt-px:checked::after{content:var(--tw-content);margin-top:-1px}.checked\:after\:ml-\[0\.25rem\]:checked::after{content:var(--tw-content);margin-left:.25rem}.checked\:after\:block:checked::after{content:var(--tw-content);display:block}.checked\:after\:h-\[0\.8125rem\]:checked::after{content:var(--tw-content);height:.8125rem}.checked\:after\:w-\[0\.375rem\]:checked::after{content:var(--tw-content);width:.375rem}.checked\:after\:rotate-45:checked::after{content:var(--tw-content);--tw-rotate:45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.checked\:after\:border-\[0\.125rem\]:checked::after{content:var(--tw-content);border-width:.125rem}.checked\:after\:border-l-0:checked::after{content:var(--tw-content);border-left-width:0}.checked\:after\:border-t-0:checked::after{content:var(--tw-content);border-top-width:0}.checked\:after\:border-solid:checked::after{content:var(--tw-content);border-style:solid}.checked\:after\:bg-transparent:checked::after{content:var(--tw-content);background-color:transparent}.checked\:after\:content-\[\'\'\]:checked::after{--tw-content:'';content:var(--tw-content)}.empty\:hidden:empty{display:none}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:rounded-\[50\%\]:hover{border-radius:50%}.hover\:border-transparent:hover{border-color:transparent}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity))!important}.hover\:bg-\[\#00000014\]:hover{background-color:#00000014}.hover\:bg-\[\#00000026\]:hover{background-color:#00000026}.hover\:bg-\[\#eee\]:hover{--tw-bg-opacity:1;background-color:rgb(238 238 238/var(--tw-bg-opacity))}.hover\:bg-\[unset\]:hover{background-color:unset}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity))}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.hover\:fill-\[\#8b8b8b\]:hover{fill:#8b8b8b}.hover\:text-\[\#3b71ca\]:hover{--tw-text-opacity:1;color:rgb(59 113 202/var(--tw-text-opacity))}.hover\:text-\[\#8b8b8b\]:hover{--tw-text-opacity:1;color:rgb(139 139 139/var(--tw-text-opacity))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity))}.hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:no-underline:hover{text-decoration-line:none}.hover\:decoration-primary-400:hover{text-decoration-color:rgba(var(--color-primary-400),1)}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.hover\:\!opacity-90:hover{opacity:.9!important}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-90:hover{opacity:.9}.hover\:\!shadow-none:hover{--tw-shadow:0 0 #0000 !important;--tw-shadow-colored:0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:outline-none:hover{outline:2px solid transparent;outline-offset:2px}.hover\:before\:opacity-\[0\.04\]:hover::before{content:var(--tw-content);opacity:.04}.hover\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\2c 0\2c 0\2c 0\.6\)\]:hover::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px rgba(0,0,0,0.6);--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:translate-y-0:focus{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:rounded-\[50\%\]:focus{border-radius:50%}.focus\:bg-\[\#00000014\]:focus{background-color:#00000014}.focus\:bg-\[\#00000026\]:focus{background-color:#00000026}.focus\:bg-\[\#eee\]:focus{--tw-bg-opacity:1;background-color:rgb(238 238 238/var(--tw-bg-opacity))}.focus\:bg-neutral-200:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.focus\:text-\[\#3b71ca\]:focus{--tw-text-opacity:1;color:rgb(59 113 202/var(--tw-text-opacity))}.focus\:no-underline:focus{text-decoration-line:none}.focus\:\!opacity-90:focus{opacity:.9!important}.focus\:opacity-90:focus{opacity:.9}.focus\:shadow-none:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.focus\:transition-\[border-color_0\.2s\]:focus{transition-property:border-color .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.focus\:placeholder\:opacity-100:focus::-moz-placeholder{opacity:1}.focus\:placeholder\:opacity-100:focus::placeholder{opacity:1}.focus\:before\:scale-100:focus::before{content:var(--tw-content);--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.focus\:before\:opacity-\[0\.12\]:focus::before{content:var(--tw-content);opacity:.12}.focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\2c 0\2c 0\2c 0\.6\)\]:focus::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px rgba(0,0,0,0.6);--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:before\:transition-\[box-shadow_0\.2s\2c transform_0\.2s\]:focus::before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.focus\:after\:absolute:focus::after{content:var(--tw-content);position:absolute}.focus\:after\:z-\[1\]:focus::after{content:var(--tw-content);z-index:1}.focus\:after\:block:focus::after{content:var(--tw-content);display:block}.focus\:after\:h-\[0\.875rem\]:focus::after{content:var(--tw-content);height:.875rem}.focus\:after\:w-\[0\.875rem\]:focus::after{content:var(--tw-content);width:.875rem}.focus\:after\:rounded-\[0\.125rem\]:focus::after{content:var(--tw-content);border-radius:.125rem}.focus\:after\:content-\[\'\'\]:focus::after{--tw-content:'';content:var(--tw-content)}.checked\:focus\:before\:scale-100:focus:checked::before{content:var(--tw-content);--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px #3b71ca;--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.checked\:focus\:before\:transition-\[box-shadow_0\.2s\2c transform_0\.2s\]:focus:checked::before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.checked\:focus\:after\:-mt-px:focus:checked::after{content:var(--tw-content);margin-top:-1px}.checked\:focus\:after\:ml-\[0\.25rem\]:focus:checked::after{content:var(--tw-content);margin-left:.25rem}.checked\:focus\:after\:h-\[0\.8125rem\]:focus:checked::after{content:var(--tw-content);height:.8125rem}.checked\:focus\:after\:w-\[0\.375rem\]:focus:checked::after{content:var(--tw-content);width:.375rem}.checked\:focus\:after\:rotate-45:focus:checked::after{content:var(--tw-content);--tw-rotate:45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.checked\:focus\:after\:rounded-none:focus:checked::after{content:var(--tw-content);border-radius:0}.checked\:focus\:after\:border-\[0\.125rem\]:focus:checked::after{content:var(--tw-content);border-width:.125rem}.checked\:focus\:after\:border-l-0:focus:checked::after{content:var(--tw-content);border-left-width:0}.checked\:focus\:after\:border-t-0:focus:checked::after{content:var(--tw-content);border-top-width:0}.checked\:focus\:after\:border-solid:focus:checked::after{content:var(--tw-content);border-style:solid}.checked\:focus\:after\:bg-transparent:focus:checked::after{content:var(--tw-content);background-color:transparent}.active\:bg-\[\#cacfd1\]:active{--tw-bg-opacity:1;background-color:rgb(202 207 209/var(--tw-bg-opacity))}.group\/x:hover .group-hover\/x\:h-\[11px\]{height:11px}.group\/y:hover .group-hover\/y\:w-\[11px\]{width:11px}.group\/x:hover .group-hover\/x\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group\/y:hover .group-hover\/y\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity))}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{text-decoration-color:rgba(var(--color-primary-500),1)}.group\/ps:hover .group-hover\/ps\:opacity-100{opacity:1}.group\/ps:hover .group-hover\/ps\:opacity-60{opacity:.6}.group:hover .group-hover\:opacity-100{opacity:1}.group\/x:focus .group-focus\/x\:h-\[11px\]{height:11px}.group\/y:focus .group-focus\/y\:w-\[11px\]{width:11px}.group\/x:focus .group-focus\/x\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group\/y:focus .group-focus\/y\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group\/ps:focus .group-focus\/ps\:opacity-100{opacity:1}.group\/ps:focus .group-focus\/ps\:opacity-60{opacity:.6}.group\/ps:active .group-active\/ps\:opacity-100{opacity:1}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:block{display:block}.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:block{display:block}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:h-\[11px\]{height:11px}.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:w-\[11px\]{width:11px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border{border-width:1px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border-solid{border-style:solid}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:bg-transparent{background-color:transparent}.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:bg-transparent{background-color:transparent}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:bg-\[\#999\]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover .group-\[\:not\(\[data-te-datepicker-cell-disabled\]\)\:not\(\[data-te-datepicker-cell-selected\]\)\:hover\]\:bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused] .group-\[\:not\(\[data-te-datepicker-cell-selected\]\)\[data-te-datepicker-cell-focused\]\]\:bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity))}.group\/ps.ps--scrolling-x .group-\[\&\.ps--scrolling-x\]\/ps\:opacity-60{opacity:.6}.group\/ps.ps--scrolling-y .group-\[\&\.ps--scrolling-y\]\/ps\:opacity-60{opacity:.6}.peer:focus~.peer-focus\:-translate-y-\[0\.75rem\]{--tw-translate-y:-0.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[0\.9rem\]{--tw-translate-y:-0.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[1\.15rem\]{--tw-translate-y:-1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:scale-\[0\.8\]{--tw-scale-x:0.8;--tw-scale-y:0.8;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-datepicker-cell-disabled\]\:pointer-events-none[data-te-datepicker-cell-disabled]{pointer-events:none}.data-\[te-carousel-fade\]\:z-0[data-te-carousel-fade]{z-index:0}.data-\[te-carousel-fade\]\:z-\[1\][data-te-carousel-fade]{z-index:1}.data-\[te-input-state-active\]\:block[data-te-input-state-active]{display:block}.data-\[popper-reference-hidden\]\:hidden[data-popper-reference-hidden]{display:none}.data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\][data-te-input-state-active]{--tw-translate-y:-0.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\][data-te-input-state-active]{--tw-translate-y:-0.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\][data-te-input-state-active]{--tw-translate-y:-1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:scale-\[0\.8\][data-te-input-state-active]{--tw-scale-x:0.8;--tw-scale-y:0.8;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-select-open\]\:scale-100[data-te-select-open]{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.data-\[te-datepicker-cell-disabled\]\:cursor-default[data-te-datepicker-cell-disabled]{cursor:default}.data-\[te-input-disabled\]\:cursor-default[data-te-input-disabled]{cursor:default}.data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled]{cursor:default}.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled][data-te-select-selected]{cursor:default}.data-\[te-input-disabled\]\:bg-\[\#e9ecef\][data-te-input-disabled]{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:bg-transparent[data-te-select-option-disabled][data-te-select-selected]{background-color:transparent}.data-\[te-datepicker-cell-disabled\]\:text-neutral-300[data-te-datepicker-cell-disabled]{--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}.data-\[te-carousel-fade\]\:opacity-0[data-te-carousel-fade]{opacity:0}.data-\[te-carousel-fade\]\:opacity-100[data-te-carousel-fade]{opacity:1}.data-\[te-select-open\]\:opacity-100[data-te-select-open]{opacity:1}.data-\[te-carousel-fade\]\:duration-0[data-te-carousel-fade]{transition-duration:0s}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::-moz-placeholder{opacity:1}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::placeholder{opacity:1}.data-\[te-datepicker-cell-disabled\]\:hover\:cursor-default:hover[data-te-datepicker-cell-disabled]{cursor:default}.group\/validation[data-te-was-validated] .group-data-\[te-was-validated\]\/validation\:mb-4{margin-bottom:1rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-x-0{border-left-width:0;border-right-width:0}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-x-0{border-left-width:0;border-right-width:0}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-l-0{border-left-width:0}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-r-0{border-right-width:0}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t{border-top-width:1px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-l-0{border-left-width:0}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-r-0{border-right-width:0}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t{border-top-width:1px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-solid{border-style:solid}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-solid{border-style:solid}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t-transparent{border-top-color:transparent}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t-transparent{border-top-color:transparent}.group\/opt[data-te-select-option-group-ref] .group-data-\[te-select-option-group-ref\]\/opt\:pl-7{padding-left:1.75rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#3b71ca\2c _0_1px_0_0_\#3b71ca\2c _0_-1px_0_0_\#3b71ca\]{--tw-shadow:-1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca;--tw-shadow-colored:-1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#ffffff\2c _0_1px_0_0_\#ffffff\2c _0_-1px_0_0_\#ffffff\]{--tw-shadow:-1px 0 0 #ffffff, 0 1px 0 0 #ffffff, 0 -1px 0 0 #ffffff;--tw-shadow-colored:-1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#3b71ca\]{--tw-shadow:0 1px 0 0 #3b71ca;--tw-shadow-colored:0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#ffffff\]{--tw-shadow:0 1px 0 0 #ffffff;--tw-shadow-colored:0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#3b71ca\2c _0_-1px_0_0_\#3b71ca\2c _0_1px_0_0_\#3b71ca\]{--tw-shadow:1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca;--tw-shadow-colored:1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#ffffff\2c _0_-1px_0_0_\#ffffff\2c _0_1px_0_0_\#ffffff\]{--tw-shadow:1px 0 0 #ffffff, 0 -1px 0 0 #ffffff, 0 1px 0 0 #ffffff;--tw-shadow-colored:1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group\/validation[data-te-was-validated] .peer:valid~.group-data-\[te-was-validated\]\/validation\:peer-valid\:block{display:block}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:block{display:block}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:text-\[rgb\(220\2c 76\2c 100\)\]{--tw-text-opacity:1;color:rgb(220 76 100/var(--tw-text-opacity))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\]{--tw-translate-y:-0.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\]{--tw-translate-y:-0.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\]{--tw-translate-y:-1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:scale-\[0\.8\]{--tw-scale-x:0.8;--tw-scale-y:0.8;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}:is([dir=ltr] .ltr\:-left-6){left:-1.5rem}:is([dir=ltr] .ltr\:right-0){right:0}:is([dir=ltr] .ltr\:-ml-5){margin-left:-1.25rem}:is([dir=ltr] .ltr\:ml-2){margin-left:.5rem}:is([dir=ltr] .ltr\:mr-14){margin-right:3.5rem}:is([dir=ltr] .ltr\:mr-4){margin-right:1rem}:is([dir=ltr] .ltr\:block){display:block}:is([dir=ltr] .ltr\:inline){display:inline}:is([dir=ltr] .ltr\:hidden){display:none}:is([dir=ltr] .ltr\:border-l){border-left-width:1px}:is([dir=ltr] .ltr\:pl-5){padding-left:1.25rem}:is([dir=ltr] .ltr\:pr-2){padding-right:.5rem}:is([dir=ltr] .ltr\:pr-3){padding-right:.75rem}:is([dir=ltr] .ltr\:text-right){text-align:right}:is([dir=rtl] .rtl\:\!left-auto){left:auto!important}:is([dir=rtl] .rtl\:-right-6){right:-1.5rem}:is([dir=rtl] .rtl\:left-0){left:0}:is([dir=rtl] .rtl\:-mr-5){margin-right:-1.25rem}:is([dir=rtl] .rtl\:ml-14){margin-left:3.5rem}:is([dir=rtl] .rtl\:ml-4){margin-left:1rem}:is([dir=rtl] .rtl\:mr-2){margin-right:.5rem}:is([dir=rtl] .rtl\:block){display:block}:is([dir=rtl] .rtl\:inline){display:inline}:is([dir=rtl] .rtl\:hidden){display:none}:is([dir=rtl] .rtl\:\!origin-\[50\%_50\%_0\]){transform-origin:50% 50% 0!important}:is([dir=rtl] .rtl\:border-r){border-right-width:1px}:is([dir=rtl] .rtl\:pl-2){padding-left:.5rem}:is([dir=rtl] .rtl\:pl-3){padding-left:.75rem}:is([dir=rtl] .rtl\:pr-5){padding-right:1.25rem}:is([dir=rtl] .rtl\:text-left){text-align:left}:is([dir=rtl] .rtl\:\[direction\:rtl\]){direction:rtl}@media(prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}:is(.dark .dark\:flex){display:flex}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-0){border-width:0}:is(.dark .dark\:border-neutral-500){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-500),var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-600){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-700){--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity))}:is(.dark .dark\:border-primary-300){--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity))}:is(.dark .dark\:border-primary-400){--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity))}:is(.dark .dark\:border-primary-600){--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity))}:is(.dark .dark\:bg-neutral-600){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity))}:is(.dark .dark\:bg-neutral-700){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity))}:is(.dark .dark\:bg-neutral-800){--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity))}:is(.dark .dark\:bg-neutral-800\/50){background-color:rgba(var(--color-neutral-800),.5)}:is(.dark .dark\:bg-neutral-900\/50){background-color:rgba(var(--color-neutral-900),.5)}:is(.dark .dark\:bg-primary-300){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-300),var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary-400){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary-800){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary-900){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:transparent}:is(.dark .dark\:from-neutral-800){--tw-gradient-from:rgba(var(--color-neutral-800), 1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(var(--color-neutral-800), 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:from-primary-600){--tw-gradient-from:rgba(var(--color-primary-600), 1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(var(--color-primary-600), 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-neutral-800){--tw-gradient-to:rgba(var(--color-neutral-800), 1) var(--tw-gradient-to-position)}:is(.dark .dark\:to-secondary-800){--tw-gradient-to:rgba(var(--color-secondary-800), 1) var(--tw-gradient-to-position)}:is(.dark .dark\:\!text-primary-400){--tw-text-opacity:1 !important;color:rgba(var(--color-primary-400),var(--tw-text-opacity))!important}:is(.dark .dark\:text-neutral){--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-100){--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-200){--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-300){--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-400){--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-500){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-700){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-800){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-200){--tw-text-opacity:1;color:rgba(var(--color-primary-200),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-400){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:hover\:\!bg-primary-700:hover){--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity))!important}:is(.dark .dark\:hover\:bg-primary-400:hover){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary-900:hover){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-\[\#3b71ca\]:hover){--tw-text-opacity:1;color:rgb(59 113 202/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-neutral-800:hover){--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-primary-400:hover){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}:is(.dark .dark\:focus\:bg-primary-900:focus){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}:is(.dark .dark\:focus\:text-\[\#3b71ca\]:focus){--tw-text-opacity:1;color:rgb(59 113 202/var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-primary-400:focus){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}:is(.dark .dark\:focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(255\2c 255\2c 255\2c 0\.4\)\]:focus)::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px rgba(255,255,255,0.4);--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked)::before{content:var(--tw-content);--tw-shadow:0px 0px 0px 13px #3b71ca;--tw-shadow-colored:0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .group:hover .dark\:group-hover\:text-neutral-700){--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-primary-400){--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}:is(.dark .group[data-te-datepicker-cell-disabled] .dark\:group-\[\[data-te-datepicker-cell-disabled\]\]\:text-neutral-500){--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}@media print{.print\:hidden{display:none}}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:mt-16{margin-top:4rem}.sm\:w-1\/2{width:50%}.sm\:max-w-prose{max-width:65ch}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:overflow-hidden{overflow:hidden}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}:is([dir=ltr] .ltr\:sm\:mr-7){margin-right:1.75rem}:is([dir=ltr] .ltr\:sm\:last\:mr-0:last-child){margin-right:0}:is([dir=rtl] .rtl\:sm\:ml-7){margin-left:1.75rem}:is([dir=rtl] .rtl\:sm\:last\:ml-0:last-child){margin-left:0}}@media(min-width:853px){.md\:-mr-16{margin-right:-4rem}.md\:ml-12{margin-left:3rem}.md\:mr-7{margin-right:1.75rem}.md\:mt-0{margin-top:0}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-56{height:14rem}.md\:h-\[200px\]{height:200px}.md\:w-1\/3{width:33.333333%}.md\:w-auto{width:auto}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:justify-start{justify-content:flex-start}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:sticky{position:sticky}.lg\:left-0{left:0}.lg\:top-10{top:2.5rem}.lg\:top-\[140px\]{top:140px}.lg\:order-last{order:9999}.lg\:m-0{margin:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:ml-auto{margin-left:auto}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-72{height:18rem}.lg\:h-full{height:100%}.lg\:w-1\/4{width:25%}.lg\:w-auto{width:auto}.lg\:max-w-7xl{max-width:80rem}.lg\:max-w-none{max-width:none}.lg\:max-w-xs{max-width:20rem}.lg\:grid-flow-col-dense{grid-auto-flow:column dense}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:gap-24{gap:6rem}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-0{padding-left:0;padding-right:0}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:py-32{padding-top:8rem;padding-bottom:8rem}:is([dir=ltr] .ltr\:lg\:pl-8){padding-left:2rem}:is([dir=rtl] .rtl\:lg\:pr-8){padding-right:2rem}}@media(min-width:1280px){.xl\:w-1\/4{width:25%}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1536px){.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:320px){@media(max-width:825px){@media(orientation:landscape){.min-\[320px\]\:max-\[825px\]\:landscape\:h-auto{height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[305px\]{min-height:305px}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[auto\]{min-height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-w-\[auto\]{min-width:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:\!flex-row{flex-direction:row!important}.min-\[320px\]\:max-\[825px\]\:landscape\:flex-col{flex-direction:column}.min-\[320px\]\:max-\[825px\]\:landscape\:\!justify-around{justify-content:space-around!important}.min-\[320px\]\:max-\[825px\]\:landscape\:overflow-y-auto{overflow-y:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-lg{border-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-lg{border-bottom-left-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-none{border-bottom-left-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-tr-none{border-top-right-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:p-\[10px\]{padding:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:pr-\[10px\]{padding-right:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:text-5xl{font-size:3rem;line-height:1}.min-\[320px\]\:max-\[825px\]\:landscape\:text-\[3rem\]{font-size:3rem}.min-\[320px\]\:max-\[825px\]\:landscape\:font-normal{font-weight:400}}}}.\[\&\.ps--clicking\]\:bg-\[\#eee\].ps--clicking{--tw-bg-opacity:1;background-color:rgb(238 238 238/var(--tw-bg-opacity))}.\[\&\.ps--clicking\]\:\!opacity-90.ps--clicking{opacity:.9!important}.\[\&\:\:-webkit-scrollbar-button\]\:block::-webkit-scrollbar-button{display:block}.\[\&\:\:-webkit-scrollbar-button\]\:h-0::-webkit-scrollbar-button{height:0}.\[\&\:\:-webkit-scrollbar-button\]\:bg-transparent::-webkit-scrollbar-button{background-color:transparent}.\[\&\:\:-webkit-scrollbar-thumb\]\:h-\[50px\]::-webkit-scrollbar-thumb{height:50px}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded::-webkit-scrollbar-thumb{border-radius:.25rem}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-\[\#999\]::-webkit-scrollbar-thumb{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity))}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-none::-webkit-scrollbar-track-piece{border-radius:0}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-l::-webkit-scrollbar-track-piece{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.\[\&\:\:-webkit-scrollbar-track-piece\]\:bg-transparent::-webkit-scrollbar-track-piece{background-color:transparent}.\[\&\:\:-webkit-scrollbar\]\:h-1::-webkit-scrollbar{height:.25rem}.\[\&\:\:-webkit-scrollbar\]\:w-1::-webkit-scrollbar{width:.25rem}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::-moz-placeholder{opacity:0}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::placeholder{opacity:0}.\[\&\>svg\]\:mx-auto>svg{margin-left:auto;margin-right:auto}.\[\&\>svg\]\:h-4>svg{height:1rem}.\[\&\>svg\]\:h-5>svg{height:1.25rem}.\[\&\>svg\]\:w-4>svg{width:1rem}.\[\&\>svg\]\:w-5>svg{width:1.25rem}.\[\&\>svg\]\:rotate-180>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:fill-neutral-500>svg{fill:rgba(var(--color-neutral-500),1)} \ No newline at end of file diff --git a/public/docs/advanced-customisation/featured.png b/public/docs/advanced-customisation/featured.png new file mode 100644 index 00000000..fbf0cdd8 Binary files /dev/null and b/public/docs/advanced-customisation/featured.png differ diff --git a/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_1200x0_resize_box_3.png b/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_1200x0_resize_box_3.png new file mode 100644 index 00000000..1675d73b Binary files /dev/null and b/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_1200x0_resize_box_3.png differ diff --git a/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_600x0_resize_box_3.png b/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_600x0_resize_box_3.png new file mode 100644 index 00000000..17f71051 Binary files /dev/null and b/public/docs/advanced-customisation/featured_huc648350f543f5a6da75f60f86e4aecc9_625096_600x0_resize_box_3.png differ diff --git a/public/docs/advanced-customisation/index.html b/public/docs/advanced-customisation/index.html new file mode 100644 index 00000000..1528ead0 --- /dev/null +++ b/public/docs/advanced-customisation/index.html @@ -0,0 +1,142 @@ +Advanced Customisation · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Advanced Customisation

9 mins· +0 +· +0 +· + +· +
Advanced +css +docs
Table of Contents
Documentation - This article is part of a series.
Part 13: This Article

There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.

If you need further advice, post your questions on GitHub Discussions.

Hugo project structure +#

Before leaping into it, first a quick note about Hugo project structure and best practices for managing your content and theme customisations.

In summary: Never directly edit the theme files. Only make customisations in your Hugo project’s sub-directories, not in the themes directory itself.

Blowfish is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overriden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.

In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your themes/ directory, you should always leave these files intact.

The correct way to adjust any theme behaviour is by overriding files using Hugo’s powerful file lookup order. In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.

For example, if you wanted to override the main article template in Blowfish, you can simply create your own layouts/_default/single.html file and place it in the root of your project. This file will then override the single.html from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.

As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.

Change image optimization settings +#

Hugo has various builtin methods to resize, crop and optimize images.

As an example - in layouts/partials/article-link/card.html, you have the following code:

{{ with .Resize "600x" }}
+<div class="w-full thumbnail_card nozoom" style="background-image:url({{ .RelPermalink }});"></div>
+{{ end }}
+

The default behavior of Hugo here is to resize the image to 600px keeping the ratio.

It is worth noting here that default image configurations such as anchor point can also be set in your site configuration as well as in the template itself.

See the Hugo docs on image processing for more info.

Colour schemes +#

Blowfish ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the colorScheme theme parameter. Refer to the Getting Started section to learn more about the built-in schemes.

In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a <scheme-name>.css file in the assets/css/schemes/ folder. Once the file is created, simply refer to it by name in the theme configuration.

Note: generating these files manually can be hard, I’ve built a nodejs terminal tool to help with that, Fugu. In a nutshell, you pass the main three hex values of your color pallette and the program will output a css file that can be imported directly into Blowfish.

Blowfish defines a three-colour palette that is used throughout the theme. The three colours are defined as neutral, primary and secondary variants, each containing ten shades of colour.

Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to conform to a particular format by providing the red, green and blue colour values.

:root {
+  --color-primary-500: 139, 92, 246;
+}
+

This example defines a CSS variable for the primary-500 colour with a red value of 139, green value of 92 and blue value of 246.

Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official Tailwind colour palette reference.

Overriding the stylesheet +#

Sometimes you need to add a custom style to style your own HTML elements. Blowfish provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a custom.css file in your project’s assets/css/ folder.

The custom.css file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.

Using additional fonts +#

Blowfish allows you to easily change the font for your site. After creating a custom.css file in your project’s assets/css/ folder, place you font file inside a fonts folder withing the static root folder.

.
+├── assets
+│   └── css
+│       └── custom.css
+...
+└─── static
+    └── fonts
+        └─── font.ttf
+

This makes the font available to the website. Now, the font can just import it in your custom.css and replaced wherever you see fit. The example below shows what replacing the font for the entire html would look like.

@font-face {
+    font-family: font;
+    src: url('/fonts/font.ttf');
+}
+
+html {
+    font-family: font;
+}
+

Adjusting the font size +#

Changing the font size of your website is one example of overriding the default stylesheet. Blowfish makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to 12pt, but it can be changed to whatever value you prefer.

Create a custom.css file using the instructions above and add the following CSS declaration:

/* Increase the default font size */
+html {
+  font-size: 13pt;
+}
+

Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than 12pt. Similarly, to decrease the font sizes, make the value less than 12pt.

Building the theme CSS from source +#

If you’d like to make a major change, you can take advantage of Tailwind CSS’s JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.

Note: Building the theme manually is intended for advanced users.

Let’s step through how building the Tailwind CSS works.

Tailwind configuration +#

In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the tailwind.config.js file which is included in the root of the theme directory:

// themes/blowfish/tailwind.config.js
+
+module.exports = {
+  content: [
+    "./layouts/**/*.html",
+    "./content/**/*.{html,md}",
+    "./themes/blowfish/layouts/**/*.html",
+    "./themes/blowfish/content/**/*.{html,md}",
+  ],
+
+  // and more...
+};
+

This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, you have to include Blowfish in your project as a subdirectory at themes/blowfish/. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The Installation docs explain how to install the theme using either of these methods.

Project structure +#

In order to take advantage of the default configuration, your project should look something like this…

.
+├── assets
+│   └── css
+│       └── compiled
+│           └── main.css  # this is the file we will generate
+├── config  # site config
+│   └── _default
+├── content  # site content
+│   ├── _index.md
+│   ├── projects
+│   │   └── _index.md
+│   └── blog
+│       └── _index.md
+├── layouts  # custom layouts for your site
+│   ├── partials
+│   │   └── extend-article-link/simple.html
+│   ├── projects
+│   │   └── list.html
+│   └── shortcodes
+│       └── disclaimer.html
+└── themes
+    └── blowfish  # git submodule or manual theme install
+

This example structure adds a new projects content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that’s required is to recompile the main.css file.

Install dependencies +#

In order for this to work you’ll need to change into the themes/blowfish/ directory and install the project dependencies. You’ll need npm on your local machine for this step.

cd themes/blowfish
+npm install
+

Run the Tailwind compiler +#

With the dependencies installed all that’s left is to use Tailwind CLI to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:

cd ../..
+./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit
+

It’s a bit of an ugly command due to the paths involved but essentially you’re calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme’s main.css file and then where you want the compiled CSS file to be placed (it’s going into the assets/css/compiled/ folder of your Hugo project).

The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.

Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add -w to the end of the command to run the JIT compiler in watch mode.

Make a build script +#

To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a package.json to the root of your project which contains the necessary scripts…

// package.json
+
+{
+  "name": "my-website",
+  "version": "1.0.0",
+  "description": "",
+  "scripts": {
+    "server": "hugo server -b http://localhost -p 8000",
+    "dev": "NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
+    "build": "NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
+  },
+  // and more...
+}
+

Now when you want to work on designing your site, you can invoke npm run dev and the compiler will run in watch mode. When you’re ready to deploy, run npm run build and you’ll get a clean Tailwind CSS build.

🙋‍♀️ If you need help, feel free to ask a question on GitHub Discussions.



Documentation - This article is part of a series.
Part 13: This Article
\ No newline at end of file diff --git a/public/docs/configuration/featured.png b/public/docs/configuration/featured.png new file mode 100644 index 00000000..81dda1a9 Binary files /dev/null and b/public/docs/configuration/featured.png differ diff --git a/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png b/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png new file mode 100644 index 00000000..5a6e38bc Binary files /dev/null and b/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png differ diff --git a/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_600x0_resize_box_3.png b/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_600x0_resize_box_3.png new file mode 100644 index 00000000..becaf18b Binary files /dev/null and b/public/docs/configuration/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_600x0_resize_box_3.png differ diff --git a/public/docs/configuration/index.html b/public/docs/configuration/index.html new file mode 100644 index 00000000..18ae5c36 --- /dev/null +++ b/public/docs/configuration/index.html @@ -0,0 +1,92 @@ +Configuration · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Configuration

17 mins· +0 +· +0 +· + +· +
config +docs
Table of Contents
Documentation - This article is part of a series.
Part 4: This Article

Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.

The theme ships with a default configuration that gets you up and running with a basic blog or static website.

Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.

The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.

As outlined in the installation instructions, you should adjust your theme configuration by modifying the files in the config/_default/ folder of your Hugo project and delete the config.toml file in your project root.

Site configuration +#

Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.

The site configuration is managed through the config/_default/config.toml file. The table below outlines all the settings that the Blowfish takes advantage of.

Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. outputs.home refers to [outputs] home).

NameDefaultDescription
theme"blowfish"When using Hugo Modules this config value should be removed. For all other installation types, this must be set to blowfish for the theme to function.
baseURLNot setThe URL to the root of the website.
defaultContentLanguage"en"This value determines the default language of theme components and content. Refer to the language and i18n section below for supported language codes.
enableRobotsTXTtrueWhen enabled, a robots.txt file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made robots.txt, set to false and place your file in the static directory. For complete control, you may provide a custom layout to generate this file.
paginate10The number of articles listed on each page of the article listing.
summaryLength0The number of words that are used to generate the article summary when one is not provided in the front matter. A value of 0 will use the first sentence. This value has no effect when summaries are hidden.
outputs.home["HTML", "RSS", "JSON"]The output formats that are generated for the site. Blowfish requires HTML, RSS and JSON for all theme components to work correctly.
permalinksNot setRefer to the Hugo docs for permalink configuration.
taxonomiesNot setRefer to the Organising content section for taxonomy configuration.

Thumbnails +#

Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported but we recommend .png or .jpg) that starts with feature* inside your article folder. And that’s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.

Here is also a guide with more info and a sample if you want to see how you can do it.

Language and i18n +#

Blowfish is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.

The theme currently supports the following languages by default:

LanguageCode
🇧🇬 Bulgarianbg
🇧🇩 Bengalibn
🇨🇿 Czechcs
🇩🇪 Germande
🇬🇧 Englishen
🇪🇸 Spanish (Spain)es
🇫🇮 Finnishfi
🇫🇷 Frenchfr
🇮🇱 Hebrewhe
🇭🇷 Croatianhr
🇭🇺 Hungarianhu
🇮🇩 Indonesianid
🇮🇹 Italianit
🇯🇵 Japaneseja
🇵🇱 Polishpl
🇧🇷 Portuguese (Brazil)pt-br
🇵🇹 Portuguese (Portugal)pt-pt
🇷🇴 Romanianro
🇷🇺 Russianru
🇹🇷 Turkishtr
🇻🇳 Vietnamesevi
🇨🇳 Simplified Chinese (China)zh-cn
🇹🇼 Traditional Chinese (Taiwan)zh-tw

The default translations can be overridden by creating a custom file in i18n/[code].yaml that contains the translation strings. You can also use this method to add new languages. If you’d like to share a new translation with the community, please open a pull request.

Configuration +#

In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Blowfish includes an English language configuration at config/_default/languages.en.toml.

The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format languages.[language-code].toml.

Note: Ensure the defaultContentLanguage parameter in the site configuration matches the language code in your language config filename.
NameDefaultDescription
languageCode"en"The Hugo language code for this file. It can be a top-level language (ie. en) or a sub-variant (ie. en-au) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the isoCode parameter which is case-sensitive.
languageName"English"The name of the language.
displayName"EN"The name used when the language appears on the website.
isoCode"en"The ISO language code for HTML metadata purposes. It can be a top-level language (ie. en) or a sub-variant (ie. en-AU).
weight1The weight determines the order of languages when building multilingual sites.
rtlfalseWhether or not this is a RTL language. Set to true to reflow content from right-to-left. Blowfish fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.
dateFormat"2 January 2006"How dates are formatted in this language. Refer to the Hugo docs for acceptable formats.
title"Blowfish"The title of the website. This will be displayed in the site header and footer.
descriptionNot setThe website description. This will be used in the site metadata.
copyrightNot setA Markdown string for the site footer copyright message can include the placeholder { year } to dynamically insert the current year. If none is provided, Blowfish will automatically generate a copyright string using the site title.
author.nameNot setThe author’s name. This will be displayed in article footers, and on the homepage when the profile layout is used.
author.imageNot setPath to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site’s assets/ folder.
author.headlineNot setA Markdown string containing the author’s headline. It will be displayed on the profile homepage under the author’s name.
author.bioNot setA Markdown string containing the author’s bio. It will be displayed in article footers.
author.linksNot setThe links to display alongside the author’s details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in assets/icons/.

Menus +#

Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.

Menu config files are named with the format menus.[language-code].toml. Always ensure that the language code used in the menus configuration matches the languages configuration.

The Getting Started section explains more about the structure of this file. You can also refer to the Hugo menu docs for more configuration examples.

Theme parameters +#

Blowfish provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the config/_default/params.toml file.

Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the Front Matter section for further details.

Global +#

NameDefaultDescription
colorScheme"blowfish"The theme colour scheme to use. Valid values are blowfish (default), avocado, ocean, fire and slate. Refer to the Colour Schemes section for more details.
defaultAppearance"light"The default theme appearance, either light or dark.
autoSwitchAppearancetrueWhether the theme appearance automatically switches based upon the visitor’s operating system preference. Set to false to force the site to always use the defaultAppearance.
enableSearchfalseWhether site search is enabled. Set to true to enable search functionality. Note that the search feature depends on the outputs.home setting in the site configuration being set correctly.
enableCodeCopyfalseWhether copy-to-clipboard buttons are enabled for <code> blocks. The highlight.noClasses parameter must be set to false for code copy to function correctly. Read more about other configuration files below.
logoNot setThe relative path to the site logo file within the assets/ folder. The logo file should be provided at 2x resolution and supports any image dimensions.
secondaryLogoNot setThe relative path to the secondary site logo file within the assets/ folder. The logo file should be provided at 2x resolution and supports any image dimensions. This should have an inverted/contrasting colour scheme to logo. If set, this logo will be shown when users toggle from the defaultAppearance mode.
mainSectionsNot setThe sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.
showViewsNot setWhether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below.
showLikesNot setWhether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below.
robotsNot setString that indicates how robots should handle your site. If set, it will be output in the page head. Refer to Google’s docs for valid values.
disableImageZoomfalseDisables image zoom feature across all the images in the site.
disableImageOptimizationfalseDisables image resize and optimization features across all the images in the site.
defaultBackgroundImageNot setDefault background image for both background homepage layout and background hero style
defaultFeaturedImageNot setDefault background image for all featured images across articles, will be overriden by a local featured image.
highlightCurrentMenuAreaNot setMarks menu entries in the main manu when selected
smartTOCNot setActivate smart Table of Contents, items in view will be highlighted.
smartTOCHideUnfocusedChildrenNot setWhen smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus.

Header +#

NameDefaultDescription
header.layout"basic"Defines the header for the entire site, supported values are basic, fixed, fixed-fill, and fixed-fill-blur.

Footer +#

NameDefaultDescription
footer.showMenutrueShow/hide the footer menu, which can be configured in the [[footer]] section of the config/_default/menus.en.toml file.
footer.showCopyrighttrueWhether or not to show the copyright string in the site footer. Note that the string itself can be customised using the copyright parameter in the languages configuration.
footer.showThemeAttributiontrueWhether or not to show the “powered by” theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page).
footer.showAppearanceSwitcherfalseWhether or not to show the appearance switcher in the site footer. The browser’s local storage is used to persist the visitor’s preference.
footer.showScrollToToptrueWhen set to true the scroll to top arrow is displayed.

Homepage +#

NameDefaultDescription
homepage.layout"profile"The layout of the homepage. Valid values are page, profile, hero, card, background, or custom. When set to custom, you must provide your own layout by creating a /layouts/partials/home/custom.html file. Refer to the Homepage Layout section for more details.
homepage.homepageImageNot setImage to be used in hero and card layouts. Refer to the Homepage Layout section for more details.
homepage.showRecentfalseWhether or not to display the recent articles list on the homepage.
homepage.showRecentItems5How many articles to display if showRecent is true. If variable is set to 0 or if it isn’t defined the system will default to 5 articles.
homepage.showMoreLinkfalseWether or not to display a show more link at the end of your posts that takes the user to a predefined place.
homepage.showMoreLinkDest/postsThe destination of the show more button.
homepage.cardViewfalseDisplay recent articles as a gallery of cards.
homepage.cardViewScreenWidthfalseEnhance the width of the recent articles card gallery to take the full width available.
homepage.layoutBackgroundBlurfalseMakes the background image in the homepage layout blur with the scroll

Article +#

NameDefaultDescription
article.showDatetrueWhether or not article dates are displayed.
article.showViewsfalseWhether or not article views are displayed. This requires firebase integrations to be enabled, look below.
article.showLikesfalseWhether or not article likes are displayed. This requires firebase integrations to be enabled, look below.
article.showDateUpdatedfalseWhether or not the dates articles were updated are displayed.
article.showAuthortrueWhether or not the author box is displayed in the article footer.
article.showHerofalseWhether the thumbnail image will be shown as a hero image within each article page.
article.heroStyleNot setStyle to display the hero image, valid options are: basic, big, background, thumbAndBackground.
article.layoutBackgroundBlurtrueMakes the background image in the background article heroStyle blur with the scroll
article.layoutBackgroundHeaderSpacetrueAdd space between the header and the body.
article.showBreadcrumbsfalseWhether or not breadcrumbs are displayed in the article header.
article.showDraftLabeltrueWhether or not the draft indicator is shown next to articles when site is built with --buildDrafts.
article.showEditfalseWhether or not the link to edit the article content should be displayed.
article.editURLNot setWhen article.showEdit is active, the URL for the edit link.
article.editAppendPathtrueWhen article.showEdit is active, whether or not the path to the current article should be appended to the URL set at article.editURL.
article.seriesOpenedfalseWhether or not the series module will be displayed open by default or not.
article.showHeadingAnchorstrueWhether or not heading anchor links are displayed alongside headings within articles.
article.showPaginationtrueWhether or not the next/previous article links are displayed in the article footer.
article.invertPaginationfalseWhether or not to flip the direction of the next/previous article links.
article.showReadingTimetrueWhether or not article reading times are displayed.
article.showTableOfContentsfalseWhether or not the table of contents is displayed on articles.
article.showRelatedContentfalseDisplay related content for each post. Might required additional configuration to your config.toml. Please check the theme config.toml if you want to enable this feature and copy all the relevant related entries. Also check Hugo’s docs on related content.
article.relatedContentLimit3Limit of related articles to display if showRelatedContent is turned on.
article.showTaxonomiesfalseWhether or not the taxonomies related to this article are displayed.
article.showAuthorsBadgesfalseWhether the authors taxonomies are are displayed in the article or list header. This requires the setup of multiple authors and the authors taxonomy. Check this page for more details on how to configure that feature.
article.showWordCountfalseWhether or not article word counts are displayed.
article.showCommentsfalseWhether or not the comments partial is included after the article footer.
article.showSummaryfalseWhether or not article summaries are displayed on list pages. If a summary is not provided in the front matter, one will be auto generated using the summaryLength parameter in the site configuration.
article.sharingLinksNot setWhich sharing links to display at the end of each article. When not provided, or set to false no links will be displayed. Available values are: “linkedin”, “twitter”, “reddit”, “pinterest”, “facebook”, “email”, “whatsapp”, and “telegram”

List +#

NameDefaultDescription
list.showHerofalseWhether the thumbnail image will be shown as a hero image within each list page.
list.heroStyleNot setStyle to display the hero image, valid options are: basic, big, background, thumbAndBackground.
list.showBreadcrumbsfalseWhether or not breadcrumbs are displayed in the header on list pages.
list.layoutBackgroundBlurtrueMakes the background image in the background list heroStyle blur with the scroll
list.layoutBackgroundHeaderSpacetrueAdd space between the header and the body.
list.showTableOfContentsfalseWhether or not the table of contents is displayed on list pages.
list.showSummaryfalseWhether or not article summaries are displayed on list pages. If a summary is not provided in the front matter, one will be auto generated using the summaryLength parameter in the site configuration.
list.showViewsfalseWhether or not list views are displayed. This requires firebase integrations to be enabled, look below.
list.showLikesfalseWhether or not list likes are displayed. This requires firebase integrations to be enabled, look below.
list.showCardsfalseWhether or not each article is displayed as a card or as simple inline text.
list.groupByYeartrueWhether or not articles are grouped by year on list pages.
list.cardViewfalseDisplay lists as a gallery of cards.
list.cardViewScreenWidthfalseEnhance the width of card galleries in lists to take the full width available.
list.constrainItemsWidthfalseLimit item width to prose to increase readability. Useful when no feature images are available.
list.showTableOfContentsfalseWhether or not the table of contents is displayed on articles.

Sitemap +#

NameDefaultDescription
sitemap.excludedKinds["taxonomy", "term"]Kinds of content that should be excluded from the generated /sitemap.xml file. Refer to the Hugo docs for acceptable values.

Taxonomy +#

NameDefaultDescription
taxonomy.showTermCounttrueWhether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.
taxonomy.showHerofalseWhether the thumbnail image will be shown as a hero image within each taxonomy page.
taxonomy.heroStyleNot setStyle to display the hero image, valid options are: basic, big, background, thumbAndBackground.
taxonomy.showBreadcrumbsfalseWhether or not breadcrumbs are displayed in the taxonomy header.
taxonomy.showViewsfalseWhether or not article views are displayed. This requires firebase integrations to be enabled, look below.
taxonomy.showLikesfalseWhether or not article likes are displayed. This requires firebase integrations to be enabled, look below.
taxonomy.showTableOfContentsfalseWhether or not the table of contents is displayed on taxonomies.
taxonomy.cardViewfalseDisplay lists as a gallery of cards.

Term +#

NameDefaultDescription
term.showHerofalseWhether the thumbnail image will be shown as a hero image within each term page.
term.heroStyleNot setStyle to display the hero image, valid options are: basic, big, background, thumbAndBackground.
term.showBreadcrumbsfalseWhether or not breadcrumbs are displayed in the term header.
term.showViewsfalseWhether or not article views are displayed. This requires firebase integrations to be enabled, look below.
term.showLikesfalseWhether or not article likes are displayed. This requires firebase integrations to be enabled, look below.
term.showTableOfContentsfalseWhether or not the table of contents is displayed on terms.
term.groupByYearfalseWhether or not articles are grouped by year on term pages.
term.cardViewfalseDisplay lists as a gallery of cards.
term.cardViewScreenWidthfalseEnhance the width of card galleries in lists to take the full width available.

Firebase +#

NameDefaultDescription
firebase.apiKeyNot setFirebase apiKey, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.authDomainNot setFirebase authDomain, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.projectIdNot setFirebase projectId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.storageBucketNot setFirebase storageBucket, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.messagingSenderIdNot setFirebase messagingSenderId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.appIdNot setFirebase appId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.
firebase.measurementIdNot setFirebase measurementId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish.

Fathom Analytics +#

NameDefaultDescription
fathomAnalytics.siteNot setThe site code generated by Fathom Analytics for the website. Refer to the Analytics docs for more details.
fathomAnalytics.domainNot setIf using a custom domain with Fathom Analytics, provide it here to serve script.js from the custom domain.

BuyMeACoffee +#

NameDefaultDescription
buymeacoffee.identifierNot setThe identifier to the target buymeacoffee account.
buymeacoffee.globalWidgetNot setActivate the global buymeacoffee widget.
buymeacoffee.globalWidgetMessageNot setMessage what will be displayed the first time a new user lands on the site.
buymeacoffee.globalWidgetColorNot setWidget color in hex format.
buymeacoffee.globalWidgetPositionNot setPosition of the widget, i.e. “Left” or “Right”

Verifications +#

NameDefaultDescription
verification.googleNot setThe site verification string provided by Google to be included in the site metadata.
verification.bingNot setThe site verification string provided by Bing to be included in the site metadata.
verification.pinterestNot setThe site verification string provided by Pinterest to be included in the site metadata.
verification.yandexNot setThe site verification string provided by Yandex to be included in the site metadata.

Other configuration files +#

The theme also includes a markup.toml configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Blowfish.

Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour.



Documentation - This article is part of a series.
Part 4: This Article
\ No newline at end of file diff --git a/public/docs/content-examples/featured.png b/public/docs/content-examples/featured.png new file mode 100644 index 00000000..5a54ce4c Binary files /dev/null and b/public/docs/content-examples/featured.png differ diff --git a/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_1200x0_resize_box_3.png b/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_1200x0_resize_box_3.png new file mode 100644 index 00000000..2082fad1 Binary files /dev/null and b/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_1200x0_resize_box_3.png differ diff --git a/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_600x0_resize_box_3.png b/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_600x0_resize_box_3.png new file mode 100644 index 00000000..44de25f4 Binary files /dev/null and b/public/docs/content-examples/featured_hua9cafb9ef9e179b71d05f85e3ab9080d_648770_600x0_resize_box_3.png differ diff --git a/public/docs/content-examples/index.html b/public/docs/content-examples/index.html new file mode 100644 index 00000000..39bf67cc --- /dev/null +++ b/public/docs/content-examples/index.html @@ -0,0 +1,173 @@ +Content Examples · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Content Examples

10 mins· +0 +· +0 +· + +· +
content +example
Table of Contents
Documentation - This article is part of a series.
Part 12: This Article

If you’ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.

Tip: If you’re new to Hugo, be sure to check out the official docs to learn more about the concept of page bundles and resources.

The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.

Branch pages +#

Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is _index.md.

Blowfish will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the title parameter in a branch page will allow overriding the page title.

Homepage +#

Layout:layouts/index.html
Content:content/_index.md

The homepage in Blowfish is special in that it’s overarching design is controlled by the homepage layout config parameter. You can learn more about this in the Homepage Layout section.

If you want to add custom content to this page, you simply need to create a content/_index.md file. Anything in this file will then be included in your homepage.

Example:

---
+title: "Welcome to Blowfish!"
+description: "This is a demo of adding content to the homepage."
+---
+Welcome to my website! I'm really happy you stopped by.
+

This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links.

List pages +#

Layout:layouts/_default/list.html
Content:content/../_index.md

List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.

Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a “Projects” section, you would create content/projects/. Then create a Markdown file for each of your projects.

A list page will be generated by default, however to customise the content, you should also create an _index.md page in this new directory.

.
+└── content
+    └── projects
+        ├── _index.md          # /projects
+        ├── first-project.md   # /projects/first-project
+        └── another-project
+            ├── index.md       # /projects/another-project
+            └── project.jpg
+

Hugo will generate URLs for the pages in your projects folder accordingly.

Just like the homepage, content in the _index.md file will be output into the generated list index. Blowfish will then list any pages in this section below the content.

Example:

---
+title: "Projects"
+description: "Learn about some of my projects."
+cascade:
+  showReadingTime: false
+---
+This section contains all my current projects.
+

In this example, the special cascade parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page.

The samples section of this site is an example of a list page.

Taxonomy pages +#

List layout:layouts/_default/taxonomy.html
Term layout:layouts/_default/term.html
Content:content/../_index.md

Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.

The terminology can get a little confusing so let’s explore an example using a taxonomy named animals.

Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at config/_default/taxonomies.toml and defining the taxonomy name.

# config/_default/taxonomies.toml
+
+animal = "animals"
+

Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular animal equals the plural animals to create our example taxonomy.

Now that our animals taxonomy exists, it needs to be added to individual content items. It’s as simple as inserting it into the front matter:

---
+title: "Into the Lion's Den"
+description: "This week we're learning about lions."
+animals: ["lion", "cat"]
+---
+

This has now created two terms within our animals taxonomy - lion and cat.

Although it’s not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at /animals/ and the term pages can be found at /animals/lion/ and /animals/cat/.

The list page will list all the terms contained within the taxonomy. In this example, navigating to /animals/ will show a page that has links for “lion” and “cat” which take visitors to the individual term pages.

The term pages will list all the pages contained within that term. These term lists are essentially the same as normal list pages and behave in much the same way.

In order to add custom content to taxonomy pages, simply create _index.md files in the content folder using the taxonomy name as the sub-directory name.

.
+└── content
+    └── animals
+        ├── _index.md       # /animals
+        └── lion
+            └── _index.md   # /animals/lion
+

Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named lion but override the title to be “Lion”.

To see how this looks in reality, check out the tags taxonomy listing on this site.

Leaf pages +#

Layout:layouts/_default/single.html
Content (standalone):content/../page-name.md
Content (bundled):content/../page-name/index.md

Leaf pages in Hugo are basically standard content pages. They are defined as pages that don’t contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.

The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named index.md without an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.

.
+└── content
+    └── blog
+        ├── first-post.md     # /blog/first-post
+        ├── second-post.md    # /blog/second-post
+        └── third-post
+            ├── index.md      # /blog/third-post
+            └── image.jpg
+

When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an index.md file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.

Example:

---
+title: "My First Blog Post"
+date: 2022-01-25
+description: "Welcome to my blog!"
+summary: "Learn more about me and why I am starting this blog."
+tags: ["welcome", "new", "about", "first"]
+---
+_This_ is the content of my blog post.
+

Leaf pages have a wide variety of front matter parameters that can be used to customise how they are displayed.

External links +#

Blowfish has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you’d like to link to, without replicating the content in your Hugo site.

In order to create an external link article, some special front matter needs to be set:

---
+title: "My Medium post"
+date: 2022-01-25
+externalUrl: "https://medium.com/"
+summary: "I wrote a post on Medium."
+showReadingTime: false
+_build:
+  render: "false"
+  list: "local"
+---
+

Along with the normal front matter parameters like title and summary, the externalUrl parameter is used to tell Blowfish that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.

Additionally, we use a special Hugo front matter parameter _build to prevent a normal page for this content being generated - there’s no point generating a page since we’re linking to an external URL!

The theme includes an archetype to make generating these external link articles simple. Just specify -k external when making new content.

hugo new -k external posts/my-post.md
+

Simple pages +#

Layout:layouts/_default/simple.html
Front Matter:layout: "simple"

Blowfish also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.

The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page front matter variables.

To enable the simple layout on a particular page, add the layout front matter variable with a value of "simple":

---
+title: "My landing page"
+date: 2022-03-08
+layout: "simple"
+---
+This page content is now full-width.
+

Custom layouts +#

One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.

Layouts follow all the normal Hugo templating rules and more information is available in the official Hugo docs.

Overriding default layouts +#

Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.

For example, creating a layouts/_default/single.html file will allow the layout of leaf pages to be completely customised.

Custom section layouts +#

It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.

Let’s step through an example that creates a custom “Projects” page that lists projects using a special layout.

In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a list.html file.

.
+└── content
+│   └── projects
+│       ├── _index.md
+│       ├── first-project.md
+│       └── second-project.md
+└── layouts
+    └── projects
+        └── list.html
+

This list.html file will now override the default list template, but only for the projects section. Before we look at this file, lets first look at the individual project files.

---
+title: "Blowfish"
+date: 2021-08-11
+icon: "github"
+description: "A theme for Hugo built with Tailwind CSS."
+topics: ["Hugo", "Web", "Tailwind"]
+externalUrl: "https://github.com/nunocoracao/blowfish/"
+---
+

In this example we are assigning some metadata for each project that we can then use in our list template. There’s no page content, but there’s nothing stopping you from including it. It’s your own custom template after all!

With the projects defined, now we can create a list template that outputs the details of each project.

{{ define "main" }}
+  <section class="mt-8">
+    {{ range .Pages }}
+      <article class="pb-6">
+        <a class="flex" href="{{ .Params.externalUrl }}">
+          <div class="mr-3 text-3xl text-neutral-300">
+            <span class="relative inline-block align-text-bottom">
+              {{ partial "icon.html" .Params.icon }}
+            </span>
+          </div>
+          <div>
+            <h3 class="flex text-xl font-semibold">
+              {{ .Title }}
+            </h3>
+            <p class="text-sm text-neutral-400">
+              {{ .Description }}
+            </p>
+          </div>
+        </a>
+      </article>
+    {{ end }}
+  </section>
+{{ end }}
+

Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.

Keep in mind that you’ll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the Advanced Customisation section.

When making custom templates like this one, it’s always easiest to take a look at how the default Blowfish template works and then use that as a guide. Remember, the Hugo docs are a great resource to learn more about creating templates too.



Documentation - This article is part of a series.
Part 12: This Article
\ No newline at end of file diff --git a/public/docs/firebase-views/featured.png b/public/docs/firebase-views/featured.png new file mode 100644 index 00000000..b9259a50 Binary files /dev/null and b/public/docs/firebase-views/featured.png differ diff --git a/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_1200x0_resize_box_3.png b/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_1200x0_resize_box_3.png new file mode 100644 index 00000000..0f32efb0 Binary files /dev/null and b/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_1200x0_resize_box_3.png differ diff --git a/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_600x0_resize_box_3.png b/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_600x0_resize_box_3.png new file mode 100644 index 00000000..54d6a60f Binary files /dev/null and b/public/docs/firebase-views/featured_hu893b4009285a3fc236e74f3cf6b73d3e_4462659_600x0_resize_box_3.png differ diff --git a/public/docs/firebase-views/index.html b/public/docs/firebase-views/index.html new file mode 100644 index 00000000..22e7d292 --- /dev/null +++ b/public/docs/firebase-views/index.html @@ -0,0 +1,59 @@ +Firebase: Views & Likes · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Firebase: Views & Likes +

2 mins· +0 +· +0 +· + +· +
firebase +views +likes
Documentation - This article is part of a series.
Part 15: This Article

In order to be able to support dynamic data across your website we’ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.

  1. Go to Firebase website and create an account for free
  2. Create a new project
  3. Select analytics location
  4. Setup firebase in Blowfish by getting the variables for your project and setting them inside params.toml file. More details can be found in this page. You can find an example of the file Firebase will provide below, notice the parameters within the FirebaseConfig object.
// Import the functions you need from the SDKs you need
+import { initializeApp } from "firebase/app";
+import { getAnalytics } from "firebase/analytics";
+// TODO: Add SDKs for Firebase products that you want to use
+// https://firebase.google.com/docs/web/setup#available-libraries
+
+// Your web app's Firebase configuration
+// For Firebase JS SDK v7.20.0 and later, measurementId is optional
+const firebaseConfig = {
+  apiKey: "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY",
+  authDomain: "blowfish-21fff.firebaseapp.com",
+  projectId: "blowfish-21fff",
+  storageBucket: "blowfish-21fff.appspot.com",
+  messagingSenderId: "60108104191",
+  appId: "1:60108104191:web:039842ebe1370698b487ca",
+  measurementId: "G-PEDMYR1V0K"
+};
+
+// Initialize Firebase
+const app = initializeApp(firebaseConfig);
+const analytics = getAnalytics(app);
+
  1. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
rules_version = '2';
+service cloud.firestore {
+  match /databases/{database}/documents {
+    match /{document=**} {
+      allow read, write: if request.auth != null;
+    }
+  }
+}
+
  1. Enable anonymous authorization - Select Build and open Authentication. Select get started, click Anonymous and turn it on, save.
  2. Enjoy - you can now activate views and likes on Blowfish for all (or specific) articles.


Documentation - This article is part of a series.
Part 15: This Article
\ No newline at end of file diff --git a/public/docs/front-matter/featured.png b/public/docs/front-matter/featured.png new file mode 100644 index 00000000..d7262d5e Binary files /dev/null and b/public/docs/front-matter/featured.png differ diff --git a/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_1200x0_resize_box_3.png b/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_1200x0_resize_box_3.png new file mode 100644 index 00000000..69c373f0 Binary files /dev/null and b/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_1200x0_resize_box_3.png differ diff --git a/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_600x0_resize_box_3.png b/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_600x0_resize_box_3.png new file mode 100644 index 00000000..65004ecb Binary files /dev/null and b/public/docs/front-matter/featured_hu2d8098f125aeb5b866c985ce18317fa7_5037509_600x0_resize_box_3.png differ diff --git a/public/docs/front-matter/index.html b/public/docs/front-matter/index.html new file mode 100644 index 00000000..cc31929c --- /dev/null +++ b/public/docs/front-matter/index.html @@ -0,0 +1,72 @@ +Front Matter · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Front Matter

4 mins· +0 +· +0 +· + +· +
front matter +config +docs
Documentation - This article is part of a series.
Part 7: This Article

In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.

Front matter parameter default values are inherited from the theme’s base configuration, so you only need to specify these parameters in your front matter when you want to override the default.

NameDefaultDescription
titleNot setThe name of the article.
descriptionNot setThe text description for the article. It is used in the HTML metadata.
externalUrlNot setIf this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.
editURLarticle.editURLWhen showEdit is active, the URL for the edit link.
editAppendPatharticle.editAppendPathWhen showEdit is active, whether or not the path to the current article should be appended to the URL set at editURL.
groupByYearlist.groupByYearWhether or not articles are grouped by year on list pages.
menuNot setWhen a value is provided, a link to this article will appear in the named menus. Valid values are main or footer.
robotsNot setString that indicates how robots should handle this article. If set, it will be output in the page head. Refer to Google’s docs for valid values.
sharingLinksarticle.sharingLinksWhich sharing links to display at the end of this article. When not provided, or set to false no links will be displayed.
showAuthorarticle.showAuthorWhether or not the author box for the deafult author is displayed in the article footer.
authorsNot setArray of values for authors, if set it overrides showAuthor settings for page or site. Used on the multiple authors feature, check this page for more details on how to configure that feature.
showAuthorsBadgesarticle.showAuthorsBadgesWhether the authors taxonomies are are displayed in the article or list header. This requires the setup of multiple authors and the authors taxonomy. Check this page for more details on how to configure that feature.
showHeroarticle.showHeroWhether the thumbnail image will be shown as a hero image within the article page.
heroStylearticle.heroStyleStyle to display the hero image, valid options are: basic, big, background, thumbAndBackground.
showBreadcrumbsarticle.showBreadcrumbs or list.showBreadcrumbsWhether the breadcrumbs are displayed in the article or list header.
showDatearticle.showDateWhether or not the article date is displayed. The date is set using the date parameter.
showDateUpdatedarticle.showDateUpdatedWhether or not the date the article was updated is displayed. The date is set using the lastmod parameter.
showEditarticle.showEditWhether or not the link to edit the article content should be displayed.
showHeadingAnchorsarticle.showHeadingAnchorsWhether or not heading anchor links are displayed alongside headings within this article.
showPaginationarticle.showPaginationWhether or not the next/previous article links are displayed in the article footer.
invertPaginationarticle.invertPaginationWhether or not to flip the direction of the next/previous article links.
showReadingTimearticle.showReadingTimeWhether or not the article reading time is displayed.
showTaxonomiesarticle.showTaxonomiesWhether or not the taxonomies that relate to this article are displayed.
showTableOfContentsarticle.showTableOfContentsWhether or not the table of contents is displayed on this article.
showWordCountarticle.showWordCountWhether or not the article word count is displayed.
showCommentsarticle.showCommentsWhether or not the comments partial is included after the article footer.
showSummarylist.showSummaryWhether or not the article summary should be displayed on list pages.
showViewsarticle.showViewsWhether or not the article views should be displayed in lists and detailed view. This requires a firebase integration. Check this page for a guide on how to integrate Firebase into Blowfish
showLikesarticle.showLikesWhether or not the article likes should be displayed in lists and detailed view. This requires a firebase integration. Check this page for a guide on how to integrate Firebase into Blowfish
seriesOpenedarticle.seriesOpenedWhether or not the series module will be displayed open by default or not.
seriesNot setArray of series the article belongs to, we recommend using only one series per article.
series_orderNot setNumber of the article within the series.
summaryAuto generated using summaryLength (see site configuration)When showSummary is enabled, this is the Markdown string to be used as the summary for this article.
xmltrue unless excluded by sitemap.excludedKindsWhether or not this article is included in the generated /sitemap.xml file.
layoutBackgroundBlurtrueMakes the background image in the background heroStyle blur with the scroll
layoutBackgroundHeaderSpacetrueAdd space between the header and the body.


Documentation - This article is part of a series.
Part 7: This Article
\ No newline at end of file diff --git a/public/docs/getting-started/featured.png b/public/docs/getting-started/featured.png new file mode 100644 index 00000000..85eafad8 Binary files /dev/null and b/public/docs/getting-started/featured.png differ diff --git a/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_1200x0_resize_box_3.png b/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_1200x0_resize_box_3.png new file mode 100644 index 00000000..6cca63b6 Binary files /dev/null and b/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_1200x0_resize_box_3.png differ diff --git a/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_600x0_resize_box_3.png b/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_600x0_resize_box_3.png new file mode 100644 index 00000000..3d30158c Binary files /dev/null and b/public/docs/getting-started/featured_hu7b932db01f62f5127910b65e3cd14f9d_599809_600x0_resize_box_3.png differ diff --git a/public/docs/getting-started/index.html b/public/docs/getting-started/index.html new file mode 100644 index 00000000..19169c59 --- /dev/null +++ b/public/docs/getting-started/index.html @@ -0,0 +1,215 @@ +Getting Started · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Getting Started

7 mins· +0 +· +0 +· + +· +
installation +docs
Table of Contents
Documentation - This article is part of a series.
Part 3: This Article
This section assumes you have already installed the Blowfish theme.

The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.

Basic configuration +#

Before creating any content, there are a few things you should set for a new installation. Starting in the config.toml file, set the baseURL and languageCode parameters. The languageCode should be set to the main language that you will be using to author your content.

# config/_default/config.toml
+
+baseURL = "https://your_domain.com/"
+languageCode = "en"
+

The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.

Locate the languages.en.toml file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to languages.fr.toml.

Note that the language code in the language config filename should match the languageCode setting in config.toml.
# config/_default/languages.en.toml
+
+title = "My awesome website"
+
+[author]
+name = "My name"
+image = "img/author.jpg"
+headline = "A generally awesome human"
+bio = "A little bit about me"
+links = [
+  { twitter = "https://twitter.com/username" }
+]
+

The [author] configuration determines how the author information is displayed on the website. The image should be placed in the site’s assets/ folder. Links will be displayed in the order they are listed.

If you need extra detail, further information about each of these configuration options, is covered in the Configuration section.

Colour schemes +#

Blowfish ships with a number of colour schemes out of the box. To change the scheme, simply set the colorScheme theme parameter. Valid options are blowfish (default), avocado, fire, ocean and slate.

# config/_default/params.toml
+
+colorScheme = "blowfish"
+

Blowfish defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in Tailwind.

Blowfish (default) +#

+ +

Avocado +#

+ +

Fire +#

+ +

Forest +#

+ +

Princess +#

+ +

Neon +#

+ +

Bloody +#

+ +

Terminal +#

+ +

Marvel +#

+ +

Noir +#

+ +

Autumn +#

+ +

Congo +#

+ +

Slate +#

+ +

Although these are the default schemes, you can also create your own. Refer to the Advanced Customisation section for details.

Organising content +#

By default, Blowfish doesn’t force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer pages for a static site, posts for a blog, or projects for a portfolio.

Here’s a quick overview of a basic Blowfish project. All content is placed within the content folder:

.
+├── assets
+│   └── img
+│       └── author.jpg
+├── config
+│   └── _default
+├── content
+│   ├── _index.md
+│   ├── about.md
+│   └── posts
+│       ├── _index.md
+│       ├── first-post.md
+│       └── another-post
+│           ├── aardvark.jpg
+│           └── index.md
+└── themes
+    └── blowfish
+

It’s important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the official Hugo docs for more information.

Blowfish is also flexible when it comes to taxonomies. Some people prefer to use tags and categories to group their content, others prefer to use topics.

Hugo defaults to using posts, tags and categories out of the box and this will work fine if that’s what you want. If you wish to customise this, however, you can do so by creating a taxonomies.toml configuration file:

# config/_default/taxonomies.toml
+
+topic = "topics"
+

This will replace the default tags and categories with topics. Refer to the Hugo Taxonomy docs for more information on naming taxonomies.

When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.

Menus +#

Blowfish has two menus that can be customised to suit the content and layout of your site. The main menu appears in the site header and the footer menu appears at the bottom of the page just above the copyright notice.

Both menus are configured in the menus.en.toml file. Similarly to the languages config file, if you wish to use another language, rename this file and replace en with the language code you wish to use.

# config/_default/menus.toml
+
+[[main]]
+  name = "Blog"
+  pageRef = "posts"
+  weight = 10
+
+[[main]]
+  name = "Topics"
+  pageRef = "topics"
+  weight = 20
+
+[[main]]
+  pre = "github"
+  name = "GitHub"
+  url = "https://github.com/nunocoracao/blowfish"
+  weight = 30
+
+[[main]]
+  identifier = "github2"
+  pre = "github"
+  url = "https://github.com/nunocoracao/blowfish"
+  weight = 40
+
+[[footer]]
+  name = "Privacy"
+  url = "https://external-link"
+

The name parameter specifies the text that is used in the menu link. You can also optionally provide a title which fills the HTML title attribute for the link.

The pageRef parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the url parameter can be used.

The pre parameter allows you to place an icon from Blowfish’s icon set on the menu entry. This parameter can be used with name parameter or by itself. If you want to use multiple menu entries with just icons please set the identifierparameter otherwise Hugo will default to the naming tag as the id and probably not display all the menu entries.

Menu links will be sorted from lowest to highest weight, and then alphabetically by name.

Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.

Nested menus +#

The theme also supports nested menus. In order to use them you just need to define a parent entry in menu.toml and its sub-menus using the parent parameter to reference the parent. All properties can be used for sub-menus. pageRef and url can also be used in the parent entry. Nested menus are only available in the main menu not for the footer.

# config/_default/menus.toml
+
+[[main]]
+  name = "Parent"
+  weight = 20
+
+[[main]]
+  name = "sub-menu 1"
+  parent = "Parent"
+  pageRef = "samples"
+  weight = 20
+
+[[main]]
+  name = "sub-menu 2"
+  parent = "Parent"
+  pageRef = "samples"
+  weight = 20
+
+[[main]]
+  name = "sub-menu 3"
+  parent = "Parent"
+  pre = "github"
+  pageRef = "samples"
+  weight = 20
+

Sub-Navigation menu +#

Additionally, you can also configure a sub-navigation menu. Just define new menu entries as subnavigation in menu.toml. This will render a second line with caregories below the main header menu.

# config/_default/menus.toml
+
+[[subnavigation]]
+  name = "An interesting topic"
+  pageRef = "tags/interesting-topic"
+  weight = 10
+
+[[subnavigation]]
+  name = "My Awesome Category"
+  pageRef = "categories/awesome"
+  weight = 20
+

Thumbnails & Backgrounds +#

Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article folder. And that’s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.

Here is also a guide with more info and a sample if you want to see how you can do it.

Additionally, Blowfish also supports background hero images in articles and lists. In order to use a different image than the featured one, add an image file in which the name starts with background*.

Detailed configuration +#

The steps above are the bare minimum configuration. If you now run hugo server you will be presented with a blank Blowfish website. Detailed configuration is covered in the Configuration section.



Documentation - This article is part of a series.
Part 3: This Article
\ No newline at end of file diff --git a/public/docs/homepage-layout/featured.png b/public/docs/homepage-layout/featured.png new file mode 100644 index 00000000..0488f197 Binary files /dev/null and b/public/docs/homepage-layout/featured.png differ diff --git a/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_1200x0_resize_box_3.png b/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_1200x0_resize_box_3.png new file mode 100644 index 00000000..6a37587a Binary files /dev/null and b/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_1200x0_resize_box_3.png differ diff --git a/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_600x0_resize_box_3.png b/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_600x0_resize_box_3.png new file mode 100644 index 00000000..989df218 Binary files /dev/null and b/public/docs/homepage-layout/featured_hu2b64bd3fbe5e1f5f3d9d27abc9d45f1e_648252_600x0_resize_box_3.png differ diff --git a/public/docs/homepage-layout/img/home-background.png b/public/docs/homepage-layout/img/home-background.png new file mode 100644 index 00000000..c9f7d4d5 Binary files /dev/null and b/public/docs/homepage-layout/img/home-background.png differ diff --git a/public/docs/homepage-layout/img/home-card.png b/public/docs/homepage-layout/img/home-card.png new file mode 100644 index 00000000..946d6ae5 Binary files /dev/null and b/public/docs/homepage-layout/img/home-card.png differ diff --git a/public/docs/homepage-layout/img/home-hero.png b/public/docs/homepage-layout/img/home-hero.png new file mode 100644 index 00000000..19347813 Binary files /dev/null and b/public/docs/homepage-layout/img/home-hero.png differ diff --git a/public/docs/homepage-layout/img/home-list.png b/public/docs/homepage-layout/img/home-list.png new file mode 100644 index 00000000..9073d824 Binary files /dev/null and b/public/docs/homepage-layout/img/home-list.png differ diff --git a/public/docs/homepage-layout/img/home-page.png b/public/docs/homepage-layout/img/home-page.png new file mode 100644 index 00000000..ab87fa53 Binary files /dev/null and b/public/docs/homepage-layout/img/home-page.png differ diff --git a/public/docs/homepage-layout/img/home-profile.png b/public/docs/homepage-layout/img/home-profile.png new file mode 100644 index 00000000..c32eceeb Binary files /dev/null and b/public/docs/homepage-layout/img/home-profile.png differ diff --git a/public/docs/homepage-layout/index.html b/public/docs/homepage-layout/index.html new file mode 100644 index 00000000..79a296f3 --- /dev/null +++ b/public/docs/homepage-layout/index.html @@ -0,0 +1,81 @@ +Homepage Layout · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Homepage Layout

4 mins· +0 +· +0 +· + +· +
homepage +layouts +docs
Table of Contents
Documentation - This article is part of a series.
Part 5: This Article

Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.

The layout of the homepage is controlled by the homepage.layout setting in the params.toml configuration file. Additionally, all layouts have the option to include a listing of recent articles.

Profile layout +#

The default layout is the profile layout, which is great for personal websites and blogs. It puts the author’s details front and centre by providing an image and links to social profiles.

The author information is provided in the languages configuration file. Refer to the Getting Started and Language Configuration sections for parameter details.

Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.

To enable the Profile layout, set homepage.layout = "profile" in the params.toml configuration file.

Page layout +#

The page layout is simply a normal content page that displays your Markdown content. It’s great for static websites and provides a lot of flexibility.

To enable the Page layout, set homepage.layout = "page" in the params.toml configuration file.

Hero layout +#

The hero layout brings together ideas from the profile and card layouts. This one not only displays information on the author of the site but it also loads your markdown beneath it.

To enable the Hero layout, set homepage.layout = "hero" and homepage.homepageImage in the params.toml configuration file.

Background layout +#

The background layout is a more smooth version of the hero layout. As in the Hero layout, this one also displays both information on the author of the site and loads your markdown beneath it.

To enable the Background layout, set homepage.layout = "background" and homepage.homepageImage in the params.toml configuration file.

Card layout +#

The card layout is an extension of the page layout. It provides the same level of flexibility by also displaying your markdown content and adds a card image to display visual content.

To enable the Card layout, set homepage.layout = "card" and homepage.homepageImage in the params.toml configuration file.

Custom layout +#

If the built-in homepage layouts aren’t sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.

To enable the Custom layout, set homepage.layout = "custom" in the params.toml configuration file.

With the configuration value set, create a new custom.html file and place it in layouts/partials/home/custom.html. Now whatever is in the custom.html file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.

To include recent articles on the custom layout, use the recent-articles/main.html partial.

As an example, the homepage on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the GitHub repo to see how it works.

Recent articles +#

All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the homepage.showRecent setting to true in the params.toml configuration file.

The articles listed in this section are derived from the mainSections setting which allows for whatever content types you are using on your website. For instance, if you had content sections for posts and projects you could set this setting to ["posts", "projects"] and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: ["blog"].

Thumbnails +#

Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article folder. And that’s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.

Here is a guide with more info and a sample if you want to see an example.

Card Gallery +#

Blowfish also supports displaying the standard lists of articles as card galleries. You can config this both for the recent section in the homepage and for lists of articles across your website. For homepage you can use homepage.cardView and homepage.cardViewScreenWidth; and for lists use list.cardView and list.cardViewScreenWidth. Check the Configuration docs for more details, and the homepage for a live demo.



Documentation - This article is part of a series.
Part 5: This Article
\ No newline at end of file diff --git a/public/docs/hosting-deployment/featured.png b/public/docs/hosting-deployment/featured.png new file mode 100644 index 00000000..239304a1 Binary files /dev/null and b/public/docs/hosting-deployment/featured.png differ diff --git a/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_1200x0_resize_box_3.png b/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_1200x0_resize_box_3.png new file mode 100644 index 00000000..480c1889 Binary files /dev/null and b/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_1200x0_resize_box_3.png differ diff --git a/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_600x0_resize_box_3.png b/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_600x0_resize_box_3.png new file mode 100644 index 00000000..7a4067f6 Binary files /dev/null and b/public/docs/hosting-deployment/featured_hu64bf821b067f4f95fc394dc0a744aa3f_4868715_600x0_resize_box_3.png differ diff --git a/public/docs/hosting-deployment/github-pages-source.jpg b/public/docs/hosting-deployment/github-pages-source.jpg new file mode 100644 index 00000000..ca3b51d6 Binary files /dev/null and b/public/docs/hosting-deployment/github-pages-source.jpg differ diff --git a/public/docs/hosting-deployment/index.html b/public/docs/hosting-deployment/index.html new file mode 100644 index 00000000..0cb31ad5 --- /dev/null +++ b/public/docs/hosting-deployment/index.html @@ -0,0 +1,99 @@ +Hosting & Deployment · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Hosting & Deployment +

4 mins· +0 +· +0 +· + +· +
docs +hosting +deployment +github +netlify +render
Table of Contents
Documentation - This article is part of a series.
Part 14: This Article

There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.

Blowfish is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There’s usually no special configuration required for this to work as long as the baseURL parameter has been configured in the config.toml file.

The official Hugo Hosting and Deployment docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.

Choose your provider:


GitHub Pages +#

GitHub allows hosting on GitHub Pages using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.

The file needs to be in YAML format, placed within the .github/workflows/ directory of your GitHub repository and named with a .yml extension.

Important: Ensure you set the correct branch name under branches and in the deploy step if parameter to the source branch used in your project.
# .github/workflows/gh-pages.yml
+
+name: GitHub Pages
+
+on:
+  push:
+    branches:
+      - main
+
+jobs:
+  build-deploy:
+    runs-on: ubuntu-20.04
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          submodules: true
+          fetch-depth: 0
+
+      - name: Setup Hugo
+        uses: peaceiris/actions-hugo@v2
+        with:
+          hugo-version: "latest"
+
+      - name: Build
+        run: hugo --minify
+
+      - name: Deploy
+        uses: peaceiris/actions-gh-pages@v3
+        if: ${{ github.ref == 'refs/heads/main' }}
+        with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+          publish_branch: gh-pages
+          publish_dir: ./public
+

Push the config file to GitHub and the action should automatically run. It may fail the first time and you’ll need to visit the Settings > Pages section of your GitHub repo to check the source is correct. It should be set to use the gh-pages branch.

Screen capture of GitHub Pages source

Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.

Netlify +#

To deploy to Netlify, create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you’ll be using.

Screen capture of Netlify build settings

Then in the root of your site repository, create a netlify.toml file:

# netlify.toml
+
+[build]
+  command = "hugo mod get -u && hugo --gc --minify -b $URL"
+  publish = "public"
+
+[build.environment]
+  NODE_ENV = "production"
+  GO_VERSION = "1.16"
+  TZ = "UTC"  # Set to preferred timezone
+
+[context.production.environment]
+  HUGO_VERSION = "0.104.1"
+  HUGO_ENV = "production"
+
+[context.deploy-preview.environment]
+  HUGO_VERSION = "0.104.1"
+

This configuration assumes you are deploying Blowfish as a Hugo module. If you have installed the theme using another method, change the build command to simply hugo --gc --minify -b $URL.

When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.

Render +#

Deploying to Render is very straightforward and all configuration is via the Render UI.

Create a new Static Site and link it to your project’s code repository. Then simply configure the build command to be hugo --gc --minify and publish directory to be public.

Screen capture of Render settings

The site will automatically build and deploy whenever you push a change to your repo.

Cloudflare Pages +#

Cloudflare offers the Pages service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare’s CDN. Follow their Hugo deployment guide to get started.

The Rocket Loader™ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.

This problem can be fixed by disabling it:

  • Go to the Cloudflare dashboard
  • Click on your domain name in the list
  • Click Optimization in the Speed section
  • Scroll down to Rocket Loader™ and disable it

Hugo sites built with Blowfish still load very quickly, even with this feature disabled.

Shared hosting, VPS or private web server +#

Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.

Make sure that the baseURL parameter in config.toml is set to the full URL to the root of your website (including any sub domains or sub-folders).

Then build your site using hugo and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named public.

If you need a hosting provider, check out Vultr or DigitalOcean. Signing up using these affiliate links will give you up to $100 in free credit so you can try the service.



Documentation - This article is part of a series.
Part 14: This Article
\ No newline at end of file diff --git a/public/docs/hosting-deployment/netlify-build-settings.jpg b/public/docs/hosting-deployment/netlify-build-settings.jpg new file mode 100644 index 00000000..aa150050 Binary files /dev/null and b/public/docs/hosting-deployment/netlify-build-settings.jpg differ diff --git a/public/docs/hosting-deployment/render-settings.jpg b/public/docs/hosting-deployment/render-settings.jpg new file mode 100644 index 00000000..293b3c43 Binary files /dev/null and b/public/docs/hosting-deployment/render-settings.jpg differ diff --git a/public/docs/index.html b/public/docs/index.html new file mode 100644 index 00000000..8442775d --- /dev/null +++ b/public/docs/index.html @@ -0,0 +1,114 @@ +Documentation · Blowfish + + + + + +
Skip to main content

Documentation

0 +· +0 +· +
Simple, yet powerful. Learn how to use Blowfish and its features.

This section contains everything you need to know about Blowfish. If you’re new, check out the Installation guide to begin or visit the Samples section to see what Blowfish can do.


Welcome to Blowfish
3 mins· +0 +· +0 +
new +docs
Installation
5 mins· +0 +· +0 +
installation +docs
Getting Started
7 mins· +0 +· +0 +
installation +docs
Configuration
17 mins· +0 +· +0 +
config +docs
Homepage Layout
4 mins· +0 +· +0 +
homepage +layouts +docs
Thumbnails
2 mins· +0 +· +0 +
thumbnail +config +docs
Front Matter
4 mins· +0 +· +0 +
front matter +config +docs
Shortcodes
12 mins· +0 +· +0 +
shortcodes +mermaid +icon +lead +docs
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs
Multiple Authors
4 mins· +0 +· +0 +
authors +config +docs
Series
2 mins· +0 +· +0 +
series +docs
Content Examples
10 mins· +0 +· +0 +
content +example
Advanced Customisation
9 mins· +0 +· +0 +
Advanced +css +docs
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render
Firebase: Views & Likes
2 mins· +0 +· +0 +
firebase +views +likes
\ No newline at end of file diff --git a/public/docs/index.xml b/public/docs/index.xml new file mode 100644 index 00000000..d50dc92f --- /dev/null +++ b/public/docs/index.xml @@ -0,0 +1,7 @@ +Documentation on Blowfishhttps://nunocoracao.github.io/blowfish/docs/Recent content in Documentation on BlowfishHugo -- gohugo.ioenWed, 19 Jan 2022 00:00:00 +0000Welcome to Blowfishhttps://nunocoracao.github.io/blowfish/docs/welcome/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/welcome/Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.Installationhttps://nunocoracao.github.io/blowfish/docs/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/installation/Simply follow the standard Hugo Quick Start procedure to get up and running quickly. +Detailed installation instructions can be found below. Instructions for updating the theme are also available. +Installation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.Getting Startedhttps://nunocoracao.github.io/blowfish/docs/getting-started/Sat, 15 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/getting-started/This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.Configurationhttps://nunocoracao.github.io/blowfish/docs/configuration/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/configuration/Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. +The theme ships with a default configuration that gets you up and running with a basic blog or static website.Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.Content Exampleshttps://nunocoracao.github.io/blowfish/docs/content-examples/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/content-examples/If you&rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.Serieshttps://nunocoracao.github.io/blowfish/docs/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/series/Blowfish provides a feature to group a set of articles together under a &ldquo;series&rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them.Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme.Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts. \ No newline at end of file diff --git a/public/docs/installation/featured.png b/public/docs/installation/featured.png new file mode 100644 index 00000000..dc5e02b9 Binary files /dev/null and b/public/docs/installation/featured.png differ diff --git a/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_1200x0_resize_box_3.png b/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_1200x0_resize_box_3.png new file mode 100644 index 00000000..975ebc65 Binary files /dev/null and b/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_1200x0_resize_box_3.png differ diff --git a/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_600x0_resize_box_3.png b/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_600x0_resize_box_3.png new file mode 100644 index 00000000..4bf413b9 Binary files /dev/null and b/public/docs/installation/featured_hua34c938079c0c05729a2a4d4783f7807_634706_600x0_resize_box_3.png differ diff --git a/public/docs/installation/index.html b/public/docs/installation/index.html new file mode 100644 index 00000000..08c76610 --- /dev/null +++ b/public/docs/installation/index.html @@ -0,0 +1,98 @@ +Installation · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Installation

5 mins· +0 +· +0 +· + +· +
installation +docs
Table of Contents
Documentation - This article is part of a series.
Part 2: This Article

Simply follow the standard Hugo Quick Start procedure to get up and running quickly.

Detailed installation instructions can be found below. Instructions for updating the theme are also available.

Installation +#

These instructions will get you up and running using Hugo and Blowfish from a completely blank state. Most of the dependencies mentioned in this guide can be installed using the package manager of choice for your platform.

Install Hugo +#

If you haven’t used Hugo before, you will need to install it onto your local machine. You can check if it’s already installed by running the command hugo version.

Make sure you are using Hugo version 0.87.0 or later as the theme takes advantage of some of the latest Hugo features.

You can find detailed installation instructions for your platform in the Hugo docs.

Create a new site +#

Run the command hugo new site mywebsite to create a new Hugo site in a directory named mywebsite.

Note that you can name the project directory whatever you choose, but the instructions below will assume it’s named mywebsite. If you use a different name, be sure to substitute it accordingly.

Download the Blowfish theme +#

There several different ways to install the Blowfish theme into your Hugo website. From easiest to most difficult to install and maintain, they are:

If you’re unsure, choose the Git submodule method.

Install using git +#

This method is the quickest and easiest for keeping the theme up-to-date. Besides Hugo and Go, you’ll also need to ensure you have Git installed on your local machine.

Change into the directory for your Hugo website (that you created above), initialise a new git repository and add Blowfish as a submodule.

cd mywebsite
+git init
+git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish
+

Then continue to set up the theme configuration files.

Install using Hugo +#

For this method you’ll use Hugo to manage your themes. Hugo uses Go to initialise and manage modules so you need to ensure you have go installed before proceeding.

  1. Download and install Go. You can check if it’s already installed by using the command go version.

    Make sure you are using Go version 1.12 or later as Hugo requires this for modules to work correctly.
  2. From your Hugo project directory (that you created above), initialise modules for your website:

    # If you're managing your project on GitHub
    +hugo mod init github.com/<username>/<repo-name>
    +
    +# If you're managing your project locally
    +hugo mod init my-project
    +
  3. Add the theme to your configuration by creating a new file config/_default/module.toml and adding the following:

    [[imports]]
    +path = "github.com/nunocoracao/blowfish/v2"
    +
  4. Start your server using hugo server and the theme will be downloaded automatically.

  5. Continue to set up the theme configuration files.

Install manually +#

  1. Download the latest release of the theme source code.

    Download from Github
  2. Extract the archive, rename the folder to blowfish and move it to the themes/ directory inside your Hugo project’s root folder.

  3. Continue to set up the theme configuration files.

Set up theme configuration files +#

In the root folder of your website, delete the config.toml file that was generated by Hugo. Copy the *.toml config files from the theme into your config/_default/ folder. This will ensure you have all the correct theme settings and will enable you to easily customise the theme to your needs.

Note: You should not overwrite the module.toml file if one already exists in your project!

Depending on how you installed the theme you will find the theme config files in different places:

  • Hugo Modules: In the Hugo cache directory, or download a copy from GitHub
  • Git submodule or Manual install: themes/blowfish/config/_default

Once you’ve copied the files, your config folder should look like this:

config/_default/
+├─ config.toml
+├─ languages.en.toml
+├─ markup.toml
+├─ menus.en.toml
+├─ module.toml  # if you installed using Hugo Modules
+└─ params.toml
+
Important: If you didn’t use Hugo Modules to install Blowfish, you must add the line theme = "blowfish" to the top of your config.toml file.

Next steps +#

The basic Blowfish installation is now complete. Continue to the Getting Started section to learn more about configuring the theme.


Installing updates +#

From time to time there will be new releases posted that apply fixes and add new functionality to the theme. In order to take advantage of these changes, you will need to update the theme files on your website.

How you go about this will depend on the installation method you chose when the theme was originally installed. Instructions for each method can be found below.

Update using git +#

Git submodules can be updated using the git command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository:

git submodule update --remote --merge
+

Once the submodule has been updated, rebuild your site and check everything works as expected.

Update using Hugo +#

Hugo makes updating modules super easy. Simply change into your project directory and execute the following command:

hugo mod get -u
+

Hugo will automatically update any modules that are required for your project. It does this by inspecting your module.toml and go.mod files. If you have any issues with the update, check to ensure these files are still configured correctly.

Then simply rebuild your site and check everything works as expected.

Update manually +#

Updating Blowfish manually requires you to download the latest copy of the theme and replace the old version in your project.

Note that any local customisations you have made to the theme files will be lost during this process.
  1. Download the latest release of the theme source code.

    Download from Github
  2. Extract the archive, rename the folder to blowfish and move it to the themes/ directory inside your Hugo project’s root folder. You will need to overwrite the existing directory to replace all the theme files.

  3. Rebuild your site and check everything works as expected.



Documentation - This article is part of a series.
Part 2: This Article
\ No newline at end of file diff --git a/public/docs/multi-author/featured.png b/public/docs/multi-author/featured.png new file mode 100644 index 00000000..b16c8a4b Binary files /dev/null and b/public/docs/multi-author/featured.png differ diff --git a/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_1200x0_resize_box_3.png b/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_1200x0_resize_box_3.png new file mode 100644 index 00000000..6d5f37eb Binary files /dev/null and b/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_1200x0_resize_box_3.png differ diff --git a/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_600x0_resize_box_3.png b/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_600x0_resize_box_3.png new file mode 100644 index 00000000..33ca0cf9 Binary files /dev/null and b/public/docs/multi-author/featured_hub711b3bcf9ec72021fe99f7bb1f650e4_637127_600x0_resize_box_3.png differ diff --git a/public/docs/multi-author/index.html b/public/docs/multi-author/index.html new file mode 100644 index 00000000..bf48ca80 --- /dev/null +++ b/public/docs/multi-author/index.html @@ -0,0 +1,112 @@ +Multiple Authors · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Multiple Authors

4 mins· +0 +· +0 +· + +· +
authors +config +docs
Table of Contents
Documentation - This article is part of a series.
Part 10: This Article

Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.

To keep everything backwards compatible, this feature only allows the definition of extra authors and does not change in any way the previous author functionality which is used via config files.

Create Authors +#

The first step to create new authors is to set up a new folder in ./data/authors. Then you can simply add new json files inside, one for each new author. The name of the file will be the key for that author when referencing it in your articles.

As an example, let’s create a file called nunocoracao.json within ./data/authors. The contents of the file should be similar to the ones below. name, image, bio, and social are the 4 parameters supported right for authors. They mimic the configurations available for the default author in the config files.

Note: the key in the social object will be used to fetch one of the theme’s icons, feel free to use any of the icons available in your setup.

{
+    "name": "Nuno Coração",
+    "image" : "img/nuno_avatar.jpg",
+    "bio": "Theme Creator",
+    "social": [
+        { "linkedin": "https://linkedin.com/in/nunocoracao" },
+        { "twitter": "https://twitter.com/nunocoracao" },
+        { "instagram": "https://instagram.com/nunocoracao" },
+        { "medium": "https://medium.com/@nunocoracao" },
+        { "github": "https://github.com/nunocoracao" },
+        { "goodreads": "http://goodreads.com/nunocoracao" },
+        { "keybase": "https://keybase.io/nunocoracao" },
+        { "reddit": "https://reddit.com/user/nunoheart" }
+    ]
+}
+

Reference Authors in Articles +#

Now that you created one author, the next step is to reference it in one or more articles. In the example below, we reference the author created in the previous step using its key.

This will render an extra author using the data provided in the json file. This feature does not change in any way the default author configured for the overall site, and therefore, you can control both separately. Using the showAuthor parameter, you can configure whether to show the default author, that is the normal use-case for a single author blog. The new authors front-matter parameter allows you to define authors specifically to an article, and they will be rendered independently of the configurations for the default site author.

---
+title: "Multiple Authors"
+date: 2020-08-10
+draft: false
+description: "Configure multiple authors for your articles."
+slug: "multi-author"
+tags: ["authors", "config", "docs"]
+showAuthor: true
+authors:
+  - "nunocoracao"
+showAuthorsBadges : false 
+---
+

In the example, which matches the markdown of the current page, both the default author and the new one will be displayed. You can scroll now to see the outcome.

Create the Authors Taxonomy +#

To get lists of articles for each of your authors you can configure the authors taxonomy, which opens up some more configurations that might be interesting. This is an optional step in the process that is not required to display the authors in your articles.

First step is to configure the authors taxonomy in your config.toml file, like in the example below. Even though tag and category are defined by default with Hugo, once you add a specific taxonomies section you need to add them again otherwise the site will not process them.

[taxonomies]
+  tag = "tags"
+  category = "categories"
+  author = "authors"
+

And that’s just about it. Now you will have pages that reference your authors and, for each, show the respective list of articles where they participate. You can also use the article.showAuthorsBadges on the config file, or showAuthorsBadges on each article to chose whether to display the authors taxonomy as badges in each post item. As an example, this doc is configured to not display authors but if you look at the sample referenced below you will see the authors displayed as badges.

Lastly, you can add more detail to each author page so that it displays a little bio, links, or whatever information fits your use-case. To achieve that, create a folder with the key to each author inside ./content/authors and inside each folder place a _index.md file. For the example above, we would end up with a .content/authors/nunocoracao/_index.md file. Inside, you can configure the actual name of the author and the contents of their page. Authors in this documentation website are configured like this, so you can have a look by playing around with the site.

---
+title: "Nuno Coração"
+---
+
+Nuno's awesome dummy bio.
+

Sample +#

This sample sample below shows an example where the default site author is turned off and the article has multiple authors.



Documentation - This article is part of a series.
Part 10: This Article
\ No newline at end of file diff --git a/public/docs/page/1/index.html b/public/docs/page/1/index.html new file mode 100644 index 00000000..ad3958a2 --- /dev/null +++ b/public/docs/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/docs/ \ No newline at end of file diff --git a/public/docs/partials/featured.png b/public/docs/partials/featured.png new file mode 100644 index 00000000..07e11310 Binary files /dev/null and b/public/docs/partials/featured.png differ diff --git a/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_1200x0_resize_box_3.png b/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_1200x0_resize_box_3.png new file mode 100644 index 00000000..bce65da0 Binary files /dev/null and b/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_1200x0_resize_box_3.png differ diff --git a/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_600x0_resize_box_3.png b/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_600x0_resize_box_3.png new file mode 100644 index 00000000..786da147 Binary files /dev/null and b/public/docs/partials/featured_hue41d16dad4a5698d84d57019e7c71ba2_674943_600x0_resize_box_3.png differ diff --git a/public/docs/partials/index.html b/public/docs/partials/index.html new file mode 100644 index 00000000..e301f32c --- /dev/null +++ b/public/docs/partials/index.html @@ -0,0 +1,106 @@ +Partials · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Partials

4 mins· +0 +· +0 +· + +· +
partials +analytics +privacy +comments +favicons +icon +docs
Table of Contents
Documentation - This article is part of a series.
Part 9: This Article

Analytics +#

Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy.

Fathom Analytics +#

To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.toml file. If you also use the custom domain feature of Fathom and would like to serve their script from your domain, you can also additionally provide the domain configuration value. If you don’t provide a domain value, the script will load directly from Fathom DNS.

# config/_default/params.toml
+
+[fathomAnalytics]
+  site = "ABC12345"
+  domain = "llama.yoursite.com"
+

Google Analytics +#

Google Analytics support is provided through the internal Hugo partial. Simply provide the googleAnalytics key in the config/_default/config.toml file and the script will be added automatically.

Both version 3 (analytics.js) and version 4 (gtag.js) are supported, based on the configuration value provided:

# config/_default/config.toml
+
+# version 3
+googleAnalytics = "UA-PROPERTY_ID"
+# version 4
+googleAnalytics = "G-MEASUREMENT_ID"
+

Custom analytics providers +#

If you wish to use a different analytics provider on your website you can also override the analytics partial and provide your own script. Simply create the file layouts/partials/analytics.html in your project and it will automatically include it in the <head> of the website.

Comments +#

To add comments to your articles, Blowfish includes support for a comments partial that is included at the base of each article page. Simply provide a layouts/partials/comments.html which contains the code required to display your chosen comments.

You can use either the built-in Hugo Disqus template, or provide your own custom code. Refer to the Hugo docs for further information.

Once the partial has been provided, finer control over where comments are displayed is then managed using the showComments parameter. This value can be set at the theme level in the params.toml config file, or on a per-article basis by including it in the front matter. The parameter defaults to false so it must be set to true in one of these locations in order for comments to be displayed.

Favicons +#

Blowfish provides a default set of blank favicons to get started but you can provide your own assets to override them. The easiest way to obtain new favicon assets is to generate them using a third-party provider like favicon.io.

Icon assets should be placed directly in the static/ folder of your website and named as per the listing below. If you use favicon.io, these will be the filenames that are automatically generated for you, but you can provide your own assets if you wish.

static/
+├─ android-chrome-192x192.png
+├─ android-chrome-512x512.png
+├─ apple-touch-icon.png
+├─ favicon-16x16.png
+├─ favicon-32x32.png
+├─ favicon.ico
+└─ site.webmanifest
+

Alternatively, you can also completely override the default favicon behaviour and provide your own favicon HTML tags and assets. Simply provide a layouts/partials/favicons.html file in your project and this will be injected into the site <head> in place of the default assets.

Icon +#

Similar to the icon shortcode, you can include icons in your own templates and partials by using Blowfish’s icon.html partial. The partial takes one parameter which is the name of the icon to be included.

Example:

  {{ partial "icon.html" "github" }}
+

Icons are populated using Hugo pipelines which makes them very flexible. Blowfish includes a number of built-in icons for social, links and other purposes. Check the icon samples page for a full list of supported icons.

Custom icons can be added by providing your own icon assets in the assets/icons/ directory of your project. The icon can then be referenced in the partial by using the SVG filename without the .svg extension.

Icons can also be used in article content by calling the icon shortcode.

Extensions +#

Blowfish also provides for a number of extension partials that allow for expanding upon base functionality.

Article link +#

If you wish to insert additional code after article links, create a layouts/partials/extend-article-link.html file. This is especially powerful when combined with the badge shortcode which can be used to highlight metadata for certain articles.

Head and Footer +#

The theme allows for inserting additional code directly into the <head> and <footer> sections of the template. These can be useful for providing scripts or other logic that isn’t part of the theme.

Simply create either layouts/partials/extend-head.html or layouts/partials/extend-footer.html and these will automatically be included in your website build. Both partials are injected as the last items in <head> and <footer> so they can be used to override theme defaults.



Documentation - This article is part of a series.
Part 9: This Article
\ No newline at end of file diff --git a/public/docs/series/featured.png b/public/docs/series/featured.png new file mode 100644 index 00000000..ac432f0a Binary files /dev/null and b/public/docs/series/featured.png differ diff --git a/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_1200x0_resize_box_3.png b/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_1200x0_resize_box_3.png new file mode 100644 index 00000000..17be2c64 Binary files /dev/null and b/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_1200x0_resize_box_3.png differ diff --git a/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_600x0_resize_box_3.png b/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_600x0_resize_box_3.png new file mode 100644 index 00000000..57245b0c Binary files /dev/null and b/public/docs/series/featured_hufd4b98ca40f354dfe40e970226ab02f1_1752805_600x0_resize_box_3.png differ diff --git a/public/docs/series/index.html b/public/docs/series/index.html new file mode 100644 index 00000000..418f5849 --- /dev/null +++ b/public/docs/series/index.html @@ -0,0 +1,66 @@ +Series · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Series

2 mins· +0 +· +0 +· + +· +
series +docs
Table of Contents
Documentation - This article is part of a series.
Part 11: This Article

Blowfish provides a feature to group a set of articles together under a “series”. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them. You can see an example of this above.

Create Taxonomy +#

The first step to enable series is to create the series taxonomy. For doing this just add the series taxonomy to your taxonomy list in the config.toml.

[taxonomies]
+  tag = "tags"
+  category = "categories"
+  author = "authors"
+  series = "series"
+

Mark Articles +#

Then you just need to mark each article using the series parameter and the series_order. The series parameter will be the id and name of the series you are placing the article into (even though the variable is an array we recommend keeping each article to a single series.). And the series_order defines the order of that article within the series. In the example below the article is number 11 in the Documentation series.

series: ["Documentation"]
+series_order: 11
+

Series Behavior +#

Marking an article as part of a series will automatically display the series module as you see in this page for example. You can choose whether that module starts opened or not using the article.seriesOpened global variable in params.toml or the front-matter parameter seriesOpened to specify an override at the article level.



Documentation - This article is part of a series.
Part 11: This Article
\ No newline at end of file diff --git a/public/docs/shortcodes/abstract.jpg b/public/docs/shortcodes/abstract.jpg new file mode 100644 index 00000000..134ced3f Binary files /dev/null and b/public/docs/shortcodes/abstract.jpg differ diff --git a/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1024x0_resize_q75_box.jpg b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1024x0_resize_q75_box.jpg new file mode 100644 index 00000000..e633fd25 Binary files /dev/null and b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1024x0_resize_q75_box.jpg differ diff --git a/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1320x0_resize_q75_box.jpg b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1320x0_resize_q75_box.jpg new file mode 100644 index 00000000..c30f6695 Binary files /dev/null and b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_1320x0_resize_q75_box.jpg differ diff --git a/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_330x0_resize_q75_box.jpg b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_330x0_resize_q75_box.jpg new file mode 100644 index 00000000..088bfc8c Binary files /dev/null and b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_330x0_resize_q75_box.jpg differ diff --git a/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_660x0_resize_q75_box.jpg b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_660x0_resize_q75_box.jpg new file mode 100644 index 00000000..3fe68641 Binary files /dev/null and b/public/docs/shortcodes/abstract_hu684c0a32e4d0f58583128be29b348bb9_40710_660x0_resize_q75_box.jpg differ diff --git a/public/docs/shortcodes/featured.png b/public/docs/shortcodes/featured.png new file mode 100644 index 00000000..1aa66a11 Binary files /dev/null and b/public/docs/shortcodes/featured.png differ diff --git a/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_1200x0_resize_box_3.png b/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_1200x0_resize_box_3.png new file mode 100644 index 00000000..099535b1 Binary files /dev/null and b/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_1200x0_resize_box_3.png differ diff --git a/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_600x0_resize_box_3.png b/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_600x0_resize_box_3.png new file mode 100644 index 00000000..87087bca Binary files /dev/null and b/public/docs/shortcodes/featured_huccf4470440ae6b15644c014dfa031fdc_4868633_600x0_resize_box_3.png differ diff --git a/public/docs/shortcodes/gallery/01.jpg b/public/docs/shortcodes/gallery/01.jpg new file mode 100644 index 00000000..c10c454e Binary files /dev/null and b/public/docs/shortcodes/gallery/01.jpg differ diff --git a/public/docs/shortcodes/gallery/02.jpg b/public/docs/shortcodes/gallery/02.jpg new file mode 100644 index 00000000..292b51ec Binary files /dev/null and b/public/docs/shortcodes/gallery/02.jpg differ diff --git a/public/docs/shortcodes/gallery/03.jpg b/public/docs/shortcodes/gallery/03.jpg new file mode 100644 index 00000000..80b72d8a Binary files /dev/null and b/public/docs/shortcodes/gallery/03.jpg differ diff --git a/public/docs/shortcodes/gallery/04.jpg b/public/docs/shortcodes/gallery/04.jpg new file mode 100644 index 00000000..72d1eceb Binary files /dev/null and b/public/docs/shortcodes/gallery/04.jpg differ diff --git a/public/docs/shortcodes/gallery/05.jpg b/public/docs/shortcodes/gallery/05.jpg new file mode 100644 index 00000000..80bb5989 Binary files /dev/null and b/public/docs/shortcodes/gallery/05.jpg differ diff --git a/public/docs/shortcodes/gallery/06.jpg b/public/docs/shortcodes/gallery/06.jpg new file mode 100644 index 00000000..6352a781 Binary files /dev/null and b/public/docs/shortcodes/gallery/06.jpg differ diff --git a/public/docs/shortcodes/gallery/07.jpg b/public/docs/shortcodes/gallery/07.jpg new file mode 100644 index 00000000..8e442f57 Binary files /dev/null and b/public/docs/shortcodes/gallery/07.jpg differ diff --git a/public/docs/shortcodes/index.html b/public/docs/shortcodes/index.html new file mode 100644 index 00000000..d1f8890d --- /dev/null +++ b/public/docs/shortcodes/index.html @@ -0,0 +1,314 @@ +Shortcodes · Blowfish + + + + + + + + + + + +
Skip to main content
  1. Documentation/

Shortcodes

12 mins· +0 +· +0 +· + +· +
shortcodes +mermaid +icon +lead +docs
Table of Contents
Documentation - This article is part of a series.
Part 8: This Article

In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality.

Alert +#

alert outputs its contents as a stylised message box within your article. It’s useful for drawing attention to important information that you don’t want the reader to miss.

ParameterDescription
iconOptional. the icon to display on the left side.
Default: exclaimation triangle icon (Check out the icon shortcode for more details on using icons.)
iconColorOptional. the color for the icon in basic CSS style.
Can be either hex values (#FFFFFF) or color names (white)
By default chosen based on the current color theme .
cardColorOptional. the color for the card background in basic CSS style.
Can be either hex values (#FFFFFF) or color names (white)
By default chosen based on the current color theme .
textColorOptional. the color for the text in basic CSS style.
Can be either hex values (#FFFFFF) or color names (white)
By default chosen based on the current color theme .

The input is written in Markdown so you can format it however you please.

Example 1: No params

{{< alert >}}
+**Warning!** This action is destructive!
+{{< /alert >}}
+
Warning! This action is destructive!

Example 2: Unnamed param

{{< alert "twitter" >}}
+Don't forget to [follow me](https://twitter.com/nunocoracao) on Twitter.
+{{< /alert >}}
+
Don’t forget to follow me on Twitter.

Example 3: Named params

{{< alert icon="fire" cardColor="#e63946" iconColor="#1d3557" textColor="#f1faee" >}}
+This is an error!
+{{< /alert >}}
+
This is an error!




Article +#

Article will embed a single article into a markdown file. The link to the file should be the .RelPermalink of the file to be embedded. Note that the shortcode will not display anything if it’s referencing it’s parent. Note: if you are running your website in a subfolder like Blowfish (i.e. /blowfish/) please include that path in the link.

ParameterDescription
linkRequired. the .RelPermalink to the target article.

Example:

{{< article link="/docs/welcome/" >}}
+




Badge +#

badge outputs a styled badge component which is useful for displaying metadata.

Example:

{{< badge >}}
+New article!
+{{< /badge >}}
+
New article!




Button +#

button outputs a styled button component which can be used to highlight a primary action. It has two optional variables href and target which can be used to specify the URL and target of the link.

Example:

{{< button href="#button" target="_self" >}}
+Call to action
+{{< /button >}}
+
Call to action




Carousel +#

carousel is used to showcase multiple images in an interactive and visually appealing way. This allows a user to slide through multiple images while only taking up the vertical space of a single one. All images are displayed using the full width of the parent component and using one of the predefined aspect ratios of 16:9, 21:9 or 32:9.

ParameterDescription
imagesRequired. A regex string to match image names.
aspectRatioOptional. The aspect ratio for the carousel. Either 16-9, 21-9 or 32-9. It is set to 16-9 by default.
intervalOptional. The interval for the auto-scrooling, specified in milliseconds. Defaults to 2000 (2s)

Example 1: 16:9 aspect ratio and verbose list of images

{{< carousel images="{gallery/03.jpg, gallery/01.jpg, gallery/02.jpg, gallery/04.jpg}" >}}
+

Example 2: 21:9 aspect ratio and regex-ed list of images

{{< carousel images="gallery/*" aspectRatio="21-9" interval="2500" >}}
+




Chart +#

chart uses the Chart.js library to embed charts into articles using simple structured data. It supports a number of different chart styles and everything can be configured from within the shortcode. Simply provide the chart parameters between the shortcode tags and Chart.js will do the rest.

Refer to the official Chart.js docs for details on syntax and supported chart types.

Example:

{{< chart >}}
+type: 'bar',
+data: {
+  labels: ['Tomato', 'Blueberry', 'Banana', 'Lime', 'Orange'],
+  datasets: [{
+    label: '# of votes',
+    data: [12, 19, 3, 5, 3],
+  }]
+}
+{{< /chart >}}
+
+

You can see some additional Chart.js examples on the charts samples page.




Figure +#

Blowfish includes a figure shortcode for adding images to content. The shortcode replaces the base Hugo functionality in order to provide additional performance benefits.

When a provided image is a page resource, it will be optimised using Hugo Pipes and scaled in order to provide images appropriate to different device resolutions. If a static asset or URL to an external image is provided, it will be included as-is without any image processing by Hugo.

The figure shortcode accepts six parameters:

ParameterDescription
srcRequired. The local path/filename or URL of the image. When providing a path and filename, the theme will attempt to locate the image using the following lookup order: Firstly, as a page resource bundled with the page; then an asset in the assets/ directory; then finally, a static image in the static/ directory.
altAlternative text description for the image.
captionMarkdown for the image caption, which will be displayed below the image.
classAdditional CSS classes to apply to the image.
hrefURL that the image should be linked to.
defaultSpecial parameter to revert to default Hugo figure behaviour. Simply provide default=true and then use normal Hugo shortcode syntax.

Blowfish also supports automatic conversion of images included using standard Markdown syntax. Simply use the following format and the theme will handle the rest:

![Alt text](image.jpg "Image caption")
+

Example:

{{< figure
+    src="abstract.jpg"
+    alt="Abstract purple artwork"
+    caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)"
+    >}}
+
+<!-- OR -->
+
+![Abstract purple artwork](abstract.jpg "Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)")
+
Abstract purple artwork
Photo by Jr Korpa on Unsplash




Gallery +#

gallery allows you to showcase multiple images at once, in a responsive manner with more varied and interesting layouts.

In order to add images to the gallery, use img tags for each image and add class="grid-wXX" in order for the gallery to be able to identify the column width for each image. The widths available by default start at 10% and go all the way to 100% in 5% increments. For example, to set the width to 65%, set the class to grid-w65. Additionally, widths for 33% and 66% are also available in order to build galleries with 3 cols. You can also leverage tailwind’s responsive indicators to have a reponsive grid.

Example 1: normal gallery

{{< gallery >}}
+  <img src="gallery/01.jpg" class="grid-w33" />
+  <img src="gallery/02.jpg" class="grid-w33" />
+  <img src="gallery/03.jpg" class="grid-w33" />
+  <img src="gallery/04.jpg" class="grid-w33" />
+  <img src="gallery/05.jpg" class="grid-w33" />
+  <img src="gallery/06.jpg" class="grid-w33" />
+  <img src="gallery/07.jpg" class="grid-w33" />
+{{< /gallery >}}
+




Example 2: responsive gallery

{{< gallery >}}
+  <img src="gallery/01.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/02.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/03.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/04.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/05.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/06.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+  <img src="gallery/07.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
+{{< /gallery >}}
+




GitHub Card +#

github allows you to quickly link a github repository, all while showing and updating in realtime stats about it, such as the number of stars and forks it has.

ParameterDescription
repo[String] github repo in the format of username/repo

Example 1:

{{< github repo="nunocoracao/blowfish" >}}
+
nunocoracao/blowfish

Personal Website & Blog Theme for Hugo

HTML
367
119




GitLab Card +#

gitlab allows you to quickly link a GitLab Project (GitLab’s jargon for repo). +It displays realtime stats about it, such as the number of stars and forks it has. +Unlike github it can’t display the main programming language of a project. +Finaly custom GitLab instace URL can be provided, as long as the api/v4/projects/ endpoint is available, making this shortcode compatible with most self-hosted / entreprise deployments.

ParameterDescription
projectID[String] gitlab numeric ProjectID
baseURL[String] optional gitlab instace URL, default is https://gitlab.com/

Example 1:

{{< gitlab projectID="278964" >}}
+
GitLab.org / GitLab

GitLab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a container, or on a cloud provider.

4349
8216




Icon +#

icon outputs an SVG icon and takes the icon name as its only parameter. The icon is scaled to match the current text size.

Example:

{{< icon "github" >}}
+

Output: +

Icons are populated using Hugo pipelines which makes them very flexible. Blowfish includes a number of built-in icons for social, links and other purposes. Check the icon samples page for a full list of supported icons.

Custom icons can be added by providing your own icon assets in the assets/icons/ directory of your project. The icon can then be referenced in the shortcode by using the SVG filename without the .svg extension.

Icons can also be used in partials by calling the icon partial.




Katex +#

The katex shortcode can be used to add mathematical expressions to article content using the KaTeX package. Refer to the online reference of supported TeX functions for the available syntax.

To include mathematical expressions in an article, simply place the shortcode anywhere with the content. It only needs to be included once per article and KaTeX will automatically render any markup on that page. Both inline and block notation are supported.

Inline notation can be generated by wrapping the expression in \\( and \\) delimiters. Alternatively, block notation can be generated using $$ delimiters.

Example:

{{< katex >}}
+\\(f(a,b,c) = (a^2+b^2+c^2)^3\\)
+

\(f(a,b,c) = (a^2+b^2+c^2)^3\)

Check out the mathematical notation samples page for more examples.




Lead +#

lead is used to bring emphasis to the start of an article. It can be used to style an introduction, or to call out an important piece of information. Simply wrap any Markdown content in the lead shortcode.

Example:

{{< lead >}}
+When life gives you lemons, make lemonade.
+{{< /lead >}}
+
When life gives you lemons, make lemonade.




List +#

List will display a list of recent articles. This shortcode requires a limit value to constraint the list. Additionally, it supports a where and a value in order to filter articles by their parameters. Note that this shortcode will not display its parent page but it will count for the limit value.

ParameterDescription
limitRequired. the number of recent articles to display.
titleOptional title for the list, default is Recent
whereThe variable to be used for the query of articles e.g. Type
valueThe value that will need to match the parameter defined in where for the query of articles e.g. for where == Type a valid value could be sample
The where and value values are used in the following query where .Site.RegularPages $where $value in the code of the shortcode. Check Hugo docs to learn more about which parameters are available to use.

Example #1:

{{< list limit=2 >}}
+

Recent

Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
Thumbnails
1 min· +0 +· +0 +
thumbnail +sample

Example #2:

{{< list title="Samples" limit=5 where="Type" value="sample" >}}
+

Samples

Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
Thumbnails
1 min· +0 +· +0 +
thumbnail +sample
Icons
1 min· +0 +· +0 +
icons +sample +shortcodes
Markdown
3 mins· +0 +· +0 +
markdown +css +html +sample
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo




Mermaid +#

mermaid allows you to draw detailed diagrams and visualisations using text. It uses Mermaid under the hood and supports a wide variety of diagrams, charts and other output formats.

Simply write your Mermaid syntax within the mermaid shortcode and let the plugin do the rest.

Refer to the official Mermaid docs for details on syntax and supported diagram types.

Example:

{{< mermaid >}}
+graph LR;
+A[Lemons]-->B[Lemonade];
+B-->C[Profit]
+{{< /mermaid >}}
+
graph LR; +A[Lemons]-->B[Lemonade]; +B-->C[Profit]

You can see some additional Mermaid examples on the diagrams and flowcharts samples page.




Swatches +#

swatches outputs a set of up to three different colors to showcase color elements like a color palette. This shortcode takes the HEX codes of each color and creates the visual elements for each.

Example

{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
+

Output

+ +




Timeline +#

The timeline creates a visual timeline that can be used in different use-cases, e.g. professional experience, a project’s achievements, etc. The timeline shortcode relies on the timelineItem sub-shortcode to define each item within the main timeline. Each item can have the following properties.

ParameterDescription
iconthe icon to be used in the timeline visuals.
headerheader for each entry
badgetext to place within the top righ badge
subheaderentry’s subheader

Example:

{{< timeline >}}
+
+{{< timelineItem icon="github" header="header" badge="badge test" subheader="subheader" >}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non magna ex. Donec sollicitudin ut lorem quis lobortis. Nam ac ipsum libero. Sed a ex eget ipsum tincidunt venenatis quis sed nisl. Pellentesque sed urna vel odio consequat tincidunt id ut purus. Nam sollicitudin est sed dui interdum rhoncus. 
+{{< /timelineItem >}}
+
+
+{{< timelineItem icon="code" header="Another Awesome Header" badge="date - present" subheader="Awesome Subheader" >}}
+With html code
+<ul>
+  <li>Coffee</li>
+  <li>Tea</li>
+  <li>Milk</li>
+</ul>
+{{< /timelineItem >}}
+
+{{< timelineItem icon="star" header="Shortcodes" badge="AWESOME" >}}
+With other shortcodes
+{{< gallery >}}
+  <img src="gallery/01.jpg" class="grid-w33" />
+  <img src="gallery/02.jpg" class="grid-w33" />
+  <img src="gallery/03.jpg" class="grid-w33" />
+  <img src="gallery/04.jpg" class="grid-w33" />
+  <img src="gallery/05.jpg" class="grid-w33" />
+  <img src="gallery/06.jpg" class="grid-w33" />
+  <img src="gallery/07.jpg" class="grid-w33" />
+{{< /gallery >}}
+{{< /timelineItem >}}
+
+{{< /timeline >}}
+
  1. header

    badge test

    subheader

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non magna ex. Donec sollicitudin ut lorem quis lobortis. Nam ac ipsum libero. Sed a ex eget ipsum tincidunt venenatis quis sed nisl. Pellentesque sed urna vel odio consequat tincidunt id ut purus. Nam sollicitudin est sed dui interdum rhoncus.

  2. Another Awesome Header

    date - present

    Awesome Subheader

    With html code

    • Coffee
    • Tea
    • Milk

  3. Shortcodes

    AWESOME

    With other shortcodes




TypeIt +#

TypeIt is the most versatile JavaScript tool for creating typewriter effects on the planet. With a straightforward configuration, it allows you to type single or multiple strings that break lines, delete & replace each other, and it even handles strings that contain complex HTML.

Blowfish implements a sub-set of TypeIt features using a shortcode. Write your text within the typeit shortcode and use the following parameters to configure the behavior you want.

ParameterDescription
tag[String] html tag that will be used to render the strings.
classList[String] List of css classes to apply to the html element.
initialString[String] Initial string that will appear written and will be replaced.
speed[number] Typing speed, measured in milliseconds between each step.
lifeLike[boolean] Makes the typing pace irregular, as if a real person is doing it.
startDelay[number] The amount of time before the plugin begins typing after being initialized.
breakLines[boolean] Whether multiple strings are printed on top of each other (true), or if they’re deleted and replaced by each other (false).
waitUntilVisible[boolean] Determines if the instance will begin when loaded or only when the target element becomes visible in the viewport. The default is true
loop[boolean] Whether your strings will continuously loop after completing

Example 1:

{{< typeit >}}
+Lorem ipsum dolor sit amet 
+{{< /typeit >}}
+

Example 2:

{{< typeit 
+  tag=h1
+  lifeLike=true
+>}}
+Lorem ipsum dolor sit amet, 
+consectetur adipiscing elit. 
+{{< /typeit >}}
+

Example 3:

{{< typeit 
+  tag=h3
+  speed=50
+  breakLines=false
+  loop=true
+>}}
+Lorem ipsum dolor sit amet, 
+consectetur adipiscing elit. 
+{{< /typeit >}}
+



Documentation - This article is part of a series.
Part 8: This Article
\ No newline at end of file diff --git a/public/docs/thumbnails/featured.png b/public/docs/thumbnails/featured.png new file mode 100644 index 00000000..10488bb0 Binary files /dev/null and b/public/docs/thumbnails/featured.png differ diff --git a/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_1200x0_resize_box_3.png b/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_1200x0_resize_box_3.png new file mode 100644 index 00000000..470f1e15 Binary files /dev/null and b/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_1200x0_resize_box_3.png differ diff --git a/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_600x0_resize_box_3.png b/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_600x0_resize_box_3.png new file mode 100644 index 00000000..5edbc380 Binary files /dev/null and b/public/docs/thumbnails/featured_hu93f196360c2371d7e9554814ee21804a_5014315_600x0_resize_box_3.png differ diff --git a/public/docs/thumbnails/index.html b/public/docs/thumbnails/index.html new file mode 100644 index 00000000..6dc6db82 --- /dev/null +++ b/public/docs/thumbnails/index.html @@ -0,0 +1,84 @@ +Thumbnails · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Thumbnails

2 mins· +0 +· +0 +· + +· +
thumbnail +config +docs
Table of Contents
Documentation - This article is part of a series.
Part 6: This Article

Thumbnails +#

Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article main directory as shown in the example below.

content
+└── awesome_article
+    ├── index.md
+    └── featured.png
+

This will tell Blowfish that this article has a feature image that can be used both as a thumbnail across your website as well as for oEmbed cards across social platforms.

Folder Strucutre +#

If you are using single .md files for your articles and have a file structure similar to this:

content
+└── awesome_article.md
+

You need to change it from a single markdown file into a folder. Create a directory with the same name of the article, inside create a index.md file. You’ll get a structure similar to what’s below.

content
+└── awesome_article
+    └── featured.png
+

The you just need to add an image like explain earlier. If you want to see a sample of this you can consult this sample.

Hero Images +#

Thumbnails will be used by default as hero images withing each article. Use the global article.showHero or the front-matter parameter showHero to control this feature across the entire site or for each specific post. If you want to override the style of the hero image you can create a file called hero.html in ./layouts/partials/ that will override the original partial from the theme.



Documentation - This article is part of a series.
Part 6: This Article
\ No newline at end of file diff --git a/public/docs/welcome/featured.png b/public/docs/welcome/featured.png new file mode 100644 index 00000000..3e28eeb5 Binary files /dev/null and b/public/docs/welcome/featured.png differ diff --git a/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_1200x0_resize_box_3.png b/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_1200x0_resize_box_3.png new file mode 100644 index 00000000..9feaf6c7 Binary files /dev/null and b/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_1200x0_resize_box_3.png differ diff --git a/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_600x0_resize_box_3.png b/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_600x0_resize_box_3.png new file mode 100644 index 00000000..e06e38e0 Binary files /dev/null and b/public/docs/welcome/featured_hu6c1a40751b0ecb38722eba3ab5726016_6942334_600x0_resize_box_3.png differ diff --git a/public/docs/welcome/image-resizing.png b/public/docs/welcome/image-resizing.png new file mode 100644 index 00000000..396f2fae Binary files /dev/null and b/public/docs/welcome/image-resizing.png differ diff --git a/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1024x0_resize_box_3.png b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1024x0_resize_box_3.png new file mode 100644 index 00000000..151fc4ea Binary files /dev/null and b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1024x0_resize_box_3.png differ diff --git a/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1320x0_resize_box_3.png b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1320x0_resize_box_3.png new file mode 100644 index 00000000..291a8f73 Binary files /dev/null and b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_1320x0_resize_box_3.png differ diff --git a/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_330x0_resize_box_3.png b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_330x0_resize_box_3.png new file mode 100644 index 00000000..54dd49a3 Binary files /dev/null and b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_330x0_resize_box_3.png differ diff --git a/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_660x0_resize_box_3.png b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_660x0_resize_box_3.png new file mode 100644 index 00000000..ed080b1d Binary files /dev/null and b/public/docs/welcome/image-resizing_hudc3a1812e7aa4d065174f956d05e334c_253342_660x0_resize_box_3.png differ diff --git a/public/docs/welcome/index.html b/public/docs/welcome/index.html new file mode 100644 index 00000000..de565f49 --- /dev/null +++ b/public/docs/welcome/index.html @@ -0,0 +1,81 @@ +Welcome to Blowfish · Blowfish + + + + + +
Skip to main content
  1. Documentation/

Welcome to Blowfish

3 mins· +0 +· +0 +· + +· +
new +docs
Table of Contents
Documentation - This article is part of a series.
Part 1: This Article
Blowfish is packed with tons of features.

The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.

Tailwind CSS 3.0 +#

Tailwind CSS is at the heart of Blowfish and this release contains the very latest Tailwind CSS version 3. It brings with it performance optimisations and support for some great new CSS features.

Multilingual support +#

A highly requested feature, Blowfish is now multilingual! If you publish your content in multiple languages, the site will be built with all the translations available.

🇬🇧 🇩🇪 🇫🇷 🇪🇸 🇨🇳 🇧🇷 🇹🇷 🇧🇩

Thanks to submissions from the community, Blowfish has already been translated into eight languages with more to be added over time. By the way, pull requests for new languages are always welcome!

RTL language support +#

One of the benefits of the new Tailwind and Multilingual features is the ability to add RTL language support. When enabled, the entire site will reflow content from right-to-left. Every element in the theme has been restyled to ensure it looks great in this mode which aids authors who wish to generate content in RTL languages.

RTL is controlled on a per-language basis so you can mix and match both RTL and LTR content in your projects and the theme will respond accordingly.

Automatic image resizing +#

A big change in Blowfish 2.0 is the addition of automatic image resizing. Using the power of Hugo Pipes, images in Markdown content are now automatically scaled to different output sizes. These are then presented using HTML srcset attributes enabling optimised file sizes to be served to your site visitors.

<!-- Markdown: ![My image](image.jpg) -->
+<img
+  srcset="
+    /image_320x0_resize_q75_box.jpg 320w,
+    /image_635x0_resize_q75_box.jpg 635w,
+    /image_1024x0_resize_q75_box.jpg 1024w,
+    /image_1270x0_resize_q75_box.jpg 2x"
+  src="/image_635x0_resize_q75_box.jpg"
+  alt="My image"
+/>
+

Best of all there’s nothing you need to change! Simply insert standard Markdown image syntax and let the theme do the rest. If you want a little more control, the figure shortcode has been completely rewritten to provide the same resizing benefits.

Site search +#

Powered by Fuse.js, site search allows visitors to quickly and easily find your content. All searches are performed client-side meaning there’s nothing to configure on the server and queries are performed super fast. Simply enable the feature in your site configuration and you’re all set. Oh, and it also supports full keyboard navigation!

Tables of contents +#

A highly requested feature, Blowfish now supports tables of contents on article pages. You can see it in action on this page. The contents are fully responsive and will adjust to take advantage of the space available at different screen resolutions.

Available on a global or per article basis, the table of contents can be fully customised using standard Hugo configuration values, allowing you to adjust the behaviour to suit your project.

Accessibility improvements +#

From adding ARIA descriptions to more items or simply adjusting the contrast of certain text elements, this release is the most accessible yet.

Version 2 also introduces “skip to content” and “scroll to top” links that enable quick navigation. There’s also keyboard shortcuts for enabling items like search without reaching for the mouse.

The new image resizing features also provide full control over alt and title elements enabling an accessible experience for all visitors.

A whole lot more +#

There’s countless other features to explore. From being able to display taxonomies on articles and list pages, to using the new headline author parameter to customise your homepage. There’s also improved JSON-LD strucured data which further optimises SEO performance.



Documentation - This article is part of a series.
Part 1: This Article
\ No newline at end of file diff --git a/public/docs/welcome/lighthouse.html b/public/docs/welcome/lighthouse.html new file mode 100644 index 00000000..228de6a7 --- /dev/null +++ b/public/docs/welcome/lighthouse.html @@ -0,0 +1,11700 @@ + + + + + Lighthouse Report + + + + + + +
+ + +
+ + + + http://localhost:8008/blowfish/samples/emoji/ + + +
+
+ + +
+ + +
+
+
+
+
+
+
+ + +
+ + + + +
+
100
+ +
Performance
+
+ + + +
+ + + + +
+
100
+ +
Accessibility
+
+ + + +
+ + + + +
+
100
+ +
Best Practices
+
+ + + +
+ + + + +
+
100
+ +
SEO
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Progressive Web App
+
+
+
+ 0–49 + 50–89 + 90–100 +
+
+
+ +
+
+ +
Metrics
+ + +
+
+ First Contentful Paint +
1.4 s
+
First Contentful Paint marks the time at which the first text or image is painted. Learn more.
+
+
+
+ Speed Index +
1.4 s
+
Speed Index shows how quickly the contents of a page are visibly populated. Learn more.
+
+
+
+ Largest Contentful Paint +
1.5 s
+
Largest Contentful Paint marks the time at which the largest text or image is painted. Learn more
+
+
+
+ Time to Interactive +
1.4 s
+
Time to interactive is the amount of time it takes for the page to become fully interactive. Learn more.
+
+
+
+ Total Blocking Time +
10 ms
+
Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more.
+
+
+
+ Cumulative Layout Shift +
0
+
Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more.
+
+
Values are estimated and may vary. The performance score is calculated directly from these metrics.See calculator.
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Show audits relevant to:
OpportunitiesThese suggestions can help your page load faster. They don't directly affect the Performance score.
+
Opportunity
+
Estimated Savings
+
+
+ +
+
+
+ +
Reduce unused CSS
+
+
+
+
+
+
0.29 s
+
+ + + + +
+
+
+
+
+
Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
39.7 KiB
27.9 KiB
+
+
+ +
+
+
+ +
Reduce unused JavaScript
+
+
+
+
+
+
0.15 s
+
+ + + + +
+
+
+
+
+
Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. Learn more.LCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
27.2 KiB
21.4 KiB
+
DiagnosticsMore information about the performance of your application. These numbers don't directly affect the Performance score.
+
+ +
+ + + Avoid chaining critical requests + 1 chain found + +
+ + + + +
+
+
+
The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. Learn more.FCPLCP
+
+
+ +
+
+ Maximum critical path latency: 20 ms +
+
+
+
Initial Navigation
+ + + +
+ + + + + +
…samples/emoji
(localhost)
+
+ +
+ + + + + + - 0 ms, 39.71 KiB +
+
+
+
+
+ +
+ + + Keep request counts low and transfer sizes small + 4 requests • 92 KiB + +
+ + + + +
+
+
+
To set budgets for the quantity and size of page resources, add a budget.json file. Learn more.
+
+
Resource Type
Requests
Transfer Size
Total
4
91.7 KiB
Stylesheet
1
39.7 KiB
Script
1
27.2 KiB
Document
1
17.0 KiB
Image
1
7.7 KiB
Media
0
0.0 KiB
Font
0
0.0 KiB
Other
0
0.0 KiB
Third-party
0
0.0 KiB
+
+
+ +
+ + + Largest Contentful Paint element + 1 element found + +
+ + + + +
+
+
+
This is the largest contentful element painted within the viewport. Learn MoreLCP
+
+
Element
Note: The rendering of these glyphs depends on the browser and the platform. To…
<span class="dark:text-neutral-300">
+
+
+ +
+ + + Avoid long main-thread tasks + 2 long tasks found + +
+ + + + +
+
+
+
Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. Learn moreTBT
+
+ + +
+ +
+
URL
Start Time
Duration
…samples/emoji
(localhost)
785 ms
584 ms
…samples/emoji
(localhost)
1,369 ms
61 ms
+
+
+ +
+ + + Avoid non-composited animations + 18 animated elements found + +
+ + + + +
+
+
+
Animations which are not composited can be janky and increase CLS. Learn moreCLS
+
+
Element
Name
↓Skip to main content
<a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 dark:bg-neutr…" href="#main-content">
Unsupported CSS Property: background-color
background-color
Unsupported CSS Property: color
color
Blowfish
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" rel="me" href="/blowfish/">
Unsupported CSS Property: color
color
Docs
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/blowfish/docs/">
Unsupported CSS Property: color
color
Samples
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/blowfish/samples/">
Unsupported CSS Property: color
color
Users
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/blowfish/users/">
Unsupported CSS Property: color
color
GitHub
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="https://github.com/nunocoracao/blowfish">
Unsupported CSS Property: color
color
button
<button id="search-button" class="text-base hover:text-primary-600 dark:hover:text-primary-400">
Unsupported CSS Property: color
color
Content Samples
<a class="hover:underline hover:decoration-neutral-300 dark:underline-neutral-600" href="/blowfish/samples/">
Unsupported CSS Property: color
color
site configuration
<a href="http://localhost:8008/blowfish/docs/configuration/#site-configuration">
Unsupported CSS Property: color
color
Unsupported CSS Property: text-decoration-color
text-decoration-color
Emoji cheat sheet
<a href="http://www.emoji-cheat-sheet.com/">
Unsupported CSS Property: color
color
Unsupported CSS Property: text-decoration-color
text-decoration-color
Twitter
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://twitter.com/" target="_blank" aria-label="Twitter" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Facebook
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://facebook.com/" target="_blank" aria-label="Facebook" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Linkedin
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://linkedin.com/" target="_blank" aria-label="Linkedin" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Youtube
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://youtube.com/" target="_blank" aria-label="Youtube" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
← +Diagrams and Flowcharts +6 March 2019
<a class="flex" href="/blowfish/samples/diagrams-flowcharts/">
Unsupported CSS Property: color
color
button
<button id="close-search-button" class="flex items-center justify-center w-8 h-8 text-neutral-700 dark:text-neutra…">
Unsupported CSS Property: color
color
Hugo
<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">
Unsupported CSS Property: color
color
Blowfish
<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://git.io/hugo-blowfish" target="_blank" rel="noopener noreferrer">
Unsupported CSS Property: color
color
+
+ +
+
+ Passed audits + (28) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Eliminate render-blocking resources + Potential savings of 0 ms + +
+ + + + +
+
+
+
Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
39.7 KiB
480 ms
+
+
+ +
+ + + Properly size images + + +
+ + + + +
+
+
+
Serve images that are appropriately-sized to save cellular data and improve load time. Learn more.
+
+
+
+
+ +
+ + + Defer offscreen images + + +
+ + + + +
+
+
+
Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. Learn more.
+
+
+
+
+ +
+ + + Minify CSS + + +
+ + + + +
+
+
+
Minifying CSS files can reduce network payload sizes. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Minify JavaScript + + +
+ + + + +
+
+
+
Minifying JavaScript files can reduce payload sizes and script parse time. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Efficiently encode images + + +
+ + + + +
+
+
+
Optimized images load faster and consume less cellular data. Learn more.
+
+
+
+
+ +
+ + + Serve images in next-gen formats + + +
+ + + + +
+
+
+
Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. Learn more.
+
+
+
+
+ +
+ + + Preconnect to required origins + + +
+ + + + +
+
+
+
Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Initial server response time was short + Root document took 0 ms + +
+ + + + +
+
+
+
Keep the server response time for the main document short because all other requests depend on it. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Time Spent
…samples/emoji
(localhost)
0 ms
+
+
+ +
+ + + Avoid multiple page redirects + + +
+ + + + +
+
+
+
Redirects introduce additional delays before the page can be loaded. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Preload key requests + + +
+ + + + +
+
+
+
Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Use HTTP/2 + + +
+ + + + +
+
+
+
HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. Learn more.
+
+
+
+
+ +
+ + + Use video formats for animated content + + +
+ + + + +
+
+
+
Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. Learn moreLCP
+
+
+
+
+ +
+ + + Remove duplicate modules in JavaScript bundles + + +
+ + + + +
+
+
+
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. TBT
+
+
+
+
+ +
+ + + Avoid serving legacy JavaScript to modern browsers + Potential savings of 0 KiB + +
+ + + + +
+
+
+
Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. Learn MoreTBT
+
+ + +
+ +
+
URL
Potential Savings
0.2 KiB
@babel/plugin-transform-classes
+
+
+ +
+ + + Preload Largest Contentful Paint image + + +
+ + + + +
+
+
+
Preload the image used by the LCP element in order to improve your LCP time. Learn more.LCP
+
+
+
+
+ +
+ + + Avoids enormous network payloads + Total size was 92 KiB + +
+ + + + +
+
+
+
Large network payloads cost users real money and are highly correlated with long load times. Learn more.LCP
+
+ + +
+ +
+
URL
Transfer Size
39.7 KiB
27.2 KiB
…samples/emoji
(localhost)
17.0 KiB
7.7 KiB
+
+
+ +
+ + + Avoids an excessive DOM size + 120 elements + +
+ + + + +
+
+
+
A large DOM will increase memory usage, cause longer style calculations, and produce costly layout reflows. Learn more.TBT
+
+
Statistic
Element
Value
Total DOM Elements
120
Maximum DOM Depth
path
<path fill="currentcolor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-2…">
12
Maximum Child Elements
body
<body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 bg-neutral text-neutr…">
5
+
+
+ +
+ + + User Timing marks and measures + + +
+ + + + +
+
+
+
Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. Learn more.
+
+
+
+
+ +
+ + + JavaScript execution time + 0.0 s + +
+ + + + +
+
+
+
Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. Learn more.TBT
+
+ + +
+ +
+
URL
Total CPU Time
Script Evaluation
Script Parse
…samples/emoji
(localhost)
1,411 ms
4 ms
1 ms
+
+
+ +
+ + + Minimizes main-thread work + 1.5 s + +
+ + + + +
+
+
+
Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. Learn moreTBT
+
+
Category
Time Spent
Style & Layout
1,117 ms
Rendering
252 ms
Other
53 ms
Script Evaluation
20 ms
Parse HTML & CSS
8 ms
Script Parsing & Compilation
3 ms
+
+
+ +
+ + + All text remains visible during webfont loads + + +
+ + + + +
+
+
+
Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Minimize third-party usage + + +
+ + + + +
+
+
+
Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. Learn more.TBT
+
+
+
+
+ +
+ + + Lazy load third-party resources with facades + + +
+ + + + +
+
+
+
Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. Learn more.TBT
+
+
+
+
+ +
+ + + Avoid large layout shifts + + +
+ + + + +
+
+
+
These DOM elements contribute most to the CLS of the page.CLS
+
+
+
+
+ +
+ + + Uses passive listeners to improve scrolling performance + + +
+ + + + +
+
+
+
Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. Learn more.
+
+
+
+
+ +
+ + + Avoids document.write() + + +
+ + + + +
+
+
+
For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. Learn more.
+
+
+
+
+ +
+ + + Image elements have explicit width and height + + +
+ + + + +
+
+
+
Set an explicit width and height on image elements to reduce layout shifts and improve CLS. Learn moreCLS
+
+
+
+
+ +
These checks highlight opportunities to improve the accessibility of your web app. Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.
+
+
+ +
+
+ Additional items to manually check + (10) + + + These items address areas which an automated testing tool cannot cover. Learn more in our guide on conducting an accessibility review.
+
+ + + + + +
+
+
+
+ +
+ + + The page has a logical tab order + + +
+ + + + +
+
+
+
Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. Learn more.
+
+
+
+
+ +
+ + + Interactive controls are keyboard focusable + + +
+ + + + +
+
+
+
Custom interactive controls are keyboard focusable and display a focus indicator. Learn more.
+
+
+
+
+ +
+ + + Interactive elements indicate their purpose and state + + +
+ + + + +
+
+
+
Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. Learn more.
+
+
+
+
+ +
+ + + The user's focus is directed to new content added to the page + + +
+ + + + +
+
+
+
If new content, such as a dialog, is added to the page, the user's focus is directed to it. Learn more.
+
+
+
+
+ +
+ + + User focus is not accidentally trapped in a region + + +
+ + + + +
+
+
+
A user can tab into and out of any control or region without accidentally trapping their focus. Learn more.
+
+
+
+
+ +
+ + + Custom controls have associated labels + + +
+ + + + +
+
+
+
Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. Learn more.
+
+
+
+
+ +
+ + + Custom controls have ARIA roles + + +
+ + + + +
+
+
+
Custom interactive controls have appropriate ARIA roles. Learn more.
+
+
+
+
+ +
+ + + Visual order on the page follows DOM order + + +
+ + + + +
+
+
+
DOM order matches the visual order, improving navigation for assistive technology. Learn more.
+
+
+
+
+ +
+ + + Offscreen content is hidden from assistive technology + + +
+ + + + +
+
+
+
Offscreen content is hidden with display: none or aria-hidden=true. Learn more.
+
+
+
+
+ +
+ + + HTML5 landmark elements are used to improve navigation + + +
+ + + + +
+
+
+
Landmark elements (<main>, <nav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. Learn more.
+
+
+
+ +
+
+ Passed audits + (18) + + +
+
+ + + + + +
+
+
+
+ +
+ + + [aria-*] attributes match their roles + + +
+ + + + +
+
+
+
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. Learn more.
+
+
+
+
+ +
+ + + [aria-hidden="true"] is not present on the document <body> + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. Learn more.
+
+
+
+
+ +
+ + + [aria-hidden="true"] elements do not contain focusable descendents + + +
+ + + + +
+
+
+
Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. Learn more.
+
+
+
+
+ +
+ + + [aria-*] attributes have valid values + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. Learn more.
+
+
+
+
+ +
+ + + [aria-*] attributes are valid and not misspelled + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. Learn more.
+
+
+
+
+ +
+ + + Buttons have an accessible name + + +
+ + + + +
+
+
+
When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + The page contains a heading, skip link, or landmark region + + +
+ + + + +
+
+
+
Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. Learn more.
+
+
+
+
+ +
+ + + Background and foreground colors have a sufficient contrast ratio + + +
+ + + + +
+
+
+
Low-contrast text is difficult or impossible for many users to read. Learn more.
+
+
+
+
+ +
+ + + Document has a <title> element + + +
+ + + + +
+
+
+
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more.
+
+
+
+
+ +
+ + + [id] attributes on active, focusable elements are unique + + +
+ + + + +
+
+
+
All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. Learn more.
+
+
+
+
+ +
+ + + Heading elements appear in a sequentially-descending order + + +
+ + + + +
+
+
+
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn more.
+
+
+
+
+ +
+ + + <html> element has a [lang] attribute + + +
+ + + + +
+
+
+
If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. Learn more.
+
+
+
+
+ +
+ + + <html> element has a valid value for its [lang] attribute + + +
+ + + + +
+
+
+
Specifying a valid BCP 47 language helps screen readers announce text properly. Learn more.
+
+
+
+
+ +
+ + + Image elements have [alt] attributes + + +
+ + + + +
+
+
+
Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more.
+
+
+
+
+ +
+ + + Lists contain only <li> elements and script supporting elements (<script> and <template>). + + +
+ + + + +
+
+
+
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. Learn more.
+
+
+
+
+ +
+ + + List items (<li>) are contained within <ul> or <ol> parent elements + + +
+ + + + +
+
+
+
Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. Learn more.
+
+
+
+
+ +
+ + + [user-scalable="no"] is not used in the <meta name="viewport"> element and the [maximum-scale] attribute is not less than 5. + + +
+ + + + +
+
+
+
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more.
+
+
+
+ +
+
+ Not applicable + (26) + + +
+
+ + + + + +
+
+
+
+ +
+ + + [accesskey] values are unique + + +
+ + + + +
+
+
+
Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. Learn more.
+
+
+
+
+ +
+ + + button, link, and menuitem elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA input fields have accessible names + + +
+ + + + +
+
+
+
When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA meter elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA progressbar elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + [role]s have all required [aria-*] attributes + + +
+ + + + +
+
+
+
Some ARIA roles have required attributes that describe the state of the element to screen readers. Learn more.
+
+
+
+
+ +
+ + + Elements with an ARIA [role] that require children to contain a specific [role] have all required children. + + +
+ + + + +
+
+
+
Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + [role]s are contained by their required parent element + + +
+ + + + +
+
+
+
Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + [role] values are valid + + +
+ + + + +
+
+
+
ARIA roles must have valid values in order to perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + ARIA toggle fields have accessible names + + +
+ + + + +
+
+
+
When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA tooltip elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA treeitem elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + <dl>'s contain only properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements. + + +
+ + + + +
+
+
+
When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. Learn more.
+
+
+
+
+ +
+ + + Definition list items are wrapped in <dl> elements + + +
+ + + + +
+
+
+
Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. Learn more.
+
+
+
+
+ +
+ + + ARIA IDs are unique + + +
+ + + + +
+
+
+
The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. Learn more.
+
+
+
+
+ +
+ + + No form fields have multiple labels + + +
+ + + + +
+
+
+
Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. Learn more.
+
+
+
+
+ +
+ + + <frame> or <iframe> elements have a title + + +
+ + + + +
+
+
+
Screen reader users rely on frame titles to describe the contents of frames. Learn more.
+
+
+
+
+ +
+ + + <input type="image"> elements have [alt] text + + +
+ + + + +
+
+
+
When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. Learn more.
+
+
+
+
+ +
+ + + Form elements have associated labels + + +
+ + + + +
+
+
+
Labels ensure that form controls are announced properly by assistive technologies, like screen readers. Learn more.
+
+
+
+
+ +
+ + + The document does not use <meta http-equiv="refresh"> + + +
+ + + + +
+
+
+
Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. Learn more.
+
+
+
+
+ +
+ + + <object> elements have [alt] text + + +
+ + + + +
+
+
+
Screen readers cannot translate non-text content. Adding alt text to `<object>` elements helps screen readers convey meaning to users. Learn more.
+
+
+
+
+ +
+ + + No element has a [tabindex] value greater than 0 + + +
+ + + + +
+
+
+
A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. Learn more.
+
+
+
+
+ +
+ + + Cells in a <table> element that use the [headers] attribute refer to table cells within the same table. + + +
+ + + + +
+
+
+
Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. Learn more.
+
+
+
+
+ +
+ + + <th> elements and elements with [role="columnheader"/"rowheader"] have data cells they describe. + + +
+ + + + +
+
+
+
Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. Learn more.
+
+
+
+
+ +
+ + + [lang] attributes have a valid value + + +
+ + + + +
+
+
+
Specifying a valid BCP 47 language on elements helps ensure that text is pronounced correctly by a screen reader. Learn more.
+
+
+
+
+ +
+ + + <video> elements contain a <track> element with [kind="captions"] + + +
+ + + + +
+
+
+
When a video provides a caption it is easier for deaf and hearing impaired users to access its information. Learn more.
+
+
+
+ +
Trust and Safety
+
+ +
+ + + Ensure CSP is effective against XSS attacks + + +
+ + + + +
+
+
+
A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. Learn more
+
+
Description
Directive
Severity
No CSP found in enforcement mode
High
+
+ +
+
+ Passed audits + (17) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Uses HTTPS + + +
+ + + + +
+
+
+
All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding mixed content, where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. Learn more.
+
+
+
+
+ +
+ + + Links to cross-origin destinations are safe + + +
+ + + + +
+
+
+
Add `rel="noopener"` or `rel="noreferrer"` to any external links to improve performance and prevent security vulnerabilities. Learn more.
+
+
+
+
+ +
+ + + Avoids requesting the geolocation permission on page load + + +
+ + + + +
+
+
+
Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. Learn more.
+
+
+
+
+ +
+ + + Avoids requesting the notification permission on page load + + +
+ + + + +
+
+
+
Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. Learn more.
+
+
+
+
+ +
+ + + Avoids front-end JavaScript libraries with known security vulnerabilities + + +
+ + + + +
+
+
+
Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. Learn more.
+
+
+
+
+ +
+ + + Allows users to paste into password fields + + +
+ + + + +
+
+
+
Preventing password pasting undermines good security policy. Learn more.
+
+
+
+
+ +
+ + + Displays images with correct aspect ratio + + +
+ + + + +
+
+
+
Image display dimensions should match natural aspect ratio. Learn more.
+
+
+
+
+ +
+ + + Serves images with appropriate resolution + + +
+ + + + +
+
+
+
Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. Learn more.
+
+
+
+
+ +
+ + + Page has the HTML doctype + + +
+ + + + +
+
+
+
Specifying a doctype prevents the browser from switching to quirks-mode. Learn more.
+
+
+
+
+ +
+ + + Properly defines charset + + +
+ + + + +
+
+
+
A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. Learn more.
+
+
+
+
+ +
+ + + Avoids unload event listeners + + +
+ + + + +
+
+
+
The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Consider using the `pagehide` or `visibilitychange` events instead. Learn more
+
+
+
+
+ +
+ + + Avoids Application Cache + + +
+ + + + +
+
+
+
Application Cache is deprecated. Learn more.
+
+
+
+
+ +
+ + + Detected JavaScript libraries + + +
+ + + + +
+
+
+
All front-end JavaScript libraries detected on the page. Learn more.
+
+
Name
Version
FuseJS
+
+
+ +
+ + + Avoids deprecated APIs + + +
+ + + + +
+
+
+
Deprecated APIs will eventually be removed from the browser. Learn more.
+
+
+
+
+ +
+ + + No browser errors logged to the console + + +
+ + + + +
+
+
+
Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. Learn more
+
+
+
+
+ +
+ + + Page has valid source maps + + +
+ + + + +
+
+
+
Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. Learn more.
+
+
+
+
+ +
+ + + No issues in the Issues panel in Chrome Devtools + + +
+ + + + +
+
+
+
Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.
+
+
+
+ +
+
+ Not applicable + (1) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Fonts with font-display: optional are preloaded + + +
+ + + + +
+
+
+
Preload `optional` fonts so first-time visitors may use them. Learn more
+
+
+
+
+ +
These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. Learn more.
+
+
+ +
+
+ Additional items to manually check + (1) + + + Run these additional validators on your site to check additional SEO best practices.
+
+ + + + + +
+
+
+
+ +
+ + + Structured data is valid + + +
+ + + + +
+
+
+
Run the Structured Data Testing Tool and the Structured Data Linter to validate structured data. Learn more.
+
+
+
+ +
+
+ Passed audits + (13) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Has a <meta name="viewport"> tag with width or initial-scale + + +
+ + + + +
+
+
+
Add a `<meta name="viewport">` tag to optimize your app for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Document has a <title> element + + +
+ + + + +
+
+
+
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more.
+
+
+
+
+ +
+ + + Document has a meta description + + +
+ + + + +
+
+
+
Meta descriptions may be included in search results to concisely summarize page content. Learn more.
+
+
+
+
+ +
+ + + Page has successful HTTP status code + + +
+ + + + +
+
+
+
Pages with unsuccessful HTTP status codes may not be indexed properly. Learn more.
+
+
+
+
+ +
+ + + Links are crawlable + + +
+ + + + +
+
+
+
Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. Learn More
+
+
+
+
+ +
+ + + Page isn’t blocked from indexing + + +
+ + + + +
+
+
+
Search engines are unable to include your pages in search results if they don't have permission to crawl them. Learn more.
+
+
+
+
+ +
+ + + Image elements have [alt] attributes + + +
+ + + + +
+
+
+
Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more.
+
+
+
+
+ +
+ + + Document has a valid hreflang + + +
+ + + + +
+
+
+
hreflang links tell search engines what version of a page they should list in search results for a given language or region. Learn more.
+
+
+
+
+ +
+ + + Document has a valid rel=canonical + + +
+ + + + +
+
+
+
Canonical links suggest which URL to show in search results. Learn more.
+
+
+
+
+ +
+ + + Document uses legible font sizes + 99.75% legible text + +
+ + + + +
+
+
+
Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. Learn more.
+
+ + +
+ +
+
Source
Selector
% of Page Text
Font Size
.text-\[0\.6rem\]
0.25%
9.6px
Legible text
99.75%
≥ 12px
+
+
+ +
+ + + Document avoids plugins + + +
+ + + + +
+
+
+
Search engines can't index plugin content, and many devices restrict plugins or don't support them. Learn more.
+
+
+
+
+ +
+ + + Tap targets are sized appropriately + 100% appropriately sized tap targets + +
+ + + + +
+
+
+
Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. Learn more.
+
+
+
+ +
+
+ Not applicable + (1) + + +
+
+ + + + + +
+
+
+
+ +
+ + + robots.txt is valid + + +
+ + + + +
+
+
+
If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. Learn more.
+
+
+
+ +
Installable
+
+ +
+ + + Web app manifest and service worker meet the installability requirements + + +
+ + + + +
+
+
+
Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. Learn more.
+
+
+
PWA Optimized
+
+ +
+ + + Does not register a service worker that controls page and start_url + + +
+ + + + +
+
+
+
The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. Learn more.
+
+
+
+
+ +
+ + + Redirects HTTP traffic to HTTPS + + +
+ + + + +
+
+
+
If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. Learn more.
+
+
+
+
+ +
+ + + Configured for a custom splash screen + + +
+ + + + +
+
+
+
A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. Learn more.
+
+
+
+
+ +
+ + + Does not set a theme color for the address bar.
Failures: No `<meta name="theme-color">` tag found.
+ +
+
+ + + + +
+
+
+
The browser address bar can be themed to match your site. Learn more.
+
+
+
+
+ +
+ + + Content is sized correctly for the viewport + + +
+ + + + +
+
+
+
If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Has a <meta name="viewport"> tag with width or initial-scale + + +
+ + + + +
+
+
+
Add a `<meta name="viewport">` tag to optimize your app for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Provides a valid apple-touch-icon + + +
+ + + + +
+
+
+
For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. Learn More.
+
+
+
+
+ +
+ + + Manifest has a maskable icon + + +
+ + + + +
+
+
+
A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. Learn more.
+
+
+
+ +
+
+ Additional items to manually check + (3) + + + These checks are required by the baseline PWA Checklist but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.
+
+ + + + + +
+
+
+
+ +
+ + + Site works cross-browser + + +
+ + + + +
+
+
+
To reach the most number of users, sites should work across every major browser. Learn more.
+
+
+
+
+ +
+ + + Page transitions don't feel like they block on the network + + +
+ + + + +
+
+
+
Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. Learn more.
+
+
+
+
+ +
+ + + Each page has a URL + + +
+ + + + +
+
+
+
Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. Learn more.
+
+
+
+ + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/public/docs/welcome/lighthouse.jpg b/public/docs/welcome/lighthouse.jpg new file mode 100644 index 00000000..22a895ca Binary files /dev/null and b/public/docs/welcome/lighthouse.jpg differ diff --git a/public/examples/blowfish-artist/feature.png b/public/examples/blowfish-artist/feature.png new file mode 100644 index 00000000..3b39d853 Binary files /dev/null and b/public/examples/blowfish-artist/feature.png differ diff --git a/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png b/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png new file mode 100644 index 00000000..15ff5e74 Binary files /dev/null and b/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png differ diff --git a/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png b/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png new file mode 100644 index 00000000..01d8889a Binary files /dev/null and b/public/examples/blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png differ diff --git a/public/examples/blowfish-artist/index.html b/public/examples/blowfish-artist/index.html new file mode 100644 index 00000000..370223ef --- /dev/null +++ b/public/examples/blowfish-artist/index.html @@ -0,0 +1,16 @@ +Blowfish Artist · Blowfish + + + + + +
Skip to main content

Blowfish Artist

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/blowfish-artist/index.xml b/public/examples/blowfish-artist/index.xml new file mode 100644 index 00000000..a49afdfc --- /dev/null +++ b/public/examples/blowfish-artist/index.xml @@ -0,0 +1 @@ +Blowfish Artist on Blowfishhttps://nunocoracao.github.io/blowfish/examples/blowfish-artist/Recent content in Blowfish Artist on BlowfishHugo -- gohugo.ioenSun, 06 Nov 2022 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/blowfish-artist/page/1/index.html b/public/examples/blowfish-artist/page/1/index.html new file mode 100644 index 00000000..bceff7eb --- /dev/null +++ b/public/examples/blowfish-artist/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/blowfish-artist/ \ No newline at end of file diff --git a/public/examples/blowfish-lite/feature.png b/public/examples/blowfish-lite/feature.png new file mode 100644 index 00000000..d4a8b9e9 Binary files /dev/null and b/public/examples/blowfish-lite/feature.png differ diff --git a/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png b/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png new file mode 100644 index 00000000..19b19f82 Binary files /dev/null and b/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png differ diff --git a/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png b/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png new file mode 100644 index 00000000..7947bda3 Binary files /dev/null and b/public/examples/blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png differ diff --git a/public/examples/blowfish-lite/index.html b/public/examples/blowfish-lite/index.html new file mode 100644 index 00000000..45c6fc8f --- /dev/null +++ b/public/examples/blowfish-lite/index.html @@ -0,0 +1,16 @@ +Blowfish Lite · Blowfish + + + + + +
Skip to main content

Blowfish Lite

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/blowfish-lite/index.xml b/public/examples/blowfish-lite/index.xml new file mode 100644 index 00000000..dada5656 --- /dev/null +++ b/public/examples/blowfish-lite/index.xml @@ -0,0 +1 @@ +Blowfish Lite on Blowfishhttps://nunocoracao.github.io/blowfish/examples/blowfish-lite/Recent content in Blowfish Lite on BlowfishHugo -- gohugo.ioenMon, 07 Nov 2022 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/blowfish-lite/page/1/index.html b/public/examples/blowfish-lite/page/1/index.html new file mode 100644 index 00000000..4391d641 --- /dev/null +++ b/public/examples/blowfish-lite/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/blowfish-lite/ \ No newline at end of file diff --git a/public/examples/blowfish-lowkey/feature.png b/public/examples/blowfish-lowkey/feature.png new file mode 100644 index 00000000..454a2d04 Binary files /dev/null and b/public/examples/blowfish-lowkey/feature.png differ diff --git a/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png b/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png new file mode 100644 index 00000000..5bc070d3 Binary files /dev/null and b/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png differ diff --git a/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png b/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png new file mode 100644 index 00000000..947e32ba Binary files /dev/null and b/public/examples/blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png differ diff --git a/public/examples/blowfish-lowkey/index.html b/public/examples/blowfish-lowkey/index.html new file mode 100644 index 00000000..d1b51a1d --- /dev/null +++ b/public/examples/blowfish-lowkey/index.html @@ -0,0 +1,16 @@ +Blowfish Lowkey · Blowfish + + + + + +
Skip to main content

Blowfish Lowkey

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/blowfish-lowkey/index.xml b/public/examples/blowfish-lowkey/index.xml new file mode 100644 index 00000000..2851bdd3 --- /dev/null +++ b/public/examples/blowfish-lowkey/index.xml @@ -0,0 +1 @@ +Blowfish Lowkey on Blowfishhttps://nunocoracao.github.io/blowfish/examples/blowfish-lowkey/Recent content in Blowfish Lowkey on BlowfishHugo -- gohugo.ioenSun, 06 Nov 2022 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/blowfish-lowkey/page/1/index.html b/public/examples/blowfish-lowkey/page/1/index.html new file mode 100644 index 00000000..43f39472 --- /dev/null +++ b/public/examples/blowfish-lowkey/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/blowfish-lowkey/ \ No newline at end of file diff --git a/public/examples/blowfish-template-repo/feature.png b/public/examples/blowfish-template-repo/feature.png new file mode 100644 index 00000000..e86997b9 Binary files /dev/null and b/public/examples/blowfish-template-repo/feature.png differ diff --git a/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png b/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png new file mode 100644 index 00000000..2380ecb9 Binary files /dev/null and b/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png differ diff --git a/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png b/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png new file mode 100644 index 00000000..54de70a8 Binary files /dev/null and b/public/examples/blowfish-template-repo/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png differ diff --git a/public/examples/blowfish-template-repo/index.html b/public/examples/blowfish-template-repo/index.html new file mode 100644 index 00000000..ccc0211f --- /dev/null +++ b/public/examples/blowfish-template-repo/index.html @@ -0,0 +1,16 @@ +Blowfish Template - GitHub Repo · Blowfish + + + + + +
Skip to main content

Blowfish Template - GitHub Repo

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/blowfish-template-repo/index.xml b/public/examples/blowfish-template-repo/index.xml new file mode 100644 index 00000000..076b7bf9 --- /dev/null +++ b/public/examples/blowfish-template-repo/index.xml @@ -0,0 +1 @@ +Blowfish Template - GitHub Repo on Blowfishhttps://nunocoracao.github.io/blowfish/examples/blowfish-template-repo/Recent content in Blowfish Template - GitHub Repo on BlowfishHugo -- gohugo.ioenFri, 06 Nov 2020 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/blowfish-template-repo/page/1/index.html b/public/examples/blowfish-template-repo/page/1/index.html new file mode 100644 index 00000000..2e46bf01 --- /dev/null +++ b/public/examples/blowfish-template-repo/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/blowfish-template-repo/ \ No newline at end of file diff --git a/public/examples/blowfish-template/feature.png b/public/examples/blowfish-template/feature.png new file mode 100644 index 00000000..e86997b9 Binary files /dev/null and b/public/examples/blowfish-template/feature.png differ diff --git a/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png b/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png new file mode 100644 index 00000000..2380ecb9 Binary files /dev/null and b/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_1200x0_resize_box_3.png differ diff --git a/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png b/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png new file mode 100644 index 00000000..54de70a8 Binary files /dev/null and b/public/examples/blowfish-template/feature_hu4592ac3fe4dd4ca45e75cc0313416524_51117_600x0_resize_box_3.png differ diff --git a/public/examples/blowfish-template/index.html b/public/examples/blowfish-template/index.html new file mode 100644 index 00000000..b0a5fbf6 --- /dev/null +++ b/public/examples/blowfish-template/index.html @@ -0,0 +1,16 @@ +Blowfish Template · Blowfish + + + + + +
Skip to main content

Blowfish Template

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/blowfish-template/index.xml b/public/examples/blowfish-template/index.xml new file mode 100644 index 00000000..6926ce81 --- /dev/null +++ b/public/examples/blowfish-template/index.xml @@ -0,0 +1 @@ +Blowfish Template on Blowfishhttps://nunocoracao.github.io/blowfish/examples/blowfish-template/Recent content in Blowfish Template on BlowfishHugo -- gohugo.ioenFri, 06 Nov 2020 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/blowfish-template/page/1/index.html b/public/examples/blowfish-template/page/1/index.html new file mode 100644 index 00000000..3858f566 --- /dev/null +++ b/public/examples/blowfish-template/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/blowfish-template/ \ No newline at end of file diff --git a/public/examples/index.html b/public/examples/index.html new file mode 100644 index 00000000..f63a6733 --- /dev/null +++ b/public/examples/index.html @@ -0,0 +1,37 @@ +Showcase · Blowfish + + + + + +
Skip to main content

Showcase

0 +· +0 +· +
See what’s possible with Blowfish.

This section contains links to example templates and pages created using Blowfish to get you inspired.


Blowfish Lite + +
Blowfish Lowkey + +
Blowfish Artist + +
Blowfish Lite - Repo + +
Blowfish Lowkey - Repo + +
Blowfish Artist - Repo + +
Blowfish Template - GitHub Repo + +
Blowfish Template + +
\ No newline at end of file diff --git a/public/examples/index.xml b/public/examples/index.xml new file mode 100644 index 00000000..188bca8d --- /dev/null +++ b/public/examples/index.xml @@ -0,0 +1 @@ +Showcase on Blowfishhttps://nunocoracao.github.io/blowfish/examples/Recent content in Showcase on BlowfishHugo -- gohugo.ioenMon, 07 Nov 2022 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/page/1/index.html b/public/examples/page/1/index.html new file mode 100644 index 00000000..d2336adf --- /dev/null +++ b/public/examples/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/ \ No newline at end of file diff --git a/public/examples/repo-blowfish-artist/feature.png b/public/examples/repo-blowfish-artist/feature.png new file mode 100644 index 00000000..3b39d853 Binary files /dev/null and b/public/examples/repo-blowfish-artist/feature.png differ diff --git a/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png b/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png new file mode 100644 index 00000000..15ff5e74 Binary files /dev/null and b/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_1200x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png b/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png new file mode 100644 index 00000000..01d8889a Binary files /dev/null and b/public/examples/repo-blowfish-artist/feature_hu1cdf8b02fc0b671e3f7e2360a08cfa4e_1096919_600x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-artist/index.html b/public/examples/repo-blowfish-artist/index.html new file mode 100644 index 00000000..349d48a8 --- /dev/null +++ b/public/examples/repo-blowfish-artist/index.html @@ -0,0 +1,16 @@ +Blowfish Artist - Repo · Blowfish + + + + + +
Skip to main content

Blowfish Artist - Repo

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/repo-blowfish-artist/index.xml b/public/examples/repo-blowfish-artist/index.xml new file mode 100644 index 00000000..7e0dfb3b --- /dev/null +++ b/public/examples/repo-blowfish-artist/index.xml @@ -0,0 +1 @@ +Blowfish Artist - Repo on Blowfishhttps://nunocoracao.github.io/blowfish/examples/repo-blowfish-artist/Recent content in Blowfish Artist - Repo on BlowfishHugo -- gohugo.ioenSat, 06 Nov 2021 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/repo-blowfish-artist/page/1/index.html b/public/examples/repo-blowfish-artist/page/1/index.html new file mode 100644 index 00000000..cebfa047 --- /dev/null +++ b/public/examples/repo-blowfish-artist/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/repo-blowfish-artist/ \ No newline at end of file diff --git a/public/examples/repo-blowfish-lite/feature.png b/public/examples/repo-blowfish-lite/feature.png new file mode 100644 index 00000000..d4a8b9e9 Binary files /dev/null and b/public/examples/repo-blowfish-lite/feature.png differ diff --git a/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png b/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png new file mode 100644 index 00000000..19b19f82 Binary files /dev/null and b/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_1200x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png b/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png new file mode 100644 index 00000000..7947bda3 Binary files /dev/null and b/public/examples/repo-blowfish-lite/feature_huea2010905fc2363ca391de86e4a7c51c_109478_600x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-lite/index.html b/public/examples/repo-blowfish-lite/index.html new file mode 100644 index 00000000..393d2c84 --- /dev/null +++ b/public/examples/repo-blowfish-lite/index.html @@ -0,0 +1,16 @@ +Blowfish Lite - Repo · Blowfish + + + + + +
Skip to main content

Blowfish Lite - Repo

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/repo-blowfish-lite/index.xml b/public/examples/repo-blowfish-lite/index.xml new file mode 100644 index 00000000..f6a9bccc --- /dev/null +++ b/public/examples/repo-blowfish-lite/index.xml @@ -0,0 +1 @@ +Blowfish Lite - Repo on Blowfishhttps://nunocoracao.github.io/blowfish/examples/repo-blowfish-lite/Recent content in Blowfish Lite - Repo on BlowfishHugo -- gohugo.ioenSun, 07 Nov 2021 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/repo-blowfish-lite/page/1/index.html b/public/examples/repo-blowfish-lite/page/1/index.html new file mode 100644 index 00000000..a569b197 --- /dev/null +++ b/public/examples/repo-blowfish-lite/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/repo-blowfish-lite/ \ No newline at end of file diff --git a/public/examples/repo-blowfish-lowkey/feature.png b/public/examples/repo-blowfish-lowkey/feature.png new file mode 100644 index 00000000..454a2d04 Binary files /dev/null and b/public/examples/repo-blowfish-lowkey/feature.png differ diff --git a/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png b/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png new file mode 100644 index 00000000..5bc070d3 Binary files /dev/null and b/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_1200x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png b/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png new file mode 100644 index 00000000..947e32ba Binary files /dev/null and b/public/examples/repo-blowfish-lowkey/feature_hu14ac5609178de8411be379f0f3102a14_720107_600x0_resize_box_3.png differ diff --git a/public/examples/repo-blowfish-lowkey/index.html b/public/examples/repo-blowfish-lowkey/index.html new file mode 100644 index 00000000..a7fa157d --- /dev/null +++ b/public/examples/repo-blowfish-lowkey/index.html @@ -0,0 +1,16 @@ +Blowfish Lowkey - Repo · Blowfish + + + + + +
Skip to main content

Blowfish Lowkey - Repo

There are no articles to list here yet.

\ No newline at end of file diff --git a/public/examples/repo-blowfish-lowkey/index.xml b/public/examples/repo-blowfish-lowkey/index.xml new file mode 100644 index 00000000..fddae96d --- /dev/null +++ b/public/examples/repo-blowfish-lowkey/index.xml @@ -0,0 +1 @@ +Blowfish Lowkey - Repo on Blowfishhttps://nunocoracao.github.io/blowfish/examples/repo-blowfish-lowkey/Recent content in Blowfish Lowkey - Repo on BlowfishHugo -- gohugo.ioenSat, 06 Nov 2021 00:00:00 +0000 \ No newline at end of file diff --git a/public/examples/repo-blowfish-lowkey/page/1/index.html b/public/examples/repo-blowfish-lowkey/page/1/index.html new file mode 100644 index 00000000..f9f91782 --- /dev/null +++ b/public/examples/repo-blowfish-lowkey/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/examples/repo-blowfish-lowkey/ \ No newline at end of file diff --git a/public/guides/index.html b/public/guides/index.html new file mode 100644 index 00000000..2971677f --- /dev/null +++ b/public/guides/index.html @@ -0,0 +1,25 @@ +Recipes · Blowfish + + + + + +
Skip to main content

Recipes

0 +· +0 +· +
Recipes, guides, and tutorials for Blowfish

Blowfish user? To add your guide to this list, check the template.

This section contains guides for a variety of scnearios on how to configure your theme. If you’re new, check out the Installation guide to begin or visit the Samples section to see what Blowfish can do.


Recipe Template
1 min· +0 +· +0 +
template
\ No newline at end of file diff --git a/public/guides/index.xml b/public/guides/index.xml new file mode 100644 index 00000000..b565d9dd --- /dev/null +++ b/public/guides/index.xml @@ -0,0 +1,2 @@ +Recipes on Blowfishhttps://nunocoracao.github.io/blowfish/guides/Recent content in Recipes on BlowfishHugo -- gohugo.ioenTue, 22 Dec 1987 00:00:00 +0000Recipe Templatehttps://nunocoracao.github.io/blowfish/guides/template/Tue, 22 Dec 1987 00:00:00 +0000https://nunocoracao.github.io/blowfish/guides/template/Thank you for wanting to contribute to Blowfish&rsquo;s community. +How to start? # This is a template article that will explain how to create a new article for Blowfish&rsquo;s guide section. \ No newline at end of file diff --git a/public/guides/page/1/index.html b/public/guides/page/1/index.html new file mode 100644 index 00000000..588bbe60 --- /dev/null +++ b/public/guides/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/guides/ \ No newline at end of file diff --git a/public/guides/template/cover.png b/public/guides/template/cover.png new file mode 100644 index 00000000..6f6659ae Binary files /dev/null and b/public/guides/template/cover.png differ diff --git a/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_1200x0_resize_box_3.png b/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_1200x0_resize_box_3.png new file mode 100644 index 00000000..243865e6 Binary files /dev/null and b/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_1200x0_resize_box_3.png differ diff --git a/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_600x0_resize_box_3.png b/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_600x0_resize_box_3.png new file mode 100644 index 00000000..5c049d90 Binary files /dev/null and b/public/guides/template/cover_hu507bbb0ec7aba0818718abfc95943591_1864112_600x0_resize_box_3.png differ diff --git a/public/guides/template/img/example.jpg b/public/guides/template/img/example.jpg new file mode 100644 index 00000000..df153b3f Binary files /dev/null and b/public/guides/template/img/example.jpg differ diff --git a/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1024x0_resize_q75_box.jpg b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1024x0_resize_q75_box.jpg new file mode 100644 index 00000000..1d64e3e3 Binary files /dev/null and b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1024x0_resize_q75_box.jpg differ diff --git a/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1320x0_resize_q75_box.jpg b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1320x0_resize_q75_box.jpg new file mode 100644 index 00000000..edf08793 Binary files /dev/null and b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_1320x0_resize_q75_box.jpg differ diff --git a/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_330x0_resize_q75_box.jpg b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_330x0_resize_q75_box.jpg new file mode 100644 index 00000000..e34470bb Binary files /dev/null and b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_330x0_resize_q75_box.jpg differ diff --git a/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_660x0_resize_q75_box.jpg b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_660x0_resize_q75_box.jpg new file mode 100644 index 00000000..6a9674d5 Binary files /dev/null and b/public/guides/template/img/example_hu3d03a01dcc18bc5be0e67db3d8d209a6_4315105_660x0_resize_q75_box.jpg differ diff --git a/public/guides/template/index.html b/public/guides/template/index.html new file mode 100644 index 00000000..1db69cc9 --- /dev/null +++ b/public/guides/template/index.html @@ -0,0 +1,33 @@ +Recipe Template · Blowfish + + + + + +
Skip to main content
  1. Recipes/

Recipe Template

1 min· +0 +· +0 +· + +· +
template
Table of Contents

Thank you for wanting to contribute to Blowfish’s community.

How to start? +#

This is a template article that will explain how to create a new article for Blowfish’s guide section.

Clone Blowfish +#

Clone this repo with the following command:

git clone https://github.com/nunocoracao/blowfish.git
+

Setup your files +#

Copy and paste the entire folder where this .md file is.

Name it using the following convention YYYYMM-title, no white spaces are allowed.

Write your guide +#

Write your guide :)

Use the img folder to place your images and use them:

Example
Image caption

Open a PR +#

Open a PR and thanks in advance for your contribution.



\ No newline at end of file diff --git a/public/img/author2_hub6c74558734540774552b319ec2c6c70_1552535_192x192_fill_box_center_3.png b/public/img/author2_hub6c74558734540774552b319ec2c6c70_1552535_192x192_fill_box_center_3.png new file mode 100644 index 00000000..45dbef29 Binary files /dev/null and b/public/img/author2_hub6c74558734540774552b319ec2c6c70_1552535_192x192_fill_box_center_3.png differ diff --git a/public/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_center_3.png b/public/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_center_3.png new file mode 100644 index 00000000..11f22be8 Binary files /dev/null and b/public/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_center_3.png differ diff --git a/public/img/blowfish_logo_transparent.png b/public/img/blowfish_logo_transparent.png new file mode 100644 index 00000000..197a309c Binary files /dev/null and b/public/img/blowfish_logo_transparent.png differ diff --git a/public/img/nuno_avatar_hu8b7a4bd74a55738ace1e1f4e4161419f_113497_192x192_fill_q75_box_center.jpg b/public/img/nuno_avatar_hu8b7a4bd74a55738ace1e1f4e4161419f_113497_192x192_fill_q75_box_center.jpg new file mode 100644 index 00000000..79bae259 Binary files /dev/null and b/public/img/nuno_avatar_hu8b7a4bd74a55738ace1e1f4e4161419f_113497_192x192_fill_q75_box_center.jpg differ diff --git a/public/img/ocean.jpg b/public/img/ocean.jpg new file mode 100644 index 00000000..9f1220a6 Binary files /dev/null and b/public/img/ocean.jpg differ diff --git a/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_1200x0_resize_q75_box.jpg b/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..31dc6fd5 Binary files /dev/null and b/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_1200x0_resize_q75_box.jpg differ diff --git a/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_600x0_resize_q75_box.jpg b/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..9a96185b Binary files /dev/null and b/public/img/ocean_hu3d03a01dcc18bc5be0e67db3d8d209a6_5097493_600x0_resize_q75_box.jpg differ diff --git a/public/index.html b/public/index.html index 50d6a9aa..b13f3d9f 100644 --- a/public/index.html +++ b/public/index.html @@ -1,428 +1,126 @@ - - - - - - - - - - - - - Blowfish - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to main content -
- - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- - - -
-
- - - - - Your name here - - -

- Your name here -

- -

- I’m only human -

- -
- - -
-
-
-
-
- - - -
- - - - -
- -
- - - +Blowfish + + + + + +
Skip to main content
Blowfish

Blowfish

A powerful, lightweight theme for Hugo built with Tailwind CSS.

This is a demo site built entirely using Blowfish. It also contains a complete set of theme documentation. Blowfish is flexible and is great for both static page-based content (like this demo) or a traditional blog with a feed of recent posts.

This is a demo of the background layout. +

Explore the sample pages to get a feel for what Blowfish can do. If you like what you see, check out the project on Github or read the Installation guide to get started.

Recent

This is a demo of theme's list configurations: card view +
\ No newline at end of file diff --git a/public/index.json b/public/index.json index dce93de9..24b683dd 100644 --- a/public/index.json +++ b/public/index.json @@ -1 +1 @@ -[{"content":"","date":"1 January 0001","permalink":"/authors/","section":"Authors","summary":"","title":"Authors"},{"content":"","date":"1 January 0001","permalink":"/","section":"Blowfish","summary":"","title":"Blowfish"},{"content":"","date":"1 January 0001","permalink":"/categories/","section":"Categories","summary":"","title":"Categories"},{"content":"","date":"1 January 0001","permalink":"/series/","section":"Series","summary":"","title":"Series"},{"content":"","date":"1 January 0001","permalink":"/tags/","section":"Tags","summary":"","title":"Tags"}] \ No newline at end of file +[{"content":"","date":"7 November 2022","permalink":"/blowfish/examples/blowfish-lite/","section":"Showcase","summary":"","title":"Blowfish Lite"},{"content":" See what\u0026rsquo;s possible with Blowfish. This section contains links to example templates and pages created using Blowfish to get you inspired.\n","date":"7 November 2022","permalink":"/blowfish/examples/","section":"Showcase","summary":"See what\u0026rsquo;s possible with Blowfish. This section contains links to example templates and pages created using Blowfish to get you inspired.","title":"Showcase"},{"content":"This is a demo site built entirely using Blowfish. It also contains a complete set of theme documentation. Blowfish is flexible and is great for both static page-based content (like this demo) or a traditional blog with a feed of recent posts.\nThis is a demo of the background layout. Switch layout \u0026orarr; Explore the sample pages to get a feel for what Blowfish can do. If you like what you see, check out the project on Github or read the Installation guide to get started.\n","date":"7 November 2022","permalink":"/blowfish/","section":"Welcome to Blowfish! 🎉","summary":"This is a demo site built entirely using Blowfish. It also contains a complete set of theme documentation. Blowfish is flexible and is great for both static page-based content (like this demo) or a traditional blog with a feed of recent posts.","title":"Welcome to Blowfish! 🎉"},{"content":"","date":"6 November 2022","permalink":"/blowfish/examples/blowfish-artist/","section":"Showcase","summary":"","title":"Blowfish Artist"},{"content":"","date":"6 November 2022","permalink":"/blowfish/examples/blowfish-lowkey/","section":"Showcase","summary":"","title":"Blowfish Lowkey"},{"content":"","date":"12 October 2022","permalink":"/blowfish/tags/authors/","section":"Tags","summary":"","title":"authors"},{"content":"A quick example of how to start using author taxonomies in your articles.\n","date":"12 October 2022","permalink":"/blowfish/authors/","section":"Authors Taxonomy Listing Example","summary":"A quick example of how to start using author taxonomies in your articles.","title":"Authors Taxonomy Listing Example"},{"content":"Dummy Second Author\u0026rsquo;s awesome dummy bio.\n","date":"12 October 2022","permalink":"/blowfish/authors/secondauthor/","section":"Authors Taxonomy Listing Example","summary":"Dummy Second Author\u0026rsquo;s awesome dummy bio.","title":"Dummy Second Author"},{"content":"This is an example of how an article with multiple authors will look like.\n","date":"12 October 2022","permalink":"/blowfish/samples/multiple-authors/","section":"Samples","summary":"A quick example of how multiple authors could be used.","title":"Multiple Authors"},{"content":"Nuno\u0026rsquo;s awesome dummy bio.\n","date":"12 October 2022","permalink":"/blowfish/authors/nunocoracao/","section":"Authors Taxonomy Listing Example","summary":"Nuno\u0026rsquo;s awesome dummy bio.","title":"Nuno Coração"},{"content":"","date":"12 October 2022","permalink":"/blowfish/tags/sample/","section":"Tags","summary":"","title":"sample"},{"content":" Blowfish brings your content to life. 😍 This section contains some demo pages that show how Blowfish renders different types of content. You can also see an example taxonomy listing page.\nSidenote: This page is just a standard Blowfish article listing and Hugo has been configured to generate a samples content type and display article summaries.\n","date":"12 October 2022","permalink":"/blowfish/samples/","section":"Samples","summary":"Blowfish brings your content to life. 😍 This section contains some demo pages that show how Blowfish renders different types of content. You can also see an example taxonomy listing page.","title":"Samples"},{"content":"Blowfish has full support for Hugo taxonomies and will adapt to any taxonomy set up. Taxonomy listings like this one also support custom content to be displayed above the list of terms.\nThis area could be used to add some extra decriptive text to each taxonomy. Check out the advanced tag below to see how to take this concept even further.\n","date":"12 October 2022","permalink":"/blowfish/tags/","section":"Tags","summary":"Blowfish has full support for Hugo taxonomies and will adapt to any taxonomy set up. Taxonomy listings like this one also support custom content to be displayed above the list of terms.","title":"Tags"},{"content":"","date":"26 September 2022","permalink":"/blowfish/tags/thumbnail/","section":"Tags","summary":"","title":"thumbnail"},{"content":"A quick example of how to start using Thumbnails in your articles.\nIf your average directory for an article looks like this:\ncontent └── awesome_article.md You need to change it from a single markdown file into a folder. Create a directory with the same name of the article, inside create a index.md file. You\u0026rsquo;ll get a structure similar to what\u0026rsquo;s below.\ncontent └── awesome_article └── featured.png Inside the article you can now add an image file (almost all formats are supported but we recommend .png or .jpg) that starts with feature*. Example below.\ncontent └── awesome_article ├── index.md └── featured.png This will tell Blowfish that this article has a feature image that can be used both as a thumbnail across your website as well as for oEmbed cards across social platforms. As an example, you can try copy pasting the URL of this article into a platform that shows oEmbeds (e.g. Twitter, WhatsApp, Telegram, etc) and see what is displayed.\n","date":"26 September 2022","permalink":"/blowfish/samples/thumbnail_sample/","section":"Samples","summary":"A quick example of how to start using Thumbnails in your artciles.","title":"Thumbnails"},{"content":"","date":"13 June 2022","permalink":"/blowfish/posts/","section":"Posts","summary":"","title":"Posts"},{"content":"","date":"19 January 2022","permalink":"/blowfish/tags/docs/","section":"Tags","summary":"","title":"docs"},{"content":"","date":"19 January 2022","permalink":"/blowfish/series/documentation/","section":"Series","summary":"","title":"Documentation"},{"content":" Simple, yet powerful. Learn how to use Blowfish and its features. This section contains everything you need to know about Blowfish. If you\u0026rsquo;re new, check out the Installation guide to begin or visit the Samples section to see what Blowfish can do.\n","date":"19 January 2022","permalink":"/blowfish/docs/","section":"Documentation","summary":"Simple, yet powerful. Learn how to use Blowfish and its features. This section contains everything you need to know about Blowfish. If you\u0026rsquo;re new, check out the Installation guide to begin or visit the Samples section to see what Blowfish can do.","title":"Documentation"},{"content":"","date":"19 January 2022","permalink":"/blowfish/tags/new/","section":"Tags","summary":"","title":"new"},{"content":"","date":"19 January 2022","permalink":"/blowfish/series/","section":"Series","summary":"","title":"Series"},{"content":" Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.\nTailwind CSS 3.0 # Tailwind CSS is at the heart of Blowfish and this release contains the very latest Tailwind CSS version 3. It brings with it performance optimisations and support for some great new CSS features.\nMultilingual support # A highly requested feature, Blowfish is now multilingual! If you publish your content in multiple languages, the site will be built with all the translations available.\n🇬🇧 🇩🇪 🇫🇷 🇪🇸 🇨🇳 🇧🇷 🇹🇷 🇧🇩 Thanks to submissions from the community, Blowfish has already been translated into eight languages with more to be added over time. By the way, pull requests for new languages are always welcome!\nRTL language support # One of the benefits of the new Tailwind and Multilingual features is the ability to add RTL language support. When enabled, the entire site will reflow content from right-to-left. Every element in the theme has been restyled to ensure it looks great in this mode which aids authors who wish to generate content in RTL languages.\nRTL is controlled on a per-language basis so you can mix and match both RTL and LTR content in your projects and the theme will respond accordingly.\nAutomatic image resizing # A big change in Blowfish 2.0 is the addition of automatic image resizing. Using the power of Hugo Pipes, images in Markdown content are now automatically scaled to different output sizes. These are then presented using HTML srcset attributes enabling optimised file sizes to be served to your site visitors.\n\u0026lt;!-- Markdown: ![My image](image.jpg) --\u0026gt; \u0026lt;img srcset=\u0026#34; /image_320x0_resize_q75_box.jpg 320w, /image_635x0_resize_q75_box.jpg 635w, /image_1024x0_resize_q75_box.jpg 1024w, /image_1270x0_resize_q75_box.jpg 2x\u0026#34; src=\u0026#34;/image_635x0_resize_q75_box.jpg\u0026#34; alt=\u0026#34;My image\u0026#34; /\u0026gt; Best of all there\u0026rsquo;s nothing you need to change! Simply insert standard Markdown image syntax and let the theme do the rest. If you want a little more control, the figure shortcode has been completely rewritten to provide the same resizing benefits.\nSite search # Powered by Fuse.js, site search allows visitors to quickly and easily find your content. All searches are performed client-side meaning there\u0026rsquo;s nothing to configure on the server and queries are performed super fast. Simply enable the feature in your site configuration and you\u0026rsquo;re all set. Oh, and it also supports full keyboard navigation!\nTables of contents # A highly requested feature, Blowfish now supports tables of contents on article pages. You can see it in action on this page. The contents are fully responsive and will adjust to take advantage of the space available at different screen resolutions.\nAvailable on a global or per article basis, the table of contents can be fully customised using standard Hugo configuration values, allowing you to adjust the behaviour to suit your project.\nAccessibility improvements # From adding ARIA descriptions to more items or simply adjusting the contrast of certain text elements, this release is the most accessible yet.\nVersion 2 also introduces \u0026ldquo;skip to content\u0026rdquo; and \u0026ldquo;scroll to top\u0026rdquo; links that enable quick navigation. There\u0026rsquo;s also keyboard shortcuts for enabling items like search without reaching for the mouse.\nThe new image resizing features also provide full control over alt and title elements enabling an accessible experience for all visitors.\nA whole lot more # There\u0026rsquo;s countless other features to explore. From being able to display taxonomies on articles and list pages, to using the new headline author parameter to customise your homepage. There\u0026rsquo;s also improved JSON-LD strucured data which further optimises SEO performance.\n","date":"19 January 2022","permalink":"/blowfish/docs/welcome/","section":"Documentation","summary":"Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.","title":"Welcome to Blowfish"},{"content":"","date":"7 November 2021","permalink":"/blowfish/examples/repo-blowfish-lite/","section":"Showcase","summary":"","title":"Blowfish Lite - Repo"},{"content":"","date":"6 November 2021","permalink":"/blowfish/examples/repo-blowfish-artist/","section":"Showcase","summary":"","title":"Blowfish Artist - Repo"},{"content":"","date":"6 November 2021","permalink":"/blowfish/examples/repo-blowfish-lowkey/","section":"Showcase","summary":"","title":"Blowfish Lowkey - Repo"},{"content":"","date":"6 November 2020","permalink":"/blowfish/examples/blowfish-template/","section":"Showcase","summary":"","title":"Blowfish Template"},{"content":"","date":"6 November 2020","permalink":"/blowfish/examples/blowfish-template-repo/","section":"Showcase","summary":"","title":"Blowfish Template - GitHub Repo"},{"content":"","date":"16 August 2020","permalink":"/blowfish/tags/installation/","section":"Tags","summary":"","title":"installation"},{"content":"Simply follow the standard Hugo Quick Start procedure to get up and running quickly.\nDetailed installation instructions can be found below. Instructions for updating the theme are also available.\nInstallation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state. Most of the dependencies mentioned in this guide can be installed using the package manager of choice for your platform.\nInstall Hugo # If you haven\u0026rsquo;t used Hugo before, you will need to install it onto your local machine. You can check if it\u0026rsquo;s already installed by running the command hugo version.\nMake sure you are using Hugo version 0.87.0 or later as the theme takes advantage of some of the latest Hugo features. You can find detailed installation instructions for your platform in the Hugo docs.\nCreate a new site # Run the command hugo new site mywebsite to create a new Hugo site in a directory named mywebsite.\nNote that you can name the project directory whatever you choose, but the instructions below will assume it\u0026rsquo;s named mywebsite. If you use a different name, be sure to substitute it accordingly.\nDownload the Blowfish theme # There several different ways to install the Blowfish theme into your Hugo website. From easiest to most difficult to install and maintain, they are:\nGit submodule (recommended) Hugo module Manual file copy If you\u0026rsquo;re unsure, choose the Git submodule method.\nInstall using git # This method is the quickest and easiest for keeping the theme up-to-date. Besides Hugo and Go, you\u0026rsquo;ll also need to ensure you have Git installed on your local machine.\nChange into the directory for your Hugo website (that you created above), initialise a new git repository and add Blowfish as a submodule.\ncd mywebsite git init git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish Then continue to set up the theme configuration files.\nInstall using Hugo # For this method you\u0026rsquo;ll use Hugo to manage your themes. Hugo uses Go to initialise and manage modules so you need to ensure you have go installed before proceeding.\nDownload and install Go. You can check if it\u0026rsquo;s already installed by using the command go version.\nMake sure you are using Go version 1.12 or later as Hugo requires this for modules to work correctly. From your Hugo project directory (that you created above), initialise modules for your website:\n# If you\u0026#39;re managing your project on GitHub hugo mod init github.com/\u0026lt;username\u0026gt;/\u0026lt;repo-name\u0026gt; # If you\u0026#39;re managing your project locally hugo mod init my-project Add the theme to your configuration by creating a new file config/_default/module.toml and adding the following:\n[[imports]] path = \u0026#34;github.com/nunocoracao/blowfish/v2\u0026#34; Start your server using hugo server and the theme will be downloaded automatically.\nContinue to set up the theme configuration files.\nInstall manually # Download the latest release of the theme source code.\nDownload from Github Extract the archive, rename the folder to blowfish and move it to the themes/ directory inside your Hugo project\u0026rsquo;s root folder.\nContinue to set up the theme configuration files.\nSet up theme configuration files # In the root folder of your website, delete the config.toml file that was generated by Hugo. Copy the *.toml config files from the theme into your config/_default/ folder. This will ensure you have all the correct theme settings and will enable you to easily customise the theme to your needs.\nNote: You should not overwrite the module.toml file if one already exists in your project! Depending on how you installed the theme you will find the theme config files in different places:\nHugo Modules: In the Hugo cache directory, or download a copy from GitHub Git submodule or Manual install: themes/blowfish/config/_default Once you\u0026rsquo;ve copied the files, your config folder should look like this:\nconfig/_default/ ├─ config.toml ├─ languages.en.toml ├─ markup.toml ├─ menus.en.toml ├─ module.toml # if you installed using Hugo Modules └─ params.toml Important: If you didn\u0026rsquo;t use Hugo Modules to install Blowfish, you must add the line theme = \u0026quot;blowfish\u0026quot; to the top of your config.toml file. Next steps # The basic Blowfish installation is now complete. Continue to the Getting Started section to learn more about configuring the theme.\nInstalling updates # From time to time there will be new releases posted that apply fixes and add new functionality to the theme. In order to take advantage of these changes, you will need to update the theme files on your website.\nHow you go about this will depend on the installation method you chose when the theme was originally installed. Instructions for each method can be found below.\nGit submodule Hugo module Manual file copy Update using git # Git submodules can be updated using the git command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository:\ngit submodule update --remote --merge Once the submodule has been updated, rebuild your site and check everything works as expected.\nUpdate using Hugo # Hugo makes updating modules super easy. Simply change into your project directory and execute the following command:\nhugo mod get -u Hugo will automatically update any modules that are required for your project. It does this by inspecting your module.toml and go.mod files. If you have any issues with the update, check to ensure these files are still configured correctly.\nThen simply rebuild your site and check everything works as expected.\nUpdate manually # Updating Blowfish manually requires you to download the latest copy of the theme and replace the old version in your project.\nNote that any local customisations you have made to the theme files will be lost during this process. Download the latest release of the theme source code.\nDownload from Github Extract the archive, rename the folder to blowfish and move it to the themes/ directory inside your Hugo project\u0026rsquo;s root folder. You will need to overwrite the existing directory to replace all the theme files.\nRebuild your site and check everything works as expected.\n","date":"16 August 2020","permalink":"/blowfish/docs/installation/","section":"Documentation","summary":"Simply follow the standard Hugo Quick Start procedure to get up and running quickly.\nDetailed installation instructions can be found below. Instructions for updating the theme are also available.\nInstallation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.","title":"Installation"},{"content":" This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.\nBasic configuration # Before creating any content, there are a few things you should set for a new installation. Starting in the config.toml file, set the baseURL and languageCode parameters. The languageCode should be set to the main language that you will be using to author your content.\n# config/_default/config.toml baseURL = \u0026#34;https://your_domain.com/\u0026#34; languageCode = \u0026#34;en\u0026#34; The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.\nLocate the languages.en.toml file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to languages.fr.toml.\nNote that the language code in the language config filename should match the languageCode setting in config.toml. # config/_default/languages.en.toml title = \u0026#34;My awesome website\u0026#34; [author] name = \u0026#34;My name\u0026#34; image = \u0026#34;img/author.jpg\u0026#34; headline = \u0026#34;A generally awesome human\u0026#34; bio = \u0026#34;A little bit about me\u0026#34; links = [ { twitter = \u0026#34;https://twitter.com/username\u0026#34; } ] The [author] configuration determines how the author information is displayed on the website. The image should be placed in the site\u0026rsquo;s assets/ folder. Links will be displayed in the order they are listed.\nIf you need extra detail, further information about each of these configuration options, is covered in the Configuration section.\nColour schemes # Blowfish ships with a number of colour schemes out of the box. To change the scheme, simply set the colorScheme theme parameter. Valid options are blowfish (default), avocado, fire, ocean and slate.\n# config/_default/params.toml colorScheme = \u0026#34;blowfish\u0026#34; Blowfish defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in Tailwind.\nBlowfish (default) # Avocado # Fire # Forest # Princess # Neon # Bloody # Terminal # Marvel # Noir # Autumn # Congo # Slate # Although these are the default schemes, you can also create your own. Refer to the Advanced Customisation section for details.\nOrganising content # By default, Blowfish doesn\u0026rsquo;t force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer pages for a static site, posts for a blog, or projects for a portfolio.\nHere\u0026rsquo;s a quick overview of a basic Blowfish project. All content is placed within the content folder:\n. ├── assets │ └── img │ └── author.jpg ├── config │ └── _default ├── content │ ├── _index.md │ ├── about.md │ └── posts │ ├── _index.md │ ├── first-post.md │ └── another-post │ ├── aardvark.jpg │ └── index.md └── themes └── blowfish It\u0026rsquo;s important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the official Hugo docs for more information.\nBlowfish is also flexible when it comes to taxonomies. Some people prefer to use tags and categories to group their content, others prefer to use topics.\nHugo defaults to using posts, tags and categories out of the box and this will work fine if that\u0026rsquo;s what you want. If you wish to customise this, however, you can do so by creating a taxonomies.toml configuration file:\n# config/_default/taxonomies.toml topic = \u0026#34;topics\u0026#34; This will replace the default tags and categories with topics. Refer to the Hugo Taxonomy docs for more information on naming taxonomies.\nWhen you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.\nMenus # Blowfish has two menus that can be customised to suit the content and layout of your site. The main menu appears in the site header and the footer menu appears at the bottom of the page just above the copyright notice.\nBoth menus are configured in the menus.en.toml file. Similarly to the languages config file, if you wish to use another language, rename this file and replace en with the language code you wish to use.\n# config/_default/menus.toml [[main]] name = \u0026#34;Blog\u0026#34; pageRef = \u0026#34;posts\u0026#34; weight = 10 [[main]] name = \u0026#34;Topics\u0026#34; pageRef = \u0026#34;topics\u0026#34; weight = 20 [[main]] pre = \u0026#34;github\u0026#34; name = \u0026#34;GitHub\u0026#34; url = \u0026#34;https://github.com/nunocoracao/blowfish\u0026#34; weight = 30 [[main]] identifier = \u0026#34;github2\u0026#34; pre = \u0026#34;github\u0026#34; url = \u0026#34;https://github.com/nunocoracao/blowfish\u0026#34; weight = 40 [[footer]] name = \u0026#34;Privacy\u0026#34; url = \u0026#34;https://external-link\u0026#34; The name parameter specifies the text that is used in the menu link. You can also optionally provide a title which fills the HTML title attribute for the link.\nThe pageRef parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the url parameter can be used.\nThe pre parameter allows you to place an icon from Blowfish\u0026rsquo;s icon set on the menu entry. This parameter can be used with name parameter or by itself. If you want to use multiple menu entries with just icons please set the identifierparameter otherwise Hugo will default to the naming tag as the id and probably not display all the menu entries.\nMenu links will be sorted from lowest to highest weight, and then alphabetically by name.\nBoth menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.\nNested menus # The theme also supports nested menus. In order to use them you just need to define a parent entry in menu.toml and its sub-menus using the parent parameter to reference the parent. All properties can be used for sub-menus. pageRef and url can also be used in the parent entry. Nested menus are only available in the main menu not for the footer.\n# config/_default/menus.toml [[main]] name = \u0026#34;Parent\u0026#34; weight = 20 [[main]] name = \u0026#34;sub-menu 1\u0026#34; parent = \u0026#34;Parent\u0026#34; pageRef = \u0026#34;samples\u0026#34; weight = 20 [[main]] name = \u0026#34;sub-menu 2\u0026#34; parent = \u0026#34;Parent\u0026#34; pageRef = \u0026#34;samples\u0026#34; weight = 20 [[main]] name = \u0026#34;sub-menu 3\u0026#34; parent = \u0026#34;Parent\u0026#34; pre = \u0026#34;github\u0026#34; pageRef = \u0026#34;samples\u0026#34; weight = 20 Sub-Navigation menu # Additionally, you can also configure a sub-navigation menu. Just define new menu entries as subnavigation in menu.toml. This will render a second line with caregories below the main header menu.\n# config/_default/menus.toml [[subnavigation]] name = \u0026#34;An interesting topic\u0026#34; pageRef = \u0026#34;tags/interesting-topic\u0026#34; weight = 10 [[subnavigation]] name = \u0026#34;My Awesome Category\u0026#34; pageRef = \u0026#34;categories/awesome\u0026#34; weight = 20 Thumbnails \u0026amp; Backgrounds # Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article folder. And that\u0026rsquo;s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.\nHere is also a guide with more info and a sample if you want to see how you can do it.\nAdditionally, Blowfish also supports background hero images in articles and lists. In order to use a different image than the featured one, add an image file in which the name starts with background*.\nDetailed configuration # The steps above are the bare minimum configuration. If you now run hugo server you will be presented with a blank Blowfish website. Detailed configuration is covered in the Configuration section.\n","date":"15 August 2020","permalink":"/blowfish/docs/getting-started/","section":"Documentation","summary":"This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.","title":"Getting Started"},{"content":"","date":"14 August 2020","permalink":"/blowfish/tags/config/","section":"Tags","summary":"","title":"config"},{"content":"Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.\nThe theme ships with a default configuration that gets you up and running with a basic blog or static website.\nConfiguration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.\nThe default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.\nAs outlined in the installation instructions, you should adjust your theme configuration by modifying the files in the config/_default/ folder of your Hugo project and delete the config.toml file in your project root. Site configuration # Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.\nThe site configuration is managed through the config/_default/config.toml file. The table below outlines all the settings that the Blowfish takes advantage of.\nNote that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. outputs.home refers to [outputs] home).\nName Default Description theme \u0026quot;blowfish\u0026quot; When using Hugo Modules this config value should be removed. For all other installation types, this must be set to blowfish for the theme to function. baseURL Not set The URL to the root of the website. defaultContentLanguage \u0026quot;en\u0026quot; This value determines the default language of theme components and content. Refer to the language and i18n section below for supported language codes. enableRobotsTXT true When enabled, a robots.txt file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made robots.txt, set to false and place your file in the static directory. For complete control, you may provide a custom layout to generate this file. paginate 10 The number of articles listed on each page of the article listing. summaryLength 0 The number of words that are used to generate the article summary when one is not provided in the front matter. A value of 0 will use the first sentence. This value has no effect when summaries are hidden. outputs.home [\u0026quot;HTML\u0026quot;, \u0026quot;RSS\u0026quot;, \u0026quot;JSON\u0026quot;] The output formats that are generated for the site. Blowfish requires HTML, RSS and JSON for all theme components to work correctly. permalinks Not set Refer to the Hugo docs for permalink configuration. taxonomies Not set Refer to the Organising content section for taxonomy configuration. Thumbnails # Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported but we recommend .png or .jpg) that starts with feature* inside your article folder. And that\u0026rsquo;s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.\nHere is also a guide with more info and a sample if you want to see how you can do it.\nLanguage and i18n # Blowfish is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.\nThe theme currently supports the following languages by default:\nLanguage Code 🇧🇬 Bulgarian bg 🇧🇩 Bengali bn 🇨🇿 Czech cs 🇩🇪 German de 🇬🇧 English en 🇪🇸 Spanish (Spain) es 🇫🇮 Finnish fi 🇫🇷 French fr 🇮🇱 Hebrew he 🇭🇷 Croatian hr 🇭🇺 Hungarian hu 🇮🇩 Indonesian id 🇮🇹 Italian it 🇯🇵 Japanese ja 🇵🇱 Polish pl 🇧🇷 Portuguese (Brazil) pt-br 🇵🇹 Portuguese (Portugal) pt-pt 🇷🇴 Romanian ro 🇷🇺 Russian ru 🇹🇷 Turkish tr 🇻🇳 Vietnamese vi 🇨🇳 Simplified Chinese (China) zh-cn 🇹🇼 Traditional Chinese (Taiwan) zh-tw The default translations can be overridden by creating a custom file in i18n/[code].yaml that contains the translation strings. You can also use this method to add new languages. If you\u0026rsquo;d like to share a new translation with the community, please open a pull request.\nConfiguration # In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Blowfish includes an English language configuration at config/_default/languages.en.toml.\nThe default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format languages.[language-code].toml.\nNote: Ensure the defaultContentLanguage parameter in the site configuration matches the language code in your language config filename. Name Default Description languageCode \u0026quot;en\u0026quot; The Hugo language code for this file. It can be a top-level language (ie. en) or a sub-variant (ie. en-au) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the isoCode parameter which is case-sensitive. languageName \u0026quot;English\u0026quot; The name of the language. displayName \u0026quot;EN\u0026quot; The name used when the language appears on the website. isoCode \u0026quot;en\u0026quot; The ISO language code for HTML metadata purposes. It can be a top-level language (ie. en) or a sub-variant (ie. en-AU). weight 1 The weight determines the order of languages when building multilingual sites. rtl false Whether or not this is a RTL language. Set to true to reflow content from right-to-left. Blowfish fully supports using RTL and LTR languages at the same time and will dynamically adjust to both. dateFormat \u0026quot;2 January 2006\u0026quot; How dates are formatted in this language. Refer to the Hugo docs for acceptable formats. title \u0026quot;Blowfish\u0026quot; The title of the website. This will be displayed in the site header and footer. description Not set The website description. This will be used in the site metadata. copyright Not set A Markdown string for the site footer copyright message can include the placeholder { year } to dynamically insert the current year. If none is provided, Blowfish will automatically generate a copyright string using the site title. author.name Not set The author\u0026rsquo;s name. This will be displayed in article footers, and on the homepage when the profile layout is used. author.image Not set Path to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site\u0026rsquo;s assets/ folder. author.headline Not set A Markdown string containing the author\u0026rsquo;s headline. It will be displayed on the profile homepage under the author\u0026rsquo;s name. author.bio Not set A Markdown string containing the author\u0026rsquo;s bio. It will be displayed in article footers. author.links Not set The links to display alongside the author\u0026rsquo;s details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in assets/icons/. Menus # Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.\nMenu config files are named with the format menus.[language-code].toml. Always ensure that the language code used in the menus configuration matches the languages configuration.\nThe Getting Started section explains more about the structure of this file. You can also refer to the Hugo menu docs for more configuration examples.\nTheme parameters # Blowfish provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the config/_default/params.toml file.\nMany of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the Front Matter section for further details.\nGlobal # Name Default Description colorScheme \u0026quot;blowfish\u0026quot; The theme colour scheme to use. Valid values are blowfish (default), avocado, ocean, fire and slate. Refer to the Colour Schemes section for more details. defaultAppearance \u0026quot;light\u0026quot; The default theme appearance, either light or dark. autoSwitchAppearance true Whether the theme appearance automatically switches based upon the visitor\u0026rsquo;s operating system preference. Set to false to force the site to always use the defaultAppearance. enableSearch false Whether site search is enabled. Set to true to enable search functionality. Note that the search feature depends on the outputs.home setting in the site configuration being set correctly. enableCodeCopy false Whether copy-to-clipboard buttons are enabled for \u0026lt;code\u0026gt; blocks. The highlight.noClasses parameter must be set to false for code copy to function correctly. Read more about other configuration files below. logo Not set The relative path to the site logo file within the assets/ folder. The logo file should be provided at 2x resolution and supports any image dimensions. secondaryLogo Not set The relative path to the secondary site logo file within the assets/ folder. The logo file should be provided at 2x resolution and supports any image dimensions. This should have an inverted/contrasting colour scheme to logo. If set, this logo will be shown when users toggle from the defaultAppearance mode. mainSections Not set The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used. showViews Not set Whether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below. showLikes Not set Whether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below. robots Not set String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to Google\u0026rsquo;s docs for valid values. disableImageZoom false Disables image zoom feature across all the images in the site. disableImageOptimization false Disables image resize and optimization features across all the images in the site. defaultBackgroundImage Not set Default background image for both background homepage layout and background hero style defaultFeaturedImage Not set Default background image for all featured images across articles, will be overriden by a local featured image. highlightCurrentMenuArea Not set Marks menu entries in the main manu when selected smartTOC Not set Activate smart Table of Contents, items in view will be highlighted. smartTOCHideUnfocusedChildren Not set When smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus. Header # Name Default Description header.layout \u0026quot;basic\u0026quot; Defines the header for the entire site, supported values are basic, fixed, fixed-fill, and fixed-fill-blur. Footer # Name Default Description footer.showMenu true Show/hide the footer menu, which can be configured in the [[footer]] section of the config/_default/menus.en.toml file. footer.showCopyright true Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the copyright parameter in the languages configuration. footer.showThemeAttribution true Whether or not to show the \u0026ldquo;powered by\u0026rdquo; theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page). footer.showAppearanceSwitcher false Whether or not to show the appearance switcher in the site footer. The browser\u0026rsquo;s local storage is used to persist the visitor\u0026rsquo;s preference. footer.showScrollToTop true When set to true the scroll to top arrow is displayed. Homepage # Name Default Description homepage.layout \u0026quot;profile\u0026quot; The layout of the homepage. Valid values are page, profile, hero, card, background, or custom. When set to custom, you must provide your own layout by creating a /layouts/partials/home/custom.html file. Refer to the Homepage Layout section for more details. homepage.homepageImage Not set Image to be used in hero and card layouts. Refer to the Homepage Layout section for more details. homepage.showRecent false Whether or not to display the recent articles list on the homepage. homepage.showRecentItems 5 How many articles to display if showRecent is true. If variable is set to 0 or if it isn\u0026rsquo;t defined the system will default to 5 articles. homepage.showMoreLink false Wether or not to display a show more link at the end of your posts that takes the user to a predefined place. homepage.showMoreLinkDest /posts The destination of the show more button. homepage.cardView false Display recent articles as a gallery of cards. homepage.cardViewScreenWidth false Enhance the width of the recent articles card gallery to take the full width available. homepage.layoutBackgroundBlur false Makes the background image in the homepage layout blur with the scroll Article # Name Default Description article.showDate true Whether or not article dates are displayed. article.showViews false Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. article.showLikes false Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. article.showDateUpdated false Whether or not the dates articles were updated are displayed. article.showAuthor true Whether or not the author box is displayed in the article footer. article.showHero false Whether the thumbnail image will be shown as a hero image within each article page. article.heroStyle Not set Style to display the hero image, valid options are: basic, big, background, thumbAndBackground. article.layoutBackgroundBlur true Makes the background image in the background article heroStyle blur with the scroll article.layoutBackgroundHeaderSpace true Add space between the header and the body. article.showBreadcrumbs false Whether or not breadcrumbs are displayed in the article header. article.showDraftLabel true Whether or not the draft indicator is shown next to articles when site is built with --buildDrafts. article.showEdit false Whether or not the link to edit the article content should be displayed. article.editURL Not set When article.showEdit is active, the URL for the edit link. article.editAppendPath true When article.showEdit is active, whether or not the path to the current article should be appended to the URL set at article.editURL. article.seriesOpened false Whether or not the series module will be displayed open by default or not. article.showHeadingAnchors true Whether or not heading anchor links are displayed alongside headings within articles. article.showPagination true Whether or not the next/previous article links are displayed in the article footer. article.invertPagination false Whether or not to flip the direction of the next/previous article links. article.showReadingTime true Whether or not article reading times are displayed. article.showTableOfContents false Whether or not the table of contents is displayed on articles. article.showRelatedContent false Display related content for each post. Might required additional configuration to your config.toml. Please check the theme config.toml if you want to enable this feature and copy all the relevant related entries. Also check Hugo\u0026rsquo;s docs on related content. article.relatedContentLimit 3 Limit of related articles to display if showRelatedContent is turned on. article.showTaxonomies false Whether or not the taxonomies related to this article are displayed. article.showAuthorsBadges false Whether the authors taxonomies are are displayed in the article or list header. This requires the setup of multiple authors and the authors taxonomy. Check this page for more details on how to configure that feature. article.showWordCount false Whether or not article word counts are displayed. article.showComments false Whether or not the comments partial is included after the article footer. article.showSummary false Whether or not article summaries are displayed on list pages. If a summary is not provided in the front matter, one will be auto generated using the summaryLength parameter in the site configuration. article.sharingLinks Not set Which sharing links to display at the end of each article. When not provided, or set to false no links will be displayed. Available values are: \u0026ldquo;linkedin\u0026rdquo;, \u0026ldquo;twitter\u0026rdquo;, \u0026ldquo;reddit\u0026rdquo;, \u0026ldquo;pinterest\u0026rdquo;, \u0026ldquo;facebook\u0026rdquo;, \u0026ldquo;email\u0026rdquo;, \u0026ldquo;whatsapp\u0026rdquo;, and \u0026ldquo;telegram\u0026rdquo; List # Name Default Description list.showHero false Whether the thumbnail image will be shown as a hero image within each list page. list.heroStyle Not set Style to display the hero image, valid options are: basic, big, background, thumbAndBackground. list.showBreadcrumbs false Whether or not breadcrumbs are displayed in the header on list pages. list.layoutBackgroundBlur true Makes the background image in the background list heroStyle blur with the scroll list.layoutBackgroundHeaderSpace true Add space between the header and the body. list.showTableOfContents false Whether or not the table of contents is displayed on list pages. list.showSummary false Whether or not article summaries are displayed on list pages. If a summary is not provided in the front matter, one will be auto generated using the summaryLength parameter in the site configuration. list.showViews false Whether or not list views are displayed. This requires firebase integrations to be enabled, look below. list.showLikes false Whether or not list likes are displayed. This requires firebase integrations to be enabled, look below. list.showCards false Whether or not each article is displayed as a card or as simple inline text. list.groupByYear true Whether or not articles are grouped by year on list pages. list.cardView false Display lists as a gallery of cards. list.cardViewScreenWidth false Enhance the width of card galleries in lists to take the full width available. list.constrainItemsWidth false Limit item width to prose to increase readability. Useful when no feature images are available. list.showTableOfContents false Whether or not the table of contents is displayed on articles. Sitemap # Name Default Description sitemap.excludedKinds [\u0026quot;taxonomy\u0026quot;, \u0026quot;term\u0026quot;] Kinds of content that should be excluded from the generated /sitemap.xml file. Refer to the Hugo docs for acceptable values. Taxonomy # Name Default Description taxonomy.showTermCount true Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing. taxonomy.showHero false Whether the thumbnail image will be shown as a hero image within each taxonomy page. taxonomy.heroStyle Not set Style to display the hero image, valid options are: basic, big, background, thumbAndBackground. taxonomy.showBreadcrumbs false Whether or not breadcrumbs are displayed in the taxonomy header. taxonomy.showViews false Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. taxonomy.showLikes false Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. taxonomy.showTableOfContents false Whether or not the table of contents is displayed on taxonomies. taxonomy.cardView false Display lists as a gallery of cards. Term # Name Default Description term.showHero false Whether the thumbnail image will be shown as a hero image within each term page. term.heroStyle Not set Style to display the hero image, valid options are: basic, big, background, thumbAndBackground. term.showBreadcrumbs false Whether or not breadcrumbs are displayed in the term header. term.showViews false Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. term.showLikes false Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. term.showTableOfContents false Whether or not the table of contents is displayed on terms. term.groupByYear false Whether or not articles are grouped by year on term pages. term.cardView false Display lists as a gallery of cards. term.cardViewScreenWidth false Enhance the width of card galleries in lists to take the full width available. Firebase # Name Default Description firebase.apiKey Not set Firebase apiKey, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.authDomain Not set Firebase authDomain, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.projectId Not set Firebase projectId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.storageBucket Not set Firebase storageBucket, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.messagingSenderId Not set Firebase messagingSenderId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.appId Not set Firebase appId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. firebase.measurementId Not set Firebase measurementId, required to integrate against Firebase. Check this page for a guide on how to integrate Firebase into Blowfish. Fathom Analytics # Name Default Description fathomAnalytics.site Not set The site code generated by Fathom Analytics for the website. Refer to the Analytics docs for more details. fathomAnalytics.domain Not set If using a custom domain with Fathom Analytics, provide it here to serve script.js from the custom domain. BuyMeACoffee # Name Default Description buymeacoffee.identifier Not set The identifier to the target buymeacoffee account. buymeacoffee.globalWidget Not set Activate the global buymeacoffee widget. buymeacoffee.globalWidgetMessage Not set Message what will be displayed the first time a new user lands on the site. buymeacoffee.globalWidgetColor Not set Widget color in hex format. buymeacoffee.globalWidgetPosition Not set Position of the widget, i.e. \u0026ldquo;Left\u0026rdquo; or \u0026ldquo;Right\u0026rdquo; Verifications # Name Default Description verification.google Not set The site verification string provided by Google to be included in the site metadata. verification.bing Not set The site verification string provided by Bing to be included in the site metadata. verification.pinterest Not set The site verification string provided by Pinterest to be included in the site metadata. verification.yandex Not set The site verification string provided by Yandex to be included in the site metadata. Other configuration files # The theme also includes a markup.toml configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Blowfish.\nAlways ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour.\n","date":"14 August 2020","permalink":"/blowfish/docs/configuration/","section":"Documentation","summary":"Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.\nThe theme ships with a default configuration that gets you up and running with a basic blog or static website.","title":"Configuration"},{"content":"","date":"14 August 2020","permalink":"/blowfish/tags/icons/","section":"Tags","summary":"","title":"icons"},{"content":"Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode.\nAdditionally, custom icons are also fully supported. Simply provide your own SVG icon assets by placing them in the assets/icons/ directory in the root of your project. Any icons in the icons directory will then be available to use throughout the theme. In order achieve automatic color filling every SVG path needs fill=\u0026ldquo;currentColor\u0026rdquo; XML attribute.\nThe full list of built-in icons and their corresponding names can referenced below.\nIcon name Preview amazon apple bars bell blogger bomb bug check circle-info code codepen comment dev discourse docker download dribbble edit email envelope eye facebook fire flickr fork foursquare ghost github gitlab globe goodreads google hackernews hashnode heart-empty heart image instagram keybase kickstarter ko-fi \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e lastfm lightbulb link linkedin list location-dot lock mastodon medium microsoft moon mug-hot music orcid patreon paypal pencil pgpkey phone pinterest poo reddit researchgate rss rss-square search shield skull-crossbones slack snapchat soundcloud stack-overflow star steam stripe substack sun tag telegram tiktok triangle-exclamation tumblr twitch twitter wand-magic-sparkles whatsapp xmark youtube ","date":"14 August 2020","permalink":"/blowfish/samples/icons/","section":"Samples","summary":"Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode.\nAdditionally, custom icons are also fully supported.","title":"Icons"},{"content":"","date":"14 August 2020","permalink":"/blowfish/tags/shortcodes/","section":"Tags","summary":"","title":"shortcodes"},{"content":"","date":"14 August 2020","permalink":"/blowfish/tags/users/","section":"Tags","summary":"","title":"users"},{"content":" Real websites that are built with Blowfish. Blowfish user? To add your site to this list, submit a pull request. Website Details nunocoracao.com Personal site - Theme author madoke.org Personal site code-chimp.com Personal site mucahitkurtlar.github.io Personal site brendanwallace.github.io Personal site fedeizzo.dev Personal site cuttontail.blog Personal site pmnxis.github.io Personal site ciicadalab.github.io Organization site georgiancodeclub.github.io College club site albertolvera.com Personal site chris.banes.dev Personal site fahru.my.id Personal site jeknom.github.io Personal site blog.watchstep.me Personal site overdevelop.io Personal site loisvelasco.is-a.dev Personal site tabletopflore.com Personal site omarohn.de Personal site spelucin.me Personal site insidemordecai.com Personal site jamesdixon.dev Personal site blastomussa.dev Personal site cdell.io Personal site jam.dsg.li Organization site priyakdey.com Personal site sdehm.dev Personal site dizzytech.de Personal site alejandro-ao.com Personal site adir1.com Personal site niklas-hartmann-dev.de Personal site blog.muffn.io Personal site nick.bouwhuis.net Personal site vividscc.com Business site muhalvin.github.io Personal site mariuskimmina.com Personal site ashwinbalaji.xyz Personal site technicat.com Company site fugugames.com Games site hyperbowl3d.com Game site talkdimsum.com App site alanctanner.com Personal site rdgo.dev Personal site ripplesding.github.io Personal site terraformbuch.de Book site shenshu.fun Personal site hellstabber.github.io Personal site clemsau.com Personal site lelouvincx.github.io Personal site weaxsey.org Personal site nikarashihatsu.github.io Personal site blog.enmanuelmoreira.com Personal site halcyonstraits.com Doll photography Blowfish user? To add your site to this list, submit a pull request. ","date":"14 August 2020","permalink":"/blowfish/users/","section":"Welcome to Blowfish! 🎉","summary":"Real websites that are built with Blowfish. Blowfish user? To add your site to this list, submit a pull request. Website Details nunocoracao.com Personal site - Theme author madoke.org Personal site code-chimp.","title":"Users"},{"content":"","date":"13 August 2020","permalink":"/blowfish/tags/homepage/","section":"Tags","summary":"","title":"homepage"},{"content":"Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.\nThe layout of the homepage is controlled by the homepage.layout setting in the params.toml configuration file. Additionally, all layouts have the option to include a listing of recent articles.\nProfile layout # The default layout is the profile layout, which is great for personal websites and blogs. It puts the author\u0026rsquo;s details front and centre by providing an image and links to social profiles.\nThe author information is provided in the languages configuration file. Refer to the Getting Started and Language Configuration sections for parameter details.\nAdditionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.\nTo enable the Profile layout, set homepage.layout = \u0026quot;profile\u0026quot; in the params.toml configuration file.\nPage layout # The page layout is simply a normal content page that displays your Markdown content. It\u0026rsquo;s great for static websites and provides a lot of flexibility.\nTo enable the Page layout, set homepage.layout = \u0026quot;page\u0026quot; in the params.toml configuration file.\nHero layout # The hero layout brings together ideas from the profile and card layouts. This one not only displays information on the author of the site but it also loads your markdown beneath it.\nTo enable the Hero layout, set homepage.layout = \u0026quot;hero\u0026quot; and homepage.homepageImage in the params.toml configuration file.\nBackground layout # The background layout is a more smooth version of the hero layout. As in the Hero layout, this one also displays both information on the author of the site and loads your markdown beneath it.\nTo enable the Background layout, set homepage.layout = \u0026quot;background\u0026quot; and homepage.homepageImage in the params.toml configuration file.\nCard layout # The card layout is an extension of the page layout. It provides the same level of flexibility by also displaying your markdown content and adds a card image to display visual content.\nTo enable the Card layout, set homepage.layout = \u0026quot;card\u0026quot; and homepage.homepageImage in the params.toml configuration file.\nCustom layout # If the built-in homepage layouts aren\u0026rsquo;t sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.\nTo enable the Custom layout, set homepage.layout = \u0026quot;custom\u0026quot; in the params.toml configuration file.\nWith the configuration value set, create a new custom.html file and place it in layouts/partials/home/custom.html. Now whatever is in the custom.html file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.\nTo include recent articles on the custom layout, use the recent-articles/main.html partial.\nAs an example, the homepage on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the GitHub repo to see how it works.\nRecent articles # All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the homepage.showRecent setting to true in the params.toml configuration file.\nThe articles listed in this section are derived from the mainSections setting which allows for whatever content types you are using on your website. For instance, if you had content sections for posts and projects you could set this setting to [\u0026quot;posts\u0026quot;, \u0026quot;projects\u0026quot;] and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: [\u0026quot;blog\u0026quot;].\nThumbnails # Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article strucutre, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article folder. And that\u0026rsquo;s it, Blowfish will then able to both use the image as a thumbnail within your website as well as for oEmbed cards across social platforms.\nHere is a guide with more info and a sample if you want to see an example.\nCard Gallery # Blowfish also supports displaying the standard lists of articles as card galleries. You can config this both for the recent section in the homepage and for lists of articles across your website. For homepage you can use homepage.cardView and homepage.cardViewScreenWidth; and for lists use list.cardView and list.cardViewScreenWidth. Check the Configuration docs for more details, and the homepage for a live demo.\n","date":"13 August 2020","permalink":"/blowfish/docs/homepage-layout/","section":"Documentation","summary":"Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.","title":"Homepage Layout"},{"content":"","date":"13 August 2020","permalink":"/blowfish/tags/layouts/","section":"Tags","summary":"","title":"layouts"},{"content":"","date":"12 August 2020","permalink":"/blowfish/tags/front-matter/","section":"Tags","summary":"","title":"front matter"},{"content":"In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.\nFront matter parameter default values are inherited from the theme\u0026rsquo;s base configuration, so you only need to specify these parameters in your front matter when you want to override the default.\nName Default Description title Not set The name of the article. description Not set The text description for the article. It is used in the HTML metadata. externalUrl Not set If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website. editURL article.editURL When showEdit is active, the URL for the edit link. editAppendPath article.editAppendPath When showEdit is active, whether or not the path to the current article should be appended to the URL set at editURL. groupByYear list.groupByYear Whether or not articles are grouped by year on list pages. menu Not set When a value is provided, a link to this article will appear in the named menus. Valid values are main or footer. robots Not set String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to Google\u0026rsquo;s docs for valid values. sharingLinks article.sharingLinks Which sharing links to display at the end of this article. When not provided, or set to false no links will be displayed. showAuthor article.showAuthor Whether or not the author box for the deafult author is displayed in the article footer. authors Not set Array of values for authors, if set it overrides showAuthor settings for page or site. Used on the multiple authors feature, check this page for more details on how to configure that feature. showAuthorsBadges article.showAuthorsBadges Whether the authors taxonomies are are displayed in the article or list header. This requires the setup of multiple authors and the authors taxonomy. Check this page for more details on how to configure that feature. showHero article.showHero Whether the thumbnail image will be shown as a hero image within the article page. heroStyle article.heroStyle Style to display the hero image, valid options are: basic, big, background, thumbAndBackground. showBreadcrumbs article.showBreadcrumbs or list.showBreadcrumbs Whether the breadcrumbs are displayed in the article or list header. showDate article.showDate Whether or not the article date is displayed. The date is set using the date parameter. showDateUpdated article.showDateUpdated Whether or not the date the article was updated is displayed. The date is set using the lastmod parameter. showEdit article.showEdit Whether or not the link to edit the article content should be displayed. showHeadingAnchors article.showHeadingAnchors Whether or not heading anchor links are displayed alongside headings within this article. showPagination article.showPagination Whether or not the next/previous article links are displayed in the article footer. invertPagination article.invertPagination Whether or not to flip the direction of the next/previous article links. showReadingTime article.showReadingTime Whether or not the article reading time is displayed. showTaxonomies article.showTaxonomies Whether or not the taxonomies that relate to this article are displayed. showTableOfContents article.showTableOfContents Whether or not the table of contents is displayed on this article. showWordCount article.showWordCount Whether or not the article word count is displayed. showComments article.showComments Whether or not the comments partial is included after the article footer. showSummary list.showSummary Whether or not the article summary should be displayed on list pages. showViews article.showViews Whether or not the article views should be displayed in lists and detailed view. This requires a firebase integration. Check this page for a guide on how to integrate Firebase into Blowfish showLikes article.showLikes Whether or not the article likes should be displayed in lists and detailed view. This requires a firebase integration. Check this page for a guide on how to integrate Firebase into Blowfish seriesOpened article.seriesOpened Whether or not the series module will be displayed open by default or not. series Not set Array of series the article belongs to, we recommend using only one series per article. series_order Not set Number of the article within the series. summary Auto generated using summaryLength (see site configuration) When showSummary is enabled, this is the Markdown string to be used as the summary for this article. xml true unless excluded by sitemap.excludedKinds Whether or not this article is included in the generated /sitemap.xml file. layoutBackgroundBlur true Makes the background image in the background heroStyle blur with the scroll layoutBackgroundHeaderSpace true Add space between the header and the body. ","date":"12 August 2020","permalink":"/blowfish/docs/front-matter/","section":"Documentation","summary":"In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.","title":"Front Matter"},{"content":" Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .png or .jpg) that starts with feature* inside your article main directory as shown in the example below.\ncontent └── awesome_article ├── index.md └── featured.png This will tell Blowfish that this article has a feature image that can be used both as a thumbnail across your website as well as for oEmbed cards across social platforms.\nFolder Strucutre # If you are using single .md files for your articles and have a file structure similar to this:\ncontent └── awesome_article.md You need to change it from a single markdown file into a folder. Create a directory with the same name of the article, inside create a index.md file. You\u0026rsquo;ll get a structure similar to what\u0026rsquo;s below.\ncontent └── awesome_article └── featured.png The you just need to add an image like explain earlier. If you want to see a sample of this you can consult this sample.\nHero Images # Thumbnails will be used by default as hero images withing each article. Use the global article.showHero or the front-matter parameter showHero to control this feature across the entire site or for each specific post. If you want to override the style of the hero image you can create a file called hero.html in ./layouts/partials/ that will override the original partial from the theme.\n","date":"12 August 2020","permalink":"/blowfish/docs/thumbnails/","section":"Documentation","summary":"Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .","title":"Thumbnails"},{"content":"","date":"11 August 2020","permalink":"/blowfish/tags/icon/","section":"Tags","summary":"","title":"icon"},{"content":"","date":"11 August 2020","permalink":"/blowfish/tags/lead/","section":"Tags","summary":"","title":"lead"},{"content":"","date":"11 August 2020","permalink":"/blowfish/tags/mermaid/","section":"Tags","summary":"","title":"mermaid"},{"content":"In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality.\nAlert # alert outputs its contents as a stylised message box within your article. It\u0026rsquo;s useful for drawing attention to important information that you don\u0026rsquo;t want the reader to miss.\nParameter Description icon Optional. the icon to display on the left side.\nDefault: exclaimation triangle icon (Check out the icon shortcode for more details on using icons.) iconColor Optional. the color for the icon in basic CSS style.\nCan be either hex values (#FFFFFF) or color names (white)\nBy default chosen based on the current color theme . cardColor Optional. the color for the card background in basic CSS style.\nCan be either hex values (#FFFFFF) or color names (white)\nBy default chosen based on the current color theme . textColor Optional. the color for the text in basic CSS style.\nCan be either hex values (#FFFFFF) or color names (white)\nBy default chosen based on the current color theme . The input is written in Markdown so you can format it however you please.\nExample 1: No params\n{{\u0026lt; alert \u0026gt;}} **Warning!** This action is destructive! {{\u0026lt; /alert \u0026gt;}} Warning! This action is destructive! Example 2: Unnamed param\n{{\u0026lt; alert \u0026#34;twitter\u0026#34; \u0026gt;}} Don\u0026#39;t forget to [follow me](https://twitter.com/nunocoracao) on Twitter. {{\u0026lt; /alert \u0026gt;}} Don\u0026rsquo;t forget to follow me on Twitter. Example 3: Named params\n{{\u0026lt; alert icon=\u0026#34;fire\u0026#34; cardColor=\u0026#34;#e63946\u0026#34; iconColor=\u0026#34;#1d3557\u0026#34; textColor=\u0026#34;#f1faee\u0026#34; \u0026gt;}} This is an error! {{\u0026lt; /alert \u0026gt;}} This is an error! Article # Article will embed a single article into a markdown file. The link to the file should be the .RelPermalink of the file to be embedded. Note that the shortcode will not display anything if it\u0026rsquo;s referencing it\u0026rsquo;s parent. Note: if you are running your website in a subfolder like Blowfish (i.e. /blowfish/) please include that path in the link.\nParameter Description link Required. the .RelPermalink to the target article. Example:\n{{\u0026lt; article link=\u0026#34;/docs/welcome/\u0026#34; \u0026gt;}} Badge # badge outputs a styled badge component which is useful for displaying metadata.\nExample:\n{{\u0026lt; badge \u0026gt;}} New article! {{\u0026lt; /badge \u0026gt;}} New article! Button # button outputs a styled button component which can be used to highlight a primary action. It has two optional variables href and target which can be used to specify the URL and target of the link.\nExample:\n{{\u0026lt; button href=\u0026#34;#button\u0026#34; target=\u0026#34;_self\u0026#34; \u0026gt;}} Call to action {{\u0026lt; /button \u0026gt;}} Call to action Carousel # carousel is used to showcase multiple images in an interactive and visually appealing way. This allows a user to slide through multiple images while only taking up the vertical space of a single one. All images are displayed using the full width of the parent component and using one of the predefined aspect ratios of 16:9, 21:9 or 32:9.\nParameter Description images Required. A regex string to match image names. aspectRatio Optional. The aspect ratio for the carousel. Either 16-9, 21-9 or 32-9. It is set to 16-9 by default. interval Optional. The interval for the auto-scrooling, specified in milliseconds. Defaults to 2000 (2s) Example 1: 16:9 aspect ratio and verbose list of images\n{{\u0026lt; carousel images=\u0026#34;{gallery/03.jpg, gallery/01.jpg, gallery/02.jpg, gallery/04.jpg}\u0026#34; \u0026gt;}} Previous Nextsads Example 2: 21:9 aspect ratio and regex-ed list of images\n{{\u0026lt; carousel images=\u0026#34;gallery/*\u0026#34; aspectRatio=\u0026#34;21-9\u0026#34; interval=\u0026#34;2500\u0026#34; \u0026gt;}} Previous Nextsads Chart # chart uses the Chart.js library to embed charts into articles using simple structured data. It supports a number of different chart styles and everything can be configured from within the shortcode. Simply provide the chart parameters between the shortcode tags and Chart.js will do the rest.\nRefer to the official Chart.js docs for details on syntax and supported chart types.\nExample:\n{{\u0026lt; chart \u0026gt;}} type: \u0026#39;bar\u0026#39;, data: { labels: [\u0026#39;Tomato\u0026#39;, \u0026#39;Blueberry\u0026#39;, \u0026#39;Banana\u0026#39;, \u0026#39;Lime\u0026#39;, \u0026#39;Orange\u0026#39;], datasets: [{ label: \u0026#39;# of votes\u0026#39;, data: [12, 19, 3, 5, 3], }] } {{\u0026lt; /chart \u0026gt;}} You can see some additional Chart.js examples on the charts samples page.\nFigure # Blowfish includes a figure shortcode for adding images to content. The shortcode replaces the base Hugo functionality in order to provide additional performance benefits.\nWhen a provided image is a page resource, it will be optimised using Hugo Pipes and scaled in order to provide images appropriate to different device resolutions. If a static asset or URL to an external image is provided, it will be included as-is without any image processing by Hugo.\nThe figure shortcode accepts six parameters:\nParameter Description src Required. The local path/filename or URL of the image. When providing a path and filename, the theme will attempt to locate the image using the following lookup order: Firstly, as a page resource bundled with the page; then an asset in the assets/ directory; then finally, a static image in the static/ directory. alt Alternative text description for the image. caption Markdown for the image caption, which will be displayed below the image. class Additional CSS classes to apply to the image. href URL that the image should be linked to. default Special parameter to revert to default Hugo figure behaviour. Simply provide default=true and then use normal Hugo shortcode syntax. Blowfish also supports automatic conversion of images included using standard Markdown syntax. Simply use the following format and the theme will handle the rest:\n![Alt text](image.jpg \u0026#34;Image caption\u0026#34;) Example:\n{{\u0026lt; figure src=\u0026#34;abstract.jpg\u0026#34; alt=\u0026#34;Abstract purple artwork\u0026#34; caption=\u0026#34;Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)\u0026#34; \u0026gt;}} \u0026lt;!-- OR --\u0026gt; ![Abstract purple artwork](abstract.jpg \u0026#34;Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)\u0026#34;) Photo by Jr Korpa on Unsplash Gallery # gallery allows you to showcase multiple images at once, in a responsive manner with more varied and interesting layouts.\nIn order to add images to the gallery, use img tags for each image and add class=\u0026quot;grid-wXX\u0026quot; in order for the gallery to be able to identify the column width for each image. The widths available by default start at 10% and go all the way to 100% in 5% increments. For example, to set the width to 65%, set the class to grid-w65. Additionally, widths for 33% and 66% are also available in order to build galleries with 3 cols. You can also leverage tailwind\u0026rsquo;s responsive indicators to have a reponsive grid.\nExample 1: normal gallery\n{{\u0026lt; gallery \u0026gt;}} \u0026lt;img src=\u0026#34;gallery/01.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/02.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/03.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/04.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/05.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/06.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/07.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; {{\u0026lt; /gallery \u0026gt;}} Example 2: responsive gallery\n{{\u0026lt; gallery \u0026gt;}} \u0026lt;img src=\u0026#34;gallery/01.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/02.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/03.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/04.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/05.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/06.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/07.jpg\u0026#34; class=\u0026#34;grid-w50 md:grid-w33 xl:grid-w25\u0026#34; /\u0026gt; {{\u0026lt; /gallery \u0026gt;}} GitHub Card # github allows you to quickly link a github repository, all while showing and updating in realtime stats about it, such as the number of stars and forks it has.\nParameter Description repo [String] github repo in the format of username/repo Example 1:\n{{\u0026lt; github repo=\u0026#34;nunocoracao/blowfish\u0026#34; \u0026gt;}} nunocoracao/blowfish Personal Website \u0026amp; Blog Theme for Hugo HTML 367 119 GitLab Card # gitlab allows you to quickly link a GitLab Project (GitLab\u0026rsquo;s jargon for repo). It displays realtime stats about it, such as the number of stars and forks it has. Unlike github it can\u0026rsquo;t display the main programming language of a project. Finaly custom GitLab instace URL can be provided, as long as the api/v4/projects/ endpoint is available, making this shortcode compatible with most self-hosted / entreprise deployments.\nParameter Description projectID [String] gitlab numeric ProjectID baseURL [String] optional gitlab instace URL, default is https://gitlab.com/ Example 1:\n{{\u0026lt; gitlab projectID=\u0026#34;278964\u0026#34; \u0026gt;}} GitLab.org / GitLab GitLab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a container, or on a cloud provider. 4349 8216 Icon # icon outputs an SVG icon and takes the icon name as its only parameter. The icon is scaled to match the current text size.\nExample:\n{{\u0026lt; icon \u0026#34;github\u0026#34; \u0026gt;}} Output: Icons are populated using Hugo pipelines which makes them very flexible. Blowfish includes a number of built-in icons for social, links and other purposes. Check the icon samples page for a full list of supported icons.\nCustom icons can be added by providing your own icon assets in the assets/icons/ directory of your project. The icon can then be referenced in the shortcode by using the SVG filename without the .svg extension.\nIcons can also be used in partials by calling the icon partial.\nKatex # The katex shortcode can be used to add mathematical expressions to article content using the KaTeX package. Refer to the online reference of supported TeX functions for the available syntax.\nTo include mathematical expressions in an article, simply place the shortcode anywhere with the content. It only needs to be included once per article and KaTeX will automatically render any markup on that page. Both inline and block notation are supported.\nInline notation can be generated by wrapping the expression in \\\\( and \\\\) delimiters. Alternatively, block notation can be generated using $$ delimiters.\nExample:\n{{\u0026lt; katex \u0026gt;}} \\\\(f(a,b,c) = (a^2+b^2+c^2)^3\\\\) \\(f(a,b,c) = (a^2+b^2+c^2)^3\\)\nCheck out the mathematical notation samples page for more examples.\nLead # lead is used to bring emphasis to the start of an article. It can be used to style an introduction, or to call out an important piece of information. Simply wrap any Markdown content in the lead shortcode.\nExample:\n{{\u0026lt; lead \u0026gt;}} When life gives you lemons, make lemonade. {{\u0026lt; /lead \u0026gt;}} When life gives you lemons, make lemonade. List # List will display a list of recent articles. This shortcode requires a limit value to constraint the list. Additionally, it supports a where and a value in order to filter articles by their parameters. Note that this shortcode will not display its parent page but it will count for the limit value.\nParameter Description limit Required. the number of recent articles to display. title Optional title for the list, default is Recent where The variable to be used for the query of articles e.g. Type value The value that will need to match the parameter defined in where for the query of articles e.g. for where == Type a valid value could be sample The where and value values are used in the following query where .Site.RegularPages $where $value in the code of the shortcode. Check Hugo docs to learn more about which parameters are available to use. Example #1:\n{{\u0026lt; list limit=2 \u0026gt;}} Recent Multiple Authors 1 min\u0026middot; 0 \u0026middot; 0 Nuno Coração ,\u0026nbsp; Dummy Second Author authors sample Thumbnails 1 min\u0026middot; 0 \u0026middot; 0 thumbnail sample Example #2:\n{{\u0026lt; list title=\u0026#34;Samples\u0026#34; limit=5 where=\u0026#34;Type\u0026#34; value=\u0026#34;sample\u0026#34; \u0026gt;}} Samples Multiple Authors 1 min\u0026middot; 0 \u0026middot; 0 Nuno Coração ,\u0026nbsp; Dummy Second Author authors sample Thumbnails 1 min\u0026middot; 0 \u0026middot; 0 thumbnail sample Icons 1 min\u0026middot; 0 \u0026middot; 0 icons sample shortcodes Markdown 3 mins\u0026middot; 0 \u0026middot; 0 markdown css html sample Rich Content 1 min\u0026middot; 0 \u0026middot; 0 shortcodes privacy sample gist twitter youtube vimeo Mermaid # mermaid allows you to draw detailed diagrams and visualisations using text. It uses Mermaid under the hood and supports a wide variety of diagrams, charts and other output formats.\nSimply write your Mermaid syntax within the mermaid shortcode and let the plugin do the rest.\nRefer to the official Mermaid docs for details on syntax and supported diagram types.\nExample:\n{{\u0026lt; mermaid \u0026gt;}} graph LR; A[Lemons]--\u0026gt;B[Lemonade]; B--\u0026gt;C[Profit] {{\u0026lt; /mermaid \u0026gt;}} graph LR; A[Lemons]--\u003eB[Lemonade]; B--\u003eC[Profit] You can see some additional Mermaid examples on the diagrams and flowcharts samples page.\nSwatches # swatches outputs a set of up to three different colors to showcase color elements like a color palette. This shortcode takes the HEX codes of each color and creates the visual elements for each.\nExample\n{{\u0026lt; swatches \u0026#34;#64748b\u0026#34; \u0026#34;#3b82f6\u0026#34; \u0026#34;#06b6d4\u0026#34; \u0026gt;}} Output Timeline # The timeline creates a visual timeline that can be used in different use-cases, e.g. professional experience, a project\u0026rsquo;s achievements, etc. The timeline shortcode relies on the timelineItem sub-shortcode to define each item within the main timeline. Each item can have the following properties.\nParameter Description icon the icon to be used in the timeline visuals. header header for each entry badge text to place within the top righ badge subheader entry\u0026rsquo;s subheader Example:\n{{\u0026lt; timeline \u0026gt;}} {{\u0026lt; timelineItem icon=\u0026#34;github\u0026#34; header=\u0026#34;header\u0026#34; badge=\u0026#34;badge test\u0026#34; subheader=\u0026#34;subheader\u0026#34; \u0026gt;}} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non magna ex. Donec sollicitudin ut lorem quis lobortis. Nam ac ipsum libero. Sed a ex eget ipsum tincidunt venenatis quis sed nisl. Pellentesque sed urna vel odio consequat tincidunt id ut purus. Nam sollicitudin est sed dui interdum rhoncus. {{\u0026lt; /timelineItem \u0026gt;}} {{\u0026lt; timelineItem icon=\u0026#34;code\u0026#34; header=\u0026#34;Another Awesome Header\u0026#34; badge=\u0026#34;date - present\u0026#34; subheader=\u0026#34;Awesome Subheader\u0026#34; \u0026gt;}} With html code \u0026lt;ul\u0026gt; \u0026lt;li\u0026gt;Coffee\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;Tea\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;Milk\u0026lt;/li\u0026gt; \u0026lt;/ul\u0026gt; {{\u0026lt; /timelineItem \u0026gt;}} {{\u0026lt; timelineItem icon=\u0026#34;star\u0026#34; header=\u0026#34;Shortcodes\u0026#34; badge=\u0026#34;AWESOME\u0026#34; \u0026gt;}} With other shortcodes {{\u0026lt; gallery \u0026gt;}} \u0026lt;img src=\u0026#34;gallery/01.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/02.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/03.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/04.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/05.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/06.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; \u0026lt;img src=\u0026#34;gallery/07.jpg\u0026#34; class=\u0026#34;grid-w33\u0026#34; /\u0026gt; {{\u0026lt; /gallery \u0026gt;}} {{\u0026lt; /timelineItem \u0026gt;}} {{\u0026lt; /timeline \u0026gt;}} header badge test subheader Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non magna ex. Donec sollicitudin ut lorem quis lobortis. Nam ac ipsum libero. Sed a ex eget ipsum tincidunt venenatis quis sed nisl. Pellentesque sed urna vel odio consequat tincidunt id ut purus. Nam sollicitudin est sed dui interdum rhoncus. Another Awesome Header date - present Awesome Subheader With html code Coffee Tea Milk Shortcodes AWESOME With other shortcodes TypeIt # TypeIt is the most versatile JavaScript tool for creating typewriter effects on the planet. With a straightforward configuration, it allows you to type single or multiple strings that break lines, delete \u0026amp; replace each other, and it even handles strings that contain complex HTML.\nBlowfish implements a sub-set of TypeIt features using a shortcode. Write your text within the typeit shortcode and use the following parameters to configure the behavior you want.\nParameter Description tag [String] html tag that will be used to render the strings. classList [String] List of css classes to apply to the html element. initialString [String] Initial string that will appear written and will be replaced. speed [number] Typing speed, measured in milliseconds between each step. lifeLike [boolean] Makes the typing pace irregular, as if a real person is doing it. startDelay [number] The amount of time before the plugin begins typing after being initialized. breakLines [boolean] Whether multiple strings are printed on top of each other (true), or if they\u0026rsquo;re deleted and replaced by each other (false). waitUntilVisible [boolean] Determines if the instance will begin when loaded or only when the target element becomes visible in the viewport. The default is true loop [boolean] Whether your strings will continuously loop after completing Example 1:\n{{\u0026lt; typeit \u0026gt;}} Lorem ipsum dolor sit amet {{\u0026lt; /typeit \u0026gt;}} Example 2:\n{{\u0026lt; typeit tag=h1 lifeLike=true \u0026gt;}} Lorem ipsum dolor sit amet, consectetur adipiscing elit. {{\u0026lt; /typeit \u0026gt;}} Example 3:\n{{\u0026lt; typeit tag=h3 speed=50 breakLines=false loop=true \u0026gt;}} Lorem ipsum dolor sit amet, consectetur adipiscing elit. {{\u0026lt; /typeit \u0026gt;}} ","date":"11 August 2020","permalink":"/blowfish/docs/shortcodes/","section":"Documentation","summary":"In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality.\nAlert # alert outputs its contents as a stylised message box within your article. It\u0026rsquo;s useful for drawing attention to important information that you don\u0026rsquo;t want the reader to miss.","title":"Shortcodes"},{"content":"","date":"10 August 2020","permalink":"/blowfish/tags/analytics/","section":"Tags","summary":"","title":"analytics"},{"content":"","date":"10 August 2020","permalink":"/blowfish/tags/comments/","section":"Tags","summary":"","title":"comments"},{"content":"","date":"10 August 2020","permalink":"/blowfish/tags/favicons/","section":"Tags","summary":"","title":"favicons"},{"content":"Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.\nTo keep everything backwards compatible, this feature only allows the definition of extra authors and does not change in any way the previous author functionality which is used via config files.\nCreate Authors # The first step to create new authors is to set up a new folder in ./data/authors. Then you can simply add new json files inside, one for each new author. The name of the file will be the key for that author when referencing it in your articles.\nAs an example, let’s create a file called nunocoracao.json within ./data/authors. The contents of the file should be similar to the ones below. name, image, bio, and social are the 4 parameters supported right for authors. They mimic the configurations available for the default author in the config files.\nNote: the key in the social object will be used to fetch one of the theme’s icons, feel free to use any of the icons available in your setup.\n{ \u0026#34;name\u0026#34;: \u0026#34;Nuno Coração\u0026#34;, \u0026#34;image\u0026#34; : \u0026#34;img/nuno_avatar.jpg\u0026#34;, \u0026#34;bio\u0026#34;: \u0026#34;Theme Creator\u0026#34;, \u0026#34;social\u0026#34;: [ { \u0026#34;linkedin\u0026#34;: \u0026#34;https://linkedin.com/in/nunocoracao\u0026#34; }, { \u0026#34;twitter\u0026#34;: \u0026#34;https://twitter.com/nunocoracao\u0026#34; }, { \u0026#34;instagram\u0026#34;: \u0026#34;https://instagram.com/nunocoracao\u0026#34; }, { \u0026#34;medium\u0026#34;: \u0026#34;https://medium.com/@nunocoracao\u0026#34; }, { \u0026#34;github\u0026#34;: \u0026#34;https://github.com/nunocoracao\u0026#34; }, { \u0026#34;goodreads\u0026#34;: \u0026#34;http://goodreads.com/nunocoracao\u0026#34; }, { \u0026#34;keybase\u0026#34;: \u0026#34;https://keybase.io/nunocoracao\u0026#34; }, { \u0026#34;reddit\u0026#34;: \u0026#34;https://reddit.com/user/nunoheart\u0026#34; } ] } Reference Authors in Articles # Now that you created one author, the next step is to reference it in one or more articles. In the example below, we reference the author created in the previous step using its key.\nThis will render an extra author using the data provided in the json file. This feature does not change in any way the default author configured for the overall site, and therefore, you can control both separately. Using the showAuthor parameter, you can configure whether to show the default author, that is the normal use-case for a single author blog. The new authors front-matter parameter allows you to define authors specifically to an article, and they will be rendered independently of the configurations for the default site author.\n--- title: \u0026#34;Multiple Authors\u0026#34; date: 2020-08-10 draft: false description: \u0026#34;Configure multiple authors for your articles.\u0026#34; slug: \u0026#34;multi-author\u0026#34; tags: [\u0026#34;authors\u0026#34;, \u0026#34;config\u0026#34;, \u0026#34;docs\u0026#34;] showAuthor: true authors: - \u0026#34;nunocoracao\u0026#34; showAuthorsBadges : false --- In the example, which matches the markdown of the current page, both the default author and the new one will be displayed. You can scroll now to see the outcome.\nCreate the Authors Taxonomy # To get lists of articles for each of your authors you can configure the authors taxonomy, which opens up some more configurations that might be interesting. This is an optional step in the process that is not required to display the authors in your articles.\nFirst step is to configure the authors taxonomy in your config.toml file, like in the example below. Even though tag and category are defined by default with Hugo, once you add a specific taxonomies section you need to add them again otherwise the site will not process them.\n[taxonomies] tag = \u0026#34;tags\u0026#34; category = \u0026#34;categories\u0026#34; author = \u0026#34;authors\u0026#34; And that’s just about it. Now you will have pages that reference your authors and, for each, show the respective list of articles where they participate. You can also use the article.showAuthorsBadges on the config file, or showAuthorsBadges on each article to chose whether to display the authors taxonomy as badges in each post item. As an example, this doc is configured to not display authors but if you look at the sample referenced below you will see the authors displayed as badges.\nLastly, you can add more detail to each author page so that it displays a little bio, links, or whatever information fits your use-case. To achieve that, create a folder with the key to each author inside ./content/authors and inside each folder place a _index.md file. For the example above, we would end up with a .content/authors/nunocoracao/_index.md file. Inside, you can configure the actual name of the author and the contents of their page. Authors in this documentation website are configured like this, so you can have a look by playing around with the site.\n--- title: \u0026#34;Nuno Coração\u0026#34; --- Nuno\u0026#39;s awesome dummy bio. Sample # This sample sample below shows an example where the default site author is turned off and the article has multiple authors.\n","date":"10 August 2020","permalink":"/blowfish/docs/multi-author/","section":"Documentation","summary":"Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.","title":"Multiple Authors"},{"content":"","date":"10 August 2020","permalink":"/blowfish/tags/partials/","section":"Tags","summary":"","title":"partials"},{"content":" Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy.\nFathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.toml file. If you also use the custom domain feature of Fathom and would like to serve their script from your domain, you can also additionally provide the domain configuration value. If you don\u0026rsquo;t provide a domain value, the script will load directly from Fathom DNS.\n# config/_default/params.toml [fathomAnalytics] site = \u0026#34;ABC12345\u0026#34; domain = \u0026#34;llama.yoursite.com\u0026#34; Google Analytics # Google Analytics support is provided through the internal Hugo partial. Simply provide the googleAnalytics key in the config/_default/config.toml file and the script will be added automatically.\nBoth version 3 (analytics.js) and version 4 (gtag.js) are supported, based on the configuration value provided:\n# config/_default/config.toml # version 3 googleAnalytics = \u0026#34;UA-PROPERTY_ID\u0026#34; # version 4 googleAnalytics = \u0026#34;G-MEASUREMENT_ID\u0026#34; Custom analytics providers # If you wish to use a different analytics provider on your website you can also override the analytics partial and provide your own script. Simply create the file layouts/partials/analytics.html in your project and it will automatically include it in the \u0026lt;head\u0026gt; of the website.\nComments # To add comments to your articles, Blowfish includes support for a comments partial that is included at the base of each article page. Simply provide a layouts/partials/comments.html which contains the code required to display your chosen comments.\nYou can use either the built-in Hugo Disqus template, or provide your own custom code. Refer to the Hugo docs for further information.\nOnce the partial has been provided, finer control over where comments are displayed is then managed using the showComments parameter. This value can be set at the theme level in the params.toml config file, or on a per-article basis by including it in the front matter. The parameter defaults to false so it must be set to true in one of these locations in order for comments to be displayed.\nFavicons # Blowfish provides a default set of blank favicons to get started but you can provide your own assets to override them. The easiest way to obtain new favicon assets is to generate them using a third-party provider like favicon.io.\nIcon assets should be placed directly in the static/ folder of your website and named as per the listing below. If you use favicon.io, these will be the filenames that are automatically generated for you, but you can provide your own assets if you wish.\nstatic/ ├─ android-chrome-192x192.png ├─ android-chrome-512x512.png ├─ apple-touch-icon.png ├─ favicon-16x16.png ├─ favicon-32x32.png ├─ favicon.ico └─ site.webmanifest Alternatively, you can also completely override the default favicon behaviour and provide your own favicon HTML tags and assets. Simply provide a layouts/partials/favicons.html file in your project and this will be injected into the site \u0026lt;head\u0026gt; in place of the default assets.\nIcon # Similar to the icon shortcode, you can include icons in your own templates and partials by using Blowfish\u0026rsquo;s icon.html partial. The partial takes one parameter which is the name of the icon to be included.\nExample:\n{{ partial \u0026#34;icon.html\u0026#34; \u0026#34;github\u0026#34; }} Icons are populated using Hugo pipelines which makes them very flexible. Blowfish includes a number of built-in icons for social, links and other purposes. Check the icon samples page for a full list of supported icons.\nCustom icons can be added by providing your own icon assets in the assets/icons/ directory of your project. The icon can then be referenced in the partial by using the SVG filename without the .svg extension.\nIcons can also be used in article content by calling the icon shortcode.\nExtensions # Blowfish also provides for a number of extension partials that allow for expanding upon base functionality.\nArticle link # If you wish to insert additional code after article links, create a layouts/partials/extend-article-link.html file. This is especially powerful when combined with the badge shortcode which can be used to highlight metadata for certain articles.\nHead and Footer # The theme allows for inserting additional code directly into the \u0026lt;head\u0026gt; and \u0026lt;footer\u0026gt; sections of the template. These can be useful for providing scripts or other logic that isn\u0026rsquo;t part of the theme.\nSimply create either layouts/partials/extend-head.html or layouts/partials/extend-footer.html and these will automatically be included in your website build. Both partials are injected as the last items in \u0026lt;head\u0026gt; and \u0026lt;footer\u0026gt; so they can be used to override theme defaults.\n","date":"10 August 2020","permalink":"/blowfish/docs/partials/","section":"Documentation","summary":"Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy.\nFathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.","title":"Partials"},{"content":"","date":"10 August 2020","permalink":"/blowfish/tags/privacy/","section":"Tags","summary":"","title":"privacy"},{"content":"","date":"9 August 2020","permalink":"/blowfish/tags/content/","section":"Tags","summary":"","title":"content"},{"content":"If you\u0026rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.\nTip: If you\u0026rsquo;re new to Hugo, be sure to check out the official docs to learn more about the concept of page bundles and resources. The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.\nBranch pages # Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is _index.md.\nBlowfish will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the title parameter in a branch page will allow overriding the page title.\nHomepage # Layout: layouts/index.html Content: content/_index.md The homepage in Blowfish is special in that it\u0026rsquo;s overarching design is controlled by the homepage layout config parameter. You can learn more about this in the Homepage Layout section.\nIf you want to add custom content to this page, you simply need to create a content/_index.md file. Anything in this file will then be included in your homepage.\nExample:\n--- title: \u0026#34;Welcome to Blowfish!\u0026#34; description: \u0026#34;This is a demo of adding content to the homepage.\u0026#34; --- Welcome to my website! I\u0026#39;m really happy you stopped by. This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links.\nList pages # Layout: layouts/_default/list.html Content: content/../_index.md List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.\nCreating a list page is as simple as making a sub-directory in the content folder. For example, to create a \u0026ldquo;Projects\u0026rdquo; section, you would create content/projects/. Then create a Markdown file for each of your projects.\nA list page will be generated by default, however to customise the content, you should also create an _index.md page in this new directory.\n. └── content └── projects ├── _index.md # /projects ├── first-project.md # /projects/first-project └── another-project ├── index.md # /projects/another-project └── project.jpg Hugo will generate URLs for the pages in your projects folder accordingly.\nJust like the homepage, content in the _index.md file will be output into the generated list index. Blowfish will then list any pages in this section below the content.\nExample:\n--- title: \u0026#34;Projects\u0026#34; description: \u0026#34;Learn about some of my projects.\u0026#34; cascade: showReadingTime: false --- This section contains all my current projects. In this example, the special cascade parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page.\nThe samples section of this site is an example of a list page.\nTaxonomy pages # List layout: layouts/_default/taxonomy.html Term layout: layouts/_default/term.html Content: content/../_index.md Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.\nThe terminology can get a little confusing so let\u0026rsquo;s explore an example using a taxonomy named animals.\nFirstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at config/_default/taxonomies.toml and defining the taxonomy name.\n# config/_default/taxonomies.toml animal = \u0026#34;animals\u0026#34; Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular animal equals the plural animals to create our example taxonomy.\nNow that our animals taxonomy exists, it needs to be added to individual content items. It\u0026rsquo;s as simple as inserting it into the front matter:\n--- title: \u0026#34;Into the Lion\u0026#39;s Den\u0026#34; description: \u0026#34;This week we\u0026#39;re learning about lions.\u0026#34; animals: [\u0026#34;lion\u0026#34;, \u0026#34;cat\u0026#34;] --- This has now created two terms within our animals taxonomy - lion and cat.\nAlthough it\u0026rsquo;s not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at /animals/ and the term pages can be found at /animals/lion/ and /animals/cat/.\nThe list page will list all the terms contained within the taxonomy. In this example, navigating to /animals/ will show a page that has links for \u0026ldquo;lion\u0026rdquo; and \u0026ldquo;cat\u0026rdquo; which take visitors to the individual term pages.\nThe term pages will list all the pages contained within that term. These term lists are essentially the same as normal list pages and behave in much the same way.\nIn order to add custom content to taxonomy pages, simply create _index.md files in the content folder using the taxonomy name as the sub-directory name.\n. └── content └── animals ├── _index.md # /animals └── lion └── _index.md # /animals/lion Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named lion but override the title to be \u0026ldquo;Lion\u0026rdquo;.\nTo see how this looks in reality, check out the tags taxonomy listing on this site.\nLeaf pages # Layout: layouts/_default/single.html Content (standalone): content/../page-name.md Content (bundled): content/../page-name/index.md Leaf pages in Hugo are basically standard content pages. They are defined as pages that don\u0026rsquo;t contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.\nThe most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named index.md without an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.\n. └── content └── blog ├── first-post.md # /blog/first-post ├── second-post.md # /blog/second-post └── third-post ├── index.md # /blog/third-post └── image.jpg When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an index.md file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.\nExample:\n--- title: \u0026#34;My First Blog Post\u0026#34; date: 2022-01-25 description: \u0026#34;Welcome to my blog!\u0026#34; summary: \u0026#34;Learn more about me and why I am starting this blog.\u0026#34; tags: [\u0026#34;welcome\u0026#34;, \u0026#34;new\u0026#34;, \u0026#34;about\u0026#34;, \u0026#34;first\u0026#34;] --- _This_ is the content of my blog post. Leaf pages have a wide variety of front matter parameters that can be used to customise how they are displayed.\nExternal links # Blowfish has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you\u0026rsquo;d like to link to, without replicating the content in your Hugo site.\nIn order to create an external link article, some special front matter needs to be set:\n--- title: \u0026#34;My Medium post\u0026#34; date: 2022-01-25 externalUrl: \u0026#34;https://medium.com/\u0026#34; summary: \u0026#34;I wrote a post on Medium.\u0026#34; showReadingTime: false _build: render: \u0026#34;false\u0026#34; list: \u0026#34;local\u0026#34; --- Along with the normal front matter parameters like title and summary, the externalUrl parameter is used to tell Blowfish that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.\nAdditionally, we use a special Hugo front matter parameter _build to prevent a normal page for this content being generated - there\u0026rsquo;s no point generating a page since we\u0026rsquo;re linking to an external URL!\nThe theme includes an archetype to make generating these external link articles simple. Just specify -k external when making new content.\nhugo new -k external posts/my-post.md Simple pages # Layout: layouts/_default/simple.html Front Matter: layout: \u0026quot;simple\u0026quot; Blowfish also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.\nThe only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page front matter variables.\nTo enable the simple layout on a particular page, add the layout front matter variable with a value of \u0026quot;simple\u0026quot;:\n--- title: \u0026#34;My landing page\u0026#34; date: 2022-03-08 layout: \u0026#34;simple\u0026#34; --- This page content is now full-width. Custom layouts # One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.\nLayouts follow all the normal Hugo templating rules and more information is available in the official Hugo docs.\nOverriding default layouts # Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.\nFor example, creating a layouts/_default/single.html file will allow the layout of leaf pages to be completely customised.\nCustom section layouts # It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.\nLet\u0026rsquo;s step through an example that creates a custom \u0026ldquo;Projects\u0026rdquo; page that lists projects using a special layout.\nIn order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a list.html file.\n. └── content │ └── projects │ ├── _index.md │ ├── first-project.md │ └── second-project.md └── layouts └── projects └── list.html This list.html file will now override the default list template, but only for the projects section. Before we look at this file, lets first look at the individual project files.\n--- title: \u0026#34;Blowfish\u0026#34; date: 2021-08-11 icon: \u0026#34;github\u0026#34; description: \u0026#34;A theme for Hugo built with Tailwind CSS.\u0026#34; topics: [\u0026#34;Hugo\u0026#34;, \u0026#34;Web\u0026#34;, \u0026#34;Tailwind\u0026#34;] externalUrl: \u0026#34;https://github.com/nunocoracao/blowfish/\u0026#34; --- In this example we are assigning some metadata for each project that we can then use in our list template. There\u0026rsquo;s no page content, but there\u0026rsquo;s nothing stopping you from including it. It\u0026rsquo;s your own custom template after all!\nWith the projects defined, now we can create a list template that outputs the details of each project.\n{{ define \u0026#34;main\u0026#34; }} \u0026lt;section class=\u0026#34;mt-8\u0026#34;\u0026gt; {{ range .Pages }} \u0026lt;article class=\u0026#34;pb-6\u0026#34;\u0026gt; \u0026lt;a class=\u0026#34;flex\u0026#34; href=\u0026#34;{{ .Params.externalUrl }}\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;mr-3 text-3xl text-neutral-300\u0026#34;\u0026gt; \u0026lt;span class=\u0026#34;relative inline-block align-text-bottom\u0026#34;\u0026gt; {{ partial \u0026#34;icon.html\u0026#34; .Params.icon }} \u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;h3 class=\u0026#34;flex text-xl font-semibold\u0026#34;\u0026gt; {{ .Title }} \u0026lt;/h3\u0026gt; \u0026lt;p class=\u0026#34;text-sm text-neutral-400\u0026#34;\u0026gt; {{ .Description }} \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/a\u0026gt; \u0026lt;/article\u0026gt; {{ end }} \u0026lt;/section\u0026gt; {{ end }} Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.\nKeep in mind that you\u0026rsquo;ll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the Advanced Customisation section.\nWhen making custom templates like this one, it\u0026rsquo;s always easiest to take a look at how the default Blowfish template works and then use that as a guide. Remember, the Hugo docs are a great resource to learn more about creating templates too.\n","date":"9 August 2020","permalink":"/blowfish/docs/content-examples/","section":"Documentation","summary":"If you\u0026rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.","title":"Content Examples"},{"content":"","date":"9 August 2020","permalink":"/blowfish/tags/example/","section":"Tags","summary":"","title":"example"},{"content":"","date":"9 August 2020","permalink":"/blowfish/tags/series/","section":"Tags","summary":"","title":"series"},{"content":"Blowfish provides a feature to group a set of articles together under a \u0026ldquo;series\u0026rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them. You can see an example of this above.\nCreate Taxonomy # The first step to enable series is to create the series taxonomy. For doing this just add the series taxonomy to your taxonomy list in the config.toml.\n[taxonomies] tag = \u0026#34;tags\u0026#34; category = \u0026#34;categories\u0026#34; author = \u0026#34;authors\u0026#34; series = \u0026#34;series\u0026#34; Mark Articles # Then you just need to mark each article using the series parameter and the series_order. The series parameter will be the id and name of the series you are placing the article into (even though the variable is an array we recommend keeping each article to a single series.). And the series_order defines the order of that article within the series. In the example below the article is number 11 in the Documentation series.\nseries: [\u0026#34;Documentation\u0026#34;] series_order: 11 Series Behavior # Marking an article as part of a series will automatically display the series module as you see in this page for example. You can choose whether that module starts opened or not using the article.seriesOpened global variable in params.toml or the front-matter parameter seriesOpened to specify an override at the article level.\n","date":"9 August 2020","permalink":"/blowfish/docs/series/","section":"Documentation","summary":"Blowfish provides a feature to group a set of articles together under a \u0026ldquo;series\u0026rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them.","title":"Series"},{"content":"This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. 🚀\nYou can also use these content pages to define Hugo metadata like titles and descriptions that will be used for SEO and other purposes.\n","date":"8 August 2020","permalink":"/blowfish/tags/advanced/","section":"Tags","summary":"This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing.","title":"Advanced"},{"content":"There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.\nIf you need further advice, post your questions on GitHub Discussions.\nHugo project structure # Before leaping into it, first a quick note about Hugo project structure and best practices for managing your content and theme customisations.\nIn summary: Never directly edit the theme files. Only make customisations in your Hugo project\u0026rsquo;s sub-directories, not in the themes directory itself. Blowfish is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overriden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.\nIn order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your themes/ directory, you should always leave these files intact.\nThe correct way to adjust any theme behaviour is by overriding files using Hugo\u0026rsquo;s powerful file lookup order. In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.\nFor example, if you wanted to override the main article template in Blowfish, you can simply create your own layouts/_default/single.html file and place it in the root of your project. This file will then override the single.html from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.\nAs long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.\nChange image optimization settings # Hugo has various builtin methods to resize, crop and optimize images.\nAs an example - in layouts/partials/article-link/card.html, you have the following code:\n{{ with .Resize \u0026#34;600x\u0026#34; }} \u0026lt;div class=\u0026#34;w-full thumbnail_card nozoom\u0026#34; style=\u0026#34;background-image:url({{ .RelPermalink }});\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; {{ end }} The default behavior of Hugo here is to resize the image to 600px keeping the ratio.\nIt is worth noting here that default image configurations such as anchor point can also be set in your site configuration as well as in the template itself.\nSee the Hugo docs on image processing for more info.\nColour schemes # Blowfish ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the colorScheme theme parameter. Refer to the Getting Started section to learn more about the built-in schemes.\nIn addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a \u0026lt;scheme-name\u0026gt;.css file in the assets/css/schemes/ folder. Once the file is created, simply refer to it by name in the theme configuration.\nNote: generating these files manually can be hard, I\u0026rsquo;ve built a nodejs terminal tool to help with that, Fugu. In a nutshell, you pass the main three hex values of your color pallette and the program will output a css file that can be imported directly into Blowfish. Blowfish defines a three-colour palette that is used throughout the theme. The three colours are defined as neutral, primary and secondary variants, each containing ten shades of colour.\nDue to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to conform to a particular format by providing the red, green and blue colour values.\n:root { --color-primary-500: 139, 92, 246; } This example defines a CSS variable for the primary-500 colour with a red value of 139, green value of 92 and blue value of 246.\nUse one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official Tailwind colour palette reference.\nOverriding the stylesheet # Sometimes you need to add a custom style to style your own HTML elements. Blowfish provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a custom.css file in your project\u0026rsquo;s assets/css/ folder.\nThe custom.css file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.\nUsing additional fonts # Blowfish allows you to easily change the font for your site. After creating a custom.css file in your project\u0026rsquo;s assets/css/ folder, place you font file inside a fonts folder withing the static root folder.\n. ├── assets │ └── css │ └── custom.css ... └─── static └── fonts └─── font.ttf This makes the font available to the website. Now, the font can just import it in your custom.css and replaced wherever you see fit. The example below shows what replacing the font for the entire html would look like.\n@font-face { font-family: font; src: url(\u0026#39;/fonts/font.ttf\u0026#39;); } html { font-family: font; } Adjusting the font size # Changing the font size of your website is one example of overriding the default stylesheet. Blowfish makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to 12pt, but it can be changed to whatever value you prefer.\nCreate a custom.css file using the instructions above and add the following CSS declaration:\n/* Increase the default font size */ html { font-size: 13pt; } Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than 12pt. Similarly, to decrease the font sizes, make the value less than 12pt.\nBuilding the theme CSS from source # If you\u0026rsquo;d like to make a major change, you can take advantage of Tailwind CSS\u0026rsquo;s JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.\nNote: Building the theme manually is intended for advanced users. Let\u0026rsquo;s step through how building the Tailwind CSS works.\nTailwind configuration # In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the tailwind.config.js file which is included in the root of the theme directory:\n// themes/blowfish/tailwind.config.js module.exports = { content: [ \u0026#34;./layouts/**/*.html\u0026#34;, \u0026#34;./content/**/*.{html,md}\u0026#34;, \u0026#34;./themes/blowfish/layouts/**/*.html\u0026#34;, \u0026#34;./themes/blowfish/content/**/*.{html,md}\u0026#34;, ], // and more... }; This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, you have to include Blowfish in your project as a subdirectory at themes/blowfish/. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The Installation docs explain how to install the theme using either of these methods.\nProject structure # In order to take advantage of the default configuration, your project should look something like this\u0026hellip;\n. ├── assets │ └── css │ └── compiled │ └── main.css # this is the file we will generate ├── config # site config │ └── _default ├── content # site content │ ├── _index.md │ ├── projects │ │ └── _index.md │ └── blog │ └── _index.md ├── layouts # custom layouts for your site │ ├── partials │ │ └── extend-article-link/simple.html │ ├── projects │ │ └── list.html │ └── shortcodes │ └── disclaimer.html └── themes └── blowfish # git submodule or manual theme install This example structure adds a new projects content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that\u0026rsquo;s required is to recompile the main.css file.\nInstall dependencies # In order for this to work you\u0026rsquo;ll need to change into the themes/blowfish/ directory and install the project dependencies. You\u0026rsquo;ll need npm on your local machine for this step.\ncd themes/blowfish npm install Run the Tailwind compiler # With the dependencies installed all that\u0026rsquo;s left is to use Tailwind CLI to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:\ncd ../.. ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit It\u0026rsquo;s a bit of an ugly command due to the paths involved but essentially you\u0026rsquo;re calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme\u0026rsquo;s main.css file and then where you want the compiled CSS file to be placed (it\u0026rsquo;s going into the assets/css/compiled/ folder of your Hugo project).\nThe config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.\nEach time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add -w to the end of the command to run the JIT compiler in watch mode.\nMake a build script # To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a package.json to the root of your project which contains the necessary scripts\u0026hellip;\n// package.json { \u0026#34;name\u0026#34;: \u0026#34;my-website\u0026#34;, \u0026#34;version\u0026#34;: \u0026#34;1.0.0\u0026#34;, \u0026#34;description\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;scripts\u0026#34;: { \u0026#34;server\u0026#34;: \u0026#34;hugo server -b http://localhost -p 8000\u0026#34;, \u0026#34;dev\u0026#34;: \u0026#34;NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w\u0026#34;, \u0026#34;build\u0026#34;: \u0026#34;NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit\u0026#34; }, // and more... } Now when you want to work on designing your site, you can invoke npm run dev and the compiler will run in watch mode. When you\u0026rsquo;re ready to deploy, run npm run build and you\u0026rsquo;ll get a clean Tailwind CSS build.\n🙋‍♀️ If you need help, feel free to ask a question on GitHub Discussions.\n","date":"8 August 2020","permalink":"/blowfish/docs/advanced-customisation/","section":"Documentation","summary":"There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.","title":"Advanced Customisation"},{"content":"","date":"8 August 2020","permalink":"/blowfish/tags/css/","section":"Tags","summary":"","title":"css"},{"content":"","date":"7 August 2020","permalink":"/blowfish/tags/deployment/","section":"Tags","summary":"","title":"deployment"},{"content":"","date":"7 August 2020","permalink":"/blowfish/tags/github/","section":"Tags","summary":"","title":"github"},{"content":"","date":"7 August 2020","permalink":"/blowfish/tags/hosting/","section":"Tags","summary":"","title":"hosting"},{"content":"There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.\nBlowfish is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There\u0026rsquo;s usually no special configuration required for this to work as long as the baseURL parameter has been configured in the config.toml file.\nThe official Hugo Hosting and Deployment docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.\nChoose your provider:\nGitHub Pages Netlify Render Cloudflare Pages Shared hosting, VPS or private web server GitHub Pages # GitHub allows hosting on GitHub Pages using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.\nThe file needs to be in YAML format, placed within the .github/workflows/ directory of your GitHub repository and named with a .yml extension.\nImportant: Ensure you set the correct branch name under branches and in the deploy step if parameter to the source branch used in your project. # .github/workflows/gh-pages.yml name: GitHub Pages on: push: branches: - main jobs: build-deploy: runs-on: ubuntu-20.04 concurrency: group: ${{ github.workflow }}-${{ github.ref }} steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true fetch-depth: 0 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \u0026#34;latest\u0026#34; - name: Build run: hugo --minify - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: ${{ github.ref == \u0026#39;refs/heads/main\u0026#39; }} with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages publish_dir: ./public Push the config file to GitHub and the action should automatically run. It may fail the first time and you\u0026rsquo;ll need to visit the Settings \u0026gt; Pages section of your GitHub repo to check the source is correct. It should be set to use the gh-pages branch.\nOnce the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.\nNetlify # To deploy to Netlify, create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you\u0026rsquo;ll be using.\nThen in the root of your site repository, create a netlify.toml file:\n# netlify.toml [build] command = \u0026#34;hugo mod get -u \u0026amp;\u0026amp; hugo --gc --minify -b $URL\u0026#34; publish = \u0026#34;public\u0026#34; [build.environment] NODE_ENV = \u0026#34;production\u0026#34; GO_VERSION = \u0026#34;1.16\u0026#34; TZ = \u0026#34;UTC\u0026#34; # Set to preferred timezone [context.production.environment] HUGO_VERSION = \u0026#34;0.104.1\u0026#34; HUGO_ENV = \u0026#34;production\u0026#34; [context.deploy-preview.environment] HUGO_VERSION = \u0026#34;0.104.1\u0026#34; This configuration assumes you are deploying Blowfish as a Hugo module. If you have installed the theme using another method, change the build command to simply hugo --gc --minify -b $URL.\nWhen you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.\nRender # Deploying to Render is very straightforward and all configuration is via the Render UI.\nCreate a new Static Site and link it to your project\u0026rsquo;s code repository. Then simply configure the build command to be hugo --gc --minify and publish directory to be public.\nThe site will automatically build and deploy whenever you push a change to your repo.\nCloudflare Pages # Cloudflare offers the Pages service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare\u0026rsquo;s CDN. Follow their Hugo deployment guide to get started.\nThe Rocket Loader™ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.\nThis problem can be fixed by disabling it:\nGo to the Cloudflare dashboard Click on your domain name in the list Click Optimization in the Speed section Scroll down to Rocket Loader™ and disable it Hugo sites built with Blowfish still load very quickly, even with this feature disabled.\nShared hosting, VPS or private web server # Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.\nMake sure that the baseURL parameter in config.toml is set to the full URL to the root of your website (including any sub domains or sub-folders).\nThen build your site using hugo and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named public.\nIf you need a hosting provider, check out Vultr or DigitalOcean. Signing up using these affiliate links will give you up to $100 in free credit so you can try the service.\n","date":"7 August 2020","permalink":"/blowfish/docs/hosting-deployment/","section":"Documentation","summary":"There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.\nBlowfish is built using relative URLs throughout the theme.","title":"Hosting \u0026 Deployment"},{"content":"","date":"7 August 2020","permalink":"/blowfish/tags/netlify/","section":"Tags","summary":"","title":"netlify"},{"content":"","date":"7 August 2020","permalink":"/blowfish/tags/render/","section":"Tags","summary":"","title":"render"},{"content":"","date":"3 August 2020","permalink":"/blowfish/tags/firebase/","section":"Tags","summary":"","title":"firebase"},{"content":"In order to be able to support dynamic data across your website we\u0026rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.\nGo to Firebase website and create an account for free Create a new project Select analytics location Setup firebase in Blowfish by getting the variables for your project and setting them inside params.toml file. More details can be found in this page. You can find an example of the file Firebase will provide below, notice the parameters within the FirebaseConfig object. // Import the functions you need from the SDKs you need import { initializeApp } from \u0026#34;firebase/app\u0026#34;; import { getAnalytics } from \u0026#34;firebase/analytics\u0026#34;; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app\u0026#39;s Firebase configuration // For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: \u0026#34;AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY\u0026#34;, authDomain: \u0026#34;blowfish-21fff.firebaseapp.com\u0026#34;, projectId: \u0026#34;blowfish-21fff\u0026#34;, storageBucket: \u0026#34;blowfish-21fff.appspot.com\u0026#34;, messagingSenderId: \u0026#34;60108104191\u0026#34;, appId: \u0026#34;1:60108104191:web:039842ebe1370698b487ca\u0026#34;, measurementId: \u0026#34;G-PEDMYR1V0K\u0026#34; }; // Initialize Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish. rules_version = \u0026#39;2\u0026#39;; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } } Enable anonymous authorization - Select Build and open Authentication. Select get started, click Anonymous and turn it on, save. Enjoy - you can now activate views and likes on Blowfish for all (or specific) articles. ","date":"3 August 2020","permalink":"/blowfish/docs/firebase-views/","section":"Documentation","summary":"In order to be able to support dynamic data across your website we\u0026rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.","title":"Firebase: Views \u0026 Likes"},{"content":"","date":"3 August 2020","permalink":"/blowfish/tags/likes/","section":"Tags","summary":"","title":"likes"},{"content":"","date":"3 August 2020","permalink":"/blowfish/tags/views/","section":"Tags","summary":"","title":"views"},{"content":"","date":"11 March 2019","permalink":"/blowfish/tags/html/","section":"Tags","summary":"","title":"html"},{"content":"","date":"11 March 2019","permalink":"/blowfish/tags/markdown/","section":"Tags","summary":"","title":"markdown"},{"content":"This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.\nHeadings # The following HTML \u0026lt;h1\u0026gt;—\u0026lt;h6\u0026gt; elements represent six levels of section headings. \u0026lt;h1\u0026gt; is the highest section level while \u0026lt;h6\u0026gt; is the lowest.\nH1 # H2 # H3 # H4 # H5 # H6 # Paragraph # Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.\nItatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.\nBlockquotes # The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.\nBlockquote without attribution # Tiam, ad mint andaepu dandae nostion secatur sequo quae. Note that you can use Markdown syntax within a blockquote.\nBlockquote with attribution # Don\u0026rsquo;t communicate by sharing memory, share memory by communicating.\n— Rob Pike1\nTables # Tables aren\u0026rsquo;t part of the core Markdown spec, but Hugo supports supports them out-of-the-box.\nName Age Bob 27 Alice 23 Inline Markdown within tables # Italics Bold Code italics bold code Code Blocks # Code block with backticks # \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34; /\u0026gt; \u0026lt;title\u0026gt;Example HTML5 Document\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;p\u0026gt;Test\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Code block indented with four spaces # \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026quot;en\u0026quot;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026quot;utf-8\u0026quot;\u0026gt; \u0026lt;title\u0026gt;Example HTML5 Document\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;p\u0026gt;Test\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Code block with Hugo\u0026rsquo;s internal highlight shortcode # 1 2 3 4 5 6 7 8 9 10 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Example HTML5 Document\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;p\u0026gt;Test\u0026lt;/p\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; List Types # Ordered List # First item Second item Third item Unordered List # List item Another item And another item Nested list # Fruit Apple Orange Banana Dairy Milk Cheese Other Elements — abbr, sub, sup, kbd, mark # GIF is a bitmap image format.\nH2O\nXn + Yn = Zn\nPress CTRL+ALT+Delete to end the session.\nMost salamanders are nocturnal, and hunt for insects, worms, and other small creatures.\nThe above quote is excerpted from Rob Pike\u0026rsquo;s talk about nothing during Gopherfest, November 18, 2015.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"11 March 2019","permalink":"/blowfish/samples/markdown/","section":"Samples","summary":"\u003cp\u003eThis article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.\u003c/p\u003e","title":"Markdown"},{"content":"","date":"10 March 2019","permalink":"/blowfish/tags/gist/","section":"Tags","summary":"","title":"gist"},{"content":"Hugo ships with several built-in shortcodes for rich content, along with a privacy config and a set of simple shortcodes that enable static and no-JS versions of various social media embeds.\nYouTube # Below is an example using the built-in youtube shortcode.\nTwitter # This example uses the twitter_simple shortcode to output a Tweet. It requires two named parameters user and id.\n“In addition to being more logical, asymmetry has the advantage that its complete appearance is far more optically effective than symmetry.”\n— Jan Tschichold pic.twitter.com/gcv7SrhvJb\n\u0026mdash; Graphic Design History (@DesignReviewed) January 17, 2019 Alternatively, the tweet shortcode can be used to embed a fully marked up Twitter card.\nGist # The gist shortcode can be used to embed a GitHub Gist. It requires two unnamed parameters: the username and ID of the Gist.\nVimeo # The vimeo_simple shortcode will embed a Vimeo video.\n","date":"10 March 2019","permalink":"/blowfish/samples/rich-content/","section":"Samples","summary":"This is an \u003cem\u003eexample\u003c/em\u003e of a \u003cstrong\u003erich\u003c/strong\u003e content summary.","title":"Rich Content"},{"content":"","date":"10 March 2019","permalink":"/blowfish/tags/twitter/","section":"Tags","summary":"","title":"twitter"},{"content":"","date":"10 March 2019","permalink":"/blowfish/tags/vimeo/","section":"Tags","summary":"","title":"vimeo"},{"content":"","date":"10 March 2019","permalink":"/blowfish/tags/youtube/","section":"Tags","summary":"","title":"youtube"},{"content":"","date":"9 March 2019","permalink":"/blowfish/tags/latin/","section":"Tags","summary":"","title":"latin"},{"content":"Lorem est tota propiore conpellat pectoribus de pectora summo.\nRedit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.\nExierant elisi ambit vivere dedere Duce pollice Eris modo Spargitque ferrea quos palude Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.\nComas hunc haec pietate fetum procerum dixit Post torum vates letum Tiresia Flumen querellas Arcanaque montibus omnes Quidem et Vagus elidunt # The Van de Graaf Canon\nMane refeci capiebant unda mulcebat # Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. Faces illo pepulere tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.\nIubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.\nEurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel mitis temploque vocatus, inque alis, oculos nomen non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides parte.\n","date":"9 March 2019","permalink":"/blowfish/samples/placeholder-text/","section":"Samples","summary":"\u003cp\u003eLorem est tota propiore conpellat pectoribus de pectora summo.\u003c/p\u003e","title":"Placeholder Text"},{"content":"","date":"9 March 2019","permalink":"/blowfish/tags/text/","section":"Tags","summary":"","title":"text"},{"content":"","date":"8 March 2019","permalink":"/blowfish/tags/katex/","section":"Tags","summary":"","title":"katex"},{"content":"KaTeX can be used to render mathematical notation within articles.\nBlowfish will only bundle the KaTeX assets into your project if you make use of mathematical notation. In order for this to work, simply include the katex shortcode within the article. Example below:\n{{\u0026lt; katex \u0026gt;}} Any KaTeX syntax on that page will then be automatically rendered. Use the online reference of supported TeX functions for the available syntax.\nInline notation # Inline notation can be generated by wrapping the expression in \\\\( and \\\\) delimiters.\nExample:\n% KaTeX inline notation Inline notation: \\\\(\\varphi = \\dfrac{1+\\sqrt5}{2}= 1.6180339887…\\\\) Inline notation: \\(\\varphi = \\dfrac{1+\\sqrt5}{2}= 1.6180339887…\\)\nBlock notation # Alternatively, block notation can be generated using $$ delimiters. This will output the expression in its own HTML block.\nExample:\n% KaTeX block notation $$ \\varphi = 1+\\frac{1} {1+\\frac{1} {1+\\frac{1} {1+\\cdots} } } $$ $$ \\varphi = 1+\\frac{1} {1+\\frac{1} {1+\\frac{1} {1+\\cdots} } } $$\n","date":"8 March 2019","permalink":"/blowfish/samples/mathematical-notation/","section":"Samples","summary":"\u003cp\u003eKaTeX can be used to render mathematical notation within articles.\u003c/p\u003e","title":"Mathematical notation"},{"content":"","date":"8 March 2019","permalink":"/blowfish/tags/maths/","section":"Tags","summary":"","title":"maths"},{"content":"","date":"6 March 2019","permalink":"/blowfish/tags/chart/","section":"Tags","summary":"","title":"chart"},{"content":"Blowfish includes support for Chart.js using the chart shortcode. Simply wrap the chart markup within the shortcode. Blowfish automatically themes charts to match the configured colorScheme parameter, however the colours can be customised using normal Chart.js syntax.\nRefer to the chart shortcode docs for more details.\nThe examples below are a small selection taken from the official Chart.js docs. You can also view the page source on GitHub to see the markup.\nBar chart # Line chart # Doughnut chart # ","date":"6 March 2019","permalink":"/blowfish/samples/charts/","section":"Samples","summary":"Blowfish includes Chart.js for powerful charts and data visualisations.","title":"Charts"},{"content":"","date":"6 March 2019","permalink":"/blowfish/tags/diagram/","section":"Tags","summary":"","title":"diagram"},{"content":"Mermaid diagrams are supported in Blowfish using the mermaid shortcode. Simply wrap the diagram markup within the shortcode. Blowfish automatically themes Mermaid diagrams to match the configured colorScheme parameter.\nRefer to the mermaid shortcode docs for more details.\nThe examples below are a small selection taken from the official Mermaid docs. You can also view the page source on GitHub to see the markup.\nFlowchart # graph TD A[Christmas] --\u003e|Get money| B(Go shopping) B --\u003e C{Let me think} B --\u003e G[/Another/] C ==\u003e|One| D[Laptop] C --\u003e|Two| E[iPhone] C --\u003e|Three| F[Car] subgraph Section C D E F G end Sequence diagram # sequenceDiagram autonumber par Action 1 Alice-\u003e\u003eJohn: Hello John, how are you? and Action 2 Alice-\u003e\u003eBob: Hello Bob, how are you? end Alice-\u003e\u003e+John: Hello John, how are you? Alice-\u003e\u003e+John: John, can you hear me? John--\u003e\u003e-Alice: Hi Alice, I can hear you! Note right of John: John is perceptive John--\u003e\u003e-Alice: I feel great! loop Every minute John--\u003eAlice: Great! end Class diagram # classDiagram Animal \"1\" \u003c|-- Duck Animal \u003c|-- Fish Animal \u003c--o Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() } Entity relationship diagram # erDiagram CUSTOMER }|..|{ DELIVERY-ADDRESS : has CUSTOMER ||--o{ ORDER : places CUSTOMER ||--o{ INVOICE : \"liable for\" DELIVERY-ADDRESS ||--o{ ORDER : receives INVOICE ||--|{ ORDER : covers ORDER ||--|{ ORDER-ITEM : includes PRODUCT-CATEGORY ||--|{ PRODUCT : contains PRODUCT ||--o{ ORDER-ITEM : \"ordered in\" ","date":"6 March 2019","permalink":"/blowfish/samples/diagrams-flowcharts/","section":"Samples","summary":"It\u0026rsquo;s easy to add diagrams and flowcharts to articles using Mermaid.","title":"Diagrams and Flowcharts"},{"content":"","date":"6 March 2019","permalink":"/blowfish/tags/graph/","section":"Tags","summary":"","title":"graph"},{"content":"","date":"5 March 2019","permalink":"/blowfish/tags/emoji/","section":"Tags","summary":"","title":"emoji"},{"content":"Emoji is supported throughout Blowfish by default. Emoji can be used in titles, menu items and article content.\nNote: The rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack. Emoji replacements are automatic throughout Blowfish, so you can use shorthand codes in your content and front matter and they will be converted to their corresponding symbols at build time.\nExample: see_no_evil 🙈, hear_no_evil 🙉, speak_no_evil 🙊.\nThe Emoji cheat sheet is a useful reference for emoji shorthand codes.\n","date":"5 March 2019","permalink":"/blowfish/samples/emoji/","section":"Samples","summary":"📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸","title":"Emoji 🪂"},{"content":"Thank you for wanting to contribute to Blowfish\u0026rsquo;s community.\nHow to start? # This is a template article that will explain how to create a new article for Blowfish\u0026rsquo;s guide section.\nClone Blowfish # Clone this repo with the following command:\ngit clone https://github.com/nunocoracao/blowfish.git Setup your files # Copy and paste the entire folder where this .md file is.\nName it using the following convention YYYYMM-title, no white spaces are allowed.\nWrite your guide # Write your guide :)\nUse the img folder to place your images and use them:\nImage caption Open a PR # Open a PR and thanks in advance for your contribution.\n","date":"22 December 1987","permalink":"/blowfish/guides/template/","section":"Recipes","summary":"Thank you for wanting to contribute to Blowfish\u0026rsquo;s community.\nHow to start? # This is a template article that will explain how to create a new article for Blowfish\u0026rsquo;s guide section.","title":"Recipe Template"},{"content":" Recipes, guides, and tutorials for Blowfish Blowfish user? To add your guide to this list, check the template.\nThis section contains guides for a variety of scnearios on how to configure your theme. If you\u0026rsquo;re new, check out the Installation guide to begin or visit the Samples section to see what Blowfish can do.\n","date":"22 December 1987","permalink":"/blowfish/guides/","section":"Recipes","summary":"Recipes, guides, and tutorials for Blowfish Blowfish user? To add your guide to this list, check the template.\nThis section contains guides for a variety of scnearios on how to configure your theme.","title":"Recipes"},{"content":"","date":"22 December 1987","permalink":"/blowfish/tags/template/","section":"Tags","summary":"","title":"template"},{"content":"","date":"1 January 0001","permalink":"/blowfish/categories/","section":"Categories","summary":"","title":"Categories"}] \ No newline at end of file diff --git a/public/index.xml b/public/index.xml index 6d51c81d..2363aa16 100644 --- a/public/index.xml +++ b/public/index.xml @@ -1,10 +1,9 @@ - - - - Blowfish - / - Recent content on Blowfish - Hugo -- gohugo.io - en - - \ No newline at end of file +Welcome to Blowfish! :tada: on Blowfishhttps://nunocoracao.github.io/blowfish/Recent content in Welcome to Blowfish! :tada: on BlowfishHugo -- gohugo.ioenMon, 07 Nov 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used.Thumbnailshttps://nunocoracao.github.io/blowfish/samples/thumbnail_sample/Mon, 26 Sep 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/thumbnail_sample/A quick example of how to start using Thumbnails in your artciles.Welcome to Blowfishhttps://nunocoracao.github.io/blowfish/docs/welcome/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/welcome/Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.Installationhttps://nunocoracao.github.io/blowfish/docs/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/installation/Simply follow the standard Hugo Quick Start procedure to get up and running quickly. +Detailed installation instructions can be found below. Instructions for updating the theme are also available. +Installation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.Getting Startedhttps://nunocoracao.github.io/blowfish/docs/getting-started/Sat, 15 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/getting-started/This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.Configurationhttps://nunocoracao.github.io/blowfish/docs/configuration/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/configuration/Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. +The theme ships with a default configuration that gets you up and running with a basic blog or static website.Iconshttps://nunocoracao.github.io/blowfish/samples/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/icons/Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode. +Additionally, custom icons are also fully supported.Usershttps://nunocoracao.github.io/blowfish/users/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/users/Real websites that are built with Blowfish. Blowfish user? To add your site to this list, submit a pull request. Website Details nunocoracao.com Personal site - Theme author madoke.org Personal site code-chimp.Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.Content Exampleshttps://nunocoracao.github.io/blowfish/docs/content-examples/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/content-examples/If you&rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.Serieshttps://nunocoracao.github.io/blowfish/docs/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/series/Blowfish provides a feature to group a set of articles together under a &ldquo;series&rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them.Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme.Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p>Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary.Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p>Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p>Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations.Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid.Emoji :parachute:https://nunocoracao.github.io/blowfish/samples/emoji/Tue, 05 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/emoji/📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸Recipe Templatehttps://nunocoracao.github.io/blowfish/guides/template/Tue, 22 Dec 1987 00:00:00 +0000https://nunocoracao.github.io/blowfish/guides/template/Thank you for wanting to contribute to Blowfish&rsquo;s community. +How to start? # This is a template article that will explain how to create a new article for Blowfish&rsquo;s guide section. \ No newline at end of file diff --git a/public/js/appearance.js b/public/js/appearance.js new file mode 100644 index 00000000..1da4b69f --- /dev/null +++ b/public/js/appearance.js @@ -0,0 +1,101 @@ +const sitePreference = document.documentElement.getAttribute("data-default-appearance"); +const userPreference = localStorage.getItem("appearance"); + +if ((sitePreference === "dark" && userPreference === null) || userPreference === "dark") { + document.documentElement.classList.add("dark"); +} + +if (document.documentElement.getAttribute("data-auto-appearance") === "true") { + if ( + window.matchMedia && + window.matchMedia("(prefers-color-scheme: dark)").matches && + userPreference !== "light" + ) { + document.documentElement.classList.add("dark"); + } + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => { + if (event.matches) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + }); +} + +window.addEventListener("DOMContentLoaded", (event) => { + const switcher = document.getElementById("appearance-switcher"); + const switcherMobile = document.getElementById("appearance-switcher-mobile"); + + updateMeta(); + this.updateLogo?.(getTargetAppearance()); + + if (switcher) { + switcher.addEventListener("click", () => { + document.documentElement.classList.toggle("dark"); + var targetAppearance = getTargetAppearance(); + localStorage.setItem( + "appearance", + targetAppearance + ); + updateMeta(); + this.updateLogo?.(targetAppearance); + }); + switcher.addEventListener("contextmenu", (event) => { + event.preventDefault(); + localStorage.removeItem("appearance"); + }); + } + if (switcherMobile) { + switcherMobile.addEventListener("click", () => { + document.documentElement.classList.toggle("dark"); + var targetAppearance = getTargetAppearance(); + localStorage.setItem( + "appearance", + targetAppearance + ); + updateMeta(); + this.updateLogo?.(targetAppearance); + }); + switcherMobile.addEventListener("contextmenu", (event) => { + event.preventDefault(); + localStorage.removeItem("appearance"); + }); + } +}); + + +var updateMeta = () => { + var elem, style; + elem = document.querySelector('body'); + style = getComputedStyle(elem); + document.querySelector('meta[name="theme-color"]').setAttribute('content', style.backgroundColor); +} + +{{ if and (.Site.Params.Logo) (.Site.Params.SecondaryLogo) }} +{{ $primaryLogo := resources.Get .Site.Params.Logo }} +{{ $secondaryLogo := resources.Get .Site.Params.SecondaryLogo }} +{{ if and ($primaryLogo) ($secondaryLogo) }} +var updateLogo = (targetAppearance) => { + var elems; + elems = document.querySelectorAll("img.logo") + targetLogoPath = + targetAppearance == "{{ .Site.Params.DefaultAppearance }}" ? + "{{ $primaryLogo.RelPermalink }}" : "{{ $secondaryLogo.RelPermalink }}" + for (const elem of elems) { + elem.setAttribute("src", targetLogoPath) + } +} +{{ end }} +{{- end }} + +var getTargetAppearance = () => { + return document.documentElement.classList.contains("dark") ? "dark" : "light" +} + +window.addEventListener("DOMContentLoaded", (event) => { + const scroller = document.getElementById("top-scroller"); + const footer = document.getElementById("site-footer"); + if(scroller && footer && scroller.getBoundingClientRect().top > footer.getBoundingClientRect().top) { + scroller.hidden = true; + } +}); diff --git a/public/js/chart.bundle.9e1f507c1cd6ef893b69fd34f5b6c93376c2d3e0156d853e11fe53b22eb2b44b9a9eabde4772e450ad1700d87df722c7ec525e04acda0462889cb8c9b228d7af.js b/public/js/chart.bundle.9e1f507c1cd6ef893b69fd34f5b6c93376c2d3e0156d853e11fe53b22eb2b44b9a9eabde4772e450ad1700d87df722c7ec525e04acda0462889cb8c9b228d7af.js new file mode 100644 index 00000000..9af37f58 --- /dev/null +++ b/public/js/chart.bundle.9e1f507c1cd6ef893b69fd34f5b6c93376c2d3e0156d853e11fe53b22eb2b44b9a9eabde4772e450ad1700d87df722c7ec525e04acda0462889cb8c9b228d7af.js @@ -0,0 +1,17 @@ +/*! + * Chart.js v4.3.0 + * https://www.chartjs.org + * (c) 2023 Chart.js Contributors + * Released under the MIT License + */ +!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).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Ko},get Decimation(){return Jo},get Filler(){return pa},get Legend(){return _a},get SubTitle(){return wa},get Title(){return va},get Tooltip(){return Va}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,a.axis,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; +/*! + * @kurkle/color v0.3.2 + * https://github.com/kurkle/color#readme + * (c) 2023 Jukka Kurkela + * Released under the MIT License + */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Je(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Je(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Je(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ze(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Je(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Ze(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const bi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,xi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(bi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(xi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Xi={evaluateInteractionItems:Hi,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tji(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Yi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Ui(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>Ui(t,ve(e,t),"y",i.intersect,s)}};const qi=["left","top","right","bottom"];function Ki(t,e){return t.filter((t=>t.pos===e))}function Gi(t,e){return t.filter((t=>-1===qi.indexOf(t.pos)&&t.box.axis===e))}function Zi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ji(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!qi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ss(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Zi(Ki(e,"left"),!0),n=Zi(Ki(e,"right")),o=Zi(Ki(e,"top"),!0),a=Zi(Ki(e,"bottom")),r=Gi(e,"x"),l=Gi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ki(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);ts(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Ji(l.concat(h),d);ss(r.fullSize,g,d,p),ss(l,g,d,p),ss(h,g,d,p)&&ss(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),os(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,os(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class rs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class ls extends rs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const hs="$chartjs",cs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ds=t=>null===t||""===t;const us=!!Se&&{passive:!0};function fs(t,e,i){t.canvas.removeEventListener(e,i,us)}function gs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function ps(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.addedNodes,s),e=e&&!gs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ms(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.removedNodes,s),e=e&&!gs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const bs=new Map;let xs=0;function _s(){const t=window.devicePixelRatio;t!==xs&&(xs=t,bs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ys(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){bs.size||window.addEventListener("resize",_s),bs.set(t,e)}(t,o),a}function vs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){bs.delete(t),bs.size||window.removeEventListener("resize",_s)}(t)}function Ms(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=cs[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,us)}(s,e,n),n}class ws extends rs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[hs]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ds(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(ds(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[hs])return!1;const i=e[hs].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[hs],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:ps,detach:ms,resize:ys}[e]||Ms;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:vs,detach:vs,resize:vs}[e]||fs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function ks(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?ls:ws}var Ss=Object.freeze({__proto__:null,BasePlatform:rs,BasicPlatform:ls,DomPlatform:ws,_detectPlatform:ks});const Ps="transparent",Ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Ps),n=s.valid&&Qt(e||Ps);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Cs{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Ds[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Cs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function As(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Ts(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function zs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Vs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Bs=t=>"reset"===t||"none"===t,Ns=(t,e)=>e?t:Object.assign({},t);class Ws{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Es(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Vs(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Fs(t,"x")),o=e.yAxisID=l(i.yAxisID,Fs(t,"y")),a=e.rAxisID=l(i.rAxisID,Fs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Vs(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Ts(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ns(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Os(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Bs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Bs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Bs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function js(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for($s(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,Us=(t,e)=>Math.min(e||t,t);function Xs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Ks(t){return t.drawTicks?t.tickLength:0}function Gs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Zs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Js extends Hs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ks(t.grid)-e.padding-Gs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Gs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ks(n)+o):(t.height=this.maxHeight,t.width=Ks(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Ks(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Ae(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class tn{constructor(){this.controllers=new Qs(Ws,"datasets",!0),this.elements=new Qs(Hs,"elements"),this.plugins=new Qs(Object,"plugins"),this.scales=new Qs(Js,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function nn(t,e){return e||!1!==t?!0===t?{}:t:null}function on(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function an(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function rn(t){if("x"===t||"y"===t||"r"===t)return t}function ln(t,...e){if(rn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&rn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function hn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function cn(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=an(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=ln(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return hn(t,"x",i[0])||hn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=x(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||an(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}function dn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=cn(t,e)}function un(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const fn=new Map,gn=new Set;function pn(t,e){let i=fn.get(t);return i||(i=e(),fn.set(t,i),gn.add(i)),i}const mn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class bn{constructor(t){this._config=function(t){return(t=t||{}).data=un(t.data),dn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=un(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),dn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return pn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return pn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return pn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return pn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>mn(r,t,e)))),e.forEach((t=>mn(r,s,t))),e.forEach((t=>mn(r,re[n]||{},t))),e.forEach((t=>mn(r,ue,t))),e.forEach((t=>mn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),gn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=xn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||_n(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=xn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function xn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const _n=t=>o(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1);const yn=["top","bottom","left","right","chartArea"];function vn(t,e){return"top"===t||"bottom"===t||-1===yn.indexOf(t)&&"x"===e}function Mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function wn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function kn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Sn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Pn={},Dn=t=>{const e=Sn(t);return Object.values(Pn).filter((t=>t.canvas===e)).pop()};function Cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class On{static defaults=ue;static instances=Pn;static overrides=re;static registry=en;static version="4.3.0";static getChart=Dn;static register(...t){en.add(...t),An()}static unregister(...t){en.remove(...t),An()}constructor(t,e){const s=this.config=new bn(e),n=Sn(t),o=Dn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ks(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new sn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Pn[this.id]=this,r&&l?(xt.listen(this,"complete",wn),xt.listen(this,"progress",kn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return en}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=ln(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=ln(o,n),r=l(n.type,e.dtype);void 0!==n.position&&vn(n.position,a)===vn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(en.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{as.configure(this,t,t.options),as.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{as.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){Cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;as.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Ie(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ze(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Xi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function An(){return u(On.instances,(t=>t._plugins.invalidate()))}function Tn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ln{static override(t){Object.assign(Ln.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return Tn()}parse(){return Tn()}format(){return Tn()}add(){return Tn()}diff(){return Tn()}startOf(){return Tn()}endOf(){return Tn()}}var En={_date:Ln};function Rn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function zn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var $n=Object.freeze({__proto__:null,BarController:class extends Ws{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return zn(t,e,i,s)}parseArrayData(t,e,i,s){return zn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends Hn{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:jn,RadarController:class extends Ws{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Yn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Un(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Xn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Yn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Un(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Un(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Un(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Un(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Un(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Un(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function qn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u}=l,f="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,f?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let g=e.endAngle;if(o){Xn(t,e,i,s,g,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,g),o||(Xn(t,e,i,s,g,n),t.stroke())}function Kn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Gn(t,e,i){t.lineTo(i.x,i.y)}function Zn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function to(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Qn:Jn}const eo="function"==typeof Path2D;function io(t,e,i,s){eo&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Kn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=to(e);for(const r of n)Kn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class so extends Hs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a)>=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Xn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function go(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),Mr)break;i.push({value:t})}return x&&u&&w!==r?i.length&&V(i[i.length-1].value,r,po(r,y,t))?i[i.length-1].value=r:i.push({value:r}):x&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class bo extends mo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const xo=t=>Math.floor(z(t)),_o=(t,e)=>Math.pow(10,xo(t)+e);function yo(t){return 1===t/Math.pow(10,xo(t))}function vo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function Mo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=xo(e);let o=function(t,e){let i=xo(e-t);for(;vo(t,e,i)>10;)i++;for(;vo(t,e,i)<10;)i--;return Math.min(i,xo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:yo(g),significand:u}),s}class wo extends Js{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=mo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===_o(this.min,0)?_o(this.min,-1):_o(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(_o(i,-1)),o(_o(s,1)))),i<=0&&n(_o(s,-1)),s<=0&&o(_o(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=Mo({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function ko(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function So(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function Po(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Co(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function Oo(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function Ao(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function To(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(ko(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/ko(this.options))}generateTickLabels(t){mo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Po(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));Ao(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;We(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),To(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}We(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const Eo={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ro=Object.keys(Eo);function Io(t,e){return t-e}function zo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!W(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Fo(t,e,i,s){const n=Ro.length;for(let o=Ro.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Bo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class No extends Js{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new En._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:zo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Fo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Ro.length-1;o>=Ro.indexOf(i);o--){const i=Ro[o];if(Eo[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Ro[i?Ro.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Ro.indexOf(t)+1,i=Ro.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Fo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=W(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var Ho=Object.freeze({__proto__:null,CategoryScale:class extends Js{static id="category";static defaults={ticks:{callback:go}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:fo(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return go.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:bo,LogarithmicScale:wo,RadialLinearScale:Lo,TimeScale:No,TimeSeriesScale:class extends No{static id="timeseries";static defaults=No.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Wo(e,this.min),this._tableRange=Wo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot.replace("rgb(","rgba(").replace(")",", 0.5)")));function Yo(t){return jo[t%jo.length]}function Uo(t){return $o[t%$o.length]}function Xo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Hn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Yo(e++))),e}(i,e):n instanceof jn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Uo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Yo(e),t.backgroundColor=Uo(e),++e}(i,e))}}function qo(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Ko={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(qo(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&qo(o)))return;var a;const r=Xo(t);s.forEach(r)}};function Go(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Zo(t){t.data.datasets.forEach((t=>{Go(t)}))}var Jo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Zo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Go(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Zo(t)}};function Qo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ta(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function ea(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function ia(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ta(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new so({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function sa(t){return t&&!1!==t.fill}function na(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function oa(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function aa(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&ca(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;sa(i)&&ca(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;sa(s)&&"beforeDatasetDraw"===i.drawTime&&ca(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ma=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ba extends Hs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ma(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=xa(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ma(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){We(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=xa(y,t)}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,We(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ya extends Hs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);We(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var va={id:"title",_element:ya,start(t,e,i){!function(t,e){const i=new ya({ctx:t.ctx,options:e,chart:t});as.configure(t,i,e),as.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;as.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Ma=new WeakMap;var wa={id:"subtitle",start(t,e,i){const s=new ya({ctx:t.ctx,options:i,chart:t});as.configure(t,s,i),as.addBox(t,s),Ma.set(t,s)},stop(t){as.removeBox(t,Ma.get(t)),Ma.delete(t)},beforeUpdate(t,e,i){const s=Ma.get(t);as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ka={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function Da(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ca(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function Oa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Aa(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Oa(t,e,i,s),yAlign:s}}function Ta(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function La(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ea(t){return Sa([],Pa(t))}function Ra(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Ia={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Ra(i,t);Sa(e.before,Pa(za(n,"beforeLabel",this,t))),Sa(e.lines,za(n,"label",this,t)),Sa(e.after,Pa(za(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Ea(za(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=za(i,"beforeFooter",this,t),n=za(i,"footer",this,t),o=za(i,"afterFooter",this,t);let a=[];return a=Sa(a,Pa(s)),a=Sa(a,Pa(n)),a=Sa(a,Pa(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Ra(t.callbacks,e);s.push(za(i,"labelColor",this,e)),n.push(za(i,"labelPointStyle",this,e)),o.push(za(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=ka[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ca(this,i),a=Object.assign({},t,e),r=Aa(this.chart,i,a),l=Ta(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=La(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=La(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=ka[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ca(this,t),a=Object.assign({},i,this._size),r=Aa(e,t,a),l=Ta(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=ka[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Va={id:"tooltip",_element:Fa,positioners:ka,afterInit(t,e,i){i&&(t.tooltip=new Fa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Ia},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return On.register($n,Ho,uo,t),On.helpers={...Ni},On._adapters=En,On.Animation=Cs,On.Animations=Os,On.animator=xt,On.controllers=en.controllers.items,On.DatasetController=Ws,On.Element=Hs,On.elements=uo,On.Interaction=Xi,On.layouts=as,On.platforms=Ss,On.Scale=Js,On.Ticks=ae,Object.assign(On,$n,Ho,uo,t,Ss),On.Chart=On,"undefined"!=typeof window&&(window.Chart=On),On})); +//# sourceMappingURL=chart.umd.js.map + +; +function css(e){return"rgb("+getComputedStyle(document.documentElement).getPropertyValue(e)+")"}Chart.defaults.font.size=14,Chart.defaults.backgroundColor=css("--color-primary-300"),Chart.defaults.elements.point.borderColor=css("--color-primary-400"),Chart.defaults.elements.bar.borderColor=css("--color-primary-500"),Chart.defaults.elements.bar.borderWidth=1,Chart.defaults.elements.line.borderColor=css("--color-primary-400"),Chart.defaults.elements.arc.backgroundColor=css("--color-primary-200"),Chart.defaults.elements.arc.borderColor=css("--color-primary-500"),Chart.defaults.elements.arc.borderWidth=1 \ No newline at end of file diff --git a/public/js/home.min.d4eae8fb7c04ad6084190050b568f6af5f3c453e6e688101a3d854ff64e8c2a5b5f85f44c0b48ea71100f48da4564f61a62afaab4d071a5ea38344a7e9d63c2a.js b/public/js/home.min.d4eae8fb7c04ad6084190050b568f6af5f3c453e6e688101a3d854ff64e8c2a5b5f85f44c0b48ea71100f48da4564f61a62afaab4d071a5ea38344a7e9d63c2a.js new file mode 100644 index 00000000..dcc77ebd --- /dev/null +++ b/public/js/home.min.d4eae8fb7c04ad6084190050b568f6af5f3c453e6e688101a3d854ff64e8c2a5b5f85f44c0b48ea71100f48da4564f61a62afaab4d071a5ea38344a7e9d63c2a.js @@ -0,0 +1 @@ +var layouts=["background","hero","profile","page","card"],list_config,titles,currentConfig,currentLayout=0;function switchHomeLayout(){var e,t,n=currentLayout;currentLayout=currentLayout==layouts.length-1?0:currentLayout+1,e=document.getElementById(layouts[n]),t=document.getElementById(layouts[currentLayout]);const s=document.querySelectorAll("code[id=layout]");t.style.display="block",e.style.display="none",s.forEach(function(e){e.innerText=layouts[currentLayout]})}window.addEventListener("DOMContentLoaded",e=>{document.querySelectorAll("#switch-layout-button").forEach(e=>e.addEventListener("click",function(e){e.preventDefault(),switchHomeLayout()}))}),list_config=["CardViewProse","CardViewScreenWidth","NormalView"],titles={CardViewProse:"card view with constrained width",CardViewScreenWidth:"card view with full width",NormalView:"standard list view"},currentConfig=0;function switchList(){var e,t,n=currentConfig;currentConfig=currentConfig==list_config.length-1?0:currentConfig+1,e=document.getElementById(list_config[n]),t=document.getElementById(list_config[currentConfig]);const s=document.querySelectorAll("code[id=config]");t.style.display="block",e.style.display="none",s.forEach(function(e){e.innerText=titles[list_config[currentConfig]]})}window.addEventListener("DOMContentLoaded",e=>{document.querySelectorAll("#switch-config-button").forEach(e=>e.addEventListener("click",function(e){e.preventDefault(),switchList()}))}) \ No newline at end of file diff --git a/public/js/process.min.35c1113bcc16c5a59bf031082f9e63822aa95280423881a7847a7ff33a16e6299ce6a840d9ef4e10d947e030a18f3f20359afb2ec0f35967484b9a9360ac3145.js b/public/js/process.min.35c1113bcc16c5a59bf031082f9e63822aa95280423881a7847a7ff33a16e6299ce6a840d9ef4e10d947e030a18f3f20359afb2ec0f35967484b9a9360ac3145.js new file mode 100644 index 00000000..e5c6be20 --- /dev/null +++ b/public/js/process.min.35c1113bcc16c5a59bf031082f9e63822aa95280423881a7847a7ff33a16e6299ce6a840d9ef4e10d947e030a18f3f20359afb2ec0f35967484b9a9360ac3145.js @@ -0,0 +1 @@ +if(typeof auth!="undefined"){var viewsCollection=db.collection("views"),update_views,update_likes,likesCollection=db.collection("likes");function numberWithCommas(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}update_views=function(e,t){viewsCollection.doc(t).onSnapshot(t=>{var n=t.data();n&&(e.innerText=numberWithCommas(n.views))})},update_likes=function(e,t){likesCollection.doc(t).onSnapshot(t=>{var n=t.data();n&&(e.innerText=numberWithCommas(n.likes))})},auth.signInAnonymously().then(()=>{var e,t,n,s,o=document.querySelectorAll("span[id^='views_']");for(n in o)e=o[n],t=e.id?e.id.replaceAll("/","-"):e.id,t&&update_views(e,t);s=document.querySelectorAll("span[id^='likes_']");for(n in s)e=s[n],t=e.id?e.id.replaceAll("/","-"):e.id,t&&update_likes(e,t)}).catch(e=>{var t=e.code,n=e.message;console.error(t,n)})} \ No newline at end of file diff --git a/public/lib/jquery/jquery.slim.min.js b/public/lib/jquery/jquery.slim.min.js new file mode 100644 index 00000000..aead5d23 --- /dev/null +++ b/public/lib/jquery/jquery.slim.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.4 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,v=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),m={},b=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},w=g.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||w).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.4 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween",E=function(e,t){return new E.fn.init(e,t)};function d(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!b(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.cssHas=ce(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),p.cssHas||v.push(":has"),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function ke(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n
",2===ft.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=$e(m.pixelPosition,function(e,t){if(t)return t=Fe(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 00&&(i.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=a.test(d)?d:e.slice(t[l].left.length,n);i.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&i.push({type:"text",data:e}),i},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var i=document.createDocumentFragment(),a=0;a15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var m=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=q[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return q[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();O.BASESIZE=6;var E=O,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},V=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},P=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},F=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=F(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,me,"\u22bc","\\barwedge",!0),ie(oe,he,me,"\u22bb","\\veebar",!0),ie(oe,le,me,"\u2299","\\odot",!0),ie(oe,le,me,"\u2295","\\oplus",!0),ie(oe,le,me,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,me,"\u2298","\\oslash",!0),ie(oe,he,me,"\u229a","\\circledcirc",!0),ie(oe,he,me,"\u22a1","\\boxdot",!0),ie(oe,le,me,"\u25b3","\\bigtriangleup"),ie(oe,le,me,"\u25bd","\\bigtriangledown"),ie(oe,le,me,"\u2020","\\dagger"),ie(oe,le,me,"\u22c4","\\diamond"),ie(oe,le,me,"\u22c6","\\star"),ie(oe,le,me,"\u25c3","\\triangleleft"),ie(oe,le,me,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,ce,"\u02ca","\\acute"),ie(oe,le,ce,"\u02cb","\\grave"),ie(oe,le,ce,"\xa8","\\ddot"),ie(oe,le,ce,"~","\\tilde"),ie(oe,le,ce,"\u02c9","\\bar"),ie(oe,le,ce,"\u02d8","\\breve"),ie(oe,le,ce,"\u02c7","\\check"),ie(oe,le,ce,"^","\\hat"),ie(oe,le,ce,"\u20d7","\\vec"),ie(oe,le,ce,"\u02d9","\\dot"),ie(oe,le,ce,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,ce,"\u02ca","\\'"),ie(se,le,ce,"\u02cb","\\`"),ie(se,le,ce,"\u02c6","\\^"),ie(se,le,ce,"\u02dc","\\~"),ie(se,le,ce,"\u02c9","\\="),ie(se,le,ce,"\u02d8","\\u"),ie(se,le,ce,"\u02d9","\\."),ie(se,le,ce,"\xb8","\\c"),ie(se,le,ce,"\u02da","\\r"),ie(se,le,ce,"\u02c7","\\v"),ie(se,le,ce,"\xa8",'\\"'),ie(se,le,ce,"\u02dd","\\H"),ie(se,le,ce,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=F(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var c=ct(["katex-html"],o);if(c.setAttribute("aria-hidden","true"),i){var m=i.children[0];m.style.height=F(c.height+c.depth),c.depth&&(m.style.verticalAlign=F(-c.depth))}return c}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",F(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),N(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,n,a){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),c=new Tt.MathNode("math",[h]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var m=a?"katex":"katex-mathml";return Ke.makeSpan([m],[c])}var Ot=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ot(r);if("mathml"===r.output)return Ht(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ht(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Vt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Pt=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:F(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=F(o),i},Ft=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.slice(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var c=new J(i),m=new K([c],{width:"100%",height:F(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[m],t),minWidth:0,height:o}}var u,p,d,f=[],g=Vt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=F(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,c="\\c"===n.label,m=c?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+F(2*o)+")",marginLeft:F(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,c&&(m+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),m=i.height);var f=o;d||(f-=p/2),h.style.left=F(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-m},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Ft(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Ft(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,c=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=i.depth),r){var m=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:m}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Ft(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt=Ke.makeSpan;function Kt(e,t){var r=ft(e.body,t,!0);return Zt([e.mclass],r,t)}function Jt(e,t){var r,n=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0]).type="mi":r=new Tt.MathNode("mi",n):(e.isCharacterBox?(r=n[0]).type="mo":r=new Tt.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:ht(a),isCharacterBox:l.isCharacterBox(a)}},htmlBuilder:Kt,mathmlBuilder:Jt});var Qt=function(e){var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:function(e,t){return{type:"mclass",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler:function(e,t){var r,n=e.parser,a=e.funcName,i=t[1],o=t[0];r="\\stackrel"!==a?Qt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==a,body:ht(i)},h={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===a?null:o,sub:"\\underset"===a?o:null};return{type:"mclass",mode:n.mode,mclass:r,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Kt,mathmlBuilder:Jt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"pmb",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[0])}},htmlBuilder:function(e,t){var r=ft(e.body,t,!0),n=Ke.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder:function(e,t){var r=qt(e.body,t),n=new Tt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var er={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},tr=function(e){return"textord"===e.type&&"@"===e.text};function rr(e,t,r){var n=er[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=F(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var nr=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=function(e,t){var r=qt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a="["===n.gullet.future().text?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=F(P(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",F(P(e.size,t)))),r}});var ir={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},or=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},sr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(ir[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=ir[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===ir[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return sr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return sr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var lr=function(e,t,r){var n=N(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},hr=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},cr=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=F(a),e.height-=a,e.depth+=a},mr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=hr(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&cr(s,n,x.TEXT),s},ur=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:F(n),height:F(t),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=F(t),o.style.width=F(n),{type:"elem",elem:o}},dr={type:"kern",size:-.008},fr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],vr=function(e,t,r,n,a,i){var o,s,h,c,m="",u=0;o=h=c=e,s=null;var p="Size1-Regular";"\\uparrow"===e?h=c="\u23d0":"\\Uparrow"===e?h=c="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",c="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",c="\\Downarrow"):l.contains(fr,e)?(h="\u2223",m="vert",u=333):l.contains(gr,e)?(h="\u2225",m="doublevert",u=556):"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",c="\u23a3",p="Size4-Regular",m="lbrack",u=667):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",c="\u23a6",p="Size4-Regular",m="rbrack",u=667):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",c="\u23a3",p="Size4-Regular",m="lfloor",u=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=c="\u23a2",p="Size4-Regular",m="lceil",u=667):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",c="\u23a6",p="Size4-Regular",m="rfloor",u=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=c="\u23a5",p="Size4-Regular",m="rceil",u=667):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",c="\u239d",p="Size4-Regular",m="lparen",u=875):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",c="\u23a0",p="Size4-Regular",m="rparen",u=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",c="\u23a9",h="\u23aa",p="Size4-Regular");var d=lr(o,p,a),f=d.height+d.depth,g=lr(h,p,a),v=g.height+g.depth,b=lr(c,p,a),y=b.height+b.depth,w=0,k=1;if(null!==s){var S=lr(s,p,a);w=S.height+S.depth,k=2}var M=f+y+w,z=M+Math.max(0,Math.ceil((t-M)/(k*v)))*k*v,A=n.fontMetrics().axisHeight;r&&(A*=n.sizeMultiplier);var T=z/2-A,B=[];if(m.length>0){var C=z-f-y,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(m,Math.round(1e3*C)),I=new J(m,q),R=(u/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new K([I],{width:R,height:H,viewBox:"0 0 "+u+" "+N}),E=Ke.makeSvgSpan([],[O],n);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(ur(c,p,a)),B.push(dr),null===s){var L=z-f-y+.016;B.push(pr(h,L,n))}else{var D=(z-f-y-w)/2+.016;B.push(pr(h,D,n)),B.push(dr),B.push(ur(s,p,a)),B.push(dr),B.push(pr(h,D,n))}B.push(dr),B.push(ur(o,p,a))}var V=n.havingBaseStyle(x.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return hr(Ke.makeSpan(["delimsizing","mult"],[P],V),x.TEXT,n,i)},br=.08,yr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:F(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},xr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],wr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],kr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Sr=[0,1.2,1.8,2.4,3],Mr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],zr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],Ar=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Tr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Br=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},Cr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(kr,e)?Mr:l.contains(xr,e)?Ar:zr;var s=Br(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=hr(o,t,n,i);return r&&cr(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?mr(e,s.size,r,n,a,i):vr(e,t,r,n,a,i)},Nr={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Br("\\surd",e*a.sizeMultiplier,Ar,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,c=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=yr("sqrtMain",l=(1+s+br)/o,c=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(c=1080*Sr[i.size],h=(Sr[i.size]+s)/o,l=(Sr[i.size]+s+br)/o,(r=yr("sqrtSize"+i.size,l,c,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+br,h=e+s,c=Math.floor(1e3*e+s)+80,(r=yr("sqrtTall",l,c,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=F(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(xr,e)||l.contains(kr,e))return mr(e,t,!1,r,a,i);if(l.contains(wr,e))return vr(e,Sr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:Sr,customSizedDelim:Cr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Cr(e,h,!0,n,a,i)}},qr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Ir=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Rr(e,t){var r=Xt(e);if(r&&l.contains(Ir,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Hr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Rr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:qr[e.funcName].size,mclass:qr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Nr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=F(Nr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Rr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Rr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){Hr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Lr={};function Dr(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!m)&&g.pop(),b.length0&&(y+=.25),c.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,N,q=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(V.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=F(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,m),J=Ke.makeLineSpan("hdashline",t,m),Q=[{type:"elem",elem:h,shift:0}];c.length>0;){var ee=c.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},$r={c:"center ",l:"left ",r:"right "},Zr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(m+="top ",g=1),"separator"===p[p.length-1].type&&(m+="bottom ",v-=1);for(var b=g;b0?"left ":"",m+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Wr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Xr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var c="",m=0;m0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Dr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Wr(e.parser,a,_r(e.envName))},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Wr(e.parser,a,_r(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Wr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},_r(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Yr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Xr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Yr(e);var t={autoTag:Xr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Yr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[m]);for(var d=0;d<2;d++){for(var f=!0,g=m+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*m:7*m,d=t.fontMetrics().denom1):(c>0?(u=t.fontMetrics().num2,p=m):(u=t.fontMetrics().num3,p=3*m),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*c)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,c=Ut(t[2],"size"),m=null;r=!!c.isBlank||(m=c.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:m,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Ft(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=P(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=P(e.width,t));var i={height:F(r+n)};a>0&&(i.width=F(a)),n>0&&(i.verticalAlign=F(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=P(e.height,t),a=0;if(e.totalheight.number>0&&(a=P(e.totalheight,t)-n,r.setAttribute("valign",F(-a))),r.setAttribute("height",F(n+a)),e.width.number>0){var i=P(e.width,t);r.setAttribute("width",F(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=P(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=F(a.height+a.depth),a.depth&&(i.style.verticalAlign=F(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var cn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=cn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=cn(e,t);return It(r,t)}});var mn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,c,m=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;c=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[c];if(s&&0!==i&&!m){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=F(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var c=h?"Size2-Regular":"Size1-Regular",m="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(m=a.name.slice(1),a.name="oiint"===m?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,c,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),m.length>0){var u=o.italic,p=Ke.staticSvg(m+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+m,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",F(a)):(s.setAttribute("height",F(a)),s.setAttribute("depth",F(-a))),s.setAttribute("voffset",F(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=qt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",F(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=F(c);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=qt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,c=wt(o,t),m=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=c.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=c.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?m.sup1:t.style.cramped?m.sup3:m.sup2;var v,b=t.sizeMultiplier,y=F(.5/m.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(c instanceof Z||k)&&(w=F(-c.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,m.sub1,a.height-.8*m.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*m.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(c,"right")||"mord";return Ke.makeSpan([T],[c,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=Nt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=Nt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=Nn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Vn=Vr;Pr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Pr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Pr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Pr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Pr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Pr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Pr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Pn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Pr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Pn[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=Pn[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Pr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Gn?t=Gn[r]:("\\not"===r.slice(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Un={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Pr("\\dotso",(function(e){return e.future().text in Un?"\\ldots\\,":"\\ldots"})),Pr("\\dotsc",(function(e){var t=e.future().text;return t in Un&&","!==t?"\\ldots\\,":"\\ldots"})),Pr("\\cdots",(function(e){return e.future().text in Un?"\\@cdots\\,":"\\@cdots"})),Pr("\\dotsb","\\cdots"),Pr("\\dotsm","\\cdots"),Pr("\\dotsi","\\!\\cdots"),Pr("\\dotsx","\\ldots\\,"),Pr("\\DOTSI","\\relax"),Pr("\\DOTSB","\\relax"),Pr("\\DOTSX","\\relax"),Pr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Pr("\\,","\\tmspace+{3mu}{.1667em}"),Pr("\\thinspace","\\,"),Pr("\\>","\\mskip{4mu}"),Pr("\\:","\\tmspace+{4mu}{.2222em}"),Pr("\\medspace","\\:"),Pr("\\;","\\tmspace+{5mu}{.2777em}"),Pr("\\thickspace","\\;"),Pr("\\!","\\tmspace-{3mu}{.1667em}"),Pr("\\negthinspace","\\!"),Pr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Pr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Pr("\\enspace","\\kern.5em "),Pr("\\enskip","\\hskip.5em\\relax"),Pr("\\quad","\\hskip1em\\relax"),Pr("\\qquad","\\hskip2em\\relax"),Pr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Pr("\\tag@paren","\\tag@literal{({#1})}"),Pr("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Pr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Pr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Pr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Pr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Pr("\\newline","\\\\\\relax"),Pr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Yn=F(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Pr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Yn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Pr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Yn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Pr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Pr("\\@hspace","\\hskip #1\\relax"),Pr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Pr("\\ordinarycolon",":"),Pr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Pr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Pr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Pr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Pr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Pr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Pr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Pr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Pr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Pr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Pr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Pr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Pr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Pr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Pr("\u2237","\\dblcolon"),Pr("\u2239","\\eqcolon"),Pr("\u2254","\\coloneqq"),Pr("\u2255","\\eqqcolon"),Pr("\u2a74","\\Coloneqq"),Pr("\\ratio","\\vcentcolon"),Pr("\\coloncolon","\\dblcolon"),Pr("\\colonequals","\\coloneqq"),Pr("\\coloncolonequals","\\Coloneqq"),Pr("\\equalscolon","\\eqqcolon"),Pr("\\equalscoloncolon","\\Eqqcolon"),Pr("\\colonminus","\\coloneq"),Pr("\\coloncolonminus","\\Coloneq"),Pr("\\minuscolon","\\eqcolon"),Pr("\\minuscoloncolon","\\Eqcolon"),Pr("\\coloncolonapprox","\\Colonapprox"),Pr("\\coloncolonsim","\\Colonsim"),Pr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Pr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Pr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Pr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Pr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Pr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Pr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Pr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Pr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Pr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Pr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Pr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Pr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Pr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Pr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Pr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Pr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Pr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Pr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Pr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Pr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Pr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Pr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Pr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Pr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Pr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Pr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Pr("\u27e6","\\llbracket"),Pr("\u27e7","\\rrbracket"),Pr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Pr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Pr("\u2983","\\lBrace"),Pr("\u2984","\\rBrace"),Pr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Pr("\u29b5","\\minuso"),Pr("\\darr","\\downarrow"),Pr("\\dArr","\\Downarrow"),Pr("\\Darr","\\Downarrow"),Pr("\\lang","\\langle"),Pr("\\rang","\\rangle"),Pr("\\uarr","\\uparrow"),Pr("\\uArr","\\Uparrow"),Pr("\\Uarr","\\Uparrow"),Pr("\\N","\\mathbb{N}"),Pr("\\R","\\mathbb{R}"),Pr("\\Z","\\mathbb{Z}"),Pr("\\alef","\\aleph"),Pr("\\alefsym","\\aleph"),Pr("\\Alpha","\\mathrm{A}"),Pr("\\Beta","\\mathrm{B}"),Pr("\\bull","\\bullet"),Pr("\\Chi","\\mathrm{X}"),Pr("\\clubs","\\clubsuit"),Pr("\\cnums","\\mathbb{C}"),Pr("\\Complex","\\mathbb{C}"),Pr("\\Dagger","\\ddagger"),Pr("\\diamonds","\\diamondsuit"),Pr("\\empty","\\emptyset"),Pr("\\Epsilon","\\mathrm{E}"),Pr("\\Eta","\\mathrm{H}"),Pr("\\exist","\\exists"),Pr("\\harr","\\leftrightarrow"),Pr("\\hArr","\\Leftrightarrow"),Pr("\\Harr","\\Leftrightarrow"),Pr("\\hearts","\\heartsuit"),Pr("\\image","\\Im"),Pr("\\infin","\\infty"),Pr("\\Iota","\\mathrm{I}"),Pr("\\isin","\\in"),Pr("\\Kappa","\\mathrm{K}"),Pr("\\larr","\\leftarrow"),Pr("\\lArr","\\Leftarrow"),Pr("\\Larr","\\Leftarrow"),Pr("\\lrarr","\\leftrightarrow"),Pr("\\lrArr","\\Leftrightarrow"),Pr("\\Lrarr","\\Leftrightarrow"),Pr("\\Mu","\\mathrm{M}"),Pr("\\natnums","\\mathbb{N}"),Pr("\\Nu","\\mathrm{N}"),Pr("\\Omicron","\\mathrm{O}"),Pr("\\plusmn","\\pm"),Pr("\\rarr","\\rightarrow"),Pr("\\rArr","\\Rightarrow"),Pr("\\Rarr","\\Rightarrow"),Pr("\\real","\\Re"),Pr("\\reals","\\mathbb{R}"),Pr("\\Reals","\\mathbb{R}"),Pr("\\Rho","\\mathrm{P}"),Pr("\\sdot","\\cdot"),Pr("\\sect","\\S"),Pr("\\spades","\\spadesuit"),Pr("\\sub","\\subset"),Pr("\\sube","\\subseteq"),Pr("\\supe","\\supseteq"),Pr("\\Tau","\\mathrm{T}"),Pr("\\thetasym","\\vartheta"),Pr("\\weierp","\\wp"),Pr("\\Zeta","\\mathrm{Z}"),Pr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Pr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Pr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Pr("\\bra","\\mathinner{\\langle{#1}|}"),Pr("\\ket","\\mathinner{|{#1}\\rangle}"),Pr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Pr("\\Bra","\\left\\langle#1\\right|"),Pr("\\Ket","\\left|#1\\right\\rangle");var Xn=function(e){return function(t){var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=function(t){return function(r){e&&(r.macros.set("|",o),a.length&&r.macros.set("\\|",s));var i=t;!t&&a.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,c=t.expandTokens([].concat(i,h,r));return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}}};Pr("\\bra@ket",Xn(!1)),Pr("\\bra@set",Xn(!0)),Pr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Pr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Pr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Pr("\\angln","{\\angl n}"),Pr("\\blue","\\textcolor{##6495ed}{#1}"),Pr("\\orange","\\textcolor{##ffa500}{#1}"),Pr("\\pink","\\textcolor{##ff00af}{#1}"),Pr("\\red","\\textcolor{##df0030}{#1}"),Pr("\\green","\\textcolor{##28ae7b}{#1}"),Pr("\\gray","\\textcolor{gray}{#1}"),Pr("\\purple","\\textcolor{##9d38bd}{#1}"),Pr("\\blueA","\\textcolor{##ccfaff}{#1}"),Pr("\\blueB","\\textcolor{##80f6ff}{#1}"),Pr("\\blueC","\\textcolor{##63d9ea}{#1}"),Pr("\\blueD","\\textcolor{##11accd}{#1}"),Pr("\\blueE","\\textcolor{##0c7f99}{#1}"),Pr("\\tealA","\\textcolor{##94fff5}{#1}"),Pr("\\tealB","\\textcolor{##26edd5}{#1}"),Pr("\\tealC","\\textcolor{##01d1c1}{#1}"),Pr("\\tealD","\\textcolor{##01a995}{#1}"),Pr("\\tealE","\\textcolor{##208170}{#1}"),Pr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Pr("\\greenB","\\textcolor{##8af281}{#1}"),Pr("\\greenC","\\textcolor{##74cf70}{#1}"),Pr("\\greenD","\\textcolor{##1fab54}{#1}"),Pr("\\greenE","\\textcolor{##0d923f}{#1}"),Pr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Pr("\\goldB","\\textcolor{##ffbb71}{#1}"),Pr("\\goldC","\\textcolor{##ff9c39}{#1}"),Pr("\\goldD","\\textcolor{##e07d10}{#1}"),Pr("\\goldE","\\textcolor{##a75a05}{#1}"),Pr("\\redA","\\textcolor{##fca9a9}{#1}"),Pr("\\redB","\\textcolor{##ff8482}{#1}"),Pr("\\redC","\\textcolor{##f9685d}{#1}"),Pr("\\redD","\\textcolor{##e84d39}{#1}"),Pr("\\redE","\\textcolor{##bc2612}{#1}"),Pr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Pr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Pr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Pr("\\maroonD","\\textcolor{##ca337c}{#1}"),Pr("\\maroonE","\\textcolor{##9e034e}{#1}"),Pr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Pr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Pr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Pr("\\purpleD","\\textcolor{##7854ab}{#1}"),Pr("\\purpleE","\\textcolor{##543b78}{#1}"),Pr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Pr("\\mintB","\\textcolor{##edf2df}{#1}"),Pr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Pr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Pr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Pr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Pr("\\grayD","\\textcolor{##d6d8da}{#1}"),Pr("\\grayE","\\textcolor{##babec2}{#1}"),Pr("\\grayF","\\textcolor{##888d93}{#1}"),Pr("\\grayG","\\textcolor{##626569}{#1}"),Pr("\\grayH","\\textcolor{##3b3e40}{#1}"),Pr("\\grayI","\\textcolor{##21242c}{#1}"),Pr("\\kaBlue","\\textcolor{##314453}{#1}"),Pr("\\kaGreen","\\textcolor{##71B307}{#1}");var Wn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},_n=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Dn(Vn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Ln(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Gr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i.length},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;)if(!1===this.expandOnce()){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Gr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Ln(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||qn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Wn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:qn.hasOwnProperty(e)&&!qn[e].primitive},e}(),jn=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,$n=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Zn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Kn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Jn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new _n(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Gr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&qn[a.text]&&qn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Fr.range(e);if(te.hasOwnProperty(l)){var c=l;s={type:"atom",mode:this.mode,family:c,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Fr.range(e),text:t}}if(this.consume(),o)for(var m=0;m.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/public/lib/packery/packery.pkgd.min.js b/public/lib/packery/packery.pkgd.min.js new file mode 100644 index 00000000..3dc3ef41 --- /dev/null +++ b/public/lib/packery/packery.pkgd.min.js @@ -0,0 +1,13 @@ +/*! + * Packery PACKAGED v2.1.2 + * Gapless, draggable grid layouts + * + * Licensed GPLv3 for open source use + * or Packery Commercial License for commercial use + * + * http://packery.metafizzy.co + * Copyright 2013-2018 Metafizzy + */ + +!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function h(t,e,n){var o,s="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var c=u[e];if(!c||"_"==e.charAt(0))return void r(s+" is not a valid method");var d=c.apply(u,n);o=void 0===o?d:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new s(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("get-size/get-size",e):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!c){c=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);r=200==Math.round(t(o.width)),s.isBoxSizeOuter=r,i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var c=a.isBorderBox="border-box"==s.boxSizing,d=0;u>d;d++){var l=h[d],f=s[l],p=parseFloat(f);a[l]=isNaN(p)?0:p}var g=a.paddingLeft+a.paddingRight,m=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,x=a.borderTopWidth+a.borderBottomWidth,b=c&&r,E=t(s.width);E!==!1&&(a.width=E+(b?0:g+_));var w=t(s.height);return w!==!1&&(a.height=w+(b?0:m+x)),a.innerWidth=a.width-(g+_),a.innerHeight=a.height-(m+x),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,c=!1;return s}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o=t.x+e&&this.y+this.height>=t.y+i},e.overlaps=function(t){var e=this.x+this.width,i=this.y+this.height,n=t.x+t.width,o=t.y+t.height;return this.xt.x&&this.yt.y},e.getMaximalFreeRects=function(e){if(!this.overlaps(e))return!1;var i,n=[],o=this.x+this.width,s=this.y+this.height,r=e.x+e.width,a=e.y+e.height;return this.yr&&(i=new t({x:r,y:this.y,width:o-r,height:this.height}),n.push(i)),s>a&&(i=new t({x:this.x,y:a,width:this.width,height:s-a}),n.push(i)),this.x=t.width&&this.height>=t.height},t}),function(t,e){if("function"==typeof define&&define.amd)define("packery/js/packer",["./rect"],e);else if("object"==typeof module&&module.exports)module.exports=e(require("./rect"));else{var i=t.Packery=t.Packery||{};i.Packer=e(i.Rect)}}(window,function(t){"use strict";function e(t,e,i){this.width=t||0,this.height=e||0,this.sortDirection=i||"downwardLeftToRight",this.reset()}var i=e.prototype;i.reset=function(){this.spaces=[];var e=new t({x:0,y:0,width:this.width,height:this.height});this.spaces.push(e),this.sorter=n[this.sortDirection]||n.downwardLeftToRight},i.pack=function(t){for(var e=0;e=t.x+t.width&&i.height>=t.height-.01;if(n){t.y=i.y,this.placed(t);break}}},i.rowPack=function(t){for(var e=0;e=t.y+t.height&&i.width>=t.width-.01;if(n){t.x=i.x,this.placed(t);break}}},i.placeInSpace=function(t,e){t.x=e.x,t.y=e.y,this.placed(t)},i.placed=function(t){for(var e=[],i=0;ii&&1>n;return o?void this.goTo(t,e):void a.apply(this,arguments)},s.enablePlacing=function(){this.removeTransitionStyles(),this.isTransitioning&&n&&(this.element.style[n]="none"),this.isTransitioning=!1,this.getSize(),this.layout._setRectSize(this.element,this.rect),this.isPlacing=!0},s.disablePlacing=function(){this.isPlacing=!1},s.removeElem=function(){var t=this.element.parentNode;t&&t.removeChild(this.element),this.layout.packer.addSpace(this.rect),this.emitEvent("remove",[this])},s.showDropPlaceholder=function(){var t=this.dropPlaceholder;t||(t=this.dropPlaceholder=document.createElement("div"),t.className="packery-drop-placeholder",t.style.position="absolute"),t.style.width=this.size.width+"px",t.style.height=this.size.height+"px",this.positionDropPlaceholder(),this.layout.element.appendChild(t)},s.positionDropPlaceholder=function(){this.dropPlaceholder.style[n]="translate("+this.rect.x+"px, "+this.rect.y+"px)"},s.hideDropPlaceholder=function(){var t=this.dropPlaceholder.parentNode;t&&t.removeChild(this.dropPlaceholder)},o}),function(t,e){"function"==typeof define&&define.amd?define(["get-size/get-size","outlayer/outlayer","packery/js/rect","packery/js/packer","packery/js/item"],e):"object"==typeof module&&module.exports?module.exports=e(require("get-size"),require("outlayer"),require("./rect"),require("./packer"),require("./item")):t.Packery=e(t.getSize,t.Outlayer,t.Packery.Rect,t.Packery.Packer,t.Packery.Item)}(window,function(t,e,i,n,o){"use strict";function s(t,e){return t.position.y-e.position.y||t.position.x-e.position.x}function r(t,e){return t.position.x-e.position.x||t.position.y-e.position.y}function a(t,e){var i=e.x-t.x,n=e.y-t.y;return Math.sqrt(i*i+n*n)}i.prototype.canFit=function(t){return this.width>=t.width-1&&this.height>=t.height-1};var h=e.create("packery");h.Item=o;var u=h.prototype;u._create=function(){e.prototype._create.call(this),this.packer=new n,this.shiftPacker=new n,this.isEnabled=!0,this.dragItemCount=0;var t=this;this.handleDraggabilly={dragStart:function(){t.itemDragStart(this.element)},dragMove:function(){t.itemDragMove(this.element,this.position.x,this.position.y)},dragEnd:function(){t.itemDragEnd(this.element)}},this.handleUIDraggable={start:function(e,i){i&&t.itemDragStart(e.currentTarget)},drag:function(e,i){i&&t.itemDragMove(e.currentTarget,i.position.left,i.position.top)},stop:function(e,i){i&&t.itemDragEnd(e.currentTarget)}}},u._resetLayout=function(){this.getSize(),this._getMeasurements();var t,e,i;this._getOption("horizontal")?(t=1/0,e=this.size.innerHeight+this.gutter,i="rightwardTopToBottom"):(t=this.size.innerWidth+this.gutter,e=1/0,i="downwardLeftToRight"),this.packer.width=this.shiftPacker.width=t,this.packer.height=this.shiftPacker.height=e,this.packer.sortDirection=this.shiftPacker.sortDirection=i,this.packer.reset(),this.maxY=0,this.maxX=0},u._getMeasurements=function(){this._getMeasurement("columnWidth","width"),this._getMeasurement("rowHeight","height"),this._getMeasurement("gutter","width")},u._getItemLayoutPosition=function(t){if(this._setRectSize(t.element,t.rect),this.isShifting||this.dragItemCount>0){var e=this._getPackMethod();this.packer[e](t.rect)}else this.packer.pack(t.rect);return this._setMaxXY(t.rect),t.rect},u.shiftLayout=function(){this.isShifting=!0,this.layout(),delete this.isShifting},u._getPackMethod=function(){return this._getOption("horizontal")?"rowPack":"columnPack"},u._setMaxXY=function(t){this.maxX=Math.max(t.x+t.width,this.maxX),this.maxY=Math.max(t.y+t.height,this.maxY)},u._setRectSize=function(e,i){var n=t(e),o=n.outerWidth,s=n.outerHeight;(o||s)&&(o=this._applyGridGutter(o,this.columnWidth),s=this._applyGridGutter(s,this.rowHeight)),i.width=Math.min(o,this.packer.width),i.height=Math.min(s,this.packer.height)},u._applyGridGutter=function(t,e){if(!e)return t+this.gutter;e+=this.gutter;var i=t%e,n=i&&1>i?"round":"ceil";return t=Math[n](t/e)*e},u._getContainerSize=function(){return this._getOption("horizontal")?{width:this.maxX-this.gutter}:{height:this.maxY-this.gutter}},u._manageStamp=function(t){var e,n=this.getItem(t);if(n&&n.isPlacing)e=n.rect;else{var o=this._getElementOffset(t);e=new i({x:this._getOption("originLeft")?o.left:o.right,y:this._getOption("originTop")?o.top:o.bottom})}this._setRectSize(t,e),this.packer.placed(e),this._setMaxXY(e)},u.sortItemsByPosition=function(){var t=this._getOption("horizontal")?r:s;this.items.sort(t)},u.fit=function(t,e,i){var n=this.getItem(t);n&&(this.stamp(n.element),n.enablePlacing(),this.updateShiftTargets(n),e=void 0===e?n.rect.x:e,i=void 0===i?n.rect.y:i,this.shift(n,e,i),this._bindFitEvents(n),n.moveTo(n.rect.x,n.rect.y),this.shiftLayout(),this.unstamp(n.element),this.sortItemsByPosition(),n.disablePlacing())},u._bindFitEvents=function(t){function e(){n++,2==n&&i.dispatchEvent("fitComplete",null,[t])}var i=this,n=0;t.once("layout",e),this.once("layoutComplete",e)},u.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&(this.options.shiftPercentResize?this.resizeShiftPercentLayout():this.layout())},u.needsResizeLayout=function(){var e=t(this.element),i=this._getOption("horizontal")?"innerHeight":"innerWidth";return e[i]!=this.size[i]},u.resizeShiftPercentLayout=function(){var e=this._getItemsForLayout(this.items),i=this._getOption("horizontal"),n=i?"y":"x",o=i?"height":"width",s=i?"rowHeight":"columnWidth",r=i?"innerHeight":"innerWidth",a=this[s];if(a=a&&a+this.gutter){this._getMeasurements();var h=this[s]+this.gutter;e.forEach(function(t){var e=Math.round(t.rect[n]/a);t.rect[n]=e*h})}else{var u=t(this.element)[r]+this.gutter,c=this.packer[o];e.forEach(function(t){t.rect[n]=t.rect[n]/c*u})}this.shiftLayout()},u.itemDragStart=function(t){if(this.isEnabled){this.stamp(t);var e=this.getItem(t);e&&(e.enablePlacing(),e.showDropPlaceholder(),this.dragItemCount++,this.updateShiftTargets(e))}},u.updateShiftTargets=function(t){this.shiftPacker.reset(),this._getBoundingRect();var e=this._getOption("originLeft"),n=this._getOption("originTop");this.stamps.forEach(function(t){var o=this.getItem(t);if(!o||!o.isPlacing){var s=this._getElementOffset(t),r=new i({x:e?s.left:s.right,y:n?s.top:s.bottom});this._setRectSize(t,r),this.shiftPacker.placed(r)}},this);var o=this._getOption("horizontal"),s=o?"rowHeight":"columnWidth",r=o?"height":"width";this.shiftTargetKeys=[],this.shiftTargets=[];var a,h=this[s];if(h=h&&h+this.gutter){var u=Math.ceil(t.rect[r]/h),c=Math.floor((this.shiftPacker[r]+this.gutter)/h);a=(c-u)*h;for(var d=0;c>d;d++){var l=o?0:d*h,f=o?d*h:0;this._addShiftTarget(l,f,a)}}else a=this.shiftPacker[r]+this.gutter-t.rect[r],this._addShiftTarget(0,0,a);var p=this._getItemsForLayout(this.items),g=this._getPackMethod();p.forEach(function(t){var e=t.rect;this._setRectSize(t.element,e),this.shiftPacker[g](e),this._addShiftTarget(e.x,e.y,a);var i=o?e.x+e.width:e.x,n=o?e.y:e.y+e.height;if(this._addShiftTarget(i,n,a),h)for(var s=Math.round(e[r]/h),u=1;s>u;u++){var c=o?i:e.x+h*u,d=o?e.y+h*u:n;this._addShiftTarget(c,d,a)}},this)},u._addShiftTarget=function(t,e,i){var n=this._getOption("horizontal")?e:t;if(!(0!==n&&n>i)){var o=t+","+e,s=-1!=this.shiftTargetKeys.indexOf(o);s||(this.shiftTargetKeys.push(o),this.shiftTargets.push({x:t,y:e}))}},u.shift=function(t,e,i){var n,o=1/0,s={x:e,y:i};this.shiftTargets.forEach(function(t){ +var e=a(t,s);o>e&&(n=t,o=e)}),t.rect.x=n.x,t.rect.y=n.y};var c=120;u.itemDragMove=function(t,e,i){function n(){s.shift(o,e,i),o.positionDropPlaceholder(),s.layout()}var o=this.isEnabled&&this.getItem(t);if(o){e-=this.size.paddingLeft,i-=this.size.paddingTop;var s=this,r=new Date,a=this._itemDragTime&&r-this._itemDragTime_t in V?Dk(V,_t,{enumerable:!0,configurable:!0,writable:!0,value:P}):V[_t]=P;var Ee=(V,_t,P)=>(Mk(V,typeof _t!="symbol"?_t+"":_t,P),P);const _t=(()=>{const i={};let t=1;return{set(e,s,n){typeof e[s]>"u"&&(e[s]={key:s,id:t},t++),i[e[s].id]=n},get(e,s){if(!e||typeof e[s]>"u")return null;const n=e[s];return n.key===s?i[n.id]:null},delete(e,s){if(typeof e[s]>"u")return;const n=e[s];n.key===s&&(delete i[n.id],delete e[s])}}})(),P={setData(i,t,e){_t.set(i,t,e)},getData(i,t){return _t.get(i,t)},removeData(i,t){_t.delete(i,t)}},Kp=1e6,Up=1e3,vr="transitionend",Xp=i=>i==null?`${i}`:{}.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase(),se=i=>{do i+=Math.floor(Math.random()*Kp);while(document.getElementById(i));return i},Il=i=>{let t=i.getAttribute("data-te-target");if(!t||t==="#"){let e=i.getAttribute("href");if(!e||!e.includes("#")&&!e.startsWith("."))return null;e.includes("#")&&!e.startsWith("#")&&(e=`#${e.split("#")[1]}`),t=e&&e!=="#"?e.trim():null}return t},yr=i=>{const t=Il(i);return t&&document.querySelector(t)?t:null},Ie=i=>{const t=Il(i);return t?document.querySelector(t):null},Gp=i=>{if(!i)return 0;let{transitionDuration:t,transitionDelay:e}=window.getComputedStyle(i);const s=Number.parseFloat(t),n=Number.parseFloat(e);return!s&&!n?0:(t=t.split(",")[0],e=e.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(e))*Up)},Ll=i=>{i.dispatchEvent(new Event(vr))},Mi=i=>!i||typeof i!="object"?!1:(typeof i.jquery<"u"&&(i=i[0]),typeof i.nodeType<"u"),Le=i=>Mi(i)?i.jquery?i[0]:i:typeof i=="string"&&i.length>0?document.querySelector(i):null,W=(i,t,e)=>{Object.keys(e).forEach(s=>{const n=e[s],o=t[s],r=o&&Mi(o)?"element":Xp(o);if(!new RegExp(n).test(r))throw new Error(`${i.toUpperCase()}: Option "${s}" provided type "${r}" but expected type "${n}".`)})},ne=i=>{if(!i||i.getClientRects().length===0)return!1;if(i.style&&i.parentNode&&i.parentNode.style){const t=getComputedStyle(i),e=getComputedStyle(i.parentNode);return getComputedStyle(i).getPropertyValue("visibility")==="visible"||t.display!=="none"&&e.display!=="none"&&t.visibility!=="hidden"}return!1},ei=i=>!i||i.nodeType!==Node.ELEMENT_NODE||i.classList.contains("disabled")?!0:typeof i.disabled<"u"?i.disabled:i.hasAttribute("disabled")&&i.getAttribute("disabled")!=="false",Pl=i=>{if(!document.documentElement.attachShadow)return null;if(typeof i.getRootNode=="function"){const t=i.getRootNode();return t instanceof ShadowRoot?t:null}return i instanceof ShadowRoot?i:i.parentNode?Pl(i.parentNode):null},Sn=()=>function(){},Ii=i=>{i.offsetHeight},Rl=()=>{const{jQuery:i}=window;return i&&!document.body.hasAttribute("data-te-no-jquery")?i:null},xr=[],Nl=i=>{document.readyState==="loading"?(xr.length||document.addEventListener("DOMContentLoaded",()=>{xr.forEach(t=>t())}),xr.push(i)):i()},st=()=>document.documentElement.dir==="rtl",qp=i=>Array.from(i),z=i=>document.createElement(i),ii=i=>{typeof i=="function"&&i()},$l=(i,t,e=!0)=>{if(!e){ii(i);return}const s=5,n=Gp(t)+s;let o=!1;const r=({target:a})=>{a===t&&(o=!0,t.removeEventListener(vr,r),ii(i))};t.addEventListener(vr,r),setTimeout(()=>{o||Ll(t)},n)},Bl=(i,t,e,s)=>{let n=i.indexOf(t);if(n===-1)return i[!e&&s?i.length-1:0];const o=i.length;return n+=e?1:-1,s&&(n=(n+o)%o),i[Math.max(0,Math.min(n,o-1))]},Zp=/[^.]*(?=\..*)\.|.*/,Qp=/\..*/,Jp=/::\d+$/,Er={};let Hl=1;const t_={mouseenter:"mouseover",mouseleave:"mouseout"},e_=/^(mouseenter|mouseleave)/i,Fl=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Vl(i,t){return t&&`${t}::${Hl++}`||i.uidEvent||Hl++}function Wl(i){const t=Vl(i);return i.uidEvent=t,Er[t]=Er[t]||{},Er[t]}function i_(i,t){return function e(s){return s.delegateTarget=i,e.oneOff&&b.off(i,s.type,t),t.apply(i,[s])}}function s_(i,t,e){return function s(n){const o=i.querySelectorAll(t);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;"")if(o[a]===r)return n.delegateTarget=r,s.oneOff&&b.off(i,n.type,e),e.apply(r,[n]);return null}}function zl(i,t,e=null){const s=Object.keys(i);for(let n=0,o=s.length;nfunction(_){if(!_.relatedTarget||_.relatedTarget!==_.delegateTarget&&!_.delegateTarget.contains(_.relatedTarget))return p.call(this,_)};s?s=f(s):e=f(e)}const[o,r,a]=jl(t,e,s),l=Wl(i),c=l[a]||(l[a]={}),h=zl(c,r,o?e:null);if(h){h.oneOff=h.oneOff&&n;return}const d=Vl(r,t.replace(Zp,"")),u=o?s_(i,e,s):i_(i,e);u.delegationSelector=o?e:null,u.originalHandler=r,u.oneOff=n,u.uidEvent=d,c[d]=u,i.addEventListener(a,u,o)}function Cr(i,t,e,s,n){const o=zl(t[e],s,n);o&&(i.removeEventListener(e,o,!!n),delete t[e][o.uidEvent])}function n_(i,t,e,s){const n=t[e]||{};Object.keys(n).forEach(o=>{if(o.includes(s)){const r=n[o];Cr(i,t,e,r.originalHandler,r.delegationSelector)}})}function Kl(i){return i=i.replace(Qp,""),t_[i]||i}const b={on(i,t,e,s){Yl(i,t,e,s,!1)},one(i,t,e,s){Yl(i,t,e,s,!0)},off(i,t,e,s){if(typeof t!="string"||!i)return;const[n,o,r]=jl(t,e,s),a=r!==t,l=Wl(i),c=t.startsWith(".");if(typeof o<"u"){if(!l||!l[r])return;Cr(i,l,r,o,n?e:null);return}c&&Object.keys(l).forEach(d=>{n_(i,l,d,t.slice(1))});const h=l[r]||{};Object.keys(h).forEach(d=>{const u=d.replace(Jp,"");if(!a||t.includes(u)){const f=h[d];Cr(i,l,r,f.originalHandler,f.delegationSelector)}})},trigger(i,t,e){if(typeof t!="string"||!i)return null;const s=Rl(),n=Kl(t),o=t!==n,r=Fl.has(n);let a,l=!0,c=!0,h=!1,d=null;return o&&s&&(a=s.Event(t,e),s(i).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(n,l,!0)):d=new CustomEvent(t,{bubbles:l,cancelable:!0}),typeof e<"u"&&Object.keys(e).forEach(u=>{Object.defineProperty(d,u,{get(){return e[u]}})}),h&&d.preventDefault(),c&&i.dispatchEvent(d),d.defaultPrevented&&typeof a<"u"&&a.preventDefault(),d}},si={on(i,t,e,s){const n=t.split(" ");for(let o=0;o{this[t]=null})}_queueCallback(t,e,s=!0){$l(t,e,s)}static getInstance(t){return P.getData(Le(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}static get VERSION(){return o_}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`te.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const r_="button",a_="active";class On extends Xt{static get NAME(){return r_}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(a_))}static jQueryInterface(t){return this.each(function(){const e=On.getOrCreateInstance(this);t==="toggle"&&e[t]()})}}var gt="top",Ot="bottom",Dt="right",mt="left",bs="auto",Li=[gt,Ot,Dt,mt],ni="start",Pi="end",Ul="clippingParents",Tr="viewport",Ri="popper",Xl="reference",Ar=Li.reduce(function(i,t){return i.concat([t+"-"+ni,t+"-"+Pi])},[]),wr=[].concat(Li,[bs]).reduce(function(i,t){return i.concat([t,t+"-"+ni,t+"-"+Pi])},[]),Gl="beforeRead",ql="read",Zl="afterRead",Ql="beforeMain",Jl="main",tc="afterMain",ec="beforeWrite",ic="write",sc="afterWrite",Dn=[Gl,ql,Zl,Ql,Jl,tc,ec,ic,sc];function oe(i){return i?(i.nodeName||"").toLowerCase():null}function Mt(i){if(i==null)return window;if(i.toString()!=="[object Window]"){var t=i.ownerDocument;return t&&t.defaultView||window}return i}function oi(i){var t=Mt(i).Element;return i instanceof t||i instanceof Element}function It(i){var t=Mt(i).HTMLElement;return i instanceof t||i instanceof HTMLElement}function kr(i){if(typeof ShadowRoot>"u")return!1;var t=Mt(i).ShadowRoot;return i instanceof t||i instanceof ShadowRoot}function l_(i){var t=i.state;Object.keys(t.elements).forEach(function(e){var s=t.styles[e]||{},n=t.attributes[e]||{},o=t.elements[e];!It(o)||!oe(o)||(Object.assign(o.style,s),Object.keys(n).forEach(function(r){var a=n[r];a===!1?o.removeAttribute(r):o.setAttribute(r,a===!0?"":a)}))})}function c_(i){var t=i.state,e={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,e.popper),t.styles=e,t.elements.arrow&&Object.assign(t.elements.arrow.style,e.arrow),function(){Object.keys(t.elements).forEach(function(s){var n=t.elements[s],o=t.attributes[s]||{},r=Object.keys(t.styles.hasOwnProperty(s)?t.styles[s]:e[s]),a=r.reduce(function(l,c){return l[c]="",l},{});!It(n)||!oe(n)||(Object.assign(n.style,a),Object.keys(o).forEach(function(l){n.removeAttribute(l)}))})}}const Sr={name:"applyStyles",enabled:!0,phase:"write",fn:l_,effect:c_,requires:["computeStyles"]};function Gt(i){return i.split("-")[0]}var ri=Math.max,Mn=Math.min,Ni=Math.round;function Or(){var i=navigator.userAgentData;return i!=null&&i.brands&&Array.isArray(i.brands)?i.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function nc(){return!/^((?!chrome|android).)*safari/i.test(Or())}function $i(i,t,e){t===void 0&&(t=!1),e===void 0&&(e=!1);var s=i.getBoundingClientRect(),n=1,o=1;t&&It(i)&&(n=i.offsetWidth>0&&Ni(s.width)/i.offsetWidth||1,o=i.offsetHeight>0&&Ni(s.height)/i.offsetHeight||1);var r=oi(i)?Mt(i):window,a=r.visualViewport,l=!nc()&&e,c=(s.left+(l&&a?a.offsetLeft:0))/n,h=(s.top+(l&&a?a.offsetTop:0))/o,d=s.width/n,u=s.height/o;return{width:d,height:u,top:h,right:c+d,bottom:h+u,left:c,x:c,y:h}}function Dr(i){var t=$i(i),e=i.offsetWidth,s=i.offsetHeight;return Math.abs(t.width-e)<=1&&(e=t.width),Math.abs(t.height-s)<=1&&(s=t.height),{x:i.offsetLeft,y:i.offsetTop,width:e,height:s}}function oc(i,t){var e=t.getRootNode&&t.getRootNode();if(i.contains(t))return!0;if(e&&kr(e)){var s=t;do{if(s&&i.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function qt(i){return Mt(i).getComputedStyle(i)}function h_(i){return["table","td","th"].indexOf(oe(i))>=0}function Pe(i){return((oi(i)?i.ownerDocument:i.document)||window.document).documentElement}function In(i){return oe(i)==="html"?i:i.assignedSlot||i.parentNode||(kr(i)?i.host:null)||Pe(i)}function rc(i){return!It(i)||qt(i).position==="fixed"?null:i.offsetParent}function d_(i){var t=/firefox/i.test(Or()),e=/Trident/i.test(Or());if(e&&It(i)){var s=qt(i);if(s.position==="fixed")return null}var n=In(i);for(kr(n)&&(n=n.host);It(n)&&["html","body"].indexOf(oe(n))<0;){var o=qt(n);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return n;n=n.parentNode}return null}function vs(i){for(var t=Mt(i),e=rc(i);e&&h_(e)&&qt(e).position==="static";)e=rc(e);return e&&(oe(e)==="html"||oe(e)==="body"&&qt(e).position==="static")?t:e||d_(i)||t}function Mr(i){return["top","bottom"].indexOf(i)>=0?"x":"y"}function ys(i,t,e){return ri(i,Mn(t,e))}function u_(i,t,e){var s=ys(i,t,e);return s>e?e:s}function ac(){return{top:0,right:0,bottom:0,left:0}}function lc(i){return Object.assign({},ac(),i)}function cc(i,t){return t.reduce(function(e,s){return e[s]=i,e},{})}var f_=function(t,e){return t=typeof t=="function"?t(Object.assign({},e.rects,{placement:e.placement})):t,lc(typeof t!="number"?t:cc(t,Li))};function p_(i){var t,e=i.state,s=i.name,n=i.options,o=e.elements.arrow,r=e.modifiersData.popperOffsets,a=Gt(e.placement),l=Mr(a),c=[mt,Dt].indexOf(a)>=0,h=c?"height":"width";if(!(!o||!r)){var d=f_(n.padding,e),u=Dr(o),f=l==="y"?gt:mt,p=l==="y"?Ot:Dt,_=e.rects.reference[h]+e.rects.reference[l]-r[l]-e.rects.popper[h],m=r[l]-e.rects.reference[l],y=vs(o),x=y?l==="y"?y.clientHeight||0:y.clientWidth||0:0,E=_/2-m/2,C=d[f],T=x-u[h]-d[p],A=x/2-u[h]/2+E,w=ys(C,A,T),S=l;e.modifiersData[s]=(t={},t[S]=w,t.centerOffset=w-A,t)}}function __(i){var t=i.state,e=i.options,s=e.element,n=s===void 0?"[data-popper-arrow]":s;if(n!=null&&!(typeof n=="string"&&(n=t.elements.popper.querySelector(n),!n))){if({}.NODE_ENV!=="production"&&(It(n)||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(" "))),!oc(t.elements.popper,n)){({}).NODE_ENV!=="production"&&console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper',"element."].join(" "));return}t.elements.arrow=n}}const hc={name:"arrow",enabled:!0,phase:"main",fn:p_,effect:__,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Bi(i){return i.split("-")[1]}var g_={top:"auto",right:"auto",bottom:"auto",left:"auto"};function m_(i,t){var e=i.x,s=i.y,n=t.devicePixelRatio||1;return{x:Ni(e*n)/n||0,y:Ni(s*n)/n||0}}function dc(i){var t,e=i.popper,s=i.popperRect,n=i.placement,o=i.variation,r=i.offsets,a=i.position,l=i.gpuAcceleration,c=i.adaptive,h=i.roundOffsets,d=i.isFixed,u=r.x,f=u===void 0?0:u,p=r.y,_=p===void 0?0:p,m=typeof h=="function"?h({x:f,y:_}):{x:f,y:_};f=m.x,_=m.y;var y=r.hasOwnProperty("x"),x=r.hasOwnProperty("y"),E=mt,C=gt,T=window;if(c){var A=vs(e),w="clientHeight",S="clientWidth";if(A===Mt(e)&&(A=Pe(e),qt(A).position!=="static"&&a==="absolute"&&(w="scrollHeight",S="scrollWidth")),A=A,n===gt||(n===mt||n===Dt)&&o===Pi){C=Ot;var k=d&&A===T&&T.visualViewport?T.visualViewport.height:A[w];_-=k-s.height,_*=l?1:-1}if(n===mt||(n===gt||n===Ot)&&o===Pi){E=Dt;var D=d&&A===T&&T.visualViewport?T.visualViewport.width:A[S];f-=D-s.width,f*=l?1:-1}}var O=Object.assign({position:a},c&&g_),M=h===!0?m_({x:f,y:_},Mt(e)):{x:f,y:_};if(f=M.x,_=M.y,l){var L;return Object.assign({},O,(L={},L[C]=x?"0":"",L[E]=y?"0":"",L.transform=(T.devicePixelRatio||1)<=1?"translate("+f+"px, "+_+"px)":"translate3d("+f+"px, "+_+"px, 0)",L))}return Object.assign({},O,(t={},t[C]=x?_+"px":"",t[E]=y?f+"px":"",t.transform="",t))}function b_(i){var t=i.state,e=i.options,s=e.gpuAcceleration,n=s===void 0?!0:s,o=e.adaptive,r=o===void 0?!0:o,a=e.roundOffsets,l=a===void 0?!0:a;if({}.NODE_ENV!=="production"){var c=qt(t.elements.popper).transitionProperty||"";r&&["transform","top","right","bottom","left"].some(function(d){return c.indexOf(d)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` + +`,'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.",` + +`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "))}var h={placement:Gt(t.placement),variation:Bi(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:n,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,dc(Object.assign({},h,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,dc(Object.assign({},h,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Ir={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:b_,data:{}};var Ln={passive:!0};function v_(i){var t=i.state,e=i.instance,s=i.options,n=s.scroll,o=n===void 0?!0:n,r=s.resize,a=r===void 0?!0:r,l=Mt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach(function(h){h.addEventListener("scroll",e.update,Ln)}),a&&l.addEventListener("resize",e.update,Ln),function(){o&&c.forEach(function(h){h.removeEventListener("scroll",e.update,Ln)}),a&&l.removeEventListener("resize",e.update,Ln)}}const Lr={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:v_,data:{}};var y_={left:"right",right:"left",bottom:"top",top:"bottom"};function Pn(i){return i.replace(/left|right|bottom|top/g,function(t){return y_[t]})}var x_={start:"end",end:"start"};function uc(i){return i.replace(/start|end/g,function(t){return x_[t]})}function Pr(i){var t=Mt(i),e=t.pageXOffset,s=t.pageYOffset;return{scrollLeft:e,scrollTop:s}}function Rr(i){return $i(Pe(i)).left+Pr(i).scrollLeft}function E_(i,t){var e=Mt(i),s=Pe(i),n=e.visualViewport,o=s.clientWidth,r=s.clientHeight,a=0,l=0;if(n){o=n.width,r=n.height;var c=nc();(c||!c&&t==="fixed")&&(a=n.offsetLeft,l=n.offsetTop)}return{width:o,height:r,x:a+Rr(i),y:l}}function C_(i){var t,e=Pe(i),s=Pr(i),n=(t=i.ownerDocument)==null?void 0:t.body,o=ri(e.scrollWidth,e.clientWidth,n?n.scrollWidth:0,n?n.clientWidth:0),r=ri(e.scrollHeight,e.clientHeight,n?n.scrollHeight:0,n?n.clientHeight:0),a=-s.scrollLeft+Rr(i),l=-s.scrollTop;return qt(n||e).direction==="rtl"&&(a+=ri(e.clientWidth,n?n.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}function Nr(i){var t=qt(i),e=t.overflow,s=t.overflowX,n=t.overflowY;return/auto|scroll|overlay|hidden/.test(e+n+s)}function fc(i){return["html","body","#document"].indexOf(oe(i))>=0?i.ownerDocument.body:It(i)&&Nr(i)?i:fc(In(i))}function xs(i,t){var e;t===void 0&&(t=[]);var s=fc(i),n=s===((e=i.ownerDocument)==null?void 0:e.body),o=Mt(s),r=n?[o].concat(o.visualViewport||[],Nr(s)?s:[]):s,a=t.concat(r);return n?a:a.concat(xs(In(r)))}function $r(i){return Object.assign({},i,{left:i.x,top:i.y,right:i.x+i.width,bottom:i.y+i.height})}function T_(i,t){var e=$i(i,!1,t==="fixed");return e.top=e.top+i.clientTop,e.left=e.left+i.clientLeft,e.bottom=e.top+i.clientHeight,e.right=e.left+i.clientWidth,e.width=i.clientWidth,e.height=i.clientHeight,e.x=e.left,e.y=e.top,e}function pc(i,t,e){return t===Tr?$r(E_(i,e)):oi(t)?T_(t,e):$r(C_(Pe(i)))}function A_(i){var t=xs(In(i)),e=["absolute","fixed"].indexOf(qt(i).position)>=0,s=e&&It(i)?vs(i):i;return oi(s)?t.filter(function(n){return oi(n)&&oc(n,s)&&oe(n)!=="body"}):[]}function w_(i,t,e,s){var n=t==="clippingParents"?A_(i):[].concat(t),o=[].concat(n,[e]),r=o[0],a=o.reduce(function(l,c){var h=pc(i,c,s);return l.top=ri(h.top,l.top),l.right=Mn(h.right,l.right),l.bottom=Mn(h.bottom,l.bottom),l.left=ri(h.left,l.left),l},pc(i,r,s));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function _c(i){var t=i.reference,e=i.element,s=i.placement,n=s?Gt(s):null,o=s?Bi(s):null,r=t.x+t.width/2-e.width/2,a=t.y+t.height/2-e.height/2,l;switch(n){case gt:l={x:r,y:t.y-e.height};break;case Ot:l={x:r,y:t.y+t.height};break;case Dt:l={x:t.x+t.width,y:a};break;case mt:l={x:t.x-e.width,y:a};break;default:l={x:t.x,y:t.y}}var c=n?Mr(n):null;if(c!=null){var h=c==="y"?"height":"width";switch(o){case ni:l[c]=l[c]-(t[h]/2-e[h]/2);break;case Pi:l[c]=l[c]+(t[h]/2-e[h]/2);break}}return l}function Hi(i,t){t===void 0&&(t={});var e=t,s=e.placement,n=s===void 0?i.placement:s,o=e.strategy,r=o===void 0?i.strategy:o,a=e.boundary,l=a===void 0?Ul:a,c=e.rootBoundary,h=c===void 0?Tr:c,d=e.elementContext,u=d===void 0?Ri:d,f=e.altBoundary,p=f===void 0?!1:f,_=e.padding,m=_===void 0?0:_,y=lc(typeof m!="number"?m:cc(m,Li)),x=u===Ri?Xl:Ri,E=i.rects.popper,C=i.elements[p?x:u],T=w_(oi(C)?C:C.contextElement||Pe(i.elements.popper),l,h,r),A=$i(i.elements.reference),w=_c({reference:A,element:E,strategy:"absolute",placement:n}),S=$r(Object.assign({},E,w)),k=u===Ri?S:A,D={top:T.top-k.top+y.top,bottom:k.bottom-T.bottom+y.bottom,left:T.left-k.left+y.left,right:k.right-T.right+y.right},O=i.modifiersData.offset;if(u===Ri&&O){var M=O[n];Object.keys(D).forEach(function(L){var X=[Dt,Ot].indexOf(L)>=0?1:-1,I=[gt,Ot].indexOf(L)>=0?"y":"x";D[L]+=M[I]*X})}return D}function k_(i,t){t===void 0&&(t={});var e=t,s=e.placement,n=e.boundary,o=e.rootBoundary,r=e.padding,a=e.flipVariations,l=e.allowedAutoPlacements,c=l===void 0?wr:l,h=Bi(s),d=h?a?Ar:Ar.filter(function(p){return Bi(p)===h}):Li,u=d.filter(function(p){return c.indexOf(p)>=0});u.length===0&&(u=d,{}.NODE_ENV!=="production"&&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(" ")));var f=u.reduce(function(p,_){return p[_]=Hi(i,{placement:_,boundary:n,rootBoundary:o,padding:r})[Gt(_)],p},{});return Object.keys(f).sort(function(p,_){return f[p]-f[_]})}function S_(i){if(Gt(i)===bs)return[];var t=Pn(i);return[uc(i),t,uc(t)]}function O_(i){var t=i.state,e=i.options,s=i.name;if(!t.modifiersData[s]._skip){for(var n=e.mainAxis,o=n===void 0?!0:n,r=e.altAxis,a=r===void 0?!0:r,l=e.fallbackPlacements,c=e.padding,h=e.boundary,d=e.rootBoundary,u=e.altBoundary,f=e.flipVariations,p=f===void 0?!0:f,_=e.allowedAutoPlacements,m=t.options.placement,y=Gt(m),x=y===m,E=l||(x||!p?[Pn(m)]:S_(m)),C=[m].concat(E).reduce(function(xe,Ut){return xe.concat(Gt(Ut)===bs?k_(t,{placement:Ut,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:_}):Ut)},[]),T=t.rects.reference,A=t.rects.popper,w=new Map,S=!0,k=C[0],D=0;D=0,I=X?"width":"height",F=Hi(t,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),Y=X?L?Dt:mt:L?Ot:gt;T[I]>A[I]&&(Y=Pn(Y));var Yt=Pn(Y),ee=[];if(o&&ee.push(F[M]<=0),a&&ee.push(F[Y]<=0,F[Yt]<=0),ee.every(function(xe){return xe})){k=O,S=!1;break}w.set(O,ee)}if(S)for(var ie=p?3:1,ti=function(Ut){var Me=C.find(function(mr){var Oi=w.get(mr);if(Oi)return Oi.slice(0,Ut).every(function(Ol){return Ol})});if(Me)return k=Me,"break"},Kt=ie;Kt>0;Kt--){var ye=ti(Kt);if(ye==="break")break}t.placement!==k&&(t.modifiersData[s]._skip=!0,t.placement=k,t.reset=!0)}}const gc={name:"flip",enabled:!0,phase:"main",fn:O_,requiresIfExists:["offset"],data:{_skip:!1}};function mc(i,t,e){return e===void 0&&(e={x:0,y:0}),{top:i.top-t.height-e.y,right:i.right-t.width+e.x,bottom:i.bottom-t.height+e.y,left:i.left-t.width-e.x}}function bc(i){return[gt,Dt,Ot,mt].some(function(t){return i[t]>=0})}function D_(i){var t=i.state,e=i.name,s=t.rects.reference,n=t.rects.popper,o=t.modifiersData.preventOverflow,r=Hi(t,{elementContext:"reference"}),a=Hi(t,{altBoundary:!0}),l=mc(r,s),c=mc(a,n,o),h=bc(l),d=bc(c);t.modifiersData[e]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}const vc={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:D_};function M_(i,t,e){var s=Gt(i),n=[mt,gt].indexOf(s)>=0?-1:1,o=typeof e=="function"?e(Object.assign({},t,{placement:i})):e,r=o[0],a=o[1];return r=r||0,a=(a||0)*n,[mt,Dt].indexOf(s)>=0?{x:a,y:r}:{x:r,y:a}}function I_(i){var t=i.state,e=i.options,s=i.name,n=e.offset,o=n===void 0?[0,0]:n,r=wr.reduce(function(h,d){return h[d]=M_(d,t.rects,o),h},{}),a=r[t.placement],l=a.x,c=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[s]=r}const yc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:I_};function L_(i){var t=i.state,e=i.name;t.modifiersData[e]=_c({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const Br={name:"popperOffsets",enabled:!0,phase:"read",fn:L_,data:{}};function P_(i){return i==="x"?"y":"x"}function R_(i){var t=i.state,e=i.options,s=i.name,n=e.mainAxis,o=n===void 0?!0:n,r=e.altAxis,a=r===void 0?!1:r,l=e.boundary,c=e.rootBoundary,h=e.altBoundary,d=e.padding,u=e.tether,f=u===void 0?!0:u,p=e.tetherOffset,_=p===void 0?0:p,m=Hi(t,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),y=Gt(t.placement),x=Bi(t.placement),E=!x,C=Mr(y),T=P_(C),A=t.modifiersData.popperOffsets,w=t.rects.reference,S=t.rects.popper,k=typeof _=="function"?_(Object.assign({},t.rects,{placement:t.placement})):_,D=typeof k=="number"?{mainAxis:k,altAxis:k}:Object.assign({mainAxis:0,altAxis:0},k),O=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(A){if(o){var L,X=C==="y"?gt:mt,I=C==="y"?Ot:Dt,F=C==="y"?"height":"width",Y=A[C],Yt=Y+m[X],ee=Y-m[I],ie=f?-S[F]/2:0,ti=x===ni?w[F]:S[F],Kt=x===ni?-S[F]:-w[F],ye=t.elements.arrow,xe=f&&ye?Dr(ye):{width:0,height:0},Ut=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:ac(),Me=Ut[X],mr=Ut[I],Oi=ys(0,w[F],xe[F]),Ol=E?w[F]/2-ie-Oi-Me-D.mainAxis:ti-Oi-Me-D.mainAxis,Tk=E?-w[F]/2+ie+Oi+mr+D.mainAxis:Kt+Oi+mr+D.mainAxis,Dl=t.elements.arrow&&vs(t.elements.arrow),Ak=Dl?C==="y"?Dl.clientTop||0:Dl.clientLeft||0:0,Rp=(L=O==null?void 0:O[C])!=null?L:0,wk=Y+Ol-Rp-Ak,kk=Y+Tk-Rp,Np=ys(f?Mn(Yt,wk):Yt,Y,f?ri(ee,kk):ee);A[C]=Np,M[C]=Np-Y}if(a){var $p,Sk=C==="x"?gt:mt,Ok=C==="x"?Ot:Dt,Di=A[T],br=T==="y"?"height":"width",Bp=Di+m[Sk],Hp=Di-m[Ok],Ml=[gt,mt].indexOf(y)!==-1,Fp=($p=O==null?void 0:O[T])!=null?$p:0,Vp=Ml?Bp:Di-w[br]-S[br]-Fp+D.altAxis,Wp=Ml?Di+w[br]+S[br]-Fp-D.altAxis:Hp,zp=f&&Ml?u_(Vp,Di,Wp):ys(f?Vp:Bp,Di,f?Wp:Hp);A[T]=zp,M[T]=zp-Di}t.modifiersData[s]=M}}const xc={name:"preventOverflow",enabled:!0,phase:"main",fn:R_,requiresIfExists:["offset"]};function N_(i){return{scrollLeft:i.scrollLeft,scrollTop:i.scrollTop}}function $_(i){return i===Mt(i)||!It(i)?Pr(i):N_(i)}function B_(i){var t=i.getBoundingClientRect(),e=Ni(t.width)/i.offsetWidth||1,s=Ni(t.height)/i.offsetHeight||1;return e!==1||s!==1}function H_(i,t,e){e===void 0&&(e=!1);var s=It(t),n=It(t)&&B_(t),o=Pe(t),r=$i(i,n,e),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(s||!s&&!e)&&((oe(t)!=="body"||Nr(o))&&(a=$_(t)),It(t)?(l=$i(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=Rr(o))),{x:r.left+a.scrollLeft-l.x,y:r.top+a.scrollTop-l.y,width:r.width,height:r.height}}function F_(i){var t=new Map,e=new Set,s=[];i.forEach(function(o){t.set(o.name,o)});function n(o){e.add(o.name);var r=[].concat(o.requires||[],o.requiresIfExists||[]);r.forEach(function(a){if(!e.has(a)){var l=t.get(a);l&&n(l)}}),s.push(o)}return i.forEach(function(o){e.has(o.name)||n(o)}),s}function V_(i){var t=F_(i);return Dn.reduce(function(e,s){return e.concat(t.filter(function(n){return n.phase===s}))},[])}function W_(i){var t;return function(){return t||(t=new Promise(function(e){Promise.resolve().then(function(){t=void 0,e(i())})})),t}}function Re(i){for(var t=arguments.length,e=new Array(t>1?t-1:0),s=1;s100)){console.error(U_);break}if(h.reset===!0){h.reset=!1,T=-1;continue}var A=h.orderedModifiers[T],w=A.fn,S=A.options,k=S===void 0?{}:S,D=A.name;typeof w=="function"&&(h=w({state:h,options:k,name:D,instance:f})||h)}}},update:W_(function(){return new Promise(function(m){f.forceUpdate(),m(h)})}),destroy:function(){_(),u=!0}};if(!Ac(a,l))return{}.NODE_ENV!=="production"&&console.error(Cc),f;f.setOptions(c).then(function(m){!u&&c.onFirstUpdate&&c.onFirstUpdate(m)});function p(){h.orderedModifiers.forEach(function(m){var y=m.name,x=m.options,E=x===void 0?{}:x,C=m.effect;if(typeof C=="function"){var T=C({state:h,name:y,instance:f,options:E}),A=function(){};d.push(T||A)}})}function _(){d.forEach(function(m){return m()}),d=[]}return f}}var X_=Rn(),G_=[Lr,Br,Ir,Sr],q_=Rn({defaultModifiers:G_}),Z_=[Lr,Br,Ir,Sr,yc,gc,xc,hc,vc],Fi=Rn({defaultModifiers:Z_});const wc=Object.freeze(Object.defineProperty({__proto__:null,afterMain:tc,afterRead:Zl,afterWrite:sc,applyStyles:Sr,arrow:hc,auto:bs,basePlacements:Li,beforeMain:Ql,beforeRead:Gl,beforeWrite:ec,bottom:Ot,clippingParents:Ul,computeStyles:Ir,createPopper:Fi,createPopperBase:X_,createPopperLite:q_,detectOverflow:Hi,end:Pi,eventListeners:Lr,flip:gc,hide:vc,left:mt,main:Jl,modifierPhases:Dn,offset:yc,placements:wr,popper:Ri,popperGenerator:Rn,popperOffsets:Br,preventOverflow:xc,read:ql,reference:Xl,right:Dt,start:ni,top:gt,variationPlacements:Ar,viewport:Tr,write:ic},Symbol.toStringTag,{value:"Module"}));function Hr(i){return i==="true"?!0:i==="false"?!1:i===Number(i).toString()?Number(i):i===""||i==="null"?null:i}function Fr(i){return i.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const v={setDataAttribute(i,t,e){i.setAttribute(`data-te-${Fr(t)}`,e)},removeDataAttribute(i,t){i.removeAttribute(`data-te-${Fr(t)}`)},getDataAttributes(i){if(!i)return{};const t={};return Object.keys(i.dataset).filter(e=>e.startsWith("te")).forEach(e=>{if(e.startsWith("teClass"))return;let s=e.replace(/^te/,"");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),t[s]=Hr(i.dataset[e])}),t},getDataClassAttributes(i){if(!i)return{};const t={...i.dataset};return Object.keys(t).filter(e=>e.startsWith("teClass")).forEach(e=>{let s=e.replace(/^teClass/,"");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),t[s]=Hr(t[e])}),t},getDataAttribute(i,t){return Hr(i.getAttribute(`data-te-${Fr(t)}`))},offset(i){const t=i.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},position(i){return{top:i.offsetTop,left:i.offsetLeft}},style(i,t){Object.assign(i.style,t)},toggleClass(i,t){i&&Vr(t).forEach(e=>{i.classList.contains(e)?i.classList.remove(e):i.classList.add(e)})},addClass(i,t){Vr(t).forEach(e=>!i.classList.contains(e)&&i.classList.add(e))},addStyle(i,t){Object.keys(t).forEach(e=>{i.style[e]=t[e]})},removeClass(i,t){Vr(t).forEach(e=>i.classList.contains(e)&&i.classList.remove(e))},hasClass(i,t){return i.classList.contains(t)}};function Vr(i){return typeof i=="string"?i.split(" "):Array.isArray(i)?i:!1}const Q_=3,g={closest(i,t){return i.closest(t)},matches(i,t){return i.matches(t)},find(i,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,i))},findOne(i,t=document.documentElement){return Element.prototype.querySelector.call(t,i)},children(i,t){return[].concat(...i.children).filter(s=>s.matches(t))},parents(i,t){const e=[];let s=i.parentNode;for(;s&&s.nodeType===Node.ELEMENT_NODE&&s.nodeType!==Q_;)this.matches(s,t)&&e.push(s),s=s.parentNode;return e},prev(i,t){let e=i.previousElementSibling;for(;e;){if(e.matches(t))return[e];e=e.previousElementSibling}return[]},next(i,t){let e=i.nextElementSibling;for(;e;){if(this.matches(e,t))return[e];e=e.nextElementSibling}return[]},focusableChildren(i){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(e=>`${e}:not([tabindex^="-"])`).join(", ");return this.find(t,i).filter(e=>!ei(e)&&ne(e))}},Wr="dropdown",li=".te.dropdown",zr=".data-api",Nn="Escape",kc="Space",Sc="Tab",jr="ArrowUp",$n="ArrowDown",J_=2,tg=new RegExp(`${jr}|${$n}|${Nn}`),eg=`hide${li}`,ig=`hidden${li}`,sg=`show${li}`,ng=`shown${li}`,og=`click${li}${zr}`,Oc=`keydown${li}${zr}`,rg=`keyup${li}${zr}`,Ne="show",ag="dropup",lg="dropend",cg="dropstart",hg="[data-te-navbar-ref]",Bn="[data-te-dropdown-toggle-ref]",Yr="[data-te-dropdown-menu-ref]",dg="[data-te-navbar-nav-ref]",ug="[data-te-dropdown-menu-ref] [data-te-dropdown-item-ref]:not(.disabled):not(:disabled)",fg=st()?"top-end":"top-start",pg=st()?"top-start":"top-end",_g=st()?"bottom-end":"bottom-start",gg=st()?"bottom-start":"bottom-end",mg=st()?"left-start":"right-start",bg=st()?"right-start":"left-start",vg=[{opacity:"0"},{opacity:"1"}],yg=[{opacity:"1"},{opacity:"0"}],Hn={duration:550,iterations:1,easing:"ease",fill:"both"},xg={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null,autoClose:!0,dropdownAnimation:"on"},Eg={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)",autoClose:"(boolean|string)",dropdownAnimation:"string"};class $t extends Xt{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._fadeOutAnimate=null;const s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this._animationCanPlay=this._config.dropdownAnimation==="on"&&!s,this._didInit=!1,this._init()}static get Default(){return xg}static get DefaultType(){return Eg}static get NAME(){return Wr}toggle(){return this._isShown()?this.hide():this.show()}show(){if(ei(this._element)||this._isShown(this._menu))return;const t={relatedTarget:this._element};if(b.trigger(this._element,sg,t).defaultPrevented)return;const s=$t.getParentFromElement(this._element);this._inNavbar?v.setDataAttribute(this._menu,"popper","none"):this._createPopper(s),"ontouchstart"in document.documentElement&&!s.closest(dg)&&[].concat(...document.body.children).forEach(n=>b.on(n,"mouseover",Sn)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.setAttribute(`data-te-dropdown-${Ne}`,""),this._animationCanPlay&&this._menu.animate(vg,Hn),this._element.setAttribute(`data-te-dropdown-${Ne}`,""),setTimeout(()=>{b.trigger(this._element,ng,t)},this._animationCanPlay?Hn.duration:0)}hide(){if(ei(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_init(){this._didInit||(b.on(document,Oc,Bn,$t.dataApiKeydownHandler),b.on(document,Oc,Yr,$t.dataApiKeydownHandler),b.on(document,og,$t.clearMenus),b.on(document,rg,$t.clearMenus),this._didInit=!0)}_completeHide(t){this._fadeOutAnimate&&this._fadeOutAnimate.playState==="running"||b.trigger(this._element,eg,t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(s=>b.off(s,"mouseover",Sn)),this._animationCanPlay&&(this._fadeOutAnimate=this._menu.animate(yg,Hn)),setTimeout(()=>{this._popper&&this._popper.destroy(),this._menu.removeAttribute(`data-te-dropdown-${Ne}`),this._element.removeAttribute(`data-te-dropdown-${Ne}`),this._element.setAttribute("aria-expanded","false"),v.removeDataAttribute(this._menu,"popper"),b.trigger(this._element,ig,t)},this._animationCanPlay?Hn.duration:0))}_getConfig(t){if(t={...this.constructor.Default,...v.getDataAttributes(this._element),...t},W(Wr,t,this.constructor.DefaultType),typeof t.reference=="object"&&!Mi(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${Wr.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(typeof wc>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=t:Mi(this._config.reference)?e=Le(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);const s=this._getPopperConfig(),n=s.modifiers.find(o=>o.name==="applyStyles"&&o.enabled===!1);this._popper=Fi(e,this._menu,s),n&&v.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.dataset[`teDropdown${Ne.charAt(0).toUpperCase()+Ne.slice(1)}`]===""}_getMenuElement(){return g.next(this._element,Yr)[0]}_getPlacement(){const t=this._element.parentNode;if(t.dataset.teDropdownPosition===lg)return mg;if(t.dataset.teDropdownPosition===cg)return bg;const e=getComputedStyle(this._menu).getPropertyValue("--te-position").trim()==="end";return t.dataset.teDropdownPosition===ag?e?pg:fg:e?gg:_g}_detectNavbar(){return this._element.closest(hg)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return this._config.display==="static"&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...typeof this._config.popperConfig=="function"?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const s=g.find(ug,this._menu).filter(ne);s.length&&Bl(s,e,t===$n,!s.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=$t.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}static clearMenus(t){if(t&&(t.button===J_||t.type==="keyup"&&t.key!==Sc))return;const e=g.find(Bn);for(let s=0,n=e.length;sh===this._element);l!==null&&c.length&&(this._selector=l,this._triggerArray.push(a))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Mc}static get NAME(){return Kr}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[],e;if(this._config.parent){const h=g.find(Lc,this._config.parent);t=g.find(Mg,this._config.parent).filter(d=>!h.includes(d))}const s=g.findOne(this._selector);if(t.length){const h=t.find(d=>s!==d);if(e=h?re.getInstance(h):null,e&&e._isTransitioning)return}if(b.trigger(this._element,Tg).defaultPrevented)return;t.forEach(h=>{s!==h&&re.getOrCreateInstance(h,{toggle:!1}).hide(),e||P.setData(h,Dc,null)});const o=this._getDimension(),r=o==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;v.removeClass(this._element,this._classes.visible),v.removeClass(this._element,this._classes.hidden),v.addClass(this._element,r),this._element.removeAttribute(Vi),this._element.setAttribute(Vn,""),this._element.style[o]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const a=()=>{this._isTransitioning=!1,v.removeClass(this._element,this._classes.hidden),v.removeClass(this._element,r),v.addClass(this._element,this._classes.visible),this._element.removeAttribute(Vn),this._element.setAttribute(Vi,""),this._element.setAttribute(Ur,""),this._element.style[o]="",b.trigger(this._element,Ag)},c=`scroll${o[0].toUpperCase()+o.slice(1)}`;this._queueCallback(a,this._element,!0),this._element.style[o]=`${this._element[c]}px`}hide(){if(this._isTransitioning||!this._isShown()||b.trigger(this._element,wg).defaultPrevented)return;const e=this._getDimension(),s=e==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,Ii(this._element),v.addClass(this._element,s),v.removeClass(this._element,this._classes.visible),v.removeClass(this._element,this._classes.hidden),this._element.setAttribute(Vn,""),this._element.removeAttribute(Vi),this._element.removeAttribute(Ur);const n=this._triggerArray.length;for(let r=0;r{this._isTransitioning=!1,v.removeClass(this._element,s),v.addClass(this._element,this._classes.visible),v.addClass(this._element,this._classes.hidden),this._element.removeAttribute(Vn),this._element.setAttribute(Vi,""),b.trigger(this._element,kg)};this._element.style[e]="",this._queueCallback(o,this._element,!0)}_isShown(t=this._element){return t.hasAttribute(Ur)}_getConfig(t){return t={...Mc,...v.getDataAttributes(this._element),...t},t.toggle=!!t.toggle,t.parent=Le(t.parent),W(Kr,t,Cg),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Ig,...e,...t},W(Kr,t,Lg),t}_getDimension(){return this._element.hasAttribute(Sg)?Og:Dg}_initializeChildren(){if(!this._config.parent)return;const t=g.find(Lc,this._config.parent);g.find(Pc,this._config.parent).filter(e=>!t.includes(e)).forEach(e=>{const s=Ie(e);s&&this._addAriaAndCollapsedClass([e],this._isShown(s))})}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach(s=>{e?s.removeAttribute(Ic):s.setAttribute(`${Ic}`,""),s.setAttribute("aria-expanded",e)})}static jQueryInterface(t){return this.each(function(){const e={};typeof t=="string"&&/show|hide/.test(t)&&(e.toggle=!1);const s=re.getOrCreateInstance(this,e);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t]()}})}}const Rc=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Nc=".sticky-top";class Es{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"paddingRight",e=>e+t),this._setElementAttributes(Rc,"paddingRight",e=>e+t),this._setElementAttributes(Nc,"marginRight",e=>e-t)}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,s){const n=this.getWidth(),o=r=>{if(r!==this._element&&window.innerWidth>r.clientWidth+n)return;this._saveInitialAttribute(r,e);const a=window.getComputedStyle(r)[e];r.style[e]=`${s(Number.parseFloat(a))}px`};this._applyManipulationCallback(t,o)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(Rc,"paddingRight"),this._resetElementAttributes(Nc,"marginRight")}_saveInitialAttribute(t,e){const s=t.style[e];s&&v.setDataAttribute(t,e,s)}_resetElementAttributes(t,e){const s=n=>{const o=v.getDataAttribute(n,e);typeof o>"u"?n.style.removeProperty(e):(v.removeDataAttribute(n,e),n.style[e]=o)};this._applyManipulationCallback(t,s)}_applyManipulationCallback(t,e){Mi(t)?e(t):g.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const Pg={isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null,backdropClasses:null},Rg={isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)",backdropClasses:"(array|null)"},$c="backdrop",Bc=`mousedown.te.${$c}`;class Xr{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){if(!this._config.isVisible){ii(t);return}this._append(),this._config.isAnimated&&Ii(this._getElement());const e=this._config.backdropClasses||["opacity-50","transition-all","duration-300","ease-in-out","fixed","top-0","left-0","z-[1040]","bg-black","w-screen","h-screen"];v.removeClass(this._getElement(),"opacity-0"),v.addClass(this._getElement(),e),this._element.setAttribute("data-te-backdrop-show",""),this._emulateAnimation(()=>{ii(t)})}hide(t){if(!this._config.isVisible){ii(t);return}this._element.removeAttribute("data-te-backdrop-show"),this._getElement().classList.add("opacity-0"),this._getElement().classList.remove("opacity-50"),this._emulateAnimation(()=>{this.dispose(),ii(t)})}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("opacity-50"),this._element=t}return this._element}_getConfig(t){return t={...Pg,...typeof t=="object"?t:{}},t.rootElement=Le(t.rootElement),W($c,t,Rg),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),b.on(this._getElement(),Bc,()=>{ii(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(b.off(this._element,Bc),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){$l(t,this._getElement(),this._config.isAnimated)}}class Cs{constructor(t,e={},s){this._element=t,this._toggler=s,this._event=e.event||"blur",this._condition=e.condition||(()=>!0),this._selector=e.selector||'button, a, input, select, textarea, [tabindex]:not([tabindex="-1"])',this._onlyVisible=e.onlyVisible||!1,this._focusableElements=[],this._firstElement=null,this._lastElement=null,this.handler=n=>{this._condition(n)&&!n.shiftKey&&n.target===this._lastElement?(n.preventDefault(),this._firstElement.focus()):this._condition(n)&&n.shiftKey&&n.target===this._firstElement&&(n.preventDefault(),this._lastElement.focus())}}trap(){this._setElements(),this._init(),this._setFocusTrap()}disable(){this._focusableElements.forEach(t=>{t.removeEventListener(this._event,this.handler)}),this._toggler&&this._toggler.focus()}update(){this._setElements(),this._setFocusTrap()}_init(){const t=e=>{!this._firstElement||e.key!=="Tab"||this._focusableElements.includes(e.target)||(e.preventDefault(),this._firstElement.focus(),window.removeEventListener("keydown",t))};window.addEventListener("keydown",t)}_filterVisible(t){return t.filter(e=>{if(!ne(e))return!1;const s=g.parents(e,"*");for(let n=0;n{e===this._focusableElements.length-1||e===0?t.addEventListener(this._event,this.handler):t.removeEventListener(this._event,this.handler)})}}const Wn=(i,t="hide")=>{const e=`click.dismiss${i.EVENT_KEY}`,s=i.NAME;b.on(document,e,`[data-te-${s}-dismiss]`,function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),ei(this))return;const o=Ie(this)||this.closest(`.${s}`)||this.closest(`[data-te-${s}-init]`);if(!o)return;i.getOrCreateInstance(o)[t]()})},Hc="offcanvas",Wi=".te.offcanvas",Ng=`load${Wi}.data-api`,$g="Escape",Fc={backdrop:!0,keyboard:!0,scroll:!1},Bg={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},Vc="show",Hg="[data-te-offcanvas-init][data-te-offcanvas-show]",Fg=`show${Wi}`,Vg=`shown${Wi}`,Wg=`hide${Wi}`,zg=`hidden${Wi}`,jg=`keydown.dismiss${Wi}`;class zi extends Xt{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners(),this._didInit=!1,this._init()}static get NAME(){return Hc}static get Default(){return Fc}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||b.trigger(this._element,Fg,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||new Es().hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.setAttribute(`data-te-offcanvas-${Vc}`,"");const s=()=>{this._config.scroll||this._focustrap.trap(),b.trigger(this._element,Vg,{relatedTarget:t})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||b.trigger(this._element,Wg).defaultPrevented)return;this._focustrap.disable(),this._element.blur(),this._isShown=!1,this._element.removeAttribute(`data-te-offcanvas-${Vc}`),this._backdrop.hide();const e=()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||new Es().reset(),b.trigger(this._element,zg)};this._queueCallback(e,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.disable(),super.dispose()}_init(){this._didInit||(b.on(window,Ng,()=>g.find(Hg).forEach(t=>zi.getOrCreateInstance(t).show())),Wn(zi),this._didInit=!0)}_getConfig(t){return t={...Fc,...v.getDataAttributes(this._element),...typeof t=="object"?t:{}},W(Hc,t,Bg),t}_initializeBackDrop(){return new Xr({isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Cs(this._element,{event:"keydown",condition:t=>t.key==="Tab"})}_addEventListeners(){b.on(this._element,jg,t=>{this._config.keyboard&&t.key===$g&&this.hide()})}static jQueryInterface(t){return this.each(function(){const e=zi.getOrCreateInstance(this,t);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}const Gr="alert",Wc=".te.alert",Yg=`close${Wc}`,Kg=`closed${Wc}`,Ts="data-te-alert-show",Ug={animation:"boolean",autohide:"boolean",delay:"number"},zc={animation:!0,autohide:!0,delay:1e3},Xg={fadeIn:"animate-[fade-in_0.3s_both] p-[auto] motion-reduce:transition-none motion-reduce:animate-none",fadeOut:"animate-[fade-out_0.3s_both] p-[auto] motion-reduce:transition-none motion-reduce:animate-none"},Gg={fadeIn:"string",fadeOut:"string"};class As extends Xt{constructor(t,e,s){super(t),this._element=t,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._didInit=!1,this._init()}static get DefaultType(){return Ug}static get Default(){return zc}static get NAME(){return Gr}close(){if(b.trigger(this._element,Yg).defaultPrevented)return;let e=0;this._config.animation&&(e=300,v.addClass(this._element,this._classes.fadeOut)),this._element.removeAttribute(Ts),setTimeout(()=>{this._queueCallback(()=>this._destroyElement(),this._element,this._config.animation)},e)}show(){if(this._element){if(this._config.autohide&&this._setupAutohide(),!this._element.hasAttribute(Ts)&&(v.removeClass(this._element,"hidden"),v.addClass(this._element,"block"),ne(this._element))){const t=e=>{v.removeClass(this._element,"hidden"),v.addClass(this._element,"block"),b.off(e.target,"animationend",t)};this._element.setAttribute(Ts,""),b.on(this._element,"animationend",t)}this._config.animation&&(v.removeClass(this._element,this._classes.fadeOut),v.addClass(this._element,this._classes.fadeIn))}}hide(){if(this._element&&this._element.hasAttribute(Ts)){this._element.removeAttribute(Ts);const t=e=>{v.addClass(this._element,"hidden"),v.removeClass(this._element,"block"),this._timeout!==null&&(clearTimeout(this._timeout),this._timeout=null),b.off(e.target,"animationend",t)};b.on(this._element,"animationend",t),v.removeClass(this._element,this._classes.fadeIn),v.addClass(this._element,this._classes.fadeOut)}}_init(){this._didInit||(Wn(As,"close"),this._didInit=!0)}_getConfig(t){return t={...zc,...v.getDataAttributes(this._element),...typeof t=="object"&&t?t:{}},W(Gr,t,this.constructor.DefaultType),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Xg,...e,...t},W(Gr,t,Gg),t}_setupAutohide(){this._timeout=setTimeout(()=>{this.hide()},this._config.delay)}_destroyElement(){this._element.remove(),b.trigger(this._element,Kg),this.dispose()}static jQueryInterface(t){return this.each(function(){const e=As.getOrCreateInstance(this);if(typeof t=="string"){if(e[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}const qr="carousel",Lt=".te.carousel",jc=".data-api",qg="ArrowLeft",Zg="ArrowRight",Qg=500,Jg=40,Yc={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},tm={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},em={pointer:"touch-pan-y",block:"!block",visible:"data-[te-carousel-fade]:opacity-100 data-[te-carousel-fade]:z-[1]",invisible:"data-[te-carousel-fade]:z-0 data-[te-carousel-fade]:opacity-0 data-[te-carousel-fade]:duration-0 data-[te-carousel-fade]:delay-600",slideRight:"translate-x-full",slideLeft:"-translate-x-full"},im={pointer:"string",block:"string",visible:"string",invisible:"string",slideRight:"string",slideLeft:"string"},ci="next",hi="prev",di="left",ws="right",sm={[qg]:ws,[Zg]:di},nm=`slide${Lt}`,Kc=`slid${Lt}`,om=`keydown${Lt}`,rm=`mouseenter${Lt}`,am=`mouseleave${Lt}`,lm=`touchstart${Lt}`,cm=`touchmove${Lt}`,hm=`touchend${Lt}`,dm=`pointerdown${Lt}`,um=`pointerup${Lt}`,fm=`dragstart${Lt}`,pm=`load${Lt}${jc}`,_m=`click${Lt}${jc}`,gm="data-te-carousel-init",ui="data-te-carousel-active",mm="data-te-carousel-slide",bm="data-te-carousel-item-end",Zr="data-te-carousel-item-start",vm="data-te-carousel-item-next",ym="data-te-carousel-item-prev",xm="data-te-carousel-pointer-event",Em="[data-te-carousel-init]",Uc="[data-te-carousel-active]",Qr="[data-te-carousel-item]",ji=`${Uc}${Qr}`,Cm=`${Qr} img`,Tm="[data-te-carousel-item-next], [data-te-carousel-item-prev]",Am="[data-te-carousel-indicators]",wm="[data-te-target]",km="[data-te-slide], [data-te-slide-to]",Sm="touch",Om="pen";class ae extends Xt{constructor(t,e,s){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._indicatorsElement=g.findOne(Am,this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=!!window.PointerEvent,this._setActiveElementClass(),this._addEventListeners(),this._didInit=!1,this._init()}static get Default(){return Yc}static get NAME(){return qr}next(){this._slide(ci)}nextWhenVisible(){!document.hidden&&ne(this._element)&&this.next()}prev(){this._slide(hi)}pause(t){t||(this._isPaused=!0),g.findOne(Tm,this._element)&&(Ll(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=g.findOne(ji,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding){b.one(this._element,Kc,()=>this.to(t));return}if(e===t){this.pause(),this.cycle();return}const s=t>e?ci:hi;this._slide(s,this._items[t])}_init(){this._didInit||(b.on(document,_m,km,ae.dataApiClickHandler),b.on(window,pm,()=>{const t=g.find(Em);for(let e=0,s=t.length;e0?ws:di)}_setActiveElementClass(){this._activeElement=g.findOne(ji,this._element),v.addClass(this._activeElement,"hidden")}_addEventListeners(){this._config.keyboard&&b.on(this._element,om,t=>this._keydown(t)),this._config.pause==="hover"&&(b.on(this._element,rm,t=>this.pause(t)),b.on(this._element,am,t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners(),this._applyInitialClasses()}_addTouchEventListeners(){const t=o=>this._pointerEvent&&(o.pointerType===Om||o.pointerType===Sm),e=o=>{t(o)?this.touchStartX=o.clientX:this._pointerEvent||(this.touchStartX=o.touches[0].clientX)},s=o=>{this.touchDeltaX=o.touches&&o.touches.length>1?0:o.touches[0].clientX-this.touchStartX},n=o=>{t(o)&&(this.touchDeltaX=o.clientX-this.touchStartX),this._handleSwipe(),this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(r=>this.cycle(r),Qg+this._config.interval))};g.find(Cm,this._element).forEach(o=>{b.on(o,fm,r=>r.preventDefault())}),this._pointerEvent?(b.on(this._element,dm,o=>e(o)),b.on(this._element,um,o=>n(o)),this._element.classList.add(this._classes.pointer),this._element.setAttribute(`${xm}`,"")):(b.on(this._element,lm,o=>e(o)),b.on(this._element,cm,o=>s(o)),b.on(this._element,hm,o=>n(o)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=sm[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?g.find(Qr,t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const s=t===ci;return Bl(this._items,e,s,this._config.wrap)}_triggerSlideEvent(t,e){const s=this._getItemIndex(t),n=this._getItemIndex(g.findOne(ji,this._element));return b.trigger(this._element,nm,{relatedTarget:t,direction:e,from:n,to:s})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=g.findOne(Uc,this._indicatorsElement);e.removeAttribute(ui),e.removeAttribute("aria-current"),e.classList.remove("!opacity-100");const s=g.find(wm,this._indicatorsElement);for(let n=0;n{b.trigger(this._element,Kc,{relatedTarget:r,direction:u,from:o,to:a})};if(this._element.hasAttribute(mm)){r.setAttribute(`${d}`,""),r.classList.add(this._classes.block,p),Ii(r),n.setAttribute(`${h}`,""),n.classList.add(f,...this._classes.invisible.split(" ")),n.classList.remove(...this._classes.visible.split(" ")),r.setAttribute(`${h}`,""),r.classList.add(...this._classes.visible.split(" ")),r.classList.remove(this._classes.slideRight,this._classes.slideLeft);const y=()=>{r.removeAttribute(h),r.removeAttribute(d),r.setAttribute(`${ui}`,""),n.removeAttribute(ui),n.classList.remove(f,...this._classes.invisible.split(" "),this._classes.block),n.removeAttribute(d),n.removeAttribute(h),this._isSliding=!1,setTimeout(m,0)};this._queueCallback(y,n,!0)}else n.removeAttribute(ui),n.classList.remove(this._classes.block),r.setAttribute(`${ui}`,""),r.classList.add(this._classes.block),this._isSliding=!1,m();l&&this.cycle()}_directionToOrder(t){return[ws,di].includes(t)?st()?t===di?hi:ci:t===di?ci:hi:t}_orderToDirection(t){return[ci,hi].includes(t)?st()?t===hi?di:ws:t===hi?ws:di:t}static carouselInterface(t,e){const s=ae.getOrCreateInstance(t,e);let{_config:n}=s;typeof e=="object"&&(n={...n,...e});const o=typeof e=="string"?e:n.slide;if(typeof e=="number")s.to(e);else if(typeof o=="string"){if(typeof s[o]>"u")throw new TypeError(`No method named "${o}"`);s[o]()}else n.interval&&n.carouselInit===null&&(s.pause(),s.cycle())}static jQueryInterface(t){return this.each(function(){ae.carouselInterface(this,t)})}static dataApiClickHandler(t){const e=Ie(this);if(!e||!e.hasAttribute(gm))return;const s={...v.getDataAttributes(e),...v.getDataAttributes(this)},n=this.getAttribute("data-te-slide-to");n&&(s.interval=!1),ae.carouselInterface(e,s),n&&ae.getInstance(e).to(n),t.preventDefault()}}const Jr="modal",Zt=".te.modal",Xc="Escape",Gc={backdrop:!0,keyboard:!0,focus:!0},Dm={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Mm={show:"transform-none",static:"scale-[1.02]",staticProperties:"transition-scale duration-300 ease-in-out"},Im={show:"string",static:"string",staticProperties:"string"},Lm=`hide${Zt}`,Pm=`hidePrevented${Zt}`,Rm=`hidden${Zt}`,Nm=`show${Zt}`,$m=`shown${Zt}`,qc=`resize${Zt}`,Zc=`click.dismiss${Zt}`,Qc=`keydown.dismiss${Zt}`,Bm=`mouseup.dismiss${Zt}`,Jc=`mousedown.dismiss${Zt}`,th="data-te-modal-open",eh="data-te-open",ks="[data-te-modal-dialog-ref]",Hm="[data-te-modal-body-ref]";class Ss extends Xt{constructor(t,e,s){super(t),this._config=this._getConfig(e),this._classes=this._getClasses(s),this._dialog=g.findOne(ks,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new Es,this._didInit=!1,this._init()}static get Default(){return Gc}static get NAME(){return Jr}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||b.trigger(this._element,Nm,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.setAttribute(th,"true"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),b.on(this._dialog,Jc,()=>{b.one(this._element,Bm,s=>{s.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showElement(t),this._showBackdrop())}hide(){if(!this._isShown||this._isTransitioning||b.trigger(this._element,Lm).defaultPrevented)return;this._isShown=!1;const e=this._isAnimated();e&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.disable(),g.findOne(ks,this._element).classList.remove(this._classes.show),b.off(this._element,Zc),b.off(this._dialog,Jc),this._queueCallback(()=>this._hideModal(),this._element,e),this._element.removeAttribute(eh)}dispose(){[window,this._dialog].forEach(t=>b.off(t,Zt)),this._backdrop.dispose(),this._focustrap.disable(),super.dispose()}handleUpdate(){this._adjustDialog()}_init(){this._didInit||(Wn(Ss),this._didInit=!0)}_initializeBackDrop(){return new Xr({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Cs(this._element,{event:"keydown",condition:t=>t.key==="Tab"})}_getConfig(t){return t={...Gc,...v.getDataAttributes(this._element),...typeof t=="object"?t:{}},W(Jr,t,Dm),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Mm,...e,...t},W(Jr,t,Im),t}_showElement(t){const e=this._isAnimated(),s=g.findOne(Hm,this._dialog);(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE)&&document.body.append(this._element),this._element.style.display="block",this._element.classList.remove("hidden"),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.setAttribute(`${eh}`,"true"),this._element.scrollTop=0;const n=g.findOne(ks,this._element);n.classList.add(this._classes.show),n.classList.remove("opacity-0"),n.classList.add("opacity-100"),s&&(s.scrollTop=0),e&&Ii(this._element);const o=()=>{this._config.focus&&this._focustrap.trap(),this._isTransitioning=!1,b.trigger(this._element,$m,{relatedTarget:t})};this._queueCallback(o,this._dialog,e)}_setEscapeEvent(){this._isShown?b.on(document,Qc,t=>{this._config.keyboard&&t.key===Xc?(t.preventDefault(),this.hide()):!this._config.keyboard&&t.key===Xc&&this._triggerBackdropTransition()}):b.off(this._element,Qc)}_setResizeEvent(){this._isShown?b.on(window,qc,()=>this._adjustDialog()):b.off(window,qc)}_hideModal(){const t=g.findOne(ks,this._element);t.classList.remove(this._classes.show),t.classList.remove("opacity-100"),t.classList.add("opacity-0"),setTimeout(()=>{this._element.style.display="none"},300),this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.removeAttribute(th),this._resetAdjustments(),this._scrollBar.reset(),b.trigger(this._element,Rm)})}_showBackdrop(t){b.on(this._element,Zc,e=>{if(this._ignoreBackdropClick){this._ignoreBackdropClick=!1;return}e.target===e.currentTarget&&(this._config.backdrop===!0?this.hide():this._config.backdrop==="static"&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return!!g.findOne(ks,this._element)}_triggerBackdropTransition(){if(b.trigger(this._element,Pm).defaultPrevented)return;const{classList:e,scrollHeight:s,style:n}=this._element,o=s>document.documentElement.clientHeight;!o&&n.overflowY==="hidden"||e.contains(this._classes.static)||(o||(n.overflowY="hidden"),e.add(...this._classes.static.split(" ")),e.add(...this._classes.staticProperties.split(" ")),this._queueCallback(()=>{e.remove(this._classes.static),setTimeout(()=>{e.remove(...this._classes.staticProperties.split(" "))},300),o||this._queueCallback(()=>{n.overflowY=""},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),s=e>0;(!s&&t&&!st()||s&&!t&&st())&&(this._element.style.paddingLeft=`${e}px`),(s&&!t&&!st()||!s&&t&&st())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each(function(){const s=Ss.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}}const Fm=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vm=/^aria-[\w-]*$/i,Wm=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,zm=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,jm=(i,t)=>{const e=i.nodeName.toLowerCase();if(t.includes(e))return Fm.has(e)?!!(Wm.test(i.nodeValue)||zm.test(i.nodeValue)):!0;const s=t.filter(n=>n instanceof RegExp);for(let n=0,o=s.length;n{jm(u,d)||l.removeAttribute(u.nodeName)})}return n.body.innerHTML}const sh="tooltip",le=".te.tooltip",Km="te-tooltip",Um=new Set(["sanitize","allowList","sanitizeFn"]),Xm={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Gm={AUTO:"auto",TOP:"top",RIGHT:st()?"left":"right",BOTTOM:"bottom",LEFT:st()?"right":"left"},qm={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:Ym,popperConfig:{hide:!0}},Zm={HIDE:`hide${le}`,HIDDEN:`hidden${le}`,SHOW:`show${le}`,SHOWN:`shown${le}`,INSERTED:`inserted${le}`,CLICK:`click${le}`,FOCUSIN:`focusin${le}`,FOCUSOUT:`focusout${le}`,MOUSEENTER:`mouseenter${le}`,MOUSELEAVE:`mouseleave${le}`},Qm="fade",Jm="modal",ta="show",Os="show",ea="out",nh=".tooltip-inner",oh=`.${Jm}`,rh="hide.te.modal",Ds="hover",ia="focus",tb="click",eb="manual";let Ms=class jp extends Xt{constructor(t,e){if(typeof wc>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return qm}static get NAME(){return sh}static get Event(){return Zm}static get DefaultType(){return Xm}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(ta)){this._leave(null,this);return}this._enter(null,this)}}dispose(){clearTimeout(this._timeout),b.off(this._element.closest(oh),rh,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this.isWithContent()&&this._isEnabled))return;const t=b.trigger(this._element,this.constructor.Event.SHOW),e=Pl(this._element),s=e===null?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!s)return;this.constructor.NAME==="tooltip"&&this.tip&&this.getTitle()!==this.tip.querySelector(nh).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),o=se(this.constructor.NAME);n.setAttribute("id",o),this._element.setAttribute("aria-describedby",o),this._config.animation&&setTimeout(()=>{this.tip.classList.add("opacity-100"),this.tip.classList.remove("opacity-0")},100);const r=typeof this._config.placement=="function"?this._config.placement.call(this,n,this._element):this._config.placement,a=this._getAttachment(r);this._addAttachmentClass(a);const{container:l}=this._config;if(P.setData(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(l.append(n),b.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=Fi(this._element,n,this._getPopperConfig(a)),n.getAttribute("id").includes("tooltip"))switch(r){case"bottom":n.classList.add("py-[0.4rem]");break;case"left":n.classList.add("px-[0.4rem]");break;case"right":n.classList.add("px-[0.4rem]");break;default:n.classList.add("py-[0.4rem]");break}const h=this._resolvePossibleFunction(this._config.customClass);h&&n.classList.add(...h.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(f=>{b.on(f,"mouseover",Sn)});const d=()=>{const f=this._hoverState;this._hoverState=null,b.trigger(this._element,this.constructor.Event.SHOWN),f===ea&&this._leave(null,this)},u=this.tip.classList.contains("transition-opacity");this._queueCallback(d,this.tip,u)}hide(){if(!this._popper)return;const t=this.getTipElement(),e=()=>{this._isWithActiveTrigger()||(this._hoverState!==Os&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),b.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())};if(b.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.add("opacity-0"),t.classList.remove("opacity-100"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(o=>b.off(o,"mouseover",Sn)),this._activeTrigger[tb]=!1,this._activeTrigger[ia]=!1,this._activeTrigger[Ds]=!1;const n=this.tip.classList.contains("opacity-0");this._queueCallback(e,this.tip,n),this._hoverState=""}update(){this._popper!==null&&this._popper.update()}isWithContent(){return!!this.getTitle()}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(Qm,ta),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),nh)}_sanitizeAndSetContent(t,e,s){const n=g.findOne(s,t);if(!e&&n){n.remove();return}this.setElementContent(n,e)}setElementContent(t,e){if(t!==null){if(Mi(e)){e=Le(e),this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent;return}this._config.html?(this._config.sanitize&&(e=ih(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e}}getTitle(){const t=this._element.getAttribute("data-te-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return t==="right"?"end":t==="left"?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(e=>Number.parseInt(e,10)):typeof t=="function"?e=>t(e,this._element):t}_resolvePossibleFunction(t){return typeof t=="function"?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:s=>this._handlePopperPlacementChange(s)}],onFirstUpdate:s=>{s.options.placement!==s.placement&&this._handlePopperPlacementChange(s)}};return{...e,...typeof this._config.popperConfig=="function"?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Gm[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach(e=>{if(e==="click")b.on(this._element,this.constructor.Event.CLICK,this._config.selector,s=>this.toggle(s));else if(e!==eb){const s=e===Ds?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,n=e===Ds?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;b.on(this._element,s,this._config.selector,o=>this._enter(o)),b.on(this._element,n,this._config.selector,o=>this._leave(o))}}),this._hideModalHandler=()=>{this._element&&this.hide()},b.on(this._element.closest(oh),rh,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-te-original-title");(t||e!=="string")&&(this._element.setAttribute("data-te-original-title",t||""),t&&!this._element.getAttribute("aria-label")&&!this._element.textContent&&this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){if(e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[t.type==="focusin"?ia:Ds]=!0),e.getTipElement().classList.contains(ta)||e._hoverState===Os){e._hoverState=Os;return}if(clearTimeout(e._timeout),e._hoverState=Os,!e._config.delay||!e._config.delay.show){e.show();return}e._timeout=setTimeout(()=>{e._hoverState===Os&&e.show()},e._config.delay.show)}_leave(t,e){if(e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[t.type==="focusout"?ia:Ds]=e._element.contains(t.relatedTarget)),!e._isWithActiveTrigger()){if(clearTimeout(e._timeout),e._hoverState=ea,!e._config.delay||!e._config.delay.hide){e.hide();return}e._timeout=setTimeout(()=>{e._hoverState===ea&&e.hide()},e._config.delay.hide)}}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=v.getDataAttributes(this._element);return Object.keys(e).forEach(s=>{Um.has(s)&&delete e[s]}),t={...this.constructor.Default,...e,...typeof t=="object"&&t?t:{}},t.container=t.container===!1?document.body:Le(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),W(sh,t,this.constructor.DefaultType),t.sanitize&&(t.template=ih(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),s=t.getAttribute("class").match(e);s!==null&&s.length>0&&s.map(n=>n.trim()).forEach(n=>t.classList.remove(n))}_getBasicClassPrefix(){return Km}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each(function(){const e=jp.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}};const ib="popover",ce=".te.popover",sb="te-popover",nb={...Ms.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},ob={...Ms.DefaultType,content:"(string|element|function)"},rb={HIDE:`hide${ce}`,HIDDEN:`hidden${ce}`,SHOW:`show${ce}`,SHOWN:`shown${ce}`,INSERTED:`inserted${ce}`,CLICK:`click${ce}`,FOCUSIN:`focusin${ce}`,FOCUSOUT:`focusout${ce}`,MOUSEENTER:`mouseenter${ce}`,MOUSELEAVE:`mouseleave${ce}`},ab=".popover-header",lb=".popover-body";class zn extends Ms{static get Default(){return nb}static get NAME(){return ib}static get Event(){return rb}static get DefaultType(){return ob}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),ab),this._sanitizeAndSetContent(t,this._getContent(),lb)}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return sb}static jQueryInterface(t){return this.each(function(){const e=zn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const sa="scrollspy",jn=".te.scrollspy",cb=".data-api",ah={offset:10,method:"auto",target:""},hb={offset:"number",method:"string",target:"(string|element)"},db={active:"!text-primary dark:!text-primary-400 font-semibold border-l-[0.125rem] border-solid border-primary dark:border-primary-400"},ub={active:"string"},fb=`activate${jn}`,pb=`scroll${jn}`,_b=`load${jn}${cb}`,na="data-te-nav-link-active",lh="[data-te-dropdown-item-ref]",gb='[data-te-spy="scroll"]',mb="[data-te-nav-list-ref]",oa="[data-te-nav-link-ref]",bb="[data-te-nav-item-ref]",ch="[data-te-list-group-item-ref]",ra=`${oa}, ${ch}, ${lh}`,vb="[data-te-dropdown-ref]",yb="[data-te-dropdown-toggle-ref]",xb="offset",hh="position";class Is extends Xt{constructor(t,e,s){super(t),this._scrollElement=this._element.tagName==="BODY"?window:this._element,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,b.on(this._scrollElement,pb,()=>this._process()),this.refresh(),this._process(),this._didInit=!1,this._init()}static get Default(){return ah}static get NAME(){return sa}refresh(){const t=this._scrollElement===this._scrollElement.window?xb:hh,e=this._config.method==="auto"?t:this._config.method,s=e===hh?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),g.find(ra,this._config.target).map(o=>{const r=yr(o),a=r?g.findOne(r):null;if(a){const l=a.getBoundingClientRect();if(l.width||l.height)return[v[e](a).top+s,r]}return null}).filter(o=>o).sort((o,r)=>o[0]-r[0]).forEach(o=>{this._offsets.push(o[0]),this._targets.push(o[1])})}dispose(){b.off(this._scrollElement,jn),super.dispose()}_init(){this._didInit||(b.on(window,_b,()=>{g.find(gb).forEach(t=>new Is(t))}),this._didInit=!0)}_getConfig(t){return t={...ah,...v.getDataAttributes(this._element),...typeof t=="object"&&t?t:{}},t.target=Le(t.target)||document.documentElement,W(sa,t,hb),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...db,...e,...t},W(sa,t,ub),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),s=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=s){const n=this._targets[this._targets.length-1];this._activeTarget!==n&&this._activate(n);return}if(this._activeTarget&&t0){this._activeTarget=null,this._clear();return}for(let n=this._offsets.length;n--;)this._activeTarget!==this._targets[n]&&t>=this._offsets[n]&&(typeof this._offsets[n+1]>"u"||t`${n}[data-te-target="${t}"],${n}[href="${t}"]`),s=g.findOne(e.join(","),this._config.target);s.classList.add(...this._classes.active.split(" ")),s.setAttribute(na,""),s.getAttribute(lh)?g.findOne(yb,s.closest(vb)).classList.add(...this._classes.active.split(" ")):g.parents(s,mb).forEach(n=>{g.prev(n,`${oa}, ${ch}`).forEach(o=>{o.classList.add(...this._classes.active.split(" ")),o.setAttribute(na,"")}),g.prev(n,bb).forEach(o=>{g.children(o,oa).forEach(r=>r.classList.add(...this._classes.active.split(" ")))})}),b.trigger(this._scrollElement,fb,{relatedTarget:t})}_clear(){g.find(ra,this._config.target).filter(t=>t.classList.contains(...this._classes.active.split(" "))).forEach(t=>{t.classList.remove(...this._classes.active.split(" ")),t.removeAttribute(na)})}static jQueryInterface(t){return this.each(function(){const e=Is.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const dh="tab",Yn=".te.tab",Eb=`hide${Yn}`,Cb=`hidden${Yn}`,Tb=`show${Yn}`,Ab=`shown${Yn}`,wb="data-te-dropdown-menu-ref",Yi="data-te-tab-active",Kn="data-te-nav-active",kb="[data-te-dropdown-ref]",Sb="[data-te-nav-ref]",uh=`[${Yi}]`,Ob=`[${Kn}]`,fh=":scope > li > .active",Db="[data-te-dropdown-toggle-ref]",Mb=":scope > [data-te-dropdown-menu-ref] [data-te-dropdown-show]",Ib={show:"opacity-100",hide:"opacity-0"},Lb={show:"string",hide:"string"};class Un extends Xt{constructor(t,e){super(t),this._classes=this._getClasses(e)}static get NAME(){return dh}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.getAttribute(Kn)==="")return;let t;const e=Ie(this._element),s=this._element.closest(Sb),n=g.findOne(Ob,s);if(s){const l=s.nodeName==="UL"||s.nodeName==="OL"?fh:uh;t=g.find(l,s),t=t[t.length-1]}const o=t?b.trigger(t,Eb,{relatedTarget:this._element}):null;if(b.trigger(this._element,Tb,{relatedTarget:t}).defaultPrevented||o!==null&&o.defaultPrevented)return;this._activate(this._element,s,null,n,this._element);const a=()=>{b.trigger(t,Cb,{relatedTarget:this._element}),b.trigger(this._element,Ab,{relatedTarget:t})};e?this._activate(e,e.parentNode,a,n,this._element):a()}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Ib,...e,...t},W(dh,t,Lb),t}_activate(t,e,s,n,o){const a=(e&&(e.nodeName==="UL"||e.nodeName==="OL")?g.find(fh,e):g.children(e,uh))[0],l=s&&a&&a.hasAttribute(Yi),c=()=>this._transitionComplete(t,a,s,n,o);a&&l?(v.removeClass(a,this._classes.show),v.addClass(a,this._classes.hide),this._queueCallback(c,t,!0)):c()}_transitionComplete(t,e,s,n,o){if(e&&n){e.removeAttribute(Yi),n.removeAttribute(Kn);const a=g.findOne(Mb,e.parentNode);a&&a.removeAttribute(Yi),e.getAttribute("role")==="tab"&&e.setAttribute("aria-selected",!1)}t.setAttribute(Yi,""),o.setAttribute(Kn,""),t.getAttribute("role")==="tab"&&t.setAttribute("aria-selected",!0),Ii(t),t.classList.contains(this._classes.hide)&&(v.removeClass(t,this._classes.hide),v.addClass(t,this._classes.show));let r=t.parentNode;if(r&&r.nodeName==="LI"&&(r=r.parentNode),r&&r.hasAttribute(wb)){const a=t.closest(kb);a&&g.find(Db,a).forEach(l=>l.setAttribute(Yi,"")),t.setAttribute("aria-expanded",!0)}s&&s()}static jQueryInterface(t){return this.each(function(){const e=Un.getOrCreateInstance(this);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t]()}})}}const aa="toast",$e=".te.toast",Pb=`mouseover${$e}`,Rb=`mouseout${$e}`,Nb=`focusin${$e}`,$b=`focusout${$e}`,Bb=`hide${$e}`,Hb=`hidden${$e}`,Fb=`show${$e}`,Vb=`shown${$e}`,ph="data-te-toast-hide",la="data-te-toast-show",Xn="data-te-toast-showing",Wb={animation:"boolean",autohide:"boolean",delay:"number"},_h={animation:!0,autohide:!0,delay:5e3},zb={fadeIn:"animate-[fade-in_0.3s_both] p-[auto] motion-reduce:transition-none motion-reduce:animate-none",fadeOut:"animate-[fade-out_0.3s_both] p-[auto] motion-reduce:transition-none motion-reduce:animate-none"},jb={fadeIn:"string",fadeOut:"string"};class Ls extends Xt{constructor(t,e,s){super(t),this._config=this._getConfig(e),this._classes=this._getClasses(s),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners(),this._didInit=!1,this._init()}static get DefaultType(){return Wb}static get Default(){return _h}static get NAME(){return aa}show(){if(b.trigger(this._element,Fb).defaultPrevented)return;this._clearTimeout(),this._config.animation&&(v.removeClass(this._element,this._classes.fadeOut),v.addClass(this._element,this._classes.fadeIn));const e=()=>{this._element.removeAttribute(Xn),b.trigger(this._element,Vb),this._maybeScheduleHide()};this._element.removeAttribute(ph),Ii(this._element),this._element.setAttribute(la,""),this._element.setAttribute(Xn,""),this._queueCallback(e,this._element,this._config.animation)}hide(){if(!this._element||this._element.dataset.teToastShow===void 0||b.trigger(this._element,Bb).defaultPrevented)return;const e=()=>{let s=0;this._config.animation&&(s=300,v.removeClass(this._element,this._classes.fadeIn),v.addClass(this._element,this._classes.fadeOut)),setTimeout(()=>{this._element.setAttribute(ph,""),this._element.removeAttribute(Xn),this._element.removeAttribute(la),b.trigger(this._element,Hb)},s)};this._element.setAttribute(Xn,""),this._queueCallback(e,this._element,this._config.animation)}dispose(){this._clearTimeout(),this._element.dataset.teToastShow!==void 0&&this._element.removeAttribute(la),super.dispose()}_init(){this._didInit||(Wn(Ls),this._didInit=!0)}_getConfig(t){return t={..._h,...v.getDataAttributes(this._element),...typeof t=="object"&&t?t:{}},W(aa,t,this.constructor.DefaultType),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...zb,...e,...t},W(aa,t,jb),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e;break}if(e){this._clearTimeout();return}const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){b.on(this._element,Pb,t=>this._onInteraction(t,!0)),b.on(this._element,Rb,t=>this._onInteraction(t,!1)),b.on(this._element,Nb,t=>this._onInteraction(t,!0)),b.on(this._element,$b,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const e=Ls.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof e[t]>"u")throw new TypeError(`No method named "${t}"`);e[t](this)}})}}(()=>{var i={454:(s,n,o)=>{o.d(n,{Z:()=>l});var r=o(645),a=o.n(r)()(function(c){return c[1]});a.push([s.id,"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}",""]);const l=a},645:s=>{s.exports=function(n){var o=[];return o.toString=function(){return this.map(function(r){var a=n(r);return r[2]?"@media ".concat(r[2]," {").concat(a,"}"):a}).join("")},o.i=function(r,a,l){typeof r=="string"&&(r=[[null,r,""]]);var c={};if(l)for(var h=0;h{(function(){if(typeof window<"u")try{var s=new window.CustomEvent("test",{cancelable:!0});if(s.preventDefault(),s.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch{var n=function(r,a){var l,c;return(a=a||{}).bubbles=!!a.bubbles,a.cancelable=!!a.cancelable,(l=document.createEvent("CustomEvent")).initCustomEvent(r,a.bubbles,a.cancelable,a.detail),c=l.preventDefault,l.preventDefault=function(){c.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch{this.defaultPrevented=!0}},l};n.prototype=window.Event.prototype,window.CustomEvent=n}})()},379:(s,n,o)=>{var r,a=function(){var E={};return function(C){if(E[C]===void 0){var T=document.querySelector(C);if(window.HTMLIFrameElement&&T instanceof window.HTMLIFrameElement)try{T=T.contentDocument.head}catch{T=null}E[C]=T}return E[C]}}(),l=[];function c(E){for(var C=-1,T=0;T{var n=s&&s.__esModule?()=>s.default:()=>s;return e.d(n,{a:n}),n},e.d=(s,n)=>{for(var o in n)e.o(n,o)&&!e.o(s,o)&&Object.defineProperty(s,o,{enumerable:!0,get:n[o]})},e.o=(s,n)=>Object.prototype.hasOwnProperty.call(s,n),(()=>{var s=e(379),n=e.n(s),o=e(454);function r(l){if(!l.hasAttribute("autocompleted")){l.setAttribute("autocompleted","");var c=new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!0,detail:null});l.dispatchEvent(c)||(l.value="")}}function a(l){l.hasAttribute("autocompleted")&&(l.removeAttribute("autocompleted"),l.dispatchEvent(new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!1,detail:null})))}n()(o.Z,{insert:"head",singleton:!1}),o.Z.locals,e(810),document.addEventListener("animationstart",function(l){l.animationName==="onautofillstart"?r(l.target):a(l.target)},!0),document.addEventListener("input",function(l){l.inputType!=="insertReplacementText"&&"data"in l?a(l.target):r(l.target)},!0)})()})();const ca="input",Gn="te.input",gh="data-te-input-wrapper-init",mh="data-te-input-notch-ref",bh="data-te-input-notch-leading-ref",vh="data-te-input-notch-middle-ref",Yb="data-te-input-notch-trailing-ref",Kb="data-te-input-helper-ref",Ub="data-te-input-placeholder-active",Be="data-te-input-state-active",yh="data-te-input-focused",xh="data-te-input-form-counter",fi=`[${gh}] input`,pi=`[${gh}] textarea`,Ki=`[${mh}]`,Eh=`[${bh}]`,Ch=`[${vh}]`,Xb=`[${Kb}]`,Gb={inputFormWhite:!1},qb={inputFormWhite:"(boolean)"},Zb={notch:"group flex absolute left-0 top-0 w-full max-w-full h-full text-left pointer-events-none",notchLeading:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none left-0 top-0 h-full w-2 border-r-0 rounded-l-[0.25rem] group-data-[te-input-focused]:border-r-0 group-data-[te-input-state-active]:border-r-0",notchLeadingNormal:"border-neutral-300 dark:border-neutral-600 group-data-[te-input-focused]:shadow-[-1px_0_0_#3b71ca,_0_1px_0_0_#3b71ca,_0_-1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary",notchLeadingWhite:"border-neutral-200 group-data-[te-input-focused]:shadow-[-1px_0_0_#ffffff,_0_1px_0_0_#ffffff,_0_-1px_0_0_#ffffff] group-data-[te-input-focused]:border-white",notchMiddle:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow-0 shrink-0 basis-auto w-auto max-w-[calc(100%-1rem)] h-full border-r-0 border-l-0 group-data-[te-input-focused]:border-x-0 group-data-[te-input-state-active]:border-x-0 group-data-[te-input-focused]:border-t group-data-[te-input-state-active]:border-t group-data-[te-input-focused]:border-solid group-data-[te-input-state-active]:border-solid group-data-[te-input-focused]:border-t-transparent group-data-[te-input-state-active]:border-t-transparent",notchMiddleNormal:"border-neutral-300 dark:border-neutral-600 group-data-[te-input-focused]:shadow-[0_1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary",notchMiddleWhite:"border-neutral-200 group-data-[te-input-focused]:shadow-[0_1px_0_0_#ffffff] group-data-[te-input-focused]:border-white",notchTrailing:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow h-full border-l-0 rounded-r-[0.25rem] group-data-[te-input-focused]:border-l-0 group-data-[te-input-state-active]:border-l-0",notchTrailingNormal:"border-neutral-300 dark:border-neutral-600 group-data-[te-input-focused]:shadow-[1px_0_0_#3b71ca,_0_-1px_0_0_#3b71ca,_0_1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary",notchTrailingWhite:"border-neutral-200 group-data-[te-input-focused]:shadow-[1px_0_0_#ffffff,_0_-1px_0_0_#ffffff,_0_1px_0_0_#ffffff] group-data-[te-input-focused]:border-white",counter:"text-right leading-[1.6]"},Qb={notch:"string",notchLeading:"string",notchLeadingNormal:"string",notchLeadingWhite:"string",notchMiddle:"string",notchMiddleNormal:"string",notchMiddleWhite:"string",notchTrailing:"string",notchTrailingNormal:"string",notchTrailingWhite:"string",counter:"string"};class Z{constructor(t,e,s){this._config=this._getConfig(e,t),this._element=t,this._classes=this._getClasses(s),this._label=null,this._labelWidth=0,this._labelMarginLeft=0,this._notchLeading=null,this._notchMiddle=null,this._notchTrailing=null,this._initiated=!1,this._helper=null,this._counter=!1,this._counterElement=null,this._maxLength=0,this._leadingIcon=null,this._element&&(P.setData(t,Gn,this),this.init())}static get NAME(){return ca}get input(){return g.findOne("input",this._element)||g.findOne("textarea",this._element)}init(){this._initiated||(this._getLabelData(),this._applyDivs(),this._applyNotch(),this._activate(),this._getHelper(),this._getCounter(),this._getEvents(),this._initiated=!0)}update(){this._getLabelData(),this._getNotchData(),this._applyNotch(),this._activate(),this._getHelper(),this._getCounter()}forceActive(){this.input.setAttribute(Be,""),g.findOne(Ki,this.input.parentNode).setAttribute(Be,"")}forceInactive(){this.input.removeAttribute(Be),g.findOne(Ki,this.input.parentNode).removeAttribute(Be)}dispose(){this._removeBorder(),P.removeData(this._element,Gn),this._element=null}_getConfig(t,e){return t={...Gb,...v.getDataAttributes(e),...typeof t=="object"?t:{}},W(ca,t,qb),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Zb,...e,...t},W(ca,t,Qb),t}_getLabelData(){this._label=g.findOne("label",this._element),this._label===null?this._showPlaceholder():(this._getLabelWidth(),this._getLabelPositionInInputGroup(),this._toggleDefaultDatePlaceholder())}_getHelper(){this._helper=g.findOne(Xb,this._element)}_getCounter(){this._counter=v.getDataAttribute(this.input,"inputShowcounter"),this._counter&&(this._maxLength=this.input.maxLength,this._showCounter())}_getEvents(){b.on(document,"focus",fi,Z.activate(new Z)),b.on(document,"input",fi,Z.activate(new Z)),b.on(document,"blur",fi,Z.deactivate(new Z)),b.on(document,"focus",pi,Z.activate(new Z)),b.on(document,"input",pi,Z.activate(new Z)),b.on(document,"blur",pi,Z.deactivate(new Z)),b.on(window,"shown.te.modal",t=>{g.find(fi,t.target).forEach(e=>{const s=Z.getInstance(e.parentNode);s&&s.update()}),g.find(pi,t.target).forEach(e=>{const s=Z.getInstance(e.parentNode);s&&s.update()})}),b.on(window,"shown.te.dropdown",t=>{const e=t.target.parentNode.querySelector("[data-te-dropdown-menu-ref]");e&&(g.find(fi,e).forEach(s=>{const n=Z.getInstance(s.parentNode);n&&n.update()}),g.find(pi,e).forEach(s=>{const n=Z.getInstance(s.parentNode);n&&n.update()}))}),b.on(window,"shown.te.tab",t=>{let e;t.target.href?e=t.target.href.split("#")[1]:e=v.getDataAttribute(t.target,"target").split("#")[1];const s=g.findOne(`#${e}`);g.find(fi,s).forEach(n=>{const o=Z.getInstance(n.parentNode);o&&o.update()}),g.find(pi,s).forEach(n=>{const o=Z.getInstance(n.parentNode);o&&o.update()})}),b.on(window,"reset",t=>{g.find(fi,t.target).forEach(e=>{const s=Z.getInstance(e.parentNode);s&&s.forceInactive()}),g.find(pi,t.target).forEach(e=>{const s=Z.getInstance(e.parentNode);s&&s.forceInactive()})}),b.on(window,"onautocomplete",t=>{const e=Z.getInstance(t.target.parentNode);!e||!t.cancelable||e.forceActive()})}_showCounter(){if(g.find(`[${xh}]`,this._element).length>0)return;this._counterElement=document.createElement("div"),v.addClass(this._counterElement,this._classes.counter),this._counterElement.setAttribute(xh,"");const e=this.input.value.length;this._counterElement.innerHTML=`${e} / ${this._maxLength}`,this._helper.appendChild(this._counterElement),this._bindCounter()}_bindCounter(){b.on(this.input,"input",()=>{const t=this.input.value.length;this._counterElement.innerHTML=`${t} / ${this._maxLength}`})}_toggleDefaultDatePlaceholder(t=this.input){if(!(t.getAttribute("type")==="date"))return;!(document.activeElement===t)&&!t.value?t.style.opacity=0:t.style.opacity=1}_showPlaceholder(){this.input.setAttribute(Ub,"")}_getNotchData(){this._notchMiddle=g.findOne(Ch,this._element),this._notchLeading=g.findOne(Eh,this._element)}_getLabelWidth(){this._labelWidth=this._label.clientWidth*.8+8}_getLabelPositionInInputGroup(){if(this._labelMarginLeft=0,!this._element.hasAttribute("data-te-input-group-ref"))return;const t=this.input,e=g.prev(t,"[data-te-input-group-text-ref]")[0];e===void 0?this._labelMarginLeft=0:this._labelMarginLeft=e.offsetWidth-1}_applyDivs(){const t=this._config.inputFormWhite?this._classes.notchLeadingWhite:this._classes.notchLeadingNormal,e=this._config.inputFormWhite?this._classes.notchMiddleWhite:this._classes.notchMiddleNormal,s=this._config.inputFormWhite?this._classes.notchTrailingWhite:this._classes.notchTrailingNormal,n=g.find(Ki,this._element),o=z("div");v.addClass(o,this._classes.notch),o.setAttribute(mh,""),this._notchLeading=z("div"),v.addClass(this._notchLeading,`${this._classes.notchLeading} ${t}`),this._notchLeading.setAttribute(bh,""),this._notchMiddle=z("div"),v.addClass(this._notchMiddle,`${this._classes.notchMiddle} ${e}`),this._notchMiddle.setAttribute(vh,""),this._notchTrailing=z("div"),v.addClass(this._notchTrailing,`${this._classes.notchTrailing} ${s}`),this._notchTrailing.setAttribute(Yb,""),!(n.length>=1)&&(o.append(this._notchLeading),o.append(this._notchMiddle),o.append(this._notchTrailing),this._element.append(o))}_applyNotch(){this._notchMiddle.style.width=`${this._labelWidth}px`,this._notchLeading.style.width=`${this._labelMarginLeft+9}px`,this._label!==null&&(this._label.style.marginLeft=`${this._labelMarginLeft}px`)}_removeBorder(){const t=g.findOne(Ki,this._element);t&&t.remove()}_activate(t){Nl(()=>{this._getElements(t);const e=t?t.target:this.input,s=g.findOne(Ki,this._element);t&&t.type==="focus"&&s.setAttribute(yh,""),e.value!==""&&(e.setAttribute(Be,""),s.setAttribute(Be,"")),this._toggleDefaultDatePlaceholder(e)})}_getElements(t){if(t&&(this._element=t.target.parentNode,this._label=g.findOne("label",this._element)),t&&this._label){const e=this._labelWidth;this._getLabelData(),e!==this._labelWidth&&(this._notchMiddle=g.findOne(Ch,t.target.parentNode),this._notchLeading=g.findOne(Eh,t.target.parentNode),this._applyNotch())}}_deactivate(t){const e=t?t.target:this.input,s=g.findOne(Ki,e.parentNode);s.removeAttribute(yh),e.value===""&&(e.removeAttribute(Be),s.removeAttribute(Be)),this._toggleDefaultDatePlaceholder(e)}static activate(t){return function(e){t._activate(e)}}static deactivate(t){return function(e){t._deactivate(e)}}static jQueryInterface(t,e){return this.each(function(){let s=P.getData(this,Gn);const n=typeof t=="object"&&t;if(!(!s&&/dispose/.test(t))&&(s||(s=new Z(this,n)),typeof t=="string")){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}static getInstance(t){return P.getData(t,Gn)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const Th="animation",ha="te.animation",Jb={animation:"string",animationStart:"string",animationShowOnLoad:"boolean",onStart:"(null|function)",onEnd:"(null|function)",onHide:"(null|function)",onShow:"(null|function)",animationOnScroll:"(string)",animationWindowHeight:"number",animationOffset:"(number|string)",animationDelay:"(number|string)",animationReverse:"boolean",animationInterval:"(number|string)",animationRepeat:"(number|boolean)",animationReset:"boolean"},tv={animation:"fade",animationStart:"onClick",animationShowOnLoad:!0,onStart:null,onEnd:null,onHide:null,onShow:null,animationOnScroll:"once",animationWindowHeight:0,animationOffset:0,animationDelay:0,animationReverse:!1,animationInterval:0,animationRepeat:!1,animationReset:!1};class qn{constructor(t,e){this._element=t,this._animateElement=this._getAnimateElement(),this._isFirstScroll=!0,this._repeatAnimateOnScroll=!0,this._options=this._getConfig(e),this._element&&(P.setData(t,ha,this),this._init())}static get NAME(){return Th}init(){this._init()}startAnimation(){this._startAnimation()}stopAnimation(){this._clearAnimationClass()}changeAnimationType(t){this._options.animation=t}dispose(){b.off(this._element,"mousedown"),b.off(this._animateElement,"animationend"),b.off(window,"scroll"),b.off(this._element,"mouseover"),P.removeData(this._element,ha),this._element=null,this._animateElement=null,this._isFirstScroll=null,this._repeatAnimateOnScroll=null,this._options=null}_init(){switch(this._options.animationStart){case"onHover":this._bindHoverEvents();break;case"onLoad":this._startAnimation();break;case"onScroll":this._bindScrollEvents();break;case"onClick":this._bindClickEvents();break}this._bindTriggerOnEndCallback(),this._options.animationReset&&this._bindResetAnimationAfterFinish()}_getAnimateElement(){const t=v.getDataAttribute(this._element,"animation-target");return t?g.find(t)[0]:this._element}_getConfig(t){const e=v.getDataAttributes(this._animateElement);return t={...tv,...e,...t},W(Th,t,Jb),t}_animateOnScroll(){const t=v.offset(this._animateElement).top,e=this._animateElement.offsetHeight,s=window.innerHeight,n=t+this._options.animationOffset<=s&&t+this._options.animationOffset+e>=0,o=this._animateElement.style.visibility==="visible";switch(!0){case(n&&this._isFirstScroll):this._isFirstScroll=!1,this._startAnimation();break;case(!n&&this._isFirstScroll):this._isFirstScroll=!1,this._hideAnimateElement();break;case(n&&!o&&this._repeatAnimateOnScroll):this._options.animationOnScroll!=="repeat"&&(this._repeatAnimateOnScroll=!1),this._callback(this._options.onShow),this._showAnimateElement(),this._startAnimation();break;case(!n&&o&&this._repeatAnimateOnScroll):this._hideAnimateElement(),this._clearAnimationClass(),this._callback(this._options.onHide);break}}_addAnimatedClass(){v.addClass(this._animateElement,`animate-${this._options.animation}`)}_clearAnimationClass(){this._animateElement.classList.remove(`animate-${this._options.animation}`)}_startAnimation(){this._callback(this._options.onStart),this._addAnimatedClass(),this._options.animationRepeat&&!this._options.animationInterval&&this._setAnimationRepeat(),this._options.animationReverse&&this._setAnimationReverse(),this._options.animationDelay&&this._setAnimationDelay(),this._options.animationDuration&&this._setAnimationDuration(),this._options.animationInterval&&this._setAnimationInterval()}_setAnimationReverse(){v.style(this._animateElement,{animationIterationCount:this._options.animationRepeat===!0?"infinite":"2",animationDirection:"alternate"})}_setAnimationDuration(){v.style(this._animateElement,{animationDuration:`${this._options.animationDuration}ms`})}_setAnimationDelay(){v.style(this._animateElement,{animationDelay:`${this._options.animationDelay}ms`})}_setAnimationRepeat(){v.style(this._animateElement,{animationIterationCount:this._options.animationRepeat===!0?"infinite":this._options.animationRepeat})}_setAnimationInterval(){b.on(this._animateElement,"click",()=>{this._clearAnimationClass(),setTimeout(()=>{this._addAnimatedClass()},this._options.animationInterval)})}_hideAnimateElement(){v.style(this._animateElement,{visibility:"hidden"})}_showAnimateElement(){v.style(this._animateElement,{visibility:"visible"})}_bindResetAnimationAfterFinish(){b.on(this._animateElement,"animationend",()=>{this._clearAnimationClass()})}_bindTriggerOnEndCallback(){b.on(this._animateElement,"animationend",()=>{this._callback(this._options.onEnd)})}_bindScrollEvents(){this._options.animationShowOnLoad||this._animateOnScroll(),b.on(window,"scroll",()=>{this._animateOnScroll()})}_bindClickEvents(){b.on(this._element,"mousedown",()=>{this._startAnimation()})}_bindHoverEvents(){b.one(this._element,"mouseover",()=>{this._startAnimation()}),b.one(this._animateElement,"animationend",()=>{setTimeout(()=>{this._bindHoverEvents()},100)})}_callback(t){t instanceof Function&&t()}static autoInit(t){t._init()}static jQueryInterface(t){new qn(this[0],t).init()}static getInstance(t){return P.getData(t,ha)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const da="ripple",Zn="te.ripple",ev="rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%",iv=["[data-te-ripple-init]"],Qn=[0,0,0],sv=[{name:"primary",gradientColor:"#3B71CA"},{name:"secondary",gradientColor:"#9FA6B2"},{name:"success",gradientColor:"#14A44D"},{name:"danger",gradientColor:"#DC4C64"},{name:"warning",gradientColor:"#E4A11B"},{name:"info",gradientColor:"#54B4D3"},{name:"light",gradientColor:"#fbfbfb"},{name:"dark",gradientColor:"#262626"}],Ah=.5,nv={rippleCentered:!1,rippleColor:"",rippleColorDark:"",rippleDuration:"500ms",rippleRadius:0,rippleUnbound:!1},ov={rippleCentered:"boolean",rippleColor:"string",rippleColorDark:"string",rippleDuration:"string",rippleRadius:"number",rippleUnbound:"boolean"},rv={ripple:"relative overflow-hidden inline-block align-bottom",rippleWave:"rounded-[50%] opacity-50 pointer-events-none absolute touch-none scale-0 transition-[transform,_opacity] ease-[cubic-bezier(0,0,0.15,1),_cubic-bezier(0,0,0.15,1)] z-[999]",unbound:"overflow-visible"},av={ripple:"string",rippleWave:"string",unbound:"string"};class Ui{constructor(t,e,s){this._element=t,this._options=this._getConfig(e),this._classes=this._getClasses(s),this._element&&(P.setData(t,Zn,this),v.addClass(this._element,this._classes.ripple)),this._clickHandler=this._createRipple.bind(this),this._rippleTimer=null,this._isMinWidthSet=!1,this._initialClasses=null,this.init()}static get NAME(){return da}init(){this._addClickEvent(this._element)}dispose(){P.removeData(this._element,Zn),b.off(this._element,"click",this._clickHandler),this._element=null,this._options=null}_autoInit(t){iv.forEach(e=>{g.closest(t.target,e)&&(this._element=g.closest(t.target,e))}),this._element.style.minWidth||(v.style(this._element,{"min-width":getComputedStyle(this._element).width}),this._isMinWidthSet=!0),this._initialClasses=[...this._element.classList],v.addClass(this._element,this._classes.ripple),this._options=this._getConfig(),this._createRipple(t)}_addClickEvent(t){b.on(t,"mousedown",this._clickHandler)}_createRipple(t){this._element.className.indexOf(this._classes.ripple)<0&&v.addClass(this._element,this._classes.ripple);const{layerX:e,layerY:s}=t,n=e,o=s,r=this._element.offsetHeight,a=this._element.offsetWidth,l=this._durationToMsNumber(this._options.rippleDuration),c={offsetX:this._options.rippleCentered?r/2:n,offsetY:this._options.rippleCentered?a/2:o,height:r,width:a},h=this._getDiameter(c),d=this._options.rippleRadius||h/2,u={delay:l*Ah,duration:l-l*Ah},f={left:this._options.rippleCentered?`${a/2-d}px`:`${n-d}px`,top:this._options.rippleCentered?`${r/2-d}px`:`${o-d}px`,height:`${this._options.rippleRadius*2||h}px`,width:`${this._options.rippleRadius*2||h}px`,transitionDelay:`0s, ${u.delay}ms`,transitionDuration:`${l}ms, ${u.duration}ms`},p=z("div");this._createHTMLRipple({wrapper:this._element,ripple:p,styles:f}),this._removeHTMLRipple({ripple:p,duration:l})}_createHTMLRipple({wrapper:t,ripple:e,styles:s}){Object.keys(s).forEach(n=>e.style[n]=s[n]),v.addClass(e,this._classes.rippleWave),e.setAttribute("data-te-ripple-ref",""),this._addColor(e,t),this._toggleUnbound(t),this._appendRipple(e,t)}_removeHTMLRipple({ripple:t,duration:e}){this._rippleTimer&&(clearTimeout(this._rippleTimer),this._rippleTimer=null),t&&setTimeout(()=>{t.classList.add("!opacity-0")},10),this._rippleTimer=setTimeout(()=>{if(t&&(t.remove(),this._element)){g.find("[data-te-ripple-ref]",this._element).forEach(n=>{n.remove()}),this._isMinWidthSet&&(v.style(this._element,{"min-width":""}),this._isMinWidthSet=!1);const s=this._initialClasses?this._addedNewRippleClasses(this._classes.ripple,this._initialClasses):this._classes.ripple.split(" ");v.removeClass(this._element,s)}},e)}_addedNewRippleClasses(t,e){return t.split(" ").filter(s=>e.findIndex(n=>s===n)===-1)}_durationToMsNumber(t){return Number(t.replace("ms","").replace("s","000"))}_getConfig(t={}){const e=v.getDataAttributes(this._element);return t={...nv,...e,...t},W(da,t,ov),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...rv,...e,...t},W(da,t,av),t}_getDiameter({offsetX:t,offsetY:e,height:s,width:n}){const o=e<=s/2,r=t<=n/2,a=(u,f)=>Math.sqrt(u**2+f**2),l=e===s/2&&t===n/2,c={first:o===!0&&r===!1,second:o===!0&&r===!0,third:o===!1&&r===!0,fourth:o===!1&&r===!1},h={topLeft:a(t,e),topRight:a(n-t,e),bottomLeft:a(t,s-e),bottomRight:a(n-t,s-e)};let d=0;return l||c.fourth?d=h.topLeft:c.third?d=h.topRight:c.second?d=h.bottomRight:c.first&&(d=h.bottomLeft),d*2}_appendRipple(t,e){e.appendChild(t),setTimeout(()=>{v.addClass(t,"opacity-0 scale-100")},50)}_toggleUnbound(t){this._options.rippleUnbound===!0?v.addClass(t,this._classes.unbound):v.removeClass(t,this._classes.unbound)}_addColor(t){let e=this._options.rippleColor||"rgb(0,0,0)";(localStorage.theme==="dark"||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(e=this._options.rippleColorDark||this._options.rippleColor);const s=sv.find(r=>r.name===e.toLowerCase()),n=s?this._colorToRGB(s.gradientColor).join(","):this._colorToRGB(e).join(","),o=ev.split("{{color}}").join(`${n}`);t.style.backgroundImage=`radial-gradient(circle, ${o})`}_colorToRGB(t){function e(o){return o.length<7&&(o=`#${o[1]}${o[1]}${o[2]}${o[2]}${o[3]}${o[3]}`),[parseInt(o.substr(1,2),16),parseInt(o.substr(3,2),16),parseInt(o.substr(5,2),16)]}function s(o){const r=document.body.appendChild(document.createElement("fictum")),a="rgb(1, 2, 3)";return r.style.color=a,r.style.color!==a||(r.style.color=o,r.style.color===a||r.style.color==="")?Qn:(o=getComputedStyle(r).color,document.body.removeChild(r),o)}function n(o){return o=o.match(/[.\d]+/g).map(r=>+Number(r)),o.length=3,o}return t.toLowerCase()==="transparent"?Qn:t[0]==="#"?e(t):(t.indexOf("rgb")===-1&&(t=s(t)),t.indexOf("rgb")===0?n(t):Qn)}static autoInitial(t){return function(e){t._autoInit(e)}}static jQueryInterface(t){return this.each(function(){return P.getData(this,Zn)?null:new Ui(this,t)})}static getInstance(t){return P.getData(t,Zn)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}function bt(i){return i.getDate()}function Jn(i){return i.getDay()}function ot(i){return i.getMonth()}function K(i){return i.getFullYear()}function lv(i,t,e){const s=e.startDay,n=s>0?7-s:0,r=new Date(i,t).getDay()+n;return r>=7?r-7:r}function ua(i){return cv(i).getDate()}function cv(i){return he(i.getFullYear(),i.getMonth()+1,0)}function Xi(){return new Date}function Et(i,t){return Ct(i,t*12)}function Ct(i,t){const e=he(i.getFullYear(),i.getMonth()+t,i.getDate()),s=bt(i),n=bt(e);return s!==n&&e.setDate(0),e}function Gi(i,t){return he(i.getFullYear(),i.getMonth(),i.getDate()+t)}function he(i,t,e){const s=new Date(i,t,e);return i>=0&&i<100&&s.setFullYear(s.getFullYear()-1900),s}function wh(i){const t=i.split("-"),e=t[0],s=t[1],n=t[2];return he(e,s,n)}function hv(i){return!Number.isNaN(i.getTime())}function qi(i,t){return K(i)-K(t)||ot(i)-ot(t)||bt(i)-bt(t)}function _i(i,t){return i.setHours(0,0,0,0),t.setHours(0,0,0,0),i.getTime()===t.getTime()}function to(i,t){const s=K(i)-uv();return dv(s,t)}function dv(i,t){return(i%t+t)%t}function uv(i,t,e){let s=0;return e?s=K(e)-i+1:t&&(s=K(t)),s}function eo(i,t,e,s,n,o){const r=new Date;r.setHours(0,0,0,0);const a=t&&qi(i,t)<=-1,l=e&&qi(i,e)>=1,c=n&&qi(i,r)<=-1,h=o&&qi(i,r)>=1,d=s&&s(i)===!1;return a||l||d||c||h}function kh(i,t,e,s,n,o){const r=new Date,a=s&&K(s),l=s&&ot(s),c=e&&K(e),h=e&&ot(e),d=K(r),u=ot(r),f=l&&a&&(t>a||t===a&&i>l),p=h&&c&&(td||t===d&&i>u);return f||p||_||m}function fa(i,t,e,s,n){const o=t&&K(t),r=e&&K(e),a=K(new Date),l=r&&i>r,c=o&&ia;return l||c||h||d}function fv(i,t,e,s,n,o,r,a){const l=new Date;return l.setHours(0,0,0,0),(i&&o&&qi(o,l)<0||i)&&(o=l),o&&Ps(t,o,e,s,n,o,r,a)}function pv(i,t,e,s,n,o,r,a){const l=new Date;return l.setHours(0,0,0,0),(i&&n&&qi(n,l)<0||i)&&(n=l),n&&Ps(t,n,e,s,n,o,r,a)}function Ps(i,t,e,s,n,o,r,a){return e==="days"?K(i)===K(t)&&ot(i)===ot(t):e==="months"?K(i)===K(t):e==="years"?K(t)>=a&&K(t)<=r:!1}const _v="data-te-datepicker-modal-container-ref",gv="data-te-datepicker-dropdown-container-ref",mv="data-te-dropdown-backdrop-ref",bv="data-te-datepicker-date-text-ref",Sh="data-te-datepicker-view-ref",vv="data-te-datepicker-previous-button-ref",yv="data-te-datepicker-next-button-ref",xv="data-te-datepicker-ok-button-ref",Ev="data-te-datepicker-cancel-button-ref",Cv="data-te-datepicker-clear-button-ref",Tv="data-te-datepicker-view-change-button-ref";function Av(i,t,e,s,n,o,r,a,l,c){const h=ot(i),d=K(i),u=bt(i),f=Jn(i),p=z("div"),_=` + ${Oh(i,h,d,t,e,s,n,o,r,a,c)} + `,m=` + ${kv(u,f,h,n,c)} + ${Oh(i,h,d,t,e,s,n,o,r,a,c)} + `;return n.inline?(v.addClass(p,c.datepickerDropdownContainer),p.setAttribute(gv,l),p.innerHTML=_):(v.addClass(p,c.modalContainer),p.setAttribute(_v,l),p.innerHTML=m),p}function wv(i){const t=z("div");return v.addClass(t,i),t.setAttribute(mv,""),t}function kv(i,t,e,s,n){return` +
+
+ ${s.title} +
+
+ ${s.weekdaysShort[t]}, ${s.monthsShort[e]} ${i} +
+
+ `}function Oh(i,t,e,s,n,o,r,a,l,c,h){let d;return r.inline?d=` +
+ ${Mh(t,e,r,h)} +
+ ${Dh(i,e,s,n,o,r,a,l,c,h)} +
+
+ `:d=` +
+ ${Mh(t,e,r,h)} +
+ ${Dh(i,e,s,n,o,r,a,l,c,h)} +
+ ${Sv(r,h)} +
+ `,d}function Dh(i,t,e,s,n,o,r,a,l,c){let h;return o.view==="days"?h=io(i,e,o,c):o.view==="months"?h=so(t,s,n,o,r,c):h=no(i,s,o,a,l,c),h}function Mh(i,t,e,s){return` +
+ +
+ + +
+
+ `}function de(i,t){return` + + ${i.viewChangeIconTemplate} + + `}function Sv(i,t){const e=``,s=``,n=``;return` +
+ + ${i.removeClearBtn?"":n} + ${i.removeCancelBtn?"":s} + ${i.removeOkBtn?"":e} +
+ `}function io(i,t,e,s){const n=Ov(i,t,e),r=` + + ${e.weekdaysNarrow.map((l,c)=>`${l}`).join("")} + + `,a=n.map(l=>` + + ${l.map(c=>` + +
+ ${c.dayNumber} +
+ + `).join("")} + + `).join("");return` + + + ${r} + + + ${a} + +
+ `}function Ov(i,t,e){const s=[],n=ot(i),o=ot(Ct(i,-1)),r=ot(Ct(i,1)),a=K(i),l=lv(a,n,e),c=ua(i),h=ua(Ct(i,-1)),d=7;let u=1,f=!1;for(let p=1;pc&&(u=1,f=!1);const y=he(a,f?n:r,u);_.push({date:y,currentMonth:f,isSelected:t&&_i(y,t),isToday:_i(y,Xi()),dayNumber:bt(y),disabled:eo(y,e.min,e.max,e.filter,e.disablePast,e.disableFuture)}),u++}s.push(_)}return s}function so(i,t,e,s,n,o){const r=Dv(s,n),a=ot(Xi()),l=K(Xi()),c=` + ${r.map(h=>` + + ${h.map(d=>{const u=s.monthsShort.indexOf(d);return` + +
${d}
+ + `}).join("")} + + `).join("")} + `;return` + + + ${c} + +
+ `}function Dv(i,t){const e=[];let s=[];for(let n=0;n` + + ${c.map(h=>` + +
${h}
+ + `).join("")} + + `).join("")} + `;return` + + + ${l} + +
+ `}function Mv(i,t,e){const s=[],n=K(i),o=to(i,t),r=n-o;let a=[];for(let l=0;l + + + + + `}const Zi=37,Tt=38,Qi=39,ut=40,Ji=36,ts=35,pa=33,_a=34,Pt=13,oo=32,ro=27,Rs=9,Lv=8,Pv=46,Qt=24,ao=4,lo=4,ga="datepicker",co="te.datepicker",ho=`.${co}`,Rv=".data-api",Nv=`close${ho}`,$v=`open${ho}`,Bv=`dateChange${ho}`,uo=`click${ho}${Rv}`,Ih="data-te-datepicker-modal-container-ref",Lh="data-te-datepicker-dropdown-container-ref",fo="[data-te-datepicker-toggle-ref]",Hv=`[${Ih}]`,Fv=`[${Lh}]`,Vv="[data-te-datepicker-view-change-button-ref]",Wv="[data-te-datepicker-previous-button-ref]",zv="[data-te-datepicker-next-button-ref]",jv="[data-te-datepicker-ok-button-ref]",Yv="[data-te-datepicker-cancel-button-ref]",Kv="[data-te-datepicker-clear-button-ref]",Uv="[data-te-datepicker-view-ref]",Xv="[data-te-datepicker-toggle-button-ref]",Gv="[data-te-datepicker-date-text-ref]",qv="[data-te-dropdown-backdrop-ref]",Zv="animate-[fade-in_0.3s_both] px-[auto] motion-reduce:transition-none motion-reduce:animate-none",Qv="animate-[fade-out_0.3s_both] px-[auto] motion-reduce:transition-none motion-reduce:animate-none",Jv="animate-[fade-in_0.15s_both] px-[auto] motion-reduce:transition-none motion-reduce:animate-none",t0="animate-[fade-out_0.15s_both] px-[auto] motion-reduce:transition-none motion-reduce:animate-none",e0="flex flex-col fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[328px] h-[512px] bg-white rounded-[0.6rem] shadow-lg z-[1066] xs:max-md:landscape:w-[475px] xs:max-md:landscape:h-[360px] xs:max-md:landscape:flex-row dark:bg-zinc-700",i0="w-full h-full fixed top-0 right-0 left-0 bottom-0 bg-black/40 z-[1065]",s0="relative h-full",n0="xs:max-md:landscape:h-full h-[120px] px-6 bg-primary flex flex-col rounded-t-lg dark:bg-zinc-800",o0="h-8 flex flex-col justify-end",r0="text-[10px] font-normal uppercase tracking-[1.7px] text-white",a0="xs:max-md:landscape:mt-24 h-[72px] flex flex-col justify-end",l0="text-[34px] font-normal text-white",c0="outline-none px-3",h0="px-3 pt-2.5 pb-0 flex justify-between text-black/[64]",d0="flex items-center outline-none p-2.5 text-neutral-500 font-medium text-[0.9rem] rounded-xl shadow-none bg-transparent m-0 border-none hover:bg-neutral-200 focus:bg-neutral-200 dark:text-white dark:hover:bg-white/10 dark:focus:bg-white/10",u0="mt-2.5",f0="p-0 w-10 h-10 leading-10 border-none outline-none m-0 text-gray-600 bg-transparent mr-6 hover:bg-neutral-200 hover:rounded-[50%] focus:bg-neutral-200 focus:rounded-[50%] dark:text-white dark:hover:bg-white/10 dark:focus:bg-white/10 [&>svg]:w-4 [&>svg]:h-4 [&>svg]:mx-auto",p0="p-0 w-10 h-10 leading-10 border-none outline-none m-0 text-gray-600 bg-transparent hover:bg-neutral-200 hover:rounded-[50%] focus:bg-neutral-200 focus:rounded-[50%] dark:text-white dark:hover:bg-white/10 dark:focus:bg-white/10 [&>svg]:w-4 [&>svg]:h-4 [&>svg]:rotate-180 [&>svg]:mx-auto",_0="h-14 flex absolute w-full bottom-0 justify-end items-center px-3",g0="outline-none bg-white text-primary border-none cursor-pointer py-0 px-2.5 uppercase text-[0.8rem] leading-10 font-medium h-10 tracking-[.1rem] rounded-[10px] mb-2.5 hover:bg-neutral-200 focus:bg-neutral-200 dark:bg-transparent dark:text-white dark:hover:bg-white/10 dark:focus:bg-white/10",m0="mr-auto",b0="w-10 h-10 text-center text-[12px] font-normal dark:text-white",v0="text-center data-[te-datepicker-cell-disabled]:text-neutral-300 data-[te-datepicker-cell-disabled]:cursor-default data-[te-datepicker-cell-disabled]:pointer-events-none data-[te-datepicker-cell-disabled]:hover:cursor-default hover:cursor-pointer group",y0="w-10 h-10 xs:max-md:landscape:w-8 xs:max-md:landscape:h-8",x0="w-[76px] h-[42px]",E0="mx-auto group-[:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover]:bg-neutral-300 group-[[data-te-datepicker-cell-selected]]:bg-primary group-[[data-te-datepicker-cell-selected]]:text-white group-[:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused]]:bg-neutral-100 group-[[data-te-datepicker-cell-focused]]:data-[te-datepicker-cell-selected]:bg-primary group-[[data-te-datepicker-cell-current]]:border-solid group-[[data-te-datepicker-cell-current]]:border-black group-[[data-te-datepicker-cell-current]]:border dark:group-[:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover]:bg-white/10 dark:group-[[data-te-datepicker-cell-current]]:border-white dark:text-white dark:group-[:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused]]:bg-white/10 dark:group-[[data-te-datepicker-cell-disabled]]:text-neutral-500",C0="w-9 h-9 leading-9 rounded-[50%] text-[13px]",T0="w-[72px] h-10 leading-10 py-[1px] px-0.5 rounded-[999px]",A0="mx-auto w-[304px]",w0="flex items-center justify-content-center [&>svg]:w-5 [&>svg]:h-5 absolute outline-none border-none bg-transparent right-0.5 top-1/2 -translate-x-1/2 -translate-y-1/2 hover:text-primary focus:text-primary dark:hover:text-primary-400 dark:focus:text-primary-400 dark:text-neutral-200",k0="inline-block pointer-events-none ml-[3px] [&>svg]:w-4 [&>svg]:h-4 [&>svg]:fill-neutral-500 dark:[&>svg]:fill-white",S0="w-[328px] h-[380px] bg-white rounded-lg shadow-[0px_2px_15px_-3px_rgba(0,0,0,.07),_0px_10px_20px_-2px_rgba(0,0,0,.04)] z-[1066] dark:bg-zinc-700",O0={title:"Select date",container:"body",disablePast:!1,disableFuture:!1,monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysNarrow:["S","M","T","W","T","F","S"],okBtnText:"Ok",clearBtnText:"Clear",cancelBtnText:"Cancel",okBtnLabel:"Confirm selection",clearBtnLabel:"Clear selection",cancelBtnLabel:"Cancel selection",nextMonthLabel:"Next month",prevMonthLabel:"Previous month",nextYearLabel:"Next year",prevYearLabel:"Previous year",changeMonthIconTemplate:` + + + `,nextMultiYearLabel:"Next 24 years",prevMultiYearLabel:"Previous 24 years",switchToMultiYearViewLabel:"Choose year and month",switchToMonthViewLabel:"Choose date",switchToDayViewLabel:"Choose date",startDate:null,startDay:0,format:"dd/mm/yyyy",view:"days",viewChangeIconTemplate:` + + + `,min:null,max:null,filter:null,inline:!1,toggleButton:!0,disableToggleButton:!1,disableInput:!1,animations:!0,confirmDateOnSelect:!1,removeOkBtn:!1,removeCancelBtn:!1,removeClearBtn:!1},D0={title:"string",container:"string",disablePast:"boolean",disableFuture:"boolean",monthsFull:"array",monthsShort:"array",weekdaysFull:"array",weekdaysShort:"array",weekdaysNarrow:"array",okBtnText:"string",clearBtnText:"string",cancelBtnText:"string",okBtnLabel:"string",clearBtnLabel:"string",cancelBtnLabel:"string",nextMonthLabel:"string",prevMonthLabel:"string",nextYearLabel:"string",prevYearLabel:"string",nextMultiYearLabel:"string",prevMultiYearLabel:"string",changeMonthIconTemplate:"string",switchToMultiYearViewLabel:"string",switchToMonthViewLabel:"string",switchToDayViewLabel:"string",startDate:"(null|string|date)",startDay:"number",format:"string",view:"string",viewChangeIconTemplate:"string",min:"(null|string|date)",max:"(null|string|date)",filter:"(null|function)",inline:"boolean",toggleButton:"boolean",disableToggleButton:"boolean",disableInput:"boolean",animations:"boolean",confirmDateOnSelect:"boolean",removeOkBtn:"boolean",removeCancelBtn:"boolean",removeClearBtn:"boolean"},M0={fadeIn:Zv,fadeOut:Qv,fadeInShort:Jv,fadeOutShort:t0,modalContainer:e0,datepickerBackdrop:i0,datepickerMain:s0,datepickerHeader:n0,datepickerTitle:o0,datepickerTitleText:r0,datepickerDate:a0,datepickerDateText:l0,datepickerView:c0,datepickerDateControls:h0,datepickerViewChangeButton:d0,datepickerViewChangeIcon:k0,datepickerArrowControls:u0,datepickerPreviousButton:f0,datepickerNextButton:p0,datepickerFooter:_0,datepickerFooterBtn:g0,datepickerClearBtn:m0,datepickerDayHeading:b0,datepickerCell:v0,datepickerCellSmall:y0,datepickerCellLarge:x0,datepickerCellContent:E0,datepickerCellContentSmall:C0,datepickerCellContentLarge:T0,datepickerTable:A0,datepickerToggleButton:w0,datepickerDropdownContainer:S0},I0={fadeIn:"string",fadeOut:"string",fadeInShort:"string",fadeOutShort:"string",modalContainer:"string",datepickerBackdrop:"string",datepickerMain:"string",datepickerHeader:"string",datepickerTitle:"string",datepickerTitleText:"string",datepickerDate:"string",datepickerDateText:"string",datepickerView:"string",datepickerDateControls:"string",datepickerViewChangeButton:"string",datepickerArrowControls:"string",datepickerPreviousButton:"string",datepickerNextButton:"string",datepickerFooter:"string",datepickerFooterBtn:"string",datepickerClearBtn:"string",datepickerDayHeading:"string",datepickerCell:"string",datepickerCellSmall:"string",datepickerCellLarge:"string",datepickerCellContent:"string",datepickerCellContentSmall:"string",datepickerCellContentLarge:"string",datepickerTable:"string",datepickerToggleButton:"string",datepickerDropdownContainer:"string"};class Ph{constructor(t,e,s){this._element=t,this._input=g.findOne("input",this._element),this._options=this._getConfig(e),this._classes=this._getClasses(s),this._activeDate=new Date,this._selectedDate=null,this._selectedYear=null,this._selectedMonth=null,this._headerDate=null,this._headerYear=null,this._headerMonth=null,this._view=this._options.view,this._popper=null,this._focusTrap=null,this._isOpen=!1,this._toggleButtonId=se("datepicker-toggle-"),this._animations=!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&this._options.animations,this._scrollBar=new Es,this._element&&P.setData(t,co,this),this._init(),this.toggleButton&&this._options.disableToggle&&(this.toggleButton.disabled="true"),this._options.disableInput&&(this._input.disabled="true")}static get NAME(){return ga}get container(){return g.findOne(`[${Ih}='${this._toggleButtonId}']`)||g.findOne(`[${Lh}='${this._toggleButtonId}']`)}get options(){return this._options}get activeCell(){let t;return this._view==="days"&&(t=this._getActiveDayCell()),this._view==="months"&&(t=this._getActiveMonthCell()),this._view==="years"&&(t=this._getActiveYearCell()),t}get activeDay(){return bt(this._activeDate)}get activeMonth(){return ot(this._activeDate)}get activeYear(){return K(this._activeDate)}get firstYearInView(){return this.activeYear-to(this._activeDate,Qt)}get lastYearInView(){return this.firstYearInView+Qt-1}get viewChangeButton(){return g.findOne(Vv,this.container)}get previousButton(){return g.findOne(Wv,this.container)}get nextButton(){return g.findOne(zv,this.container)}get okButton(){return g.findOne(jv,this.container)}get cancelButton(){return g.findOne(Yv,this.container)}get clearButton(){return g.findOne(Kv,this.container)}get datesContainer(){return g.findOne(Uv,this.container)}get toggleButton(){return g.findOne(Xv,this._element)}update(t={}){this._options=this._getConfig({...this._options,...t})}_getConfig(t){const e=v.getDataAttributes(this._element);if(t={...O0,...e,...t},W(ga,t,D0),t.max&&typeof t.max=="string"&&(t.max=new Date(t.max)),t.min&&typeof t.min=="string"&&(t.min=new Date(t.min)),t.startDay&&t.startDay!==0){const s=this._getNewDaysOrderArray(t);t.weekdaysNarrow=s}return t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...M0,...e,...t},W(ga,t,I0),t}_getContainer(){return g.findOne(this._options.container)}_getNewDaysOrderArray(t){const e=t.startDay,s=t.weekdaysNarrow;return s.slice(e).concat(s.slice(0,e))}_init(){!this.toggleButton&&this._options.toggleButton&&(this._appendToggleButton(),(this._input.readOnly||this._input.disabled)&&(this.toggleButton.style.pointerEvents="none")),this._listenToUserInput(),this._listenToToggleClick(),this._listenToToggleKeydown()}_appendToggleButton(){const t=Iv(this._toggleButtonId,this._classes.datepickerToggleButton);this._element.insertAdjacentHTML("beforeend",t)}open(){if(this._input.readOnly||this._input.disabled)return;const t=b.trigger(this._element,$v);if(this._isOpen||t.defaultPrevented)return;this._setInitialDate();const e=wv(this._classes.datepickerBackdrop),s=Av(this._activeDate,this._selectedDate,this._selectedYear,this._selectedMonth,this._options,lo,Qt,ao,this._toggleButtonId,this._classes);this._options.inline?this._openDropdown(s):(this._openModal(e,s),this._scrollBar.hide()),this._animations&&(v.addClass(this.container,this._classes.fadeIn),v.addClass(e,this._classes.fadeInShort)),this._setFocusTrap(this.container),this._listenToDateSelection(),this._addControlsListeners(),this._updateControlsDisabledState(),this._listenToEscapeClick(),this._listenToKeyboardNavigation(),this._listenToDatesContainerFocus(),this._listenToDatesContainerBlur(),this._asyncFocusDatesContainer(),this._updateViewControlsAndAttributes(this._view),this._isOpen=!0,setTimeout(()=>{this._listenToOutsideClick()},0)}_openDropdown(t){this._popper=Fi(this._input,t,{placement:"bottom-start"}),this._getContainer().appendChild(t)}_openModal(t,e){const s=this._getContainer();s.appendChild(t),s.appendChild(e)}_setFocusTrap(t){this._focusTrap=new Cs(t,{event:"keydown",condition:e=>e.key==="Tab"}),this._focusTrap.trap()}_listenToUserInput(){b.on(this._input,"input",t=>{this._handleUserInput(t.target.value)})}_listenToToggleClick(){b.on(this._element,uo,fo,t=>{t.preventDefault(),this.open()})}_listenToToggleKeydown(){b.on(this._element,"keydown",fo,t=>{t.keyCode===Pt&&!this._isOpen&&this.open()})}_listenToDateSelection(){b.on(this.datesContainer,"click",t=>{this._handleDateSelection(t)})}_handleDateSelection(t){const e=t.target.nodeName==="DIV"?t.target.parentNode.dataset:t.target.dataset,s=t.target.nodeName==="DIV"?t.target.parentNode:t.target;if(e.teDate&&this._pickDay(e.teDate,s),e.teMonth&&e.teYear){const n=parseInt(e.teMonth,10),o=parseInt(e.teYear,10);this._pickMonth(n,o)}if(e.teYear&&!e.teMonth){const n=parseInt(e.teYear,10);this._pickYear(n)}this._options.inline||this._updateHeaderDate(this._activeDate,this._options.monthsShort,this._options.weekdaysShort)}_updateHeaderDate(t,e,s){const n=g.findOne(Gv,this.container),o=ot(t),r=bt(t),a=Jn(t);n.innerHTML=`${s[a]}, ${e[o]} ${r}`}_addControlsListeners(){b.on(this.nextButton,"click",()=>{this._view==="days"?this.nextMonth():this._view==="years"?this.nextYears():this.nextYear(),this._updateControlsDisabledState()}),b.on(this.previousButton,"click",()=>{this._view==="days"?this.previousMonth():this._view==="years"?this.previousYears():this.previousYear(),this._updateControlsDisabledState()}),b.on(this.viewChangeButton,"click",()=>{this._view==="days"?this._changeView("years"):(this._view==="years"||this._view==="months")&&this._changeView("days")}),this._options.inline||this._listenToFooterButtonsClick()}_listenToFooterButtonsClick(){b.on(this.okButton,"click",()=>this.handleOk()),b.on(this.cancelButton,"click",()=>this.handleCancel()),b.on(this.clearButton,"click",()=>this.handleClear())}_listenToOutsideClick(){b.on(document,uo,t=>{const e=t.target===this.container,s=this.container&&this.container.contains(t.target);!e&&!s&&this.close()})}_listenToEscapeClick(){b.on(document,"keydown",t=>{t.keyCode===ro&&this._isOpen&&this.close()})}_listenToKeyboardNavigation(){b.on(this.datesContainer,"keydown",t=>{this._handleKeydown(t)})}_listenToDatesContainerFocus(){b.on(this.datesContainer,"focus",()=>{this._focusActiveCell(this.activeCell)})}_listenToDatesContainerBlur(){b.on(this.datesContainer,"blur",()=>{this._removeCurrentFocusStyles()})}_handleKeydown(t){this._view==="days"&&this._handleDaysViewKeydown(t),this._view==="months"&&this._handleMonthsViewKeydown(t),this._view==="years"&&this._handleYearsViewKeydown(t)}_handleDaysViewKeydown(t){const e=this._activeDate,s=this.activeCell;switch(t.keyCode){case Zi:this._activeDate=Gi(this._activeDate,st()?1:-1);break;case Qi:this._activeDate=Gi(this._activeDate,st()?-1:1);break;case Tt:this._activeDate=Gi(this._activeDate,-7);break;case ut:this._activeDate=Gi(this._activeDate,7);break;case Ji:this._activeDate=Gi(this._activeDate,1-bt(this._activeDate));break;case ts:this._activeDate=Gi(this._activeDate,ua(this._activeDate)-bt(this._activeDate));break;case pa:this._activeDate=Ct(this._activeDate,-1);break;case _a:this._activeDate=Ct(this._activeDate,1);break;case Pt:case oo:this._selectDate(this._activeDate),this._handleDateSelection(t),t.preventDefault();return;default:return}Ps(e,this._activeDate,this._view,Qt,this._options.min,this._options.max)||this._changeView("days"),this._removeHighlightFromCell(s),this._focusActiveCell(this.activeCell),t.preventDefault()}_asyncFocusDatesContainer(){setTimeout(()=>{this.datesContainer.focus()},0)}_focusActiveCell(t){t&&t.setAttribute("data-te-datepicker-cell-focused","")}_removeHighlightFromCell(t){t&&t.removeAttribute("data-te-datepicker-cell-focused")}_getActiveDayCell(){const t=g.find("td",this.datesContainer);return Array.from(t).find(s=>{const n=wh(s.dataset.teDate);return _i(n,this._activeDate)})}_handleMonthsViewKeydown(t){const e=this._activeDate,s=this.activeCell;switch(t.keyCode){case Zi:this._activeDate=Ct(this._activeDate,st()?1:-1);break;case Qi:this._activeDate=Ct(this._activeDate,st()?-1:1);break;case Tt:this._activeDate=Ct(this._activeDate,-4);break;case ut:this._activeDate=Ct(this._activeDate,4);break;case Ji:this._activeDate=Ct(this._activeDate,-this.activeMonth);break;case ts:this._activeDate=Ct(this._activeDate,11-this.activeMonth);break;case pa:this._activeDate=Et(this._activeDate,-1);break;case _a:this._activeDate=Et(this._activeDate,1);break;case Pt:case oo:this._selectMonth(this.activeMonth);return;default:return}Ps(e,this._activeDate,this._view,Qt,this._options.min,this._options.max)||this._changeView("months"),this._removeHighlightFromCell(s),this._focusActiveCell(this.activeCell),t.preventDefault()}_getActiveMonthCell(){const t=g.find("td",this.datesContainer);return Array.from(t).find(s=>{const n=parseInt(s.dataset.teYear,10),o=parseInt(s.dataset.teMonth,10);return n===this.activeYear&&o===this.activeMonth})}_handleYearsViewKeydown(t){const e=this._activeDate,s=this.activeCell,n=4,o=24;switch(t.keyCode){case Zi:this._activeDate=Et(this._activeDate,st()?1:-1);break;case Qi:this._activeDate=Et(this._activeDate,st()?-1:1);break;case Tt:this._activeDate=Et(this._activeDate,-n);break;case ut:this._activeDate=Et(this._activeDate,n);break;case Ji:this._activeDate=Et(this._activeDate,-to(this._activeDate,o));break;case ts:this._activeDate=Et(this._activeDate,o-to(this._activeDate,o)-1);break;case pa:this._activeDate=Et(this._activeDate,-o);break;case _a:this._activeDate=Et(this._activeDate,o);break;case Pt:case oo:this._selectYear(this.activeYear);return;default:return}Ps(e,this._activeDate,this._view,Qt,this._options.min,this._options.max)||this._changeView("years"),this._removeHighlightFromCell(s),this._focusActiveCell(this.activeCell),t.preventDefault()}_getActiveYearCell(){const t=g.find("td",this.datesContainer);return Array.from(t).find(s=>parseInt(s.dataset.teYear,10)===this.activeYear)}_setInitialDate(){this._input.value?this._handleUserInput(this._input.value):this._options.startDate?this._activeDate=new Date(this._options.startDate):this._activeDate=new Date}close(){const t=b.trigger(this._element,Nv);!this._isOpen||t.defaultPrevented||(this._removeDatepickerListeners(),this._animations&&v.addClass(this.container,this._classes.fadeOut),this._options.inline?this._closeDropdown():this._closeModal(),this._isOpen=!1,this._view=this._options.view,this.toggleButton?this.toggleButton.focus():this._input.focus())}_closeDropdown(){const t=g.findOne(Fv);window.matchMedia("(prefers-reduced-motion: reduce)").matches&&(t&&document.body.removeChild(t),this._popper&&this._popper.destroy()),t.addEventListener("animationend",()=>{t&&document.body.removeChild(t),this._popper&&this._popper.destroy()}),this._removeFocusTrap()}_closeModal(){const t=g.findOne(qv),e=g.findOne(Hv);!e||!t||(this._animations?(v.addClass(t,this._classes.fadeOutShort),t.addEventListener("animationend",()=>{this._removePicker(t,e),this._scrollBar.reset()})):(this._removePicker(t,e),this._scrollBar.reset()))}_removePicker(t,e){const s=this._getContainer();s.removeChild(t),s.removeChild(e)}_removeFocusTrap(){this._focusTrap&&(this._focusTrap.disable(),this._focusTrap=null)}_removeDatepickerListeners(){b.off(this.nextButton,"click"),b.off(this.previousButton,"click"),b.off(this.viewChangeButton,"click"),b.off(this.okButton,"click"),b.off(this.cancelButton,"click"),b.off(this.clearButton,"click"),b.off(this.datesContainer,"click"),b.off(this.datesContainer,"keydown"),b.off(this.datesContainer,"focus"),b.off(this.datesContainer,"blur"),b.off(document,uo)}dispose(){this._isOpen&&this.close(),this._removeInputAndToggleListeners();const t=g.findOne(`#${this._toggleButtonId}`);t&&this._element.removeChild(t),P.removeData(this._element,co),this._element=null,this._input=null,this._options=null,this._activeDate=null,this._selectedDate=null,this._selectedYear=null,this._selectedMonth=null,this._headerDate=null,this._headerYear=null,this._headerMonth=null,this._view=null,this._popper=null,this._focusTrap=null}_removeInputAndToggleListeners(){b.off(this._input,"input"),b.off(this._element,uo,fo),b.off(this._element,"keydown",fo)}handleOk(){this._confirmSelection(this._headerDate),this.close()}_selectDate(t,e=this.activeCell){const{min:s,max:n,filter:o,disablePast:r,disableFuture:a}=this._options;eo(t,s,n,o,r,a)||(this._removeCurrentSelectionStyles(),this._removeCurrentFocusStyles(),this._addSelectedStyles(e),this._selectedDate=t,this._selectedYear=K(t),this._selectedMonth=ot(t),this._headerDate=t,(this._options.inline||this.options.confirmDateOnSelect)&&(this._confirmSelection(t),this.close()))}_selectYear(t,e=this.activeCell){this._removeCurrentSelectionStyles(),this._removeCurrentFocusStyles(),this._addSelectedStyles(e),this._headerYear=t,this._asyncChangeView("months")}_selectMonth(t,e=this.activeCell){this._removeCurrentSelectionStyles(),this._removeCurrentFocusStyles(),this._addSelectedStyles(e),this._headerMonth=t,this._asyncChangeView("days")}_removeSelectedStyles(t){t&&t.removeAttribute("data-te-datepicker-cell-selected")}_addSelectedStyles(t){t&&t.setAttribute("data-te-datepicker-cell-selected","")}_confirmSelection(t){if(t){const e=this.formatDate(t);this._input.value=e,b.trigger(this._element,Bv,{date:t}),b.trigger(this._input,"input")}}handleCancel(){this._selectedDate=null,this._selectedYear=null,this._selectedMonth=null,this.close()}handleClear(){this._selectedDate=null,this._selectedMonth=null,this._selectedYear=null,this._headerDate=null,this._headerMonth=null,this._headerYear=null,this._removeCurrentSelectionStyles(),this._input.value="",this._setInitialDate(),this._changeView("days"),this._updateHeaderDate(this._activeDate,this._options.monthsShort,this._options.weekdaysShort)}_removeCurrentSelectionStyles(){const t=g.findOne("[data-te-datepicker-cell-selected]",this.container);t&&t.removeAttribute("data-te-datepicker-cell-selected")}_removeCurrentFocusStyles(){const t=g.findOne("[data-te-datepicker-cell-focused]",this.container);t&&t.removeAttribute("data-te-datepicker-cell-focused")}formatDate(t){const e=bt(t),s=this._addLeadingZero(bt(t)),n=this._options.weekdaysShort[Jn(t)],o=this._options.weekdaysFull[Jn(t)],r=ot(t)+1,a=this._addLeadingZero(ot(t)+1),l=this._options.monthsShort[ot(t)],c=this._options.monthsFull[ot(t)],h=K(t).toString().length===2?K(t):K(t).toString().slice(2,4),d=K(t),u=this._options.format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);let f="";return u.forEach(p=>{switch(p){case"dddd":p=p.replace(p,o);break;case"ddd":p=p.replace(p,n);break;case"dd":p=p.replace(p,s);break;case"d":p=p.replace(p,e);break;case"mmmm":p=p.replace(p,c);break;case"mmm":p=p.replace(p,l);break;case"mm":p=p.replace(p,a);break;case"m":p=p.replace(p,r);break;case"yyyy":p=p.replace(p,d);break;case"yy":p=p.replace(p,h);break}f+=p}),f}_addLeadingZero(t){return parseInt(t,10)<10?`0${t}`:t}_pickDay(t,e){const s=wh(t),{min:n,max:o,filter:r,disablePast:a,disableFuture:l}=this._options;eo(s,n,o,r,a,l)||(this._activeDate=s,this._selectDate(s,e))}_pickYear(t){const{min:e,max:s,disablePast:n,disableFuture:o}=this._options;if(fa(t,e,s,n,o))return;const r=he(t,this.activeMonth,this.activeDay);this._activeDate=r,this._selectedDate=r,this._selectYear(t)}_pickMonth(t,e){const{min:s,max:n,disablePast:o,disableFuture:r}=this._options;if(kh(t,e,s,n,o,r)||fa(e,s,n,o,r))return;const a=he(e,t,this.activeDay);this._activeDate=a,this._selectMonth(t)}nextMonth(){const t=Ct(this._activeDate,1),e=io(t,this._headerDate,this._options,this._classes);this._activeDate=t,this.viewChangeButton.textContent=`${this._options.monthsFull[this.activeMonth]} ${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.datesContainer.innerHTML=e}previousMonth(){const t=Ct(this._activeDate,-1);this._activeDate=t;const e=io(t,this._headerDate,this._options,this._classes);this.viewChangeButton.textContent=`${this._options.monthsFull[this.activeMonth]} ${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.datesContainer.innerHTML=e}nextYear(){const t=Et(this._activeDate,1);this._activeDate=t,this.viewChangeButton.textContent=`${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes);const e=so(this.activeYear,this._selectedYear,this._selectedMonth,this._options,lo,this._classes);this.datesContainer.innerHTML=e}previousYear(){const t=Et(this._activeDate,-1);this._activeDate=t,this.viewChangeButton.textContent=`${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes);const e=so(this.activeYear,this._selectedYear,this._selectedMonth,this._options,lo,this._classes);this.datesContainer.innerHTML=e}nextYears(){const t=Et(this._activeDate,24);this._activeDate=t;const e=no(t,this._selectedYear,this._options,Qt,ao,this._classes);this.viewChangeButton.textContent=`${this.firstYearInView} - ${this.lastYearInView}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.datesContainer.innerHTML=e}previousYears(){const t=Et(this._activeDate,-24);this._activeDate=t;const e=no(t,this._selectedYear,this._options,Qt,ao,this._classes);this.viewChangeButton.textContent=`${this.firstYearInView} - ${this.lastYearInView}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.datesContainer.innerHTML=e}_asyncChangeView(t){setTimeout(()=>{this._changeView(t)},0)}_changeView(t){this._view=t,this.datesContainer.blur(),t==="days"&&(this.datesContainer.innerHTML=io(this._activeDate,this._headerDate,this._options,this._classes)),t==="months"&&(this.datesContainer.innerHTML=so(this.activeYear,this._selectedYear,this._selectedMonth,this._options,lo,this._classes)),t==="years"&&(this.datesContainer.innerHTML=no(this._activeDate,this._selectedYear,this._options,Qt,ao,this._classes)),this.datesContainer.focus(),this._updateViewControlsAndAttributes(t),this._updateControlsDisabledState()}_updateViewControlsAndAttributes(t){t==="days"&&(this.viewChangeButton.textContent=`${this._options.monthsFull[this.activeMonth]} ${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.viewChangeButton.setAttribute("aria-label",this._options.switchToMultiYearViewLabel),this.previousButton.setAttribute("aria-label",this._options.prevMonthLabel),this.nextButton.setAttribute("aria-label",this._options.nextMonthLabel)),t==="months"&&(this.viewChangeButton.textContent=`${this.activeYear}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.viewChangeButton.setAttribute("aria-label",this._options.switchToDayViewLabel),this.previousButton.setAttribute("aria-label",this._options.prevYearLabel),this.nextButton.setAttribute("aria-label",this._options.nextYearLabel)),t==="years"&&(this.viewChangeButton.textContent=`${this.firstYearInView} - ${this.lastYearInView}`,this.viewChangeButton.innerHTML+=de(this._options,this._classes),this.viewChangeButton.setAttribute("aria-label",this._options.switchToMonthViewLabel),this.previousButton.setAttribute("aria-label",this._options.prevMultiYearLabel),this.nextButton.setAttribute("aria-label",this._options.nextMultiYearLabel))}_updateControlsDisabledState(){fv(this._options.disableFuture,this._activeDate,this._view,Qt,this._options.min,this._options.max,this.lastYearInView,this.firstYearInView)?this.nextButton.disabled=!0:this.nextButton.disabled=!1,pv(this._options.disablePast,this._activeDate,this._view,Qt,this._options.min,this._options.max,this.lastYearInView,this.firstYearInView)?this.previousButton.disabled=!0:this.previousButton.disabled=!1}_handleUserInput(t){const e=this._getDelimeters(this._options.format),s=this._parseDate(t,this._options.format,e);hv(s)?(this._activeDate=s,this._selectedDate=s,this._selectedYear=K(s),this._selectedMonth=ot(s),this._headerDate=s):(this._activeDate=new Date,this._selectedDate=null,this._selectedMonth=null,this._selectedYear=null,this._headerDate=null,this._headerMonth=null,this._headerYear=null)}_getDelimeters(t){return t.match(/[^(dmy)]{1,}/g)}_parseDate(t,e,s){let n;s[0]!==s[1]?n=s[0]+s[1]:n=s[0];const o=new RegExp(`[${n}]`),r=t.split(o),a=e.split(o),l=e.indexOf("mmm")!==-1,c=[];for(let _=0;_s===t)}static getInstance(t){return P.getData(t,co)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const L0=({format24:i,okLabel:t,cancelLabel:e,headID:s,footerID:n,bodyID:o,pickerID:r,clearLabel:a,inline:l,showClearBtn:c,amLabel:h,pmLabel:d},u)=>{const f=`
+
+
+
+
+
+ + + + + + + +
+ ${i?"":`
+ + +
`} +
+
+ ${l?"":`
+
+ +
+
+
+ ${i?'
':""} +
+
`} +
+
+
+ ${c?``:""} + + +
+
+
+
`,p=`
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ${i?"":`
+ + + +
`} + ${i?``:""} +
+
+
+
+
`;return l?p:f},P0=(i,t,e)=>{const{iconSVG:s}=i;return` + +`},po="data-te-timepicker-disabled",_o="data-te-timepicker-active",gi=i=>{if(i==="")return;let t,e,s,n;return Rh(i)?(t=i.getHours(),n=t,e=i.getMinutes(),t%=12,n===0&&t===0&&(s="AM"),t=t||12,s===void 0&&(s=Number(n)>=12?"PM":"AM"),e=e<10?`0${e}`:e):([t,e,s]=j(i,!1),n=t,t%=12,n===0&&t===0&&(s="AM"),t=t||12,s===void 0&&(s=Number(n)>=12?"PM":"AM")),{hours:t,minutes:e,amOrPm:s}},Rh=i=>i&&Object.prototype.toString.call(i)==="[object Date]"&&!Number.isNaN(i),Nh=i=>{if(i==="")return;let t,e;return Rh(i)?(t=i.getHours(),e=i.getMinutes()):[t,e]=j(i,!1),e=Number(e)<10?`0${Number(e)}`:e,{hours:t,minutes:e}},R0=(i,t,e)=>b.on(document,i,t,({target:s})=>{if(s.hasAttribute(_o))return;document.querySelectorAll(t).forEach(o=>{o.hasAttribute(_o)&&(v.removeClass(o,e.opacity),o.removeAttribute(_o))}),v.addClass(s,e.opacity),s.setAttribute(_o,"")}),$h=({clientX:i,clientY:t,touches:e},s,n=!1)=>{const{left:o,top:r}=s.getBoundingClientRect();let a={};return!n||!e?a={x:i-o,y:t-r}:n&&Object.keys(e).length>0&&(a={x:e[0].clientX-o,y:e[0].clientY-r}),a},go=()=>navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&/MacIntel/.test(navigator.platform)||/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),j=(i,t=!0)=>t?i.value.replace(/:/gi," ").split(" "):i.replace(/:/gi," ").split(" "),Bh=(i,t)=>{const[e,s,n]=j(i,!1),[o,r,a]=j(t,!1);return n==="PM"&&a==="AM"||n===a&&e>o||s>r},Hh=()=>{const i=new Date,t=i.getHours(),e=i.getMinutes();return`${t}:${e<10?`0${e}`:e}`},He=(i,t,e)=>{if(!t)return i;let s=Hh();return e&&(s=`${gi(s).hours}:${gi(s).minutes} ${gi(s).amOrPm}`),(i!==""&&Bh(s,i)||i==="")&&(i=s),i},Fe=(i,t,e)=>{if(!t)return i;let s=Hh();return e&&(s=`${gi(s).hours}:${gi(s).minutes} ${gi(s).amOrPm}`),(i!==""&&!Bh(s,i)||i==="")&&(i=s),i},N0=({format12:i,maxTime:t,minTime:e,disablePast:s,disableFuture:n},o,r)=>{const a=j(o)[1];e=He(e,s,i),t=Fe(t,n,i);const[l,c,h]=j(t,!1),[d,u,f]=j(e,!1);if(h!==void 0||f!==void 0)return[r,a];if(!(l!==""&&d===""&&Number(r)>Number(l))&&!(l===""&&d!==""&&c===void 0&&u!==""&&Number(r){i.forEach(n=>{t=t==="12"&&s?"0":t,(n.textContent==="00"||Number(n.textContent==="12"&&s?"0":n.textContent)>t)&&(v.addClass(n,e.tipsDisabled),n.setAttribute(po,""))})},Vh=(i,t,e,s)=>{i.forEach(n=>{t=t==="12"&&s?"0":t,n.textContent!=="00"&&Number(n.textContent==="12"&&s?"0":n.textContent){if(t==="12"||t==="24")return;const n=e?12:24;return s==="max"?(Number(i)===n?0:Number(i))>Number(t):(Number(i)===n?0:Number(i)){i.forEach(r=>{(Wh(s,e,o,"max")||Number(r.textContent)>t&&Number(s)===Number(e))&&(v.addClass(r,n.tipsDisabled),r.setAttribute(po,""))})},B0=(i,t,e,s,n,o)=>{i.forEach(r=>{(Wh(s,e,o,"min")||Number(r.textContent)i.startsWith("0")?Number(i.slice(1)):Number(i),Ns="timepicker",H=`data-te-${Ns}`,zh="[data-te-toggle]",mo=`te.${Ns}`,ue=`.${mo}`,fe=".data-api",jh=`click${ue}${fe}`,bo=`keydown${ue}${fe}`,Yh=`mousedown${ue}${fe}`,Kh=`mouseup${ue}${fe}`,Uh=`mousemove${ue}${fe}`,Xh=`mouseleave${ue}${fe}`,Gh=`mouseover${ue}${fe}`,qh=`touchmove${ue}${fe}`,Zh=`touchend${ue}${fe}`,Qh=`touchstart${ue}${fe}`,F0=`[${H}-am]`,V0=`[${H}-pm]`,W0=`[${H}-format24]`,vo=`[${H}-current]`,yo=`[${H}-hour-mode]`,z0=`[${H}-toggle-button]`,ma=`${H}-cancel`,Jh=`${H}-clear`,ba=`${H}-submit`,j0=`${H}-icon`,va=`${H}-icon-up`,ya=`${H}-icon-down`,Y0=`${H}-icon-inline-hour`,K0=`${H}-icon-inline-minute`,td=`${H}-inline-hour-icons`,U0=`${H}-current-inline`,X0="readonly",ed=`${H}-invalid-feedback`,xa=`${H}-is-invalid`,Ve=`${H}-disabled`,J=`${H}-active`,G0=`${H}-input`,mi=`${H}-clock`,$s=`${H}-clock-inner`,Ea=`${H}-wrapper`,id=`${H}-clock-wrapper`,xo=`${H}-hour`,Ca=`${H}-minute`,Eo=`${H}-tips-element`,ft=`${H}-tips-hours`,vt=`${H}-tips-minutes`,Rt=`${H}-tips-inner`,Co=`${H}-tips-inner-element`,sd=`${H}-middle-dot`,Ta=`${H}-hand-pointer`,Aa=`${H}-circle`,nd=`${H}-modal`,q0={appendValidationInfo:!0,bodyID:"",cancelLabel:"Cancel",clearLabel:"Clear",closeModalOnBackdropClick:!0,closeModalOnMinutesClick:!1,container:"body",defaultTime:"",disabled:!1,disablePast:!1,disableFuture:!1,enableValidation:!0,focusInputAfterApprove:!1,footerID:"",format12:!0,format24:!1,headID:"",increment:!1,inline:!1,invalidLabel:"Invalid Time Format",maxTime:"",minTime:"",modalID:"",okLabel:"Ok",overflowHidden:!0,pickerID:"",readOnly:!1,showClearBtn:!0,switchHoursToMinutesOnClick:!0,iconSVG:` + +`,withIcon:!0,pmLabel:"PM",amLabel:"AM",animations:!0},Z0={appendValidationInfo:"boolean",bodyID:"string",cancelLabel:"string",clearLabel:"string",closeModalOnBackdropClick:"boolean",closeModalOnMinutesClick:"boolean",container:"string",disabled:"boolean",disablePast:"boolean",disableFuture:"boolean",enableValidation:"boolean",footerID:"string",format12:"boolean",format24:"boolean",headID:"string",increment:"boolean",inline:"boolean",invalidLabel:"string",modalID:"string",okLabel:"string",overflowHidden:"boolean",pickerID:"string",readOnly:"boolean",showClearBtn:"boolean",switchHoursToMinutesOnClick:"boolean",defaultTime:"(string|date|number)",iconSVG:"string",withIcon:"boolean",pmLabel:"string",amLabel:"string",animations:"boolean"},Q0={tips:"absolute rounded-[100%] w-[32px] h-[32px] text-center cursor-pointer text-[1.1rem] rounded-[100%] bg-transparent flex justify-center items-center font-light focus:outline-none selection:bg-transparent",tipsActive:"text-white bg-[#3b71ca] font-normal",tipsDisabled:"text-[#b3afaf] pointer-events-none bg-transparent",transform:"transition-[transform,height] ease-in-out duration-[400ms]",modal:"z-[1065]",clockAnimation:"animate-[show-up-clock_350ms_linear]",opacity:"!opacity-100",timepickerWrapper:"touch-none opacity-100 z-[1065] inset-0 bg-[#00000066] h-full flex items-center justify-center flex-col fixed",timepickerContainer:"flex items-center justify-center flex-col max-h-[calc(100%-64px)] overflow-y-auto shadow-[0_10px_15px_-3px_rgba(0,0,0,0.07),0_4px_6px_-2px_rgba(0,0,0,0.05)] min-[320px]:max-[825px]:landscape:rounded-lg",timepickerElements:"flex flex-col min-w-[310px] min-h-[325px] bg-white rounded-t-[0.6rem] min-[320px]:max-[825px]:landscape:!flex-row min-[320px]:max-[825px]:landscape:min-w-[auto] min-[320px]:max-[825px]:landscape:min-h-[auto] min-[320px]:max-[825px]:landscape:overflow-y-auto justify-around",timepickerHead:"bg-[#3b71ca] dark:bg-zinc-700 h-[100px] rounded-t-lg pr-[24px] pl-[50px] py-[10px] min-[320px]:max-[825px]:landscape:rounded-tr-none min-[320px]:max-[825px]:landscape:rounded-bl-none min-[320px]:max-[825px]:landscape:p-[10px] min-[320px]:max-[825px]:landscape:pr-[10px] min-[320px]:max-[825px]:landscape:h-auto min-[320px]:max-[825px]:landscape:min-h-[305px] flex flex-row items-center justify-center",timepickerHeadContent:"min-[320px]:max-[825px]:landscape:flex-col flex w-full justify-evenly",timepickerCurrentWrapper:"[direction:ltr] rtl:[direction:rtl]",timepickerCurrentButtonWrapper:"relative h-full",timepickerCurrentButton:"text-[3.75rem] font-light leading-[1.2] tracking-[-0.00833em] text-white opacity-[.54] border-none bg-transparent p-0 min-[320px]:max-[825px]:landscape:text-5xl min-[320px]:max-[825px]:landscape:font-normal cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none ",timepickerDot:"font-light leading-[1.2] tracking-[-0.00833em] text-[3.75rem] opacity-[.54] border-none bg-transparent p-0 text-white min-[320px]:max-[825px]:landscape:text-[3rem] min-[320px]:max-[825px]:landscape:font-normal",timepickerModeWrapper:"flex flex-col justify-center text-[18px] text-[#ffffff8a] min-[320px]:max-[825px]:landscape:!justify-around min-[320px]:max-[825px]:landscape:!flex-row",timepickerModeAm:"p-0 bg-transparent border-none text-white opacity-[.54] cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none",timepickerModePm:"p-0 bg-transparent border-none text-white opacity-[.54] cursor-pointer hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none",timepickerClockWrapper:"min-w-[310px] max-w-[325px] min-h-[305px] overflow-x-hidden h-full flex justify-center flex-col items-center dark:bg-zinc-500",timepickerClock:"relative rounded-[100%] w-[260px] h-[260px] cursor-default my-0 mx-auto bg-[#00000012] dark:bg-zinc-600/50",timepickerMiddleDot:"top-1/2 left-1/2 w-[6px] h-[6px] -translate-y-1/2 -translate-x-1/2 rounded-[50%] bg-[#3b71ca] absolute",timepickerHandPointer:"bg-[#3b71ca] bottom-1/2 h-2/5 left-[calc(50%-1px)] rtl:!left-auto origin-[center_bottom_0] rtl:!origin-[50%_50%_0] w-[2px] absolute",timepickerPointerCircle:"-top-[21px] -left-[15px] w-[4px] border-[14px] border-solid border-[#3b71ca] h-[4px] box-content rounded-[100%] absolute",timepickerClockInner:"absolute top-1/2 left-1/2 -translate-y-1/2 -translate-x-1/2 w-[160px] h-[160px] rounded-[100%]",timepickerFooterWrapper:"rounded-b-lg flex justify-between items-center w-full h-[56px] px-[12px] bg-white dark:bg-zinc-500",timepickerFooter:"w-full flex justify-between",timepickerFooterButton:"text-[0.8rem] min-w-[64px] box-border font-medium leading-[40px] rounded-[10px] tracking-[0.1rem] uppercase text-[#3b71ca] dark:text-white border-none bg-transparent transition-[background-color,box-shadow,border] duration-[250ms] ease-[cubic-bezier(0.4,0,0.2,1)] delay-[0ms] outline-none py-0 px-[10px] h-[40px] mb-[10px] hover:bg-[#00000014] focus:bg-[#00000014] focus:outline-none",timepickerInlineWrapper:"touch-none opacity-100 z-[1065] inset-0 bg-[#00000066] h-full flex items-center justify-center flex-col rounded-lg",timepickerInlineContainer:"flex items-center justify-center flex-col max-h-[calc(100%-64px)] overflow-y-auto shadow-[0_10px_15px_-3px_rgba(0,0,0,0.07),0_4px_6px_-2px_rgba(0,0,0,0.05)]",timepickerInlineElements:"flex flex-col min-h-[auto] min-w-[310px] bg-white rounded-[0.6rem] min-[320px]:max-[825px]:landscape:!flex-row min-[320px]:max-[825px]:landscape:rounded-bl-lg min-[320px]:max-[825px]:landscape:min-w-[auto] min-[320px]:max-[825px]:landscape::min-h-[auto] min-[320px]:max-[825px]:landscape:overflow-y-auto justify-around",timepickerInlineHead:"bg-[#3b71ca] dark:bg-zinc-700 h-[100px] rounded-t-lg min-[320px]:max-[825px]:landscape:rounded-tr-none min-[320px]:max-[825px]:landscape:rounded-bl-none min-[320px]:max-[825px]:landscape:p-[10px] min-[320px]:max-[825px]:landscape:pr-[10px] min-[320px]:max-[825px]:landscape:h-auto min-[320px]:max-[825px]:landscape:min-h-[305px] flex flex-row items-center justify-center p-0 rounded-b-lg",timepickerInlineHeadContent:"min-[320px]:max-[825px]:landscape:flex-col flex w-full justify-evenly items-center",timepickerInlineHourWrapper:"relative h-full !opacity-100",timepickerCurrentMinuteWrapper:"relative h-full",timepickerInlineIconUp:"absolute fill-white -top-[35px] opacity-0 hover:opacity-100 transition-all duration-200 ease-[ease] cursor-pointer -translate-x-1/2 -translate-y-1/2 left-1/2 w-[30px] h-[30px] flex justify-center items-center",timepickerInlineIconSvg:"h-4 w-4",timepickerInlineCurrentButton:"font-light leading-[1.2] tracking-[-0.00833em] text-white border-none bg-transparent p-0 min-[320px]:max-[825px]:landscape:text-5xl min-[320px]:max-[825px]:landscape:font-normal !opacity-100 cursor-pointer focus:bg-[#00000026] hover:outline-none focus:outline-none text-[2.5rem] hover:bg-[unset]",timepickerInlineIconDown:"absolute fill-white -bottom-[47px] opacity-0 hover:opacity-100 transition-all duration-200 ease-[ease] cursor-pointer -translate-x-1/2 -translate-y-1/2 left-1/2 w-[30px] h-[30px] flex justify-center items-center",timepickerInlineDot:"font-light leading-[1.2] tracking-[-0.00833em] opacity-[.54] border-none bg-transparent p-0 text-white min-[320px]:max-[825px]:landscape:text-[3rem] min-[320px]:max-[825px]:landscape:font-normal text-[2.5rem]",timepickerInlineModeWrapper:"flex justify-center text-[18px] text-[#ffffff8a] min-[320px]:max-[825px]:landscape:!justify-around min-[320px]:max-[825px]:landscape:!flex-row",timepickerInlineModeAm:"hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none p-0 bg-transparent border-none text-white opacity-[.54] cursor-pointer mr-2 ml-6",timepickerInlineModePm:"hover:bg-[#00000026] hover:outline-none focus:bg-[#00000026] focus:outline-none p-0 bg-transparent border-none text-white opacity-[.54] cursor-pointer",timepickerInlineSubmitButton:"hover:bg-[#00000014] focus:bg-[#00000014] focus:outline-none text-[0.8rem] box-border font-medium leading-[40px] tracking-[.1rem] uppercase border-none bg-transparent [transition:background-color_250ms_cubic-bezier(0.4,0,0.2,1)_0ms,box-shadow_250ms_cubic-bezier(0.4,0,0.2,1)_0ms,border_250ms_cubic-bezier(0.4,0,0.2,1)_0ms] outline-none rounded-[100%] h-[48px] min-w-[48px] inline-block ml-[30px] text-white py-1 px-2 mb-0",timepickerToggleButton:"h-4 w-4 ml-auto absolute outline-none border-none bg-transparent right-1.5 top-1/2 -translate-x-1/2 -translate-y-1/2 transition-all duration-300 ease-[cubic-bezier(0.25,0.1,0.25,1)] cursor-pointer hover:text-[#3b71ca] focus:text-[#3b71ca] dark:hover:text-[#3b71ca] dark:focus:text-[#3b71ca] dark:text-white"},J0={tips:"string",tipsActive:"string",tipsDisabled:"string",transform:"string",modal:"string",clockAnimation:"string",opacity:"string",timepickerWrapper:"string",timepickerContainer:"string",timepickerElements:"string",timepickerHead:"string",timepickerHeadContent:"string",timepickerCurrentWrapper:"string",timepickerCurrentButtonWrapper:"string",timepickerCurrentButton:"string",timepickerDot:"string",timepickerModeWrapper:"string",timepickerModeAm:"string",timepickerModePm:"string",timepickerClockWrapper:"string",timepickerClock:"string",timepickerMiddleDot:"string",timepickerHandPointer:"string",timepickerPointerCircle:"string",timepickerClockInner:"string",timepickerFooterWrapper:"string",timepickerFooterButton:"string",timepickerInlineWrapper:"string",timepickerInlineContainer:"string",timepickerInlineElements:"string",timepickerInlineHead:"string",timepickerInlineHeadContent:"string",timepickerInlineHourWrapper:"string",timepickerCurrentMinuteWrapper:"string",timepickerInlineIconUp:"string",timepickerInlineIconSvg:"string",timepickerInlineCurrentButton:"string",timepickerInlineIconDown:"string",timepickerInlineDot:"string",timepickerInlineModeWrapper:"string",timepickerInlineModeAm:"string",timepickerInlineModePm:"string",timepickerInlineSubmitButton:"string",timepickerToggleButton:"string"};class od{constructor(t,e={},s){Ee(this,"_toggleAmPm",t=>{t==="PM"?(this._isPmEnabled=!0,this._isAmEnabled=!1):t==="AM"&&(this._isPmEnabled=!1,this._isAmEnabled=!0)});Ee(this,"_toggleBackgroundColorCircle",t=>{if(this._modal.querySelector(`${t}[${J}]`)!==null){v.addStyle(this._circle,{backgroundColor:"#1976d2"});return}v.addStyle(this._circle,{backgroundColor:"transparent"})});Ee(this,"_toggleClassActive",(t,{textContent:e},s)=>{const n=[...t].find(o=>Number(o)===Number(e));return s.forEach(o=>{if(!o.hasAttribute(Ve)){if(o.textContent===n){v.addClass(o,this._classes.tipsActive),o.setAttribute(J,"");return}v.removeClass(o,this._classes.tipsActive),o.removeAttribute(J)}})});Ee(this,"_makeMinutesDegrees",(t,e)=>{const{increment:s}=this._options;return t<0?(e=Math.round(360+t/6)%60,t=360+Math.round(t/6)*6):(e=Math.round(t/6)%60,t=Math.round(t/6)*6),s&&(t=Math.round(t/30)*30,e=Math.round(t/6)*6/6,e===60&&(e="00")),t>=360&&(t=0),{degrees:t,minute:e,addDegrees:s?30:6}});Ee(this,"_makeHourDegrees",(t,e,s)=>{if(t)return this._hasTargetInnerClass(t)?e<0?(s=Math.round(360+e/30)%24,e=360+e):(s=Math.round(e/30)+12,s===12&&(s="00")):e<0?(s=Math.round(360+e/30)%12,e=360+e):(s=Math.round(e/30)%12,(s===0||s>12)&&(s=12)),e>=360&&(e=0),{degrees:e,hour:s,addDegrees:30}});Ee(this,"_makeInnerHoursDegrees",(t,e)=>(t<0?(e=Math.round(360+t/30)%24,t=360+t):(e=Math.round(t/30)+12,e===12&&(e="00")),{degrees:t,hour:e,addDegrees:30}));Ee(this,"_getAppendClock",(t=[],e=`[${mi}]`,s)=>{let{minTime:n,maxTime:o}=this._options;const{inline:r,format12:a,disablePast:l,disableFuture:c}=this._options;n=He(n,l,a),o=Fe(o,c,a);const[h,d,u]=j(o,!1),[f,p,_]=j(n,!1);!r&&a&&this._isInvalidTimeFormat&&!this._AM.hasAttribute(J)&&(v.addClass(this._PM,this._classes.opacity),this._PM.setAttribute(J,""));const m=g.findOne(e),y=360/t.length;function x(A){return A*(Math.PI/180)}if(m===null)return;const E=(m.offsetWidth-32)/2,C=(m.offsetHeight-32)/2,T=E-4;setTimeout(()=>{let A;a&&(A=g.findOne(`${yo}[${J}]`).textContent),this._handleDisablingTipsMinTime(A,_,p,f),this._handleDisablingTipsMaxTime(A,u,d,h)},0),[...t].forEach((A,w)=>{const S=x(w*y),k=z("span"),D=z("span");D.innerHTML=A,v.addClass(k,this._classes.tips),k.setAttribute(s,"");const O=k.offsetWidth,M=k.offsetHeight;return v.addStyle(k,{left:`${E+Math.sin(S)*T-O}px`,bottom:`${C+Math.cos(S)*T-M}px`}),t.includes("05")&&k.setAttribute(vt,""),t.includes("13")?D.setAttribute(Co,""):D.setAttribute(Eo,""),k.appendChild(D),m.appendChild(k)})});this._element=t,this._element&&P.setData(t,mo,this),this._document=document,this._options=this._getConfig(e),this._classes=this._getClasses(s),this._currentTime=null,this._toggleButtonId=se("timepicker-toggle-"),this.hoursArray=["12","1","2","3","4","5","6","7","8","9","10","11"],this.innerHours=["00","13","14","15","16","17","18","19","20","21","22","23"],this.minutesArray=["00","05","10","15","20","25","30","35","40","45","50","55"],this.input=g.findOne("input",this._element),this.dataWithIcon=t.dataset.withIcon,this.dataToggle=t.dataset.toggle,this.customIcon=g.findOne(z0,this._element),this._checkToggleButton(),this.inputFormatShow=g.findOne(W0,this._element),this.inputFormat=this.inputFormatShow===null?"":Object.values(this.inputFormatShow.dataset)[0],this.elementToggle=g.findOne(zh,this._element),this.toggleElement=Object.values(t.querySelector(zh).dataset)[0],this._hour=null,this._minutes=null,this._AM=null,this._PM=null,this._wrapper=null,this._modal=null,this._hand=null,this._circle=null,this._focusTrap=null,this._popper=null,this._interval=null,this._inputValue=this._options.defaultTime!==""?this._options.defaultTime:this.input.value,this._options.format24&&(this._options.format12=!1,this._currentTime=Nh(this._inputValue)),this._options.format12&&(this._options.format24=!1,this._currentTime=gi(this._inputValue)),this._options.readOnly&&this.input.setAttribute(X0,!0),this.inputFormat==="true"&&this.inputFormat!==""&&(this._options.format12=!1,this._options.format24=!0,this._currentTime=Nh(this._inputValue)),this._animations=!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&this._options.animations,this.init(),this._isHours=!0,this._isMinutes=!1,this._isInvalidTimeFormat=!1,this._isMouseMove=!1,this._isInner=!1,this._isAmEnabled=!1,this._isPmEnabled=!1,this._options.format12&&!this._options.defaultTime&&(this._isPmEnabled=!0),this._objWithDataOnChange={degrees:null},this._scrollBar=new Es}static get NAME(){return Ns}init(){const{format12:t,format24:e,enableValidation:s}=this._options;let n,o,r;if(this.input.setAttribute(G0,""),this._currentTime!==void 0){const{hours:a,minutes:l,amOrPm:c}=this._currentTime;n=Number(a)<10?0:"",o=`${n}${Number(a)}:${l}`,r=c,t?this.input.value=`${o} ${r}`:e&&(this.input.value=`${o}`)}else n="",o="",r="",this.input.value="";this.input.value.length>0&&this.input.value!==""&&(this.input.setAttribute(J,""),b.trigger(this.input,"input")),!(this._options===null&&this._element===null)&&(s&&this._getValidate("keydown change blur focus"),this._handleOpen(),this._listenToToggleKeydown())}dispose(){this._removeModal(),this._element!==null&&P.removeData(this._element,mo),setTimeout(()=>{this._element=null,this._options=null,this.input=null,this._focusTrap=null},350),b.off(this._document,"click",`[data-te-toggle='${this.toggleElement}']`),b.off(this._element,"keydown",`[data-te-toggle='${this.toggleElement}']`)}update(t={}){this._options=this._getConfig({...this._options,...t})}_checkToggleButton(){this.customIcon===null&&(this.dataWithIcon!==void 0&&(this._options.withIcon=null,this.dataWithIcon==="true"&&this._appendToggleButton(this._options)),this._options.withIcon&&this._appendToggleButton(this._options))}_appendToggleButton(){const t=P0(this._options,this._toggleButtonId,this._classes);this.input.insertAdjacentHTML("afterend",t)}_getDomElements(){this._hour=g.findOne(`[${xo}]`),this._minutes=g.findOne(`[${Ca}]`),this._AM=g.findOne(F0),this._PM=g.findOne(V0),this._wrapper=g.findOne(`[${Ea}]`),this._modal=g.findOne(`[${nd}]`),this._hand=g.findOne(`[${Ta}]`),this._circle=g.findOne(`[${Aa}]`),this._clock=g.findOne(`[${mi}]`),this._clockInner=g.findOne(`[${$s}]`)}_handlerMaxMinHoursOptions(t,e,s,n,o,r){if(!e&&!s)return!0;const{format24:a,format12:l,disablePast:c,disableFuture:h}=this._options,{_isAmEnabled:d,_isPmEnabled:u}=this,f=r.keyCode,p=r.target.hasAttribute($s)||r.target.hasAttribute(Rt)||r.target.hasAttribute(Co);s=He(s,c,l),e=Fe(e,h,l),typeof e!="number"&&(e=j(e,!1)[0]);const _=e!==""?e*30:"",m=s!==""?s*30:"";t<0&&(t=360+t),t=t===360?0:t;const y=()=>{const w=document.querySelectorAll(`[${Eo}]`),S=document.querySelectorAll(`[${Co}]`),k=H0(this._hour.innerText);let D,O,M;return f===Tt?O=1:f===ut&&(O=-1),k===12&&f===Tt?M=1:k===0&&f===Tt?M=13:k===0&&f===ut?M=23:k===13&&f===ut?M=0:k===1&&f===ut?M=12:M=k+O,w.forEach(L=>{Number(L.textContent)===M&&(D=L)}),S.forEach(L=>{Number(L.textContent)===M&&(D=L)}),!D.parentElement.hasAttribute(Ve)},x=()=>{const w=s!==""&&s>12?(s-12)*30:"",S=e!==""&&e>12?(e-12)*30:"";if(!(w&&tS||e&&e<12))return!0};if(a&&r.type!=="keydown"&&p)return x();if(r.type==="keydown")return y();const E=!o||o==="PM"&&u||s!==""&&o==="AM"&&d,C=!n||n==="PM"&&u||e!==""&&n==="AM"&&d,T=()=>{const w=m===360&&l?0:m;if(s){if(o==="PM"&&d||E&&t{const w=_===360&&l?0:_;if(e){if(n==="AM"&&u||C&&t>w)return}else return!0;return!0};return T()&&A()}_handleKeyboard(){b.on(this._document,bo,"",t=>{let e,s,n;const{increment:o,maxTime:r,minTime:a,format12:l,disablePast:c,disableFuture:h}=this._options;let d=j(a,!1)[0],u=j(r,!1)[0];const f=j(a,!1)[2],p=j(r,!1)[2];d=He(d,c,l),u=Fe(u,h,l),typeof u!="number"&&(u=j(u,!1)[0]);const _=g.findOne(`[${vt}]`)===null,m=g.findOne(`[${Rt}]`)!==null,y=Number(this._hand.style.transform.replace(/[^\d-]/g,"")),x=g.find(`[${vt}]`,this._modal),E=g.find(`[${ft}]`,this._modal),C=g.find(`[${Rt}]`,this._modal);let T=this._makeHourDegrees(t.target,y,e).hour;const{degrees:A,addDegrees:w}=this._makeHourDegrees(t.target,y,e);let{minute:S,degrees:k}=this._makeMinutesDegrees(y,s);const D=this._makeMinutesDegrees(y,s).addDegrees;let{hour:O}=this._makeInnerHoursDegrees(y,n);if(t.keyCode===ro){const M=g.findOne(`[${ma}]`,this._modal);b.trigger(M,"click")}else if(_){if(m&&(t.keyCode===Qi&&(this._isInner=!1,v.addStyle(this._hand,{height:"calc(40% + 1px)"}),this._hour.textContent=this._setHourOrMinute(T>12?1:T),this._toggleClassActive(this.hoursArray,this._hour,E),this._toggleClassActive(this.innerHours,this._hour,C)),t.keyCode===Zi&&(this._isInner=!0,v.addStyle(this._hand,{height:"21.5%"}),this._hour.textContent=this._setHourOrMinute(O>=24||O==="00"?0:O),this._toggleClassActive(this.innerHours,this._hour,C),this._toggleClassActive(this.hoursArray,this._hour-1,E))),t.keyCode===Tt){if(!this._handlerMaxMinHoursOptions(A+30,u,d,p,f,t))return;v.addStyle(this._hand,{transform:`rotateZ(${A+w}deg)`}),this._isInner?(O+=1,O===24?O=0:(O===25||O==="001")&&(O=13),this._hour.textContent=this._setHourOrMinute(O),this._toggleClassActive(this.innerHours,this._hour,C)):(T+=1,this._hour.textContent=this._setHourOrMinute(T>12?1:T),this._toggleClassActive(this.hoursArray,this._hour,E))}if(t.keyCode===ut){if(!this._handlerMaxMinHoursOptions(A-30,u,d,p,f,t))return;v.addStyle(this._hand,{transform:`rotateZ(${A-w}deg)`}),this._isInner?(O-=1,O===12?O=0:O===-1&&(O=23),this._hour.textContent=this._setHourOrMinute(O),this._toggleClassActive(this.innerHours,this._hour,C)):(T-=1,this._hour.textContent=this._setHourOrMinute(T===0?12:T),this._toggleClassActive(this.hoursArray,this._hour,E))}}else t.keyCode===Tt&&(k+=D,v.addStyle(this._hand,{transform:`rotateZ(${k}deg)`}),S+=1,o&&(S+=4,S==="0014"&&(S=5)),this._minutes.textContent=this._setHourOrMinute(S>59?0:S),this._toggleClassActive(this.minutesArray,this._minutes,x),this._toggleBackgroundColorCircle(`[${vt}]`)),t.keyCode===ut&&(k-=D,v.addStyle(this._hand,{transform:`rotateZ(${k}deg)`}),o?S-=5:S-=1,S===-1?S=59:S===-5&&(S=55),this._minutes.textContent=this._setHourOrMinute(S),this._toggleClassActive(this.minutesArray,this._minutes,x),this._toggleBackgroundColorCircle(`[${vt}]`))})}_setActiveClassToTipsOnOpen(t,...e){if(!this._isInvalidTimeFormat)if(this._options.format24){const s=g.find(`[${ft}]`,this._modal),n=g.find(`[${Rt}]`,this._modal);this._addActiveClassToTip(s,t),this._addActiveClassToTip(n,t)}else{[...e].filter(n=>(n==="PM"?(v.addClass(this._PM,this._classes.opacity),this._PM.setAttribute(J,"")):n==="AM"?(v.addClass(this._AM,this._classes.opacity),this._AM.setAttribute(J,"")):(v.removeClass(this._AM,this._classes.opacity),v.removeClass(this._PM,this._classes.opacity),this._AM.removeAttribute(J),this._PM.removeAttribute(J)),n));const s=g.find(`[${ft}]`,this._modal);this._addActiveClassToTip(s,t)}}_setTipsAndTimesDependOnInputValue(t,e){const{inline:s,format12:n}=this._options;if(this._isInvalidTimeFormat)this._hour.textContent="12",this._minutes.textContent="00",s||v.addStyle(this._hand,{transform:"rotateZ(0deg)"}),n&&(v.addClass(this._PM,this._classes.opacity),this._PM.setAttribute(J,""));else{const o=t>12?t*30-360:t*30;this._hour.textContent=t,this._minutes.textContent=e,s||(v.addStyle(this._hand,{transform:`rotateZ(${o}deg)`}),v.addStyle(this._circle,{backgroundColor:"#1976d2"}),(Number(t)>12||t==="00")&&v.addStyle(this._hand,{height:"21.5%"}))}}_listenToToggleKeydown(){b.on(this._element,"keydown",`[data-te-toggle='${this.toggleElement}']`,t=>{t.keyCode===Pt&&(t.preventDefault(),b.trigger(this.elementToggle,"click"))})}_handleOpen(){const t=this._getContainer();si.on(this._element,"click",`[data-te-toggle='${this.toggleElement}']`,e=>{if(this._options===null)return;const s=v.getDataAttribute(this.input,"toggle")!==null?200:0;setTimeout(()=>{v.addStyle(this.elementToggle,{pointerEvents:"none"}),this.elementToggle.blur();let n;j(this.input)[0]===""?n=["12","00","PM"]:n=j(this.input);const{modalID:o,inline:r,format12:a}=this._options,[l,c,h]=n,d=z("div");if((Number(l)>12||l==="00")&&(this._isInner=!0),this.input.blur(),e.target.blur(),d.innerHTML=L0(this._options,this._classes),v.addClass(d,this._classes.modal),d.setAttribute(nd,""),d.setAttribute("role","dialog"),d.setAttribute("tabIndex","-1"),d.setAttribute("id",o),r?(this._popper=Fi(this.input,d,{placement:"bottom-start"}),t.appendChild(d)):(t.appendChild(d),this._scrollBar.hide()),this._getDomElements(),this._animations?this._toggleBackdropAnimation():v.addClass(this._wrapper,this._classes.opacity),this._setActiveClassToTipsOnOpen(l,c,h),this._appendTimes(),this._setActiveClassToTipsOnOpen(l,c,h),this._setTipsAndTimesDependOnInputValue(l,c),this.input.value===""){const u=g.find(`[${ft}]`,this._modal);a&&(v.addClass(this._PM,this._classes.opacity),this._PM.setAttribute(J,"")),this._hour.textContent="12",this._minutes.textContent="00",this._addActiveClassToTip(u,Number(this._hour.textContent))}if(this._handleSwitchTimeMode(),this._handleOkButton(),this._handleClose(),r)this._handleHoverInlineBtn(),this._handleDocumentClickInline(),this._handleInlineClicks();else{this._handleSwitchHourMinute(),this._handleClockClick(),this._handleKeyboard();const u=document.querySelector(`${vo}[${J}]`);v.addClass(u,this._classes.opacity),v.addStyle(this._hour,{pointerEvents:"none"}),v.addStyle(this._minutes,{pointerEvents:""})}this._focusTrap=new Cs(this._wrapper,{event:"keydown",condition:({key:u})=>u==="Tab"}),this._focusTrap.trap()},s)})}_handleInlineClicks(){let t,e;const s=u=>{let f=u;return f>59?f=0:f<0&&(f=59),f},n=u=>{let f=u;return this._options.format24?(f>24?f=1:f<0&&(f=23),f>23&&(f=0)):(f>12?f=1:f<1&&(f=12),f>12&&(f=1)),f},o=u=>{const f=n(u);this._hour.textContent=this._setHourOrMinute(f)},r=u=>{const f=s(u);this._minutes.textContent=this._setHourOrMinute(f)},a=()=>{t+=1,o(t)},l=()=>{e+=1,r(e)},c=()=>{t-=1,o(t)},h=()=>{e-=1,r(e)},d=u=>{clearInterval(this._interval),this._interval=setInterval(u,100)};si.on(this._modal,"click mousedown mouseup touchstart touchend contextmenu",`[${va}], [${ya}]`,u=>{t=Number(this._hour.textContent),e=Number(this._minutes.textContent);const{target:f,type:p}=u,_=p==="mousedown"||p==="touchstart";f.closest(`[${va}]`)?f.closest(`[${va}]`).parentNode.hasAttribute(td)?_?d(a):p==="mouseup"||p==="touchend"||p==="contextmenu"?clearInterval(this._interval):a():_?d(l):p==="mouseup"||p==="touchend"||p==="contextmenu"?clearInterval(this._interval):l():f.closest(`[${ya}]`)&&(f.closest(`[${ya}]`).parentNode.hasAttribute(td)?_?d(c):p==="mouseup"||p==="touchend"?clearInterval(this._interval):c():_?d(h):p==="mouseup"||p==="touchend"?clearInterval(this._interval):h())}),b.on(window,bo,u=>{const f=u.code,p=document.activeElement.hasAttribute(xo),_=document.activeElement.hasAttribute(Ca),m=document.activeElement===document.body;switch(t=Number(this._hour.textContent),e=Number(this._minutes.textContent),f){case"ArrowUp":u.preventDefault(),m||p?(this._hour.focus(),a()):_&&l();break;case"ArrowDown":u.preventDefault(),m||p?(this._hour.focus(),c()):_&&h();break}})}_handleClose(){b.on(this._modal,"click",`[${Ea}], [${ma}], [${Jh}]`,({target:t})=>{const{closeModalOnBackdropClick:e}=this._options,s=()=>{var n;v.addStyle(this.elementToggle,{pointerEvents:"auto"}),this._animations&&this._toggleBackdropAnimation(!0),this._removeModal(),(n=this._focusTrap)==null||n.disable(),this._focusTrap=null,this.elementToggle?this.elementToggle.focus():this.input&&this.input.focus()};if(t.hasAttribute(Jh)){this._toggleAmPm("PM"),this.input.value="",this.input.removeAttribute(J);let n;j(this.input)[0]===""?n=["12","00","PM"]:n=j(this.input);const[o,r,a]=n;this._setTipsAndTimesDependOnInputValue("12","00"),this._setActiveClassToTipsOnOpen(o,r,a),this._hour.click()}else(t.hasAttribute(ma)||t.hasAttribute(ba)||t.hasAttribute(Ea)&&e)&&s()})}showValueInput(){return this.input.value}_handleOkButton(){si.on(this._modal,"click",`[${ba}]`,()=>{let{maxTime:t,minTime:e}=this._options;const{format12:s,format24:n,readOnly:o,focusInputAfterApprove:r,disablePast:a,disableFuture:l}=this._options,c=this._document.querySelector(`${yo}[${J}]`),h=`${this._hour.textContent}:${this._minutes.textContent}`,d=Number(this._hour.textContent),u=d===12&&s?0:d,f=Number(this._minutes.textContent);e=He(e,a,s),t=Fe(t,l,s);let[p,_,m]=j(t,!1),[y,x,E]=j(e,!1);y=y==="12"&&s?"00":y,p=p==="12"&&s?"00":p;const C=uNumber(p);let A=!0;c&&(A=m===c.textContent);let w=!0;c&&(w=E===c.textContent);const S=f>_&&u===Number(p),k=f{const s=g.find(`[${Y0}]`,this._modal),n=g.find(`[${K0}]`,this._modal),o=(l,c)=>l.forEach(h=>{if(c){v.addClass(h,this._classes.opacity),h.setAttribute(J,"");return}v.removeClass(h,this._classes.opacity),h.removeAttribute(J)}),a=e.hasAttribute(xo)?s:n;o(a,t==="mouseover")})}_handleDocumentClickInline(){b.on(document,jh,({target:t})=>{if(this._modal&&!this._modal.contains(t)&&!t.hasAttribute(j0)){if(clearInterval(this._interval),v.addStyle(this.elementToggle,{pointerEvents:"auto"}),this._removeModal(),!this._animations)return;this._toggleBackdropAnimation(!0)}})}_handleSwitchHourMinute(){R0("click",vo,this._classes),b.on(this._modal,"click",vo,()=>{const{format24:t}=this._options,e=g.find(vo,this._modal),s=g.find(`[${vt}]`,this._modal),n=g.find(`[${ft}]`,this._modal),o=g.find(`[${Rt}]`,this._modal),r=Number(this._hour.textContent),a=Number(this._minutes.textContent),l=(c,h)=>{n.forEach(u=>u.remove()),s.forEach(u=>u.remove()),v.addClass(this._hand,this._classes.transform),setTimeout(()=>{v.removeClass(this._hand,this._classes.transform)},401),this._getAppendClock(c,`[${mi}]`,h);const d=()=>{const u=g.find(`[${ft}]`,this._modal),f=g.find(`[${vt}]`,this._modal);this._addActiveClassToTip(u,r),this._addActiveClassToTip(f,a)};if(!t)setTimeout(()=>{d()},401);else{const u=g.find(`[${Rt}]`,this._modal);setTimeout(()=>{this._addActiveClassToTip(u,r),d()},401)}};e.forEach(c=>{c.hasAttribute(J)&&(c.hasAttribute(Ca)?(v.addClass(this._hand,this._classes.transform),v.addStyle(this._hand,{transform:`rotateZ(${this._minutes.textContent*6}deg)`,height:"calc(40% + 1px)"}),t&&o.length>0&&o.forEach(h=>h.remove()),l(this.minutesArray,vt),this._hour.style.pointerEvents="",this._minutes.style.pointerEvents="none"):c.hasAttribute(xo)&&(v.addStyle(this._hand,{transform:`rotateZ(${this._hour.textContent*30}deg)`}),Number(this._hour.textContent)>12?(v.addStyle(this._hand,{transform:`rotateZ(${this._hour.textContent*30-360}deg)`,height:"21.5%"}),Number(this._hour.textContent)>12&&v.addStyle(this._hand,{height:"21.5%"})):v.addStyle(this._hand,{height:"calc(40% + 1px)"}),t&&this._getAppendClock(this.innerHours,`[${$s}]`,Rt),o.length>0&&o.forEach(h=>h.remove()),l(this.hoursArray,ft),v.addStyle(this._hour,{pointerEvents:"none"}),v.addStyle(this._minutes,{pointerEvents:""})))})})}_handleDisablingTipsMaxTime(t,e,s,n){if(!this._options.maxTime&&!this._options.disableFuture)return;const o=g.find(`[${ft}]`),r=g.find(`[${Rt}]`),a=g.find(`[${vt}]`);if(!e||e===t){Fh(r,n,this._classes,this._options.format12),Fh(o,n,this._classes,this._options.format12),$0(a,s,n,this._hour.textContent,this._classes,this._options.format12);return}e==="AM"&&t==="PM"&&(o.forEach(l=>{v.addClass(l,this._classes.tipsDisabled),l.setAttribute(Ve,"")}),a.forEach(l=>{v.addClass(l,this._classes.tipsDisabled),l.setAttribute(Ve,"")}))}_handleDisablingTipsMinTime(t,e,s,n){if(!this._options.minTime&&!this._options.disablePast)return;const o=g.find(`[${ft}]`),r=g.find(`[${Rt}]`),a=g.find(`[${vt}]`);!e||e===t?(Vh(o,n,this._classes,this._options.format12),Vh(r,n,this._classes,this._options.format12),B0(a,s,n,this._hour.textContent,this._classes,this._options.format12)):e==="PM"&&t==="AM"&&(o.forEach(l=>{v.addClass(l,this._classes.tipsDisabled),l.setAttribute(Ve,"")}),a.forEach(l=>{v.addClass(l,this._classes.tipsDisabled),l.setAttribute(Ve,"")}))}_handleSwitchTimeMode(){b.on(document,"click",yo,({target:t})=>{let{maxTime:e,minTime:s}=this._options;const{disablePast:n,disableFuture:o,format12:r}=this._options;s=He(s,n,r),e=Fe(e,o,r);const[a,l,c]=j(e,!1),[h,d,u]=j(s,!1),f=g.find(`[${ft}]`),p=g.find(`[${vt}]`);(()=>{f.forEach(m=>{v.removeClass(m,this._classes.tipsDisabled),m.removeAttribute(Ve)}),p.forEach(m=>{v.removeClass(m,this._classes.tipsDisabled),m.removeAttribute(Ve)})})(),this._handleDisablingTipsMinTime(t.textContent,u,d,h),this._handleDisablingTipsMaxTime(t.textContent,c,l,a),this._toggleAmPm(t.textContent),t.hasAttribute(J)||(g.find(yo).forEach(y=>{y.hasAttribute(J)&&(v.removeClass(y,this._classes.opacity),y.removeAttribute(J))}),v.addClass(t,this._classes.opacity),t.setAttribute(J,""))})}_handleClockClick(){let{maxTime:t,minTime:e}=this._options;const{disablePast:s,disableFuture:n,format12:o}=this._options;e=He(e,s,o),t=Fe(t,n,o);const r=j(t,!1)[2],a=j(e,!1)[2],l=j(t,!1)[0],c=j(e,!1)[0],h=g.findOne(`[${id}]`);si.on(document,`${Yh} ${Kh} ${Uh} ${Xh} ${Gh} ${Qh} ${qh} ${Zh}`,"",d=>{go()||d.preventDefault();const{type:u,target:f}=d,{closeModalOnMinutesClick:p,switchHoursToMinutesOnClick:_}=this._options,m=g.findOne(`[${vt}]`,this._modal)!==null,y=g.findOne(`[${ft}]`,this._modal)!==null,x=g.findOne(`[${Rt}]`,this._modal)!==null,E=g.find(`[${vt}]`,this._modal),C=$h(d,h),T=h.offsetWidth/2;let A=Math.atan2(C.y-T,C.x-T);if(go()){const D=$h(d,h,!0);A=Math.atan2(D.y-T,D.x-T)}let w=null,S=null,k=null;if(u==="mousedown"||u==="mousemove"||u==="touchmove"||u==="touchstart")(u==="mousedown"||u==="touchstart"||u==="touchmove")&&(this._hasTargetInnerClass(f)||f.hasAttribute(id)||f.hasAttribute(mi)||f.hasAttribute(vt)||f.hasAttribute(ft)||f.hasAttribute(Aa)||f.hasAttribute(Ta)||f.hasAttribute(sd)||f.hasAttribute(Eo))&&(this._isMouseMove=!0,go()&&d.touches&&(w=d.touches[0].clientX,S=d.touches[0].clientY,k=document.elementFromPoint(w,S)));else if(u==="mouseup"||u==="touchend"){if(this._isMouseMove=!1,this._hasTargetInnerClass(f)||f.hasAttribute(mi)||f.hasAttribute(ft)||f.hasAttribute(Aa)||f.hasAttribute(Ta)||f.hasAttribute(sd)||f.hasAttribute(Eo)){if((y||x)&&_){const D=Number(this._hour.textContent)>l||Number(this._hour.textContent)I>=10||I==="00"?I:`0${I}`;this._minutes.textContent=F(),this._toggleClassActive(this.minutesArray,this._minutes,E),this._toggleBackgroundColorCircle(`[${vt}]`),this._objWithDataOnChange.degreesMinutes=X,this._objWithDataOnChange.minutes=I}}if(y||x){let D,O=Math.trunc(A*180/Math.PI)+90;if(O=Math.round(O/30)*30,v.addStyle(this._circle,{backgroundColor:"#1976d2"}),this._makeHourDegrees(f,O,D)===void 0)return;const M=()=>{if(go()&&O&&k){const{degrees:L,hour:X}=this._makeHourDegrees(k,O,D);return this._handleMoveHand(k,X,L)}else{const{degrees:L,hour:X}=this._makeHourDegrees(f,O,D);return this._handleMoveHand(f,X,L)}};this._objWithDataOnChange.degreesHours=O,this._handlerMaxMinHoursOptions(O,l,c,r,a,d)&&M()}d.stopPropagation()})}_hasTargetInnerClass(t){return t.hasAttribute($s)||t.hasAttribute(Rt)||t.hasAttribute(Co)}_handleMoveHand(t,e,s){const n=g.find(`[${ft}]`,this._modal),o=g.find(`[${Rt}]`,this._modal);this._isMouseMove&&(this._hasTargetInnerClass(t)?v.addStyle(this._hand,{height:"21.5%"}):v.addStyle(this._hand,{height:"calc(40% + 1px)"}),v.addStyle(this._hand,{transform:`rotateZ(${s}deg)`}),this._hour.textContent=e>=10||e==="00"?e:`0${e}`,this._toggleClassActive(this.hoursArray,this._hour,n),this._toggleClassActive(this.innerHours,this._hour,o),this._objWithDataOnChange.hour=e>=10||e==="00"?e:`0${e}`)}_handlerMaxMinMinutesOptions(t,e){let{maxTime:s,minTime:n}=this._options;const{format12:o,increment:r,disablePast:a,disableFuture:l}=this._options;n=He(n,a,o),s=Fe(s,l,o);const c=j(s,!1)[1],h=j(n,!1)[1],d=j(s,!1)[0],u=j(n,!1)[0],f=u==="12"&&o?"0":u,p=d==="12"&&o?"0":d,_=j(s,!1)[2],m=j(n,!1)[2],y=c!==""?c*6:"",x=h!==""?h*6:"",E=Number(this._hour.textContent),C=E===12&&o?0:E;if(!_&&!m){if(s!==""&&n!==""){if(Number(p)===C&&t>y||Number(f)===C&&t=Number(p)&&t>=y+6)return t}else{if(n!==""){if(m==="PM"&&this._isAmEnabled)return;if(m==="PM"&&this._isPmEnabled){if(C=Number(p)&&t>=y+6)return t}else if(_==="AM"&&this._isAmEnabled&&C>=Number(p)&&t>=y+6)return t}}return r&&(t=Math.round(t/30)*30),t<0?t=360+t:t>=360&&(t=0),{degrees:t,minute:e}}_removeModal(){this._animations?setTimeout(()=>{this._removeModalElements(),this._scrollBar.reset()},300):(this._removeModalElements(),this._scrollBar.reset()),si.off(this._document,`${jh} ${bo} ${Yh} ${Kh} ${Uh} ${Xh} ${Gh} ${Qh} ${qh} ${Zh}`),b.off(window,bo)}_removeModalElements(){this._modal&&this._modal.remove()}_toggleBackdropAnimation(t=!1){t?this._wrapper.classList.add("animate-[fade-out_350ms_ease-in-out]"):(this._wrapper.classList.add("animate-[fade-in_350ms_ease-in-out]"),this._options.inline||v.addClass(this._clock,this._classes.clockAnimation)),setTimeout(()=>{this._wrapper.classList.remove("animate-[fade-out_350ms_ease-in-out]","animate-[fade-in_350ms_ease-in-out]")},351)}_addActiveClassToTip(t,e){t.forEach(s=>{Number(s.textContent)===Number(e)&&(v.addClass(s,this._classes.tipsActive),s.setAttribute(J,""))})}_setHourOrMinute(t){return t<10?`0${t}`:t}_appendTimes(){const{format24:t}=this._options;if(t){this._getAppendClock(this.hoursArray,`[${mi}]`,ft),this._getAppendClock(this.innerHours,`[${$s}]`,Rt);return}this._getAppendClock(this.hoursArray,`[${mi}]`,ft)}_getConfig(t){const e=v.getDataAttributes(this._element);return t={...q0,...e,...t},W(Ns,t,Z0),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Q0,...e,...t},W(Ns,t,J0),t}_getContainer(){return g.findOne(this._options.container)}_getValidate(t){const{invalidLabel:e,format24:s,format12:n,appendValidationInfo:o}=this._options;let r;o&&(r=z("div"),r.setAttribute(ed,""),r.innerHTML=e),si.on(this.input,t,({target:a})=>{if(this._options===null||this.input.value==="")return;const l=/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/,c=/^([01]\d|2[0-3])(:[0-5]\d)$/,h=l.test(a.value);if(c.test(a.value)!==!0&&s||h!==!0&&n){o&&(this.input.setAttribute(xa,""),this.input.parentNode.insertBefore(r,this.input.nextSibling)),v.addStyle(a,{marginBottom:0}),v.addStyle(r,{bottom:"-23px"}),this._isInvalidTimeFormat=!0;return}this.input.removeAttribute(xa),this._isInvalidTimeFormat=!1;const u=g.findOne(`[${ed}]`);u!==null&&u.remove()})}static getInstance(t){return P.getData(t,mo)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}/*! + * perfect-scrollbar v1.5.3 + * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors + * Licensed under MIT + */function pe(i){return getComputedStyle(i)}function At(i,t){for(var e in t){var s=t[e];typeof s=="number"&&(s=s+"px"),i.style[e]=s}return i}function To(i){var t=document.createElement("div");return t.className=i,t}var rd=typeof Element<"u"&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function We(i,t){if(!rd)throw new Error("No element matching method supported");return rd.call(i,t)}function es(i){i.remove?i.remove():i.parentNode&&i.parentNode.removeChild(i)}function ad(i,t){return Array.prototype.filter.call(i.children,function(e){return We(e,t)})}var at={main:"ps",rtl:"ps__rtl",element:{thumb:function(i){return"ps__thumb-"+i},rail:function(i){return"ps__rail-"+i},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(i){return"ps--active-"+i},scrolling:function(i){return"ps--scrolling-"+i}}},ld={x:null,y:null};function cd(i,t){var e=i.element.classList,s=at.state.scrolling(t);e.contains(s)?clearTimeout(ld[t]):e.add(s)}function hd(i,t){ld[t]=setTimeout(function(){return i.isAlive&&i.element.classList.remove(at.state.scrolling(t))},i.settings.scrollingThreshold)}function ty(i,t){cd(i,t),hd(i,t)}var Bs=function(t){this.element=t,this.handlers={}},dd={isEmpty:{configurable:!0}};Bs.prototype.bind=function(t,e){typeof this.handlers[t]>"u"&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)},Bs.prototype.unbind=function(t,e){var s=this;this.handlers[t]=this.handlers[t].filter(function(n){return e&&n!==e?!0:(s.element.removeEventListener(t,n,!1),!1)})},Bs.prototype.unbindAll=function(){for(var t in this.handlers)this.unbind(t)},dd.isEmpty.get=function(){var i=this;return Object.keys(this.handlers).every(function(t){return i.handlers[t].length===0})},Object.defineProperties(Bs.prototype,dd);var is=function(){this.eventElements=[]};is.prototype.eventElement=function(t){var e=this.eventElements.filter(function(s){return s.element===t})[0];return e||(e=new Bs(t),this.eventElements.push(e)),e},is.prototype.bind=function(t,e,s){this.eventElement(t).bind(e,s)},is.prototype.unbind=function(t,e,s){var n=this.eventElement(t);n.unbind(e,s),n.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(n),1)},is.prototype.unbindAll=function(){this.eventElements.forEach(function(t){return t.unbindAll()}),this.eventElements=[]},is.prototype.once=function(t,e,s){var n=this.eventElement(t),o=function(r){n.unbind(e,o),s(r)};n.bind(e,o)};function Ao(i){if(typeof window.CustomEvent=="function")return new CustomEvent(i);var t=document.createEvent("CustomEvent");return t.initCustomEvent(i,!1,!1,void 0),t}function wo(i,t,e,s,n){s===void 0&&(s=!0),n===void 0&&(n=!1);var o;if(t==="top")o=["contentHeight","containerHeight","scrollTop","y","up","down"];else if(t==="left")o=["contentWidth","containerWidth","scrollLeft","x","left","right"];else throw new Error("A proper axis should be provided");ey(i,e,o,s,n)}function ey(i,t,e,s,n){var o=e[0],r=e[1],a=e[2],l=e[3],c=e[4],h=e[5];s===void 0&&(s=!0),n===void 0&&(n=!1);var d=i.element;i.reach[l]=null,d[a]<1&&(i.reach[l]="start"),d[a]>i[o]-i[r]-1&&(i.reach[l]="end"),t&&(d.dispatchEvent(Ao("ps-scroll-"+l)),t<0?d.dispatchEvent(Ao("ps-scroll-"+c)):t>0&&d.dispatchEvent(Ao("ps-scroll-"+h)),s&&ty(i,l)),i.reach[l]&&(t||n)&&d.dispatchEvent(Ao("ps-"+l+"-reach-"+i.reach[l]))}function it(i){return parseInt(i,10)||0}function iy(i){return We(i,"input,[contenteditable]")||We(i,"select,[contenteditable]")||We(i,"textarea,[contenteditable]")||We(i,"button,[contenteditable]")}function sy(i){var t=pe(i);return it(t.width)+it(t.paddingLeft)+it(t.paddingRight)+it(t.borderLeftWidth)+it(t.borderRightWidth)}var ss={isWebKit:typeof document<"u"&&"WebkitAppearance"in document.documentElement.style,supportsTouch:typeof window<"u"&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:typeof navigator<"u"&&navigator.msMaxTouchPoints,isChrome:typeof navigator<"u"&&/Chrome/i.test(navigator&&navigator.userAgent)};function Ce(i){var t=i.element,e=Math.floor(t.scrollTop),s=t.getBoundingClientRect();i.containerWidth=Math.round(s.width),i.containerHeight=Math.round(s.height),i.contentWidth=t.scrollWidth,i.contentHeight=t.scrollHeight,t.contains(i.scrollbarXRail)||(ad(t,at.element.rail("x")).forEach(function(n){return es(n)}),t.appendChild(i.scrollbarXRail)),t.contains(i.scrollbarYRail)||(ad(t,at.element.rail("y")).forEach(function(n){return es(n)}),t.appendChild(i.scrollbarYRail)),!i.settings.suppressScrollX&&i.containerWidth+i.settings.scrollXMarginOffset=i.railXWidth-i.scrollbarXWidth&&(i.scrollbarXLeft=i.railXWidth-i.scrollbarXWidth),i.scrollbarYTop>=i.railYHeight-i.scrollbarYHeight&&(i.scrollbarYTop=i.railYHeight-i.scrollbarYHeight),ny(t,i),i.scrollbarXActive?t.classList.add(at.state.active("x")):(t.classList.remove(at.state.active("x")),i.scrollbarXWidth=0,i.scrollbarXLeft=0,t.scrollLeft=i.isRtl===!0?i.contentWidth:0),i.scrollbarYActive?t.classList.add(at.state.active("y")):(t.classList.remove(at.state.active("y")),i.scrollbarYHeight=0,i.scrollbarYTop=0,t.scrollTop=0)}function ud(i,t){return i.settings.minScrollbarLength&&(t=Math.max(t,i.settings.minScrollbarLength)),i.settings.maxScrollbarLength&&(t=Math.min(t,i.settings.maxScrollbarLength)),t}function ny(i,t){var e={width:t.railXWidth},s=Math.floor(i.scrollTop);t.isRtl?e.left=t.negativeScrollAdjustment+i.scrollLeft+t.containerWidth-t.contentWidth:e.left=i.scrollLeft,t.isScrollbarXUsingBottom?e.bottom=t.scrollbarXBottom-s:e.top=t.scrollbarXTop+s,At(t.scrollbarXRail,e);var n={top:s,height:t.railYHeight};t.isScrollbarYUsingRight?t.isRtl?n.right=t.contentWidth-(t.negativeScrollAdjustment+i.scrollLeft)-t.scrollbarYRight-t.scrollbarYOuterWidth-9:n.right=t.scrollbarYRight-i.scrollLeft:t.isRtl?n.left=t.negativeScrollAdjustment+i.scrollLeft+t.containerWidth*2-t.contentWidth-t.scrollbarYLeft-t.scrollbarYOuterWidth:n.left=t.scrollbarYLeft+i.scrollLeft,At(t.scrollbarYRail,n),At(t.scrollbarX,{left:t.scrollbarXLeft,width:t.scrollbarXWidth-t.railBorderXWidth}),At(t.scrollbarY,{top:t.scrollbarYTop,height:t.scrollbarYHeight-t.railBorderYWidth})}function oy(i){i.element,i.event.bind(i.scrollbarY,"mousedown",function(t){return t.stopPropagation()}),i.event.bind(i.scrollbarYRail,"mousedown",function(t){var e=t.pageY-window.pageYOffset-i.scrollbarYRail.getBoundingClientRect().top,s=e>i.scrollbarYTop?1:-1;i.element.scrollTop+=s*i.containerHeight,Ce(i),t.stopPropagation()}),i.event.bind(i.scrollbarX,"mousedown",function(t){return t.stopPropagation()}),i.event.bind(i.scrollbarXRail,"mousedown",function(t){var e=t.pageX-window.pageXOffset-i.scrollbarXRail.getBoundingClientRect().left,s=e>i.scrollbarXLeft?1:-1;i.element.scrollLeft+=s*i.containerWidth,Ce(i),t.stopPropagation()})}function ry(i){fd(i,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),fd(i,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])}function fd(i,t){var e=t[0],s=t[1],n=t[2],o=t[3],r=t[4],a=t[5],l=t[6],c=t[7],h=t[8],d=i.element,u=null,f=null,p=null;function _(x){x.touches&&x.touches[0]&&(x[n]=x.touches[0].pageY),d[l]=u+p*(x[n]-f),cd(i,c),Ce(i),x.stopPropagation(),x.type.startsWith("touch")&&x.changedTouches.length>1&&x.preventDefault()}function m(){hd(i,c),i[h].classList.remove(at.state.clicking),i.event.unbind(i.ownerDocument,"mousemove",_)}function y(x,E){u=d[l],E&&x.touches&&(x[n]=x.touches[0].pageY),f=x[n],p=(i[s]-i[e])/(i[o]-i[a]),E?i.event.bind(i.ownerDocument,"touchmove",_):(i.event.bind(i.ownerDocument,"mousemove",_),i.event.once(i.ownerDocument,"mouseup",m),x.preventDefault()),i[h].classList.add(at.state.clicking),x.stopPropagation()}i.event.bind(i[r],"mousedown",function(x){y(x)}),i.event.bind(i[r],"touchstart",function(x){y(x,!0)})}function ay(i){var t=i.element,e=function(){return We(t,":hover")},s=function(){return We(i.scrollbarX,":focus")||We(i.scrollbarY,":focus")};function n(o,r){var a=Math.floor(t.scrollTop);if(o===0){if(!i.scrollbarYActive)return!1;if(a===0&&r>0||a>=i.contentHeight-i.containerHeight&&r<0)return!i.settings.wheelPropagation}var l=t.scrollLeft;if(r===0){if(!i.scrollbarXActive)return!1;if(l===0&&o<0||l>=i.contentWidth-i.containerWidth&&o>0)return!i.settings.wheelPropagation}return!0}i.event.bind(i.ownerDocument,"keydown",function(o){if(!(o.isDefaultPrevented&&o.isDefaultPrevented()||o.defaultPrevented)&&!(!e()&&!s())){var r=document.activeElement?document.activeElement:i.ownerDocument.activeElement;if(r){if(r.tagName==="IFRAME")r=r.contentDocument.activeElement;else for(;r.shadowRoot;)r=r.shadowRoot.activeElement;if(iy(r))return}var a=0,l=0;switch(o.which){case 37:o.metaKey?a=-i.contentWidth:o.altKey?a=-i.containerWidth:a=-30;break;case 38:o.metaKey?l=i.contentHeight:o.altKey?l=i.containerHeight:l=30;break;case 39:o.metaKey?a=i.contentWidth:o.altKey?a=i.containerWidth:a=30;break;case 40:o.metaKey?l=-i.contentHeight:o.altKey?l=-i.containerHeight:l=-30;break;case 32:o.shiftKey?l=i.containerHeight:l=-i.containerHeight;break;case 33:l=i.containerHeight;break;case 34:l=-i.containerHeight;break;case 36:l=i.contentHeight;break;case 35:l=-i.contentHeight;break;default:return}i.settings.suppressScrollX&&a!==0||i.settings.suppressScrollY&&l!==0||(t.scrollTop-=l,t.scrollLeft+=a,Ce(i),n(a,l)&&o.preventDefault())}})}function ly(i){var t=i.element;function e(r,a){var l=Math.floor(t.scrollTop),c=t.scrollTop===0,h=l+t.offsetHeight===t.scrollHeight,d=t.scrollLeft===0,u=t.scrollLeft+t.offsetWidth===t.scrollWidth,f;return Math.abs(a)>Math.abs(r)?f=c||h:f=d||u,f?!i.settings.wheelPropagation:!0}function s(r){var a=r.deltaX,l=-1*r.deltaY;return(typeof a>"u"||typeof l>"u")&&(a=-1*r.wheelDeltaX/6,l=r.wheelDeltaY/6),r.deltaMode&&r.deltaMode===1&&(a*=10,l*=10),a!==a&&l!==l&&(a=0,l=r.wheelDelta),r.shiftKey?[-l,-a]:[a,l]}function n(r,a,l){if(!ss.isWebKit&&t.querySelector("select:focus"))return!0;if(!t.contains(r))return!1;for(var c=r;c&&c!==t;){if(c.classList.contains(at.element.consuming))return!0;var h=pe(c);if(l&&h.overflowY.match(/(scroll|auto)/)){var d=c.scrollHeight-c.clientHeight;if(d>0&&(c.scrollTop>0&&l<0||c.scrollTop0))return!0}if(a&&h.overflowX.match(/(scroll|auto)/)){var u=c.scrollWidth-c.clientWidth;if(u>0&&(c.scrollLeft>0&&a<0||c.scrollLeft0))return!0}c=c.parentNode}return!1}function o(r){var a=s(r),l=a[0],c=a[1];if(!n(r.target,l,c)){var h=!1;i.settings.useBothWheelAxes?i.scrollbarYActive&&!i.scrollbarXActive?(c?t.scrollTop-=c*i.settings.wheelSpeed:t.scrollTop+=l*i.settings.wheelSpeed,h=!0):i.scrollbarXActive&&!i.scrollbarYActive&&(l?t.scrollLeft+=l*i.settings.wheelSpeed:t.scrollLeft-=c*i.settings.wheelSpeed,h=!0):(t.scrollTop-=c*i.settings.wheelSpeed,t.scrollLeft+=l*i.settings.wheelSpeed),Ce(i),h=h||e(l,c),h&&!r.ctrlKey&&(r.stopPropagation(),r.preventDefault())}}typeof window.onwheel<"u"?i.event.bind(t,"wheel",o):typeof window.onmousewheel<"u"&&i.event.bind(t,"mousewheel",o)}function cy(i){if(!ss.supportsTouch&&!ss.supportsIePointer)return;var t=i.element;function e(p,_){var m=Math.floor(t.scrollTop),y=t.scrollLeft,x=Math.abs(p),E=Math.abs(_);if(E>x){if(_<0&&m===i.contentHeight-i.containerHeight||_>0&&m===0)return window.scrollY===0&&_>0&&ss.isChrome}else if(x>E&&(p<0&&y===i.contentWidth-i.containerWidth||p>0&&y===0))return!0;return!0}function s(p,_){t.scrollTop-=_,t.scrollLeft-=p,Ce(i)}var n={},o=0,r={},a=null;function l(p){return p.targetTouches?p.targetTouches[0]:p}function c(p){return p.pointerType&&p.pointerType==="pen"&&p.buttons===0?!1:!!(p.targetTouches&&p.targetTouches.length===1||p.pointerType&&p.pointerType!=="mouse"&&p.pointerType!==p.MSPOINTER_TYPE_MOUSE)}function h(p){if(c(p)){var _=l(p);n.pageX=_.pageX,n.pageY=_.pageY,o=new Date().getTime(),a!==null&&clearInterval(a)}}function d(p,_,m){if(!t.contains(p))return!1;for(var y=p;y&&y!==t;){if(y.classList.contains(at.element.consuming))return!0;var x=pe(y);if(m&&x.overflowY.match(/(scroll|auto)/)){var E=y.scrollHeight-y.clientHeight;if(E>0&&(y.scrollTop>0&&m<0||y.scrollTop0))return!0}if(_&&x.overflowX.match(/(scroll|auto)/)){var C=y.scrollWidth-y.clientWidth;if(C>0&&(y.scrollLeft>0&&_<0||y.scrollLeft0))return!0}y=y.parentNode}return!1}function u(p){if(c(p)){var _=l(p),m={pageX:_.pageX,pageY:_.pageY},y=m.pageX-n.pageX,x=m.pageY-n.pageY;if(d(p.target,y,x))return;s(y,x),n=m;var E=new Date().getTime(),C=E-o;C>0&&(r.x=y/C,r.y=x/C,o=E),e(y,x)&&p.preventDefault()}}function f(){i.settings.swipeEasing&&(clearInterval(a),a=setInterval(function(){if(i.isInitialized){clearInterval(a);return}if(!r.x&&!r.y){clearInterval(a);return}if(Math.abs(r.x)<.01&&Math.abs(r.y)<.01){clearInterval(a);return}if(!i.element){clearInterval(a);return}s(r.x*30,r.y*30),r.x*=.8,r.y*=.8},10))}ss.supportsTouch?(i.event.bind(t,"touchstart",h),i.event.bind(t,"touchmove",u),i.event.bind(t,"touchend",f)):ss.supportsIePointer&&(window.PointerEvent?(i.event.bind(t,"pointerdown",h),i.event.bind(t,"pointermove",u),i.event.bind(t,"pointerup",f)):window.MSPointerEvent&&(i.event.bind(t,"MSPointerDown",h),i.event.bind(t,"MSPointerMove",u),i.event.bind(t,"MSPointerUp",f)))}var hy=function(){return{handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1}},dy={"click-rail":oy,"drag-thumb":ry,keyboard:ay,wheel:ly,touch:cy},Hs=function(t,e){var s=this;if(e===void 0&&(e={}),typeof t=="string"&&(t=document.querySelector(t)),!t||!t.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");this.element=t,t.classList.add(at.main),this.settings=hy();for(var n in e)this.settings[n]=e[n];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var o=function(){return t.classList.add(at.state.focus)},r=function(){return t.classList.remove(at.state.focus)};this.isRtl=pe(t).direction==="rtl",this.isRtl===!0&&t.classList.add(at.rtl),this.isNegativeScroll=function(){var c=t.scrollLeft,h=null;return t.scrollLeft=-1,h=t.scrollLeft<0,t.scrollLeft=c,h}(),this.negativeScrollAdjustment=this.isNegativeScroll?t.scrollWidth-t.clientWidth:0,this.event=new is,this.ownerDocument=t.ownerDocument||document,this.scrollbarXRail=To(at.element.rail("x")),t.appendChild(this.scrollbarXRail),this.scrollbarX=To(at.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",o),this.event.bind(this.scrollbarX,"blur",r),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var a=pe(this.scrollbarXRail);this.scrollbarXBottom=parseInt(a.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=it(a.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=it(a.borderLeftWidth)+it(a.borderRightWidth),At(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=it(a.marginLeft)+it(a.marginRight),At(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=To(at.element.rail("y")),t.appendChild(this.scrollbarYRail),this.scrollbarY=To(at.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",o),this.event.bind(this.scrollbarY,"blur",r),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var l=pe(this.scrollbarYRail);this.scrollbarYRight=parseInt(l.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=it(l.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?sy(this.scrollbarY):null,this.railBorderYWidth=it(l.borderTopWidth)+it(l.borderBottomWidth),At(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=it(l.marginTop)+it(l.marginBottom),At(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:t.scrollLeft<=0?"start":t.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:t.scrollTop<=0?"start":t.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(c){return dy[c](s)}),this.lastScrollTop=Math.floor(t.scrollTop),this.lastScrollLeft=t.scrollLeft,this.event.bind(this.element,"scroll",function(c){return s.onScroll(c)}),Ce(this)};Hs.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,At(this.scrollbarXRail,{display:"block"}),At(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=it(pe(this.scrollbarXRail).marginLeft)+it(pe(this.scrollbarXRail).marginRight),this.railYMarginHeight=it(pe(this.scrollbarYRail).marginTop)+it(pe(this.scrollbarYRail).marginBottom),At(this.scrollbarXRail,{display:"none"}),At(this.scrollbarYRail,{display:"none"}),Ce(this),wo(this,"top",0,!1,!0),wo(this,"left",0,!1,!0),At(this.scrollbarXRail,{display:""}),At(this.scrollbarYRail,{display:""}))},Hs.prototype.onScroll=function(t){this.isAlive&&(Ce(this),wo(this,"top",this.element.scrollTop-this.lastScrollTop),wo(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},Hs.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),es(this.scrollbarX),es(this.scrollbarY),es(this.scrollbarXRail),es(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},Hs.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter(function(t){return!t.match(/^ps([-_].+|)$/)}).join(" ")};const uy={threshold:10,direction:"all"};class fy{constructor(t,e){this._element=t,this._startPosition=null,this._options={...uy,...e}}handleTouchStart(t){this._startPosition=this._getCoordinates(t)}handleTouchMove(t){if(!this._startPosition)return;const e=this._getCoordinates(t),s={x:e.x-this._startPosition.x,y:e.y-this._startPosition.y},n=this._getDirection(s);if(this._options.direction==="all"){if(n.y.valuen.x.value?n.y.direction:n.x.direction;b.trigger(this._element,`swipe${r}`),b.trigger(this._element,"swipe",{direction:r}),this._startPosition=null;return}const o=this._options.direction==="left"||this._options==="right"?"x":"y";n[o].direction===this._options.direction&&n[o].value>this._options.threshold&&(b.trigger(this._element,`swipe${n[o].direction}`),this._startPosition=null)}handleTouchEnd(){this._startPosition=null}_getCoordinates(t){const[e]=t.touches;return{x:e.clientX,y:e.clientY}}_getDirection(t){return{x:{direction:t.x<0?"left":"right",value:Math.abs(t.x)},y:{direction:t.y<0?"up":"down",value:Math.abs(t.y)}}}}class py{constructor(t,e="swipe",s={}){this._element=t,this._event=e,this.swipe=new fy(t,s),this._touchStartHandler=this._handleTouchStart.bind(this),this._touchMoveHandler=this._handleTouchMove.bind(this),this._touchEndHandler=this._handleTouchEnd.bind(this)}dispose(){this._element.removeEventListener("touchstart",this._touchStartHandler),this._element.removeEventListener("touchmove",this._touchMoveHandler),window.removeEventListener("touchend",this._touchEndHandler)}init(){this._element.addEventListener("touchstart",t=>this._handleTouchStart(t)),this._element.addEventListener("touchmove",t=>this._handleTouchMove(t)),window.addEventListener("touchend",t=>this._handleTouchEnd(t))}_handleTouchStart(t){this[this._event].handleTouchStart(t)}_handleTouchMove(t){this[this._event].handleTouchMove(t)}_handleTouchEnd(t){this[this._event].handleTouchEnd(t)}}const _y="group/ps overflow-hidden [overflow-anchor:none] [overflow-style:none] touch-none",gy="group/x absolute bottom-0 !top-auto h-[15px] hidden opacity-0 [transition:background-color_.2s_linear,_opacity_.2s_linear] motion-reduce:transition-none group-[&.ps--active-x]/ps:block group-[&.ps--active-x]/ps:bg-transparent group-hover/ps:opacity-60 group-focus/ps:opacity-60 group-[&.ps--scrolling-x]/ps:opacity-60 hover:!opacity-90 hover:bg-[#eee] focus:!opacity-90 focus:bg-[#eee] [&.ps--clicking]:!opacity-90 [&.ps--clicking]:bg-[#eee] outline-none",my="absolute bottom-[2px] rounded-md h-1.5 opacity-0 group-hover/ps:opacity-100 group-focus/ps:opacity-100 group-active/ps:opacity-100 bg-[#aaa] [transition:background-color_.2s_linear,_height_.2s_ease-in-out] group-hover/x:bg-[#999] group-hover/x:h-[11px] group-focus/x:bg-[#999] group-focus/x:h-[11px] group-[&.ps--clicking]/x:bg-[#999] group-[&.ps--clicking]/x:h-[11px] outline-none",by="group/y absolute right-0 !left-auto w-[15px] hidden opacity-0 [transition:background-color_.2s_linear,_opacity_.2s_linear] motion-reduce:transition-none group-[&.ps--active-y]/ps:block group-[&.ps--active-y]/ps:bg-transparent group-hover/ps:opacity-60 group-focus/ps:opacity-60 group-[&.ps--scrolling-y]/ps:opacity-60 hover:!opacity-90 hover:bg-[#eee] focus:!opacity-90 focus:bg-[#eee] [&.ps--clicking]:!opacity-90 [&.ps--clicking]:bg-[#eee] outline-none",vy="absolute right-[2px] rounded-md w-1.5 opacity-0 group-hover/ps:opacity-100 group-focus/ps:opacity-100 group-active/ps:opacity-100 bg-[#aaa] [transition:background-color_.2s_linear,_width_.2s_ease-in-out] group-hover/y:bg-[#999] group-hover/y:w-[11px] group-focus/y:bg-[#999] group-focus/y:w-[11px] group-[&.ps--clicking]/y:bg-[#999] group-[&.ps--clicking]/y:w-[11px] outline-none",yy=(i=document)=>{[{ps:"ps__rail-x",te:gy},{ps:"ps__rail-y",te:by},{ps:"ps__thumb-x",te:my},{ps:"ps__thumb-y",te:vy}].forEach(e=>{v.addClass(g.findOne(`.${e.ps}`,i),e.te),v.removeClass(g.findOne(`.${e.ps}`,i),e.ps)}),v.addClass(i,_y),v.removeClass(i,"ps")},pd="sidenav",ko="te.sidenav",xy="data-te-sidenav-rotate-icon-ref",wa="[data-te-sidenav-toggle-ref]",Ey="[data-te-collapse-init]",Cy='[data-te-sidenav-slim="true"]',Ty='[data-te-sidenav-slim="false"]',Ay="[data-te-sidenav-menu-ref]",ns="[data-te-sidenav-collapse-ref]",Fs="[data-te-sidenav-link-ref]",wy=st()?100:-100,ky=st()?-100:100,Sy={sidenavAccordion:"(boolean)",sidenavBackdrop:"(boolean)",sidenavBackdropClass:"(null|string)",sidenavCloseOnEsc:"(boolean)",sidenavColor:"(string)",sidenavContent:"(null|string)",sidenavExpandable:"(boolean)",sidenavExpandOnHover:"(boolean)",sidenavFocusTrap:"(boolean)",sidenavHidden:"(boolean)",sidenavMode:"(string)",sidenavModeBreakpointOver:"(null|string|number)",sidenavModeBreakpointSide:"(null|string|number)",sidenavModeBreakpointPush:"(null|string|number)",sidenavBreakpointSm:"(number)",sidenavBreakpointMd:"(number)",sidenavBreakpointLg:"(number)",sidenavBreakpointXl:"(number)",sidenavBreakpoint2xl:"(number)",sidenavScrollContainer:"(null|string)",sidenavSlim:"(boolean)",sidenavSlimCollapsed:"(boolean)",sidenavSlimWidth:"(number)",sidenavPosition:"(string)",sidenavRight:"(boolean)",sidenavTransitionDuration:"(number)",sidenavWidth:"(number)"},Oy={sidenavAccordion:!1,sidenavBackdrop:!0,sidenavBackdropClass:null,sidenavCloseOnEsc:!0,sidenavColor:"primary",sidenavContent:null,sidenavExpandable:!0,sidenavExpandOnHover:!1,sidenavFocusTrap:!0,sidenavHidden:!0,sidenavMode:"over",sidenavModeBreakpointOver:null,sidenavModeBreakpointSide:null,sidenavModeBreakpointPush:null,sidenavBreakpointSm:640,sidenavBreakpointMd:768,sidenavBreakpointLg:1024,sidenavBreakpointXl:1280,sidenavBreakpoint2xl:1536,sidenavScrollContainer:null,sidenavSlim:!1,sidenavSlimCollapsed:!1,sidenavSlimWidth:77,sidenavPosition:"fixed",sidenavRight:!1,sidenavTransitionDuration:300,sidenavWidth:240};class bi{constructor(t,e={}){Ee(this,"_addBackdropOnInit",()=>{this._options.sidenavHidden||(this._backdrop.show(),b.off(this._element,"transitionend",this._addBackdropOnInit))});this._element=t,this._options=e,this._ID=se(""),this._content=null,this._initialContentStyle=null,this._slimCollapsed=!1,this._activeNode=null,this._tempSlim=!1,this._backdrop=this._initializeBackDrop(),this._focusTrap=null,this._perfectScrollbar=null,this._touch=null,this._setModeFromBreakpoints(),this.escHandler=s=>{s.keyCode===ro&&this.toggler&&ne(this.toggler)&&(this._update(!1),b.off(window,"keydown",this.escHandler))},this.hashHandler=()=>{this._setActiveElements()},t&&(P.setData(t,ko,this),this._setup()),this.options.sidenavBackdrop&&!this.options.sidenavHidden&&this.options.sidenavMode==="over"&&b.on(this._element,"transitionend",this._addBackdropOnInit),this._didInit=!1,this._init()}static get NAME(){return pd}get container(){if(this.options.sidenavPosition==="fixed")return g.findOne("body");const t=e=>!e.parentNode||e.parentNode===document?e:e.parentNode.style.position==="relative"||e.parentNode.classList.contains("relative")?e.parentNode:t(e.parentNode);return t(this._element)}get isVisible(){let t=0,e=window.innerWidth;if(this.options.sidenavPosition!=="fixed"){const n=this.container.getBoundingClientRect();t=n.x,e=n.x+n.width}const{x:s}=this._element.getBoundingClientRect();return this.options.sidenavRight?Math.abs(s-e)>10:Math.abs(s-t)<10}get links(){return g.find(Fs,this._element)}get navigation(){return g.find(Ay,this._element)}get options(){const t={...Oy,...v.getDataAttributes(this._element),...this._options};return W(pd,t,Sy),t}get sidenavStyle(){return{width:`${this.width}px`,height:this.options.sidenavPosition==="fixed"?"100vh":"100%",position:this.options.sidenavPosition,transition:`all ${this.transitionDuration} linear`}}get toggler(){return g.find(wa).find(e=>{const s=v.getDataAttribute(e,"target");return g.findOne(s)===this._element})}get transitionDuration(){return`${this.options.sidenavTransitionDuration/1e3}s`}get translation(){return this.options.sidenavRight?ky:wy}get width(){return this._slimCollapsed?this.options.sidenavSlimWidth:this.options.sidenavWidth}get isBackdropVisible(){return!!this._backdrop._element}changeMode(t){this._setMode(t)}dispose(){b.off(window,"keydown",this.escHandler),this.options.sidenavBackdrop&&this._backdrop.dispose(),b.off(window,"hashchange",this.hashHandler),this._touch.dispose(),P.removeData(this._element,ko),this._element=null}hide(){this._emitEvents(!1),this._update(!1),this._options.sidenavBackdrop&&this.isBackdropVisible&&this._backdrop.hide()}show(){this._emitEvents(!0),this._update(!0),this._options.sidenavBackdrop&&this._options.sidenavMode==="over"&&this._backdrop.show()}toggle(){this._emitEvents(!this.isVisible),this._update(!this.isVisible)}toggleSlim(){this._setSlim(!this._slimCollapsed)}update(t){this._options=t,this._setup()}getBreakpoint(t){return this._transformBreakpointValuesToObject()[t]}_init(){this._didInit||(b.on(document,"click",wa,bi.toggleSidenav()),this._didInit=!0)}_transformBreakpointValuesToObject(){return{sm:this.options.sidenavBreakpointSm,md:this.options.sidenavBreakpointMd,lg:this.options.sidenavBreakpointLg,xl:this.options.sidenavBreakpointXl,"2xl":this.options.sidenavBreakpoint2xl}}_setModeFromBreakpoints(){const t=window.innerWidth,e=this._transformBreakpointValuesToObject();if(t===void 0||!e)return;const s=typeof this.options.sidenavModeBreakpointOver=="number"?t-this.options.sidenavModeBreakpointOver:t-e[this.options.sidenavModeBreakpointOver],n=typeof this.options.sidenavModeBreakpointSide=="number"?t-this.options.sidenavModeBreakpointSide:t-e[this.options.sidenavModeBreakpointSide],o=typeof this.options.sidenavModeBreakpointPush=="number"?t-this.options.sidenavModeBreakpointPush:t-e[this.options.sidenavModeBreakpointPush],r=(l,c)=>l-c<0?-1:c-l<0?1:0,a=[s,n,o].filter(l=>l!=null&&l>=0).sort(r)[0];s>0&&s===a?(this._options.sidenavMode="over",this._options.sidenavHidden=!0):n>0&&n===a?this._options.sidenavMode="side":o>0&&o===a&&(this._options.sidenavMode="push")}_collapseItems(){this.navigation.forEach(t=>{g.find(ns,t).forEach(s=>{re.getInstance(s).hide()})})}_getOffsetValue(t,{index:e,property:s,offsets:n}){const o=this._getPxValue(this._initialContentStyle[e][n[s].property]),r=t?n[s].value:0;return o+r}_getProperty(...t){return t.map((e,s)=>s===0?e:e[0].toUpperCase().concat(e.slice(1))).join("")}_getPxValue(t){return t?parseFloat(t):0}_handleSwipe(t,e){e&&this._slimCollapsed&&this.options.sidenavSlim&&this.options.sidenavExpandable?this.toggleSlim():e||(this._slimCollapsed||!this.options.sidenavSlim||!this.options.sidenavExpandable?this.toggler&&ne(this.toggler)&&this.toggle():this.toggleSlim())}_isActive(t,e){return e?e===t:t.attributes.href?new URL(t,window.location.href).href===window.location.href:!1}_isAllToBeCollapsed(){return g.find(Ey,this._element).filter(s=>s.getAttribute("aria-expanded")==="true").length===0}_isAllCollapsed(){return g.find(ns,this._element).filter(t=>ne(t)).length===0}_initializeBackDrop(){if(!this.options.sidenavBackdrop)return;const t=this.options.sidenavBackdropClass?this.options.sidenavBackdropClass.split(" "):this.options.sidenavPosition?["opacity-50","transition-all","duration-300","ease-in-out",this.options.sidenavPosition,"top-0","left-0","z-50","bg-black/10","dark:bg-black-60","w-full","h-full",this._element.id]:null;return new Xr({isVisible:this.options.sidenavBackdrop,isAnimated:!0,rootElement:this._element.parentNode,backdropClasses:t,clickCallback:()=>this.hide()})}_updateBackdrop(t){if(this.options.sidenavMode==="over"){t?this._backdrop.show():this.isBackdropVisible&&this._backdrop.hide();return}this.isBackdropVisible&&this._backdrop.hide()}_setup(){this._setupTouch(),this.options.sidenavFocusTrap&&this._setupFocusTrap(),this._setupCollapse(),this.options.sidenavSlim&&this._setupSlim(),this._setupInitialStyling(),this._setupScrolling(),this.options.sidenavContent&&this._setupContent(),this._setupActiveState(),this._setupRippleEffect(),this.options.sidenavHidden||this._updateOffsets(!0,!0),this.options.sidenavMode==="over"&&this._setTabindex(!0)}_setupActiveState(){this._setActiveElements(),this.links.forEach(t=>{b.on(t,"click",()=>this._setActiveElements(t)),b.on(t,"keydown",e=>{e.keyCode===Pt&&this._setActiveElements(t)})}),b.on(window,"hashchange",this.hashHandler)}_setupCollapse(){this.navigation.forEach((t,e)=>{g.find(ns,t).forEach((n,o)=>this._setupCollapseList({list:n,index:o,menu:t,menuIndex:e}))})}_generateCollpaseID(t,e){return`sidenav-collapse-${this._ID}-${e}-${t}`}_setupCollapseList({list:t,index:e,menu:s,menuIndex:n}){const o=this._generateCollpaseID(e,n);t.setAttribute("id",o),t.setAttribute("data-te-collapse-item","");const[r]=g.prev(t,Fs);v.setDataAttribute(r,"collapse-init",""),r.setAttribute("href",`#${o}`),r.setAttribute("role","button");const a=re.getInstance(t)||new re(t,{toggle:!1,parent:this.options.sidenavAccordion?s:t});(t.dataset.teSidenavStateShow===""||t.dataset.teCollapseShow==="")&&this._rotateArrow(r,!1),b.on(r,"click",l=>{this._toggleCategory(l,a,t),this._tempSlim&&this._isAllToBeCollapsed()&&(this._setSlim(!0),this._tempSlim=!1),this.options.sidenavMode==="over"&&this._focusTrap&&this._focusTrap.update()}),b.on(t,"show.te.collapse",()=>this._rotateArrow(r,!1)),b.on(t,"hide.te.collapse",()=>this._rotateArrow(r,!0)),b.on(t,"shown.te.collapse",()=>{this.options.sidenavMode==="over"&&this._focusTrap&&this._focusTrap.update()}),b.on(t,"hidden.te.collapse",()=>{this._tempSlim&&this._isAllCollapsed()&&(this._setSlim(!0),this._tempSlim=!1),this.options.sidenavMode==="over"&&this._focusTrap&&this._focusTrap.update()})}_setupContent(){this._content=g.find(this.options.sidenavContent),this._content.forEach(t=>{const e=["!p","!m","!px","!pl","!pr","!mx","!ml","!mr","!-p","!-m","!-px","!-pl","!-pr","!-mx","!-ml","!-mr"];[...t.classList].filter(n=>e.findIndex(o=>n.includes(o))>=0).forEach(n=>t.classList.remove(n))}),this._initialContentStyle=this._content.map(t=>{const{paddingLeft:e,paddingRight:s,marginLeft:n,marginRight:o,transition:r}=window.getComputedStyle(t);return{paddingLeft:e,paddingRight:s,marginLeft:n,marginRight:o,transition:r}})}_setupFocusTrap(){this._focusTrap=new Cs(this._element,{event:"keydown",condition:t=>t.keyCode===Rs,onlyVisible:!0},this.toggler)}_setupInitialStyling(){this._setColor(),v.style(this._element,this.sidenavStyle)}_setupScrolling(){let t=this._element;if(this.options.sidenavScrollContainer){t=g.findOne(this.options.sidenavScrollContainer,this._element);const s=qp(t.parentNode.children).filter(n=>n!==t).reduce((n,o)=>n+o.clientHeight,0);v.style(t,{maxHeight:`calc(100% - ${s}px)`,position:"relative"})}this._perfectScrollbar=new Hs(t,{suppressScrollX:!0,handlers:["click-rail","drag-thumb","wheel","touch"]}),yy(t)}_setupSlim(){this._slimCollapsed=this.options.sidenavSlimCollapsed,this._toggleSlimDisplay(this._slimCollapsed),this.options.sidenavExpandOnHover&&(this._element.addEventListener("mouseenter",()=>{this._slimCollapsed&&this._setSlim(!1)}),this._element.addEventListener("mouseleave",()=>{this._slimCollapsed||this._setSlim(!0)}))}_setupRippleEffect(){this.links.forEach(t=>{let e=Ui.getInstance(t),s=this.options.sidenavColor;if(e&&e._options.sidenavColor!==this.options.sidenavColor)e.dispose();else if(e)return;(localStorage.theme==="dark"||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(s="white"),e=new Ui(t,{rippleColor:s})})}_setupTouch(){this._touch=new py(this._element,"swipe",{threshold:20}),this._touch.init(),b.on(this._element,"swipeleft",t=>this._handleSwipe(t,this.options.sidenavRight)),b.on(this._element,"swiperight",t=>this._handleSwipe(t,!this.options.sidenavRight))}_setActive(t,e){t.setAttribute("data-te-sidebar-state-active",""),this._activeNode&&t.removeAttribute("data-te-sidebar-state-active"),this._activeNode=t;const[s]=g.parents(this._activeNode,ns);if(!s){this._setActiveCategory();return}const[n]=g.prev(s,Fs);this._setActiveCategory(n),!e&&!this._slimCollapsed&&re.getInstance(s).show()}_setActiveCategory(t){this.navigation.forEach(e=>{g.find(ns,e).forEach(n=>{const[o]=g.prev(n,Fs);o!==t?o.removeAttribute("data-te-sidenav-state-active"):o.setAttribute("data-te-sidenav-state-active","")})})}_setActiveElements(t){this.navigation.forEach(e=>{g.find(Fs,e).filter(n=>g.next(n,ns).length===0).forEach(n=>{this._isActive(n,t)&&n!==this._activeNode&&this._setActive(n,t)})}),t&&this._updateFocus(this.isVisible)}_setColor(){const t=["primary","secondary","success","info","warning","danger","light","dark"],{sidenavColor:e}=this.options,s=t.includes(e)?e:"primary";t.forEach(n=>{this._element.classList.remove(`sidenav-${n}`)}),v.addClass(this._element,`sidenav-${s}`)}_setContentOffsets(t,e,s){this._content.forEach((n,o)=>{const r=this._getOffsetValue(t,{index:o,property:"padding",offsets:e}),a=this._getOffsetValue(t,{index:o,property:"margin",offsets:e}),l={};if(s||(l.transition=`all ${this.transitionDuration} linear`),l[e.padding.property]=`${r}px`,l[e.margin.property]=`${a}px`,v.style(n,l),!!t){if(s){v.style(n,{transition:this._initialContentStyle[o].transition});return}b.on(n,"transitionend",()=>{v.style(n,{transition:this._initialContentStyle[o].transition})})}})}_setMode(t){this.options.sidenavMode!==t&&(this._options.sidenavMode=t,this._update(this.isVisible))}_setSlim(t){const e=t?["collapse","collapsed"]:["expand","expanded"];this._triggerEvents(...e),t&&this._collapseItems(),this._slimCollapsed=t,this._toggleSlimDisplay(t),v.style(this._element,{width:`${this.width}px`}),this._updateOffsets(this.isVisible)}_setTabindex(t){this.links.forEach(e=>{e.tabIndex=t?0:-1})}_emitEvents(t){const e=t?["show","shown"]:["hide","hidden"];this._triggerEvents(...e)}_rotateArrow(t,e){const[s]=g.children(t,`[${xy}]`);s&&(e?v.removeClass(s,"rotate-180"):v.addClass(s,"rotate-180"))}_toggleCategory(t,e){t.preventDefault(),e.toggle(),this._slimCollapsed&&this.options.sidenavExpandable&&(this._tempSlim=!0,this._setSlim(!1))}_toggleSlimDisplay(t){const e=g.find(Cy,this._element),s=g.find(Ty,this._element),n=()=>{e.forEach(o=>{v.style(o,{display:this._slimCollapsed?"unset":"none"})}),s.forEach(o=>{v.style(o,{display:this._slimCollapsed?"none":"unset"})})};t?setTimeout(()=>n(),this.options.sidenavTransitionDuration):n()}async _triggerEvents(t,e){b.trigger(this._element,`${t}.te.sidenav`),e&&await setTimeout(()=>{b.trigger(this._element,`${e}.te.sidenav`)},this.options.sidenavTransitionDuration+5)}_update(t){this.toggler&&this._updateTogglerAria(t),this._updateDisplay(t),this.options.sidenavBackdrop&&this._updateBackdrop(t),this._updateOffsets(t),t&&this.options.sidenavCloseOnEsc&&this.options.sidenavMode!=="side"&&b.on(window,"keydown",this.escHandler),this.options.sidenavFocusTrap&&this._updateFocus(t)}_updateDisplay(t){const e=t?0:this.translation;v.style(this._element,{transform:`translateX(${e}%)`})}_updateFocus(t){if(this._setTabindex(t),this.options.sidenavMode==="over"&&this.options.sidenavFocusTrap){if(t){this._focusTrap.trap();return}this._focusTrap.disable()}this._focusTrap.disable()}_updateOffsets(t,e=!1){const[s,n]=this.options.sidenavRight?["right","left"]:["left","right"],o={property:this._getProperty("padding",s),value:this.options.sidenavMode==="over"?0:this.width},r={property:this._getProperty("margin",n),value:this.options.sidenavMode==="push"?-1*this.width:0};b.trigger(this._element,"update.te.sidenav",{margin:r,padding:o}),this._content&&(this._content.className="",this._setContentOffsets(t,{padding:o,margin:r},e))}_updateTogglerAria(t){this.toggler.setAttribute("aria-expanded",t)}static toggleSidenav(){return function(t){const e=g.closest(t.target,wa),s=v.getDataAttributes(e).target;g.find(s).forEach(n=>{(bi.getInstance(n)||new bi(n)).toggle()})}}static jQueryInterface(t,e){return this.each(function(){let s=P.getData(this,ko);const n=typeof t=="object"&&t;if(!(!s&&/dispose/.test(t))&&(s||(s=new bi(this,n)),typeof t=="string")){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}static getInstance(t){return P.getData(t,ko)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const ka="stepper",So="te.stepper",Oo=`.${So}`,Vs=`data-te-${ka}`,Ws="horizontal",_e="vertical",Dy={stepperType:"string",stepperLinear:"boolean",stepperNoEditable:"boolean",stepperActive:"string",stepperCompleted:"string",stepperInvalid:"string",stepperDisabled:"string",stepperVerticalBreakpoint:"number",stepperMobileBreakpoint:"number",stepperMobileBarBreakpoint:"number"},My={stepperType:Ws,stepperLinear:!1,stepperNoEditable:!1,stepperActive:"",stepperCompleted:"",stepperInvalid:"",stepperDisabled:"",stepperVerticalBreakpoint:0,stepperMobileBreakpoint:0,stepperMobileBarBreakpoint:4},_d=`mousedown${Oo}`,gd=`keydown${Oo}`,Iy=`keyup${Oo}`,md=`resize${Oo}`,ze=`[${Vs}-step-ref]`,yt=`[${Vs}-head-ref]`,bd=`[${Vs}-head-text-ref]`,Do=`[${Vs}-head-icon-ref]`,wt=`[${Vs}-content-ref]`;class vd{constructor(t,e){this._element=t,this._options=this._getConfig(e),this._elementHeight=0,this._steps=g.find(`${ze}`,this._element),this._currentView="",this._activeStepIndex=0,this._verticalStepperStyles=[],this._element&&(P.setData(t,So,this),this._init())}static get NAME(){return ka}get activeStep(){return this._steps[this._activeStepIndex]}get activeStepIndex(){return this._activeStepIndex}dispose(){this._steps.forEach(t=>{b.off(t,_d),b.off(t,gd)}),b.off(window,md),P.removeData(this._element,So),this._element=null}changeStep(t){this._toggleStep(t)}nextStep(){this._toggleStep(this._activeStepIndex+1)}previousStep(){this._toggleStep(this._activeStepIndex-1)}_init(){const t=g.find(`${ze}`,this._element)[this._activeStepIndex].setAttribute("data-te","active-step"),e=g.find(`${bd}`,this._element),s=g.find(`${Do}`,this._element);switch(t?(this._activeStepIndex=this._steps.indexOf(t),this._toggleStepClass(this._activeStepIndex,"add",this._options.stepperActive),e[this._activeStepIndex].classList.add("font-medium"),s[this._activeStepIndex].classList.add("!bg-primary-100"),s[this._activeStepIndex].classList.add("!text-primary-700")):(e[this._activeStepIndex].classList.add("font-medium"),s[this._activeStepIndex].classList.add("!bg-primary-100"),s[this._activeStepIndex].classList.add("!text-primary-700"),this._toggleStepClass(this._activeStepIndex,"add",this._options.stepperActive)),this._bindMouseDown(),this._bindKeysNavigation(),this._options.stepperType){case _e:this._toggleVertical();break;default:this._toggleHorizontal();break}(this._options.stepperVerticalBreakpoint||this._options.stepperMobileBreakpoint)&&this._toggleStepperView(),this._bindResize()}_getConfig(t){const e=v.getDataAttributes(this._element);return t={...My,...e,...t},W(ka,t,Dy),t}_bindMouseDown(){this._steps.forEach(t=>{const e=g.findOne(`${yt}`,t);b.on(e,_d,s=>{const n=g.parents(s.target,`${ze}`)[0],o=this._steps.indexOf(n);s.preventDefault(),this._toggleStep(o)})})}_bindResize(){b.on(window,md,()=>{this._currentView===_e&&this._setSingleStepHeight(this.activeStep),this._currentView===Ws&&this._setHeight(this.activeStep),(this._options.stepperVerticalBreakpoint||this._options.stepperMobileBreakpoint)&&this._toggleStepperView()})}_toggleStepperView(){const t=this._options.stepperVerticalBreakpointwindow.innerWidth,s=this._options.stepperMobileBreakpoint>window.innerWidth;t&&this._currentView!==Ws&&this._toggleHorizontal(),e&&!s&&this._currentView!==_e&&(this._steps.forEach(n=>{const o=g.findOne(`${wt}`,n);this._resetStepperHeight(),this._showElement(o)}),this._toggleVertical())}_toggleStep(t){this._activeStepIndex!==t&&(this._options.stepperNoEditable&&this._toggleDisabled(),this._showElement(g.findOne(`${wt}`,this._steps[t])),this._toggleActive(t),t>this._activeStepIndex&&this._toggleCompleted(this._activeStepIndex),this._currentView===Ws?this._animateHorizontalStep(t):(this._animateVerticalStep(t),this._setSingleStepHeight(this._steps[t])),this._toggleStepTabIndex(g.findOne(`${yt}`,this.activeStep),g.findOne(`${yt}`,this._steps[t])),this._activeStepIndex=t,this._steps[this._activeStepIndex].setAttribute("data-te","active-step"),this._steps.forEach((e,s)=>{e[this._activeStepIndex]!==s&&e.removeAttribute("data-te")}))}_resetStepperHeight(){this._element.style.height=""}_setStepsHeight(){this._steps.forEach(t=>{const e=g.findOne(`${wt}`,t),s=window.getComputedStyle(e);this._verticalStepperStyles.push({paddingTop:parseFloat(s.paddingTop),paddingBottom:parseFloat(s.paddingBottom)});const n=e.scrollHeight;e.style.height=`${n}px`})}_setSingleStepHeight(t){const e=g.findOne(`${wt}`,t),s=this.activeStep===t,n=this._steps.indexOf(t);let o;s?(e.style.height="",o=e.scrollHeight):o=e.scrollHeight+this._verticalStepperStyles[n].paddingTop+this._verticalStepperStyles[n].paddingBottom,e.style.height=`${o}px`}_toggleVertical(){this._currentView=_e,this._setStepsHeight(),this._hideInactiveSteps()}_toggleHorizontal(){this._currentView=Ws,this._setHeight(this.activeStep),this._hideInactiveSteps()}_toggleStepperClass(){g.findOne("[data-te-stepper-type]",this._element)!==null&&this._steps.forEach(e=>{g.findOne(`${wt}`,e).classList.remove("!my-0"),g.findOne(`${wt}`,e).classList.remove("!py-0"),g.findOne(`${wt}`,e).classList.remove("!h-0")})}_toggleStepClass(t,e,s){s&&this._steps[t].classList[e](s)}_bindKeysNavigation(){this._toggleStepTabIndex(!1,g.findOne(`${yt}`,this.activeStep)),this._steps.forEach(t=>{const e=g.findOne(`${yt}`,t);b.on(e,gd,s=>{const n=g.parents(s.currentTarget,`${ze}`)[0],o=g.next(n,`${ze}`)[0],r=g.prev(n,`${ze}`)[0],a=g.findOne(`${yt}`,n),l=g.findOne(`${yt}`,this.activeStep);let c=null,h=null;if(o&&(c=g.findOne(`${yt}`,o)),r&&(h=g.findOne(`${yt}`,r)),s.keyCode===Zi&&this._currentView!==_e&&(h?(this._toggleStepTabIndex(a,h),this._toggleOutlineStyles(a,h),h.focus()):c&&(this._toggleStepTabIndex(a,c),this._toggleOutlineStyles(a,c),c.focus())),s.keyCode===Qi&&this._currentView!==_e&&(c?(this._toggleStepTabIndex(a,c),this._toggleOutlineStyles(a,c),c.focus()):h&&(this._toggleStepTabIndex(a,h),this._toggleOutlineStyles(a,h),h.focus())),s.keyCode===ut&&this._currentView===_e&&(s.preventDefault(),c&&(this._toggleStepTabIndex(a,c),this._toggleOutlineStyles(a,c),c.focus())),s.keyCode===Tt&&this._currentView===_e&&(s.preventDefault(),h&&(this._toggleStepTabIndex(a,h),this._toggleOutlineStyles(a,h),h.focus())),s.keyCode===Ji){const d=g.findOne(`${yt}`,this._steps[0]);this._toggleStepTabIndex(a,d),this._toggleOutlineStyles(a,d),d.focus()}if(s.keyCode===ts){const d=this._steps[this._steps.length-1],u=g.findOne(`${yt}`,d);this._toggleStepTabIndex(a,u),this._toggleOutlineStyles(a,u),u.focus()}(s.keyCode===Pt||s.keyCode===oo)&&(s.preventDefault(),this.changeStep(this._steps.indexOf(n))),s.keyCode===Rs&&(this._toggleStepTabIndex(a,l),this._toggleOutlineStyles(a,!1),l.focus())}),b.on(e,Iy,s=>{const n=g.parents(s.currentTarget,`${ze}`)[0],o=g.findOne(`${yt}`,n),r=g.findOne(`${yt}`,this.activeStep);s.keyCode===Rs&&(this._toggleStepTabIndex(o,r),this._toggleOutlineStyles(!1,r),r.focus())})})}_toggleStepTabIndex(t,e){t&&t.setAttribute("tabIndex",-1),e&&e.setAttribute("tabIndex",0)}_toggleOutlineStyles(t,e){t&&(t.style.outline=""),e&&(e.style.outline="revert")}_toggleDisabled(){const t=g.find(`${yt}`,this._element),e=g.find(`${Do}`,this._element);t[this._activeStepIndex].classList.add("color-[#858585]"),t[this._activeStepIndex].classList.add("cursor-default"),e[this._activeStepIndex].classList.add("!bg-[#858585]"),this._toggleStepClass(this._activeStepIndex,"add",this._options.stepperDisabled)}_toggleActive(t){const e=g.find(`${bd}`,this._element),s=g.find(`${Do}`,this._element);e[t].classList.add("font-medium"),s[t].classList.add("!bg-primary-100"),s[t].classList.add("!text-primary-700"),s[t].classList.remove("!bg-success-100"),s[t].classList.remove("!text-success-700"),e[this._activeStepIndex].classList.remove("font-medium"),s[this._activeStepIndex].classList.remove("!bg-primary-100"),s[this._activeStepIndex].classList.remove("!text-primary-700"),this._toggleStepClass(t,"add",this._options.stepperActive),this._toggleStepClass(this._activeStepIndex,"remove",this._options.stepperActive)}_toggleCompleted(t){const e=g.find(`${Do}`,this._element);e[t].classList.add("!bg-success-100"),e[t].classList.add("!text-success-700"),e[t].classList.remove("!bg-danger-100"),e[t].classList.remove("!text-danger-700"),this._toggleStepClass(t,"add",this._options.stepperCompleted),this._toggleStepClass(t,"remove",this._options.stepperInvalid)}_hideInactiveSteps(){this._steps.forEach(t=>{t.getAttribute("data-te")||this._hideElement(g.findOne(`${wt}`,t))})}_setHeight(t){const e=g.findOne(`${wt}`,t),s=getComputedStyle(e),n=g.findOne(`${yt}`,t),o=getComputedStyle(n),r=e.offsetHeight+parseFloat(s.marginTop)+parseFloat(s.marginBottom),a=n.offsetHeight+parseFloat(o.marginTop)+parseFloat(o.marginBottom);this._element.style.height=`${a+r}px`}_hideElement(t){!g.parents(t,`${ze}`)[0].getAttribute("data-te")&&this._currentView!==_e||(t.classList.add("!my-0"),t.classList.add("!py-0"),t.classList.add("!h-0"))}_showElement(t){this._currentView===_e?(t.classList.remove("!my-0"),t.classList.remove("!py-0"),t.classList.remove("!h-0")):t.style.display="block"}_animateHorizontalStep(t){const e=t>this._activeStepIndex,s=g.findOne(`${wt}`,this._steps[t]),n=g.findOne(`${wt}`,this.activeStep);let o,r;this._steps.forEach((h,d)=>{const u=g.findOne(`${wt}`,h);d!==t&&d!==this._activeStepIndex&&this._hideElement(u)});const a="translate-x-[150%]",l="-translate-x-[150%]",c="translate-0";e?(r=l,o=c,s.classList.remove("translate-x-[150%]"),s.classList.remove("-translate-x-[150%]")):(r=a,o=c,s.classList.remove("-translate-x-[150%]"),s.classList.remove("translate-x-[150%]")),n.classList.add(r),s.classList.add(o),this._setHeight(this._steps[t])}_animateVerticalStep(t){const e=g.findOne(`${wt}`,this._steps[t]),s=g.findOne(`${wt}`,this.activeStep);this._hideElement(s),this._showElement(e)}static getInstance(t){return P.getData(t,So)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const yd="data-te-input-state-active",Mo="data-te-input-selected",xd="data-te-input-multiple-active",Ed="[data-te-form-check-input]";class Cd{constructor(t,e,s,n,o,r,a,l,c,h,d){this.id=t,this.nativeOption=e,this.multiple=s,this.value=n,this.label=o,this.selected=r,this.disabled=a,this.hidden=l,this.secondaryText=c,this.groupId=h,this.icon=d,this.node=null,this.active=!1}select(){this.multiple?this._selectMultiple():this._selectSingle()}_selectSingle(){this.selected||(this.node.setAttribute(Mo,""),this.node.setAttribute("aria-selected",!0),this.selected=!0,this.nativeOption&&(this.nativeOption.selected=!0))}_selectMultiple(){if(!this.selected){const t=g.findOne(Ed,this.node);t.checked=!0,this.node.setAttribute(Mo,""),this.node.setAttribute("aria-selected",!0),this.selected=!0,this.nativeOption&&(this.nativeOption.selected=!0)}}deselect(){this.multiple?this._deselectMultiple():this._deselectSingle()}_deselectSingle(){this.selected&&(this.node.removeAttribute(Mo),this.node.setAttribute("aria-selected",!1),this.selected=!1,this.nativeOption&&(this.nativeOption.selected=!1))}_deselectMultiple(){if(this.selected){const t=g.findOne(Ed,this.node);t.checked=!1,this.node.removeAttribute(Mo),this.node.setAttribute("aria-selected",!1),this.selected=!1,this.nativeOption&&(this.nativeOption.selected=!1)}}setNode(t){this.node=t}setActiveStyles(){if(!this.active){if(this.multiple){this.node.setAttribute(xd,"");return}this.active=!0,this.node.setAttribute(yd,"")}}removeActiveStyles(){this.active&&(this.active=!1,this.node.removeAttribute(yd)),this.multiple&&this.node.removeAttribute(xd)}}class Ly{constructor(t=!1){this._multiple=t,this._selections=[]}select(t){this._multiple?this._selections.push(t):this._selections=[t]}deselect(t){if(this._multiple){const e=this._selections.findIndex(s=>t===s);this._selections.splice(e,1)}else this._selections=[]}clear(){this._selections=[]}get selection(){return this._selections[0]}get selections(){return this._selections}get label(){return this._selections[0]&&this.selection.label}get labels(){return this._selections.map(t=>t.label).join(", ")}get value(){return this.selections[0]&&this.selection.value}get values(){return this._selections.map(t=>t.value)}}function Sa(i){return i.filter(t=>!t.disabled).every(t=>t.selected)}const Py="data-te-select-form-outline-ref",Ry="data-te-select-wrapper-ref",Ny="data-te-select-input-ref",$y="data-te-select-clear-btn-ref",By="data-te-select-dropdown-container-ref",Hy="data-te-select-dropdown-ref",Fy="data-te-select-options-wrapper-ref",Vy="data-te-select-options-list-ref",Wy="data-te-select-input-filter-ref",Td="data-te-select-option-ref",zy="data-te-select-option-all-ref",jy="data-te-select-option-text-ref",Yy="data-te-form-check-input",Ky="data-te-select-option-group-ref",Uy="data-te-select-option-group-label-ref",Ad="data-te-select-selected",Xy=` + + + +`,Gy=i=>{i.code==="Tab"||i.code==="Esc"||i.preventDefault()};function Io(i,t,e,s,n){t.selectSize==="default"&&v.addClass(i,e),t.selectSize==="sm"&&v.addClass(i,s),t.selectSize==="lg"&&v.addClass(i,n)}function qy(i,t,e,s){const n=document.createElement("div");n.setAttribute("id",i),n.setAttribute(Ry,"");const o=z("div");o.setAttribute(Py,""),v.addClass(o,s.formOutline);const r=z("input"),a=t.selectFilter?"combobox":"listbox",l=t.multiple?"true":"false",c=t.disabled?"true":"false";r.setAttribute(Ny,""),v.addClass(r,s.selectInput),Io(r,t,s.selectInputSizeDefault,s.selectInputSizeSm,s.selectInputSizeLg),t.selectFormWhite&&v.addClass(r,s.selectInputWhite),r.setAttribute("type","text"),r.setAttribute("role",a),r.setAttribute("aria-multiselectable",l),r.setAttribute("aria-disabled",c),r.setAttribute("aria-haspopup","true"),r.setAttribute("aria-expanded",!1),t.tabIndex&&r.setAttribute("tabIndex",t.tabIndex),t.disabled&&r.setAttribute("disabled",""),t.selectPlaceholder!==""&&r.setAttribute("placeholder",t.selectPlaceholder),t.selectValidation?(v.addStyle(r,{"pointer-events":"none","caret-color":"transparent"}),v.addStyle(o,{cursor:"pointer"})):r.setAttribute("readonly","true"),t.selectValidation&&(r.setAttribute("required","true"),r.setAttribute("aria-required","true"),r.addEventListener("keydown",Gy));const h=z("div");v.addClass(h,s.selectValidationValid);const d=document.createTextNode(`${t.selectValidFeedback}`);h.appendChild(d);const u=z("div");v.addClass(u,s.selectValidationInvalid);const f=document.createTextNode(`${t.selectInvalidFeedback}`);u.appendChild(f);const p=z("span");p.setAttribute($y,""),v.addClass(p,s.selectClearBtn),Io(p,t,s.selectClearBtnDefault,s.selectClearBtnSm,s.selectClearBtnLg),t.selectFormWhite&&v.addClass(p,s.selectClearBtnWhite);const _=document.createTextNode("✕");p.appendChild(_),p.setAttribute("tabindex","0");const m=z("span");return v.addClass(m,s.selectArrow),Io(m,t,s.selectArrowDefault,s.selectArrowSm,s.selectArrowLg),t.selectFormWhite&&v.addClass(m,s.selectArrowWhite),m.innerHTML=Xy,o.appendChild(r),e&&(v.addClass(e,s.selectLabel),Io(e,t,s.selectLabelSizeDefault,s.selectLabelSizeSm,s.selectLabelSizeLg),t.selectFormWhite&&v.addClass(e,s.selectLabelWhite),o.appendChild(e)),t.selectValidation&&(o.appendChild(h),o.appendChild(u)),t.selectClearButton&&o.appendChild(p),o.appendChild(m),n.appendChild(o),n}function wd(i,t,e,s,n,o,r,a){const l=document.createElement("div");l.setAttribute(By,""),v.addClass(l,a.selectDropdownContainer),l.setAttribute("id",`${i}`),l.style.width=`${e}px`;const c=document.createElement("div");c.setAttribute("tabindex",0),c.setAttribute(Hy,""),v.addClass(c,a.dropdown);const h=z("div");h.setAttribute(Fy,""),v.addClass(h,a.optionsWrapper),v.addClass(h,a.optionsWrapperScrollbar),h.style.maxHeight=`${s}px`;const d=kd(o,n,t,a);return h.appendChild(d),t.selectFilter&&c.appendChild(Zy(t.selectSearchPlaceholder,a)),c.appendChild(h),r&&c.appendChild(r),l.appendChild(c),l}function kd(i,t,e,s){const n=z("div");n.setAttribute(Vy,""),v.addClass(n,s.optionsList);let o;return e.multiple?o=Jy(i,t,e,s):o=Qy(i,e,s),o.forEach(r=>{n.appendChild(r)}),n}function Zy(i,t){const e=z("div");v.addClass(e,t.inputGroup);const s=z("input");return s.setAttribute(Wy,""),v.addClass(s,t.selectFilterInput),s.placeholder=i,s.setAttribute("role","searchbox"),s.setAttribute("type","text"),e.appendChild(s),e}function Qy(i,t,e){return Sd(i,t,e)}function Jy(i,t,e,s){let n=null;e.selectAll&&(n=tx(t,i,e,s));const o=Sd(i,e,s);return n?[n,...o]:o}function Sd(i,t,e){const s=[];return i.forEach(n=>{if(Object.prototype.hasOwnProperty.call(n,"options")){const r=nx(n,t,e);s.push(r)}else s.push(Od(n,t,e))}),s}function tx(i,t,e,s){const n=Sa(t),o=z("div");return o.setAttribute(Td,""),v.addClass(o,s.selectOption),o.setAttribute(zy,""),v.addStyle(o,{height:`${e.selectOptionHeight}px`}),o.setAttribute("role","option"),o.setAttribute("aria-selected",n),n&&o.setAttribute(Ad,""),o.appendChild(Dd(i,e,s)),i.setNode(o),o}function Od(i,t,e){if(i.node)return i.node;const s=z("div");return s.setAttribute(Td,""),v.addClass(s,e.selectOption),v.addStyle(s,{height:`${t.selectOptionHeight}px`}),v.setDataAttribute(s,"id",i.id),s.setAttribute("role","option"),s.setAttribute("aria-selected",i.selected),s.setAttribute("aria-disabled",i.disabled),i.selected&&s.setAttribute(Ad,""),i.disabled&&s.setAttribute("data-te-select-option-disabled",!0),i.hidden&&v.addClass(s,"hidden"),s.appendChild(Dd(i,t,e)),i.icon&&s.appendChild(sx(i,e)),i.setNode(s),s}function Dd(i,t,e){const s=z("span");s.setAttribute(jy,""),v.addClass(s,e.selectOptionText);const n=document.createTextNode(i.label);return t.multiple&&s.appendChild(ix(i,e)),s.appendChild(n),(i.secondaryText||typeof i.secondaryText=="number")&&s.appendChild(ex(i.secondaryText,e)),s}function ex(i,t){const e=z("span");v.addClass(e,t.selectOptionSecondaryText);const s=document.createTextNode(i);return e.appendChild(s),e}function ix(i,t){const e=z("input");e.setAttribute("type","checkbox"),v.addClass(e,t.formCheckInput),e.setAttribute(Yy,"");const s=z("label");return i.selected&&e.setAttribute("checked",!0),i.disabled&&e.setAttribute("disabled",!0),e.appendChild(s),e}function sx(i,t){const e=z("span"),s=z("img");return v.addClass(s,t.selectOptionIcon),s.src=i.icon,e.appendChild(s),e}function nx(i,t,e){const s=z("div");s.setAttribute(Ky,""),v.addClass(s,e.selectOptionGroup),s.setAttribute("role","group"),s.setAttribute("id",i.id),i.hidden&&v.addClass(s,"hidden");const n=z("label");return n.setAttribute(Uy,""),v.addClass(n,e.selectOptionGroupLabel),v.addStyle(n,{height:`${t.selectOptionHeight}px`}),n.setAttribute("for",i.id),n.textContent=i.label,s.appendChild(n),i.options.forEach(o=>{s.appendChild(Od(o,t,e))}),s}function ox(i,t){const e=z("div");return e.innerHTML=i,v.addClass(e,t.selectLabel),v.addClass(e,t.selectFakeValue),e}const Oa="select",zs="te.select",js=`.${zs}`,rx=`close${js}`,ax=`open${js}`,Md=`optionSelect${js}`,Id=`optionDeselect${js}`,lx=`valueChange${js}`,cx="change",Ld="data-te-select-init",Pd="data-te-select-no-results-ref",Rd="data-te-select-open",xt="data-te-input-state-active",je="data-te-input-focused",Da="data-te-input-disabled",hx="data-te-select-option-group-label-ref",dx="data-te-select-option-all-ref",Ys="data-te-select-selected",ux="[data-te-select-label-ref]",Nd="[data-te-select-input-ref]",fx="[data-te-select-input-filter-ref]",px="[data-te-select-dropdown-ref]",_x="[data-te-select-options-wrapper-ref]",$d="[data-te-select-options-list-ref]",gx="[data-te-select-option-ref]",mx="[data-te-select-clear-btn-ref]",bx="[data-te-select-custom-content-ref]",vx=`[${Pd}]`,Bd="[data-te-select-form-outline-ref]",yx="[data-te-select-toggle]",Ma="[data-te-input-notch-ref]",xx=200,Ex={selectAutoSelect:!1,selectContainer:"body",selectClearButton:!1,disabled:!1,selectDisplayedLabels:5,selectFormWhite:!1,multiple:!1,selectOptionsSelectedLabel:"options selected",selectOptionHeight:38,selectAll:!0,selectAllLabel:"Select all",selectSearchPlaceholder:"Search...",selectSize:"default",selectVisibleOptions:5,selectFilter:!1,selectFilterDebounce:300,selectNoResultText:"No results",selectValidation:!1,selectValidFeedback:"Valid",selectInvalidFeedback:"Invalid",selectPlaceholder:""},Cx={selectAutoSelect:"boolean",selectContainer:"string",selectClearButton:"boolean",disabled:"boolean",selectDisplayedLabels:"number",selectFormWhite:"boolean",multiple:"boolean",selectOptionsSelectedLabel:"string",selectOptionHeight:"number",selectAll:"boolean",selectAllLabel:"string",selectSearchPlaceholder:"string",selectSize:"string",selectVisibleOptions:"number",selectFilter:"boolean",selectFilterDebounce:"number",selectNoResultText:"string",selectValidation:"boolean",selectValidFeedback:"string",selectInvalidFeedback:"string",selectPlaceholder:"string"},Tx={dropdown:"relative outline-none min-w-[100px] m-0 scale-[0.8] opacity-0 bg-white shadow-[0_2px_5px_0_rgba(0,0,0,0.16),_0_2px_10px_0_rgba(0,0,0,0.12)] transition duration-200 motion-reduce:transition-none data-[te-select-open]:scale-100 data-[te-select-open]:opacity-100 dark:bg-zinc-700",formCheckInput:"relative float-left mt-[0.15rem] mr-[8px] h-[1.125rem] w-[1.125rem] appearance-none rounded-[0.25rem] border-[0.125rem] border-solid border-neutral-300 dark:border-neutral-600 outline-none before:pointer-events-none before:absolute before:h-[0.875rem] before:w-[0.875rem] before:scale-0 before:rounded-full before:bg-transparent before:opacity-0 before:shadow-[0px_0px_0px_13px_transparent] before:content-[''] checked:border-primary dark:checked:border-primary checked:bg-primary dark:checked:bg-primary checked:before:opacity-[0.16] checked:after:absolute checked:after:ml-[0.25rem] checked:after:-mt-px checked:after:block checked:after:h-[0.8125rem] checked:after:w-[0.375rem] checked:after:rotate-45 checked:after:border-[0.125rem] checked:after:border-t-0 checked:after:border-l-0 checked:after:border-solid checked:after:border-white checked:after:bg-transparent checked:after:content-[''] hover:cursor-pointer hover:before:opacity-[0.04] hover:before:shadow-[0px_0px_0px_13px_rgba(0,0,0,0.6)] focus:shadow-none focus:transition-[border-color_0.2s] focus:before:scale-100 focus:before:opacity-[0.12] focus:before:shadow-[0px_0px_0px_13px_rgba(0,0,0,0.6)] dark:focus:before:shadow-[0px_0px_0px_13px_rgba(255,255,255,0.4)] focus:before:transition-[box-shadow_0.2s,transform_0.2s] focus:after:absolute focus:after:z-[1] focus:after:block focus:after:h-[0.875rem] focus:after:w-[0.875rem] focus:after:rounded-[0.125rem] focus:after:content-[''] checked:focus:before:scale-100 checked:focus:before:shadow-[0px_0px_0px_13px_#3b71ca] dark:checked:focus:before:shadow-[0px_0px_0px_13px_#3b71ca] checked:focus:before:transition-[box-shadow_0.2s,transform_0.2s] checked:focus:after:ml-[0.25rem] checked:focus:after:-mt-px checked:focus:after:h-[0.8125rem] checked:focus:after:w-[0.375rem] checked:focus:after:rotate-45 checked:focus:after:rounded-none checked:focus:after:border-[0.125rem] checked:focus:after:border-t-0 checked:focus:after:border-l-0 checked:focus:after:border-solid checked:focus:after:border-white checked:focus:after:bg-transparent",formOutline:"relative",initialized:"hidden",inputGroup:"flex items-center whitespace-nowrap p-2.5 text-center text-base font-normal leading-[1.6] text-gray-700 dark:bg-zinc-800 dark:text-gray-200 dark:placeholder:text-gray-200",noResult:"flex items-center px-4",optionsList:"list-none m-0 p-0",optionsWrapper:"overflow-y-auto",optionsWrapperScrollbar:"[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar]:h-1 [&::-webkit-scrollbar-button]:block [&::-webkit-scrollbar-button]:h-0 [&::-webkit-scrollbar-button]:bg-transparent [&::-webkit-scrollbar-track-piece]:bg-transparent [&::-webkit-scrollbar-track-piece]:rounded-none [&::-webkit-scrollbar-track-piece]: [&::-webkit-scrollbar-track-piece]:rounded-l [&::-webkit-scrollbar-thumb]:h-[50px] [&::-webkit-scrollbar-thumb]:bg-[#999] [&::-webkit-scrollbar-thumb]:rounded",selectArrow:"absolute right-3 text-[0.8rem] cursor-pointer peer-focus:text-primary peer-data-[te-input-focused]:text-primary group-data-[te-was-validated]/validation:peer-valid:text-green-600 group-data-[te-was-validated]/validation:peer-invalid:text-[rgb(220,76,100)] w-5 h-5",selectArrowWhite:"text-gray-50 peer-focus:!text-white peer-data-[te-input-focused]:!text-white",selectArrowDefault:"top-2",selectArrowLg:"top-[13px]",selectArrowSm:"top-1",selectClearBtn:"absolute top-2 right-9 text-black cursor-pointer focus:text-primary outline-none dark:text-gray-200",selectClearBtnWhite:"!text-gray-50",selectClearBtnDefault:"top-2 text-base",selectClearBtnLg:"top-[11px] text-base",selectClearBtnSm:"top-1 text-[0.8rem]",selectDropdownContainer:"z-[1070]",selectFakeValue:"transform-none hidden data-[te-input-state-active]:block",selectFilterInput:"relative m-0 block w-full min-w-0 flex-auto rounded border border-solid border-gray-300 bg-transparent bg-clip-padding px-3 py-1.5 text-base font-normal text-gray-700 transition duration-300 ease-in-out motion-reduce:transition-none focus:border-primary focus:text-gray-700 focus:shadow-te-primary focus:outline-none dark:text-gray-200 dark:placeholder:text-gray-200",selectInput:"peer block min-h-[auto] w-full rounded border-0 bg-transparent outline-none transition-all duration-200 ease-linear focus:placeholder:opacity-100 data-[te-input-state-active]:placeholder:opacity-100 motion-reduce:transition-none dark:text-gray-200 dark:placeholder:text-gray-200 [&:not([data-te-input-placeholder-active])]:placeholder:opacity-0 cursor-pointer data-[te-input-disabled]:bg-[#e9ecef] data-[te-input-disabled]:cursor-default group-data-[te-was-validated]/validation:mb-4 dark:data-[te-input-disabled]:bg-zinc-600",selectInputWhite:"!text-gray-50",selectInputSizeDefault:"py-[0.32rem] px-3 leading-[1.6]",selectInputSizeLg:"py-[0.32rem] px-3 leading-[2.15]",selectInputSizeSm:"py-[0.33rem] px-3 text-xs leading-[1.5]",selectLabel:"pointer-events-none absolute top-0 left-3 mb-0 max-w-[90%] origin-[0_0] truncate text-gray-500 transition-all duration-200 ease-out peer-focus:scale-[0.8] peer-focus:text-primary peer-data-[te-input-state-active]:scale-[0.8] motion-reduce:transition-none dark:text-gray-200 dark:peer-focus:text-gray-200 data-[te-input-state-active]:scale-[0.8] dark:peer-focus:text-primary",selectLabelWhite:"!text-gray-50",selectLabelSizeDefault:"pt-[0.37rem] leading-[1.6] peer-focus:-translate-y-[0.9rem] peer-data-[te-input-state-active]:-translate-y-[0.9rem] data-[te-input-state-active]:-translate-y-[0.9rem]",selectLabelSizeLg:"pt-[0.37rem] leading-[2.15] peer-focus:-translate-y-[1.15rem] peer-data-[te-input-state-active]:-translate-y-[1.15rem] data-[te-input-state-active]:-translate-y-[1.15rem]",selectLabelSizeSm:"pt-[0.37rem] text-xs leading-[1.5] peer-focus:-translate-y-[0.75rem] peer-data-[te-input-state-active]:-translate-y-[0.75rem] data-[te-input-state-active]:-translate-y-[0.75rem]",selectOption:"flex flex-row items-center justify-between w-full px-4 truncate text-gray-700 bg-transparent select-none cursor-pointer data-[te-input-multiple-active]:bg-black/5 hover:[&:not([data-te-select-option-disabled])]:bg-black/5 data-[te-input-state-active]:bg-black/5 data-[te-select-option-selected]:data-[te-input-state-active]:bg-black/5 data-[te-select-selected]:data-[te-select-option-disabled]:cursor-default data-[te-select-selected]:data-[te-select-option-disabled]:text-gray-400 data-[te-select-selected]:data-[te-select-option-disabled]:bg-transparent data-[te-select-option-selected]:bg-black/[0.02] data-[te-select-option-disabled]:text-gray-400 data-[te-select-option-disabled]:cursor-default group-data-[te-select-option-group-ref]/opt:pl-7 dark:text-gray-200 dark:hover:[&:not([data-te-select-option-disabled])]:bg-white/30 dark:data-[te-input-state-active]:bg-white/30 dark:data-[te-select-option-selected]:data-[te-input-state-active]:bg-white/30 dark:data-[te-select-option-disabled]:text-gray-400 dark:data-[te-input-multiple-active]:bg-white/30",selectOptionGroup:"group/opt",selectOptionGroupLabel:"flex flex-row items-center w-full px-4 truncate bg-transparent text-black/50 select-none dark:text-gray-300",selectOptionIcon:"w-7 h-7 rounded-full",selectOptionSecondaryText:"block text-[0.8rem] text-gray-500 dark:text-gray-300",selectOptionText:"group",selectValidationValid:"hidden absolute -mt-3 w-auto text-sm text-green-600 cursor-pointer group-data-[te-was-validated]/validation:peer-valid:block",selectValidationInvalid:"hidden absolute -mt-3 w-auto text-sm text-[rgb(220,76,100)] cursor-pointer group-data-[te-was-validated]/validation:peer-invalid:block"},Ax={dropdown:"string",formCheckInput:"string",formOutline:"string",initialized:"string",inputGroup:"string",noResult:"string",optionsList:"string",optionsWrapper:"string",optionsWrapperScrollbar:"string",selectArrow:"string",selectArrowDefault:"string",selectArrowLg:"string",selectArrowSm:"string",selectClearBtn:"string",selectClearBtnDefault:"string",selectClearBtnLg:"string",selectClearBtnSm:"string",selectDropdownContainer:"string",selectFakeValue:"string",selectFilterInput:"string",selectInput:"string",selectInputSizeDefault:"string",selectInputSizeLg:"string",selectInputSizeSm:"string",selectLabel:"string",selectLabelSizeDefault:"string",selectLabelSizeLg:"string",selectLabelSizeSm:"string",selectOption:"string",selectOptionGroup:"string",selectOptionGroupLabel:"string",selectOptionIcon:"string",selectOptionSecondaryText:"string",selectOptionText:"string"};class Lo{constructor(t,e,s){this._element=t,this._config=this._getConfig(e),this._classes=this._getClasses(s),this._optionsToRender=this._getOptionsToRender(t),this._plainOptions=this._getPlainOptions(this._optionsToRender),this._filteredOptionsList=null,this._selectionModel=new Ly(this.multiple),this._activeOptionIndex=-1,this._activeOption=null,this._wrapperId=se("select-wrapper-"),this._dropdownContainerId=se("select-dropdown-container-"),this._selectAllId=se("select-all-"),this._debounceTimeoutId=null,this._dropdownHeight=this._config.selectOptionHeight*this._config.selectVisibleOptions,this._popper=null,this._input=null,this._label=g.next(this._element,ux)[0],this._notch=null,this._fakeValue=null,this._isFakeValueActive=!1,this._customContent=g.next(t,bx)[0],this._toggleButton=null,this._elementToggle=null,this._wrapper=null,this._inputEl=null,this._dropdownContainer=null,this._container=null,this._selectAllOption=null,this._init(),this._mutationObserver=null,this._isOpen=!1,this._addMutationObserver(),this._element&&P.setData(t,zs,this)}static get NAME(){return Oa}get filterInput(){return g.findOne(fx,this._dropdownContainer)}get dropdown(){return g.findOne(px,this._dropdownContainer)}get optionsList(){return g.findOne($d,this._dropdownContainer)}get optionsWrapper(){return g.findOne(_x,this._dropdownContainer)}get clearButton(){return g.findOne(mx,this._wrapper)}get options(){return this._filteredOptionsList?this._filteredOptionsList:this._plainOptions}get value(){return this.multiple?this._selectionModel.values:this._selectionModel.value}get multiple(){return this._config.multiple}get hasSelectAll(){return this.multiple&&this._config.selectAll}get hasSelection(){return this._selectionModel.selection||this._selectionModel.selections.length>0}_getConfig(t){const e=v.getDataAttributes(this._element);return t={...Ex,...e,...t},this._element.hasAttribute("multiple")&&(t.multiple=!0),this._element.hasAttribute("disabled")&&(t.disabled=!0),this._element.tabIndex&&(t.tabIndex=this._element.getAttribute("tabIndex")),W(Oa,t,Cx),t}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Tx,...e,...t},W(Oa,t,Ax),t}_getOptionsToRender(t){const e=[];return t.childNodes.forEach(n=>{if(n.nodeName==="OPTGROUP"){const o={id:se("group-"),label:n.label,disabled:n.hasAttribute("disabled"),hidden:n.hasAttribute("hidden"),options:[]};n.childNodes.forEach(a=>{a.nodeName==="OPTION"&&o.options.push(this._createOptionObject(a,o))}),e.push(o)}else n.nodeName==="OPTION"&&e.push(this._createOptionObject(n))}),e}_getPlainOptions(t){if(!g.findOne("optgroup",this._element))return t;const s=[];return t.forEach(n=>{Object.prototype.hasOwnProperty.call(n,"options")?n.options.forEach(r=>{s.push(r)}):s.push(n)}),s}_createOptionObject(t,e={}){const s=se("option-"),n=e.id?e.id:null,o=e.disabled?e.disabled:!1,r=t.selected||t.hasAttribute(Ys),a=t.hasAttribute("disabled")||o,l=t.hasAttribute("hidden")||e&&e.hidden,c=this.multiple,h=t.value,d=t.label,u=v.getDataAttribute(t,"selectSecondaryText"),f=v.getDataAttribute(t,"select-icon");return new Cd(s,t,c,h,d,r,a,l,u,n,f)}_getNavigationOptions(){const t=this.options.filter(e=>!e.hidden);return this.hasSelectAll?[this._selectAllOption,...t]:t}_init(){this._renderMaterialWrapper(),this._wrapper=g.findOne(`#${this._wrapperId}`),this._input=g.findOne(Nd,this._wrapper),this._config.disabled&&this._input.setAttribute(Da,"");const t=this._config.selectContainer;t==="body"?this._container=document.body:this._container=g.findOne(t),this._initOutlineInput(),this._setDefaultSelections(),this._updateInputValue(),this._appendFakeValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility(),this._bindComponentEvents(),this.hasSelectAll&&(this._selectAllOption=this._createSelectAllOption()),this._dropdownContainer=wd(this._dropdownContainerId,this._config,this._input.offsetWidth,this._dropdownHeight,this._selectAllOption,this._optionsToRender,this._customContent,this._classes),this._setFirstActiveOption(),this._listenToFocusChange()}_renderMaterialWrapper(){const t=qy(this._wrapperId,this._config,this._label,this._classes);this._element.parentNode.insertBefore(t,this._element),v.addClass(this._element,this._classes.initialized),t.appendChild(this._element)}_initOutlineInput(){const t=g.findOne(Bd,this._wrapper);new Z(t,{inputFormWhite:this._config.selectFormWhite}).init(),this._notch=g.findOne(Ma,this._wrapper)}_bindComponentEvents(){this._listenToComponentKeydown(),this._listenToWrapperClick(),this._listenToClearBtnClick(),this._listenToClearBtnKeydown()}_setDefaultSelections(){this.options.forEach(t=>{t.selected&&this._selectionModel.select(t)})}_listenToComponentKeydown(){b.on(this._wrapper,"keydown",this._handleKeydown.bind(this))}_handleKeydown(t){this._isOpen&&!this._config.selectFilter?this._handleOpenKeydown(t):this._handleClosedKeydown(t)}_handleOpenKeydown(t){const e=t.keyCode,s=e===ro||e===Tt&&t.altKey||e===Rs;if(e===Rs&&this._config.selectAutoSelect&&!this.multiple&&this._handleAutoSelection(this._activeOption),s){this.close(),this._input.focus();return}switch(e){case ut:this._setNextOptionActive(),this._scrollToOption(this._activeOption);break;case Tt:this._setPreviousOptionActive(),this._scrollToOption(this._activeOption);break;case Ji:this._setFirstOptionActive(),this._scrollToOption(this._activeOption);break;case ts:this._setLastOptionActive(),this._scrollToOption(this._activeOption);break;case Pt:t.preventDefault(),this._activeOption&&(this.hasSelectAll&&this._activeOptionIndex===0?this._handleSelectAll():this._handleSelection(this._activeOption));return;default:return}t.preventDefault()}_handleClosedKeydown(t){const e=t.keyCode;if(e===Pt&&t.preventDefault(),(e===Pt||e===ut&&t.altKey||e===ut&&this.multiple)&&this.open(),this.multiple)switch(e){case ut:this.open();break;case Tt:this.open();break;default:return}else switch(e){case ut:this._setNextOptionActive(),this._handleSelection(this._activeOption);break;case Tt:this._setPreviousOptionActive(),this._handleSelection(this._activeOption);break;case Ji:this._setFirstOptionActive(),this._handleSelection(this._activeOption);break;case ts:this._setLastOptionActive(),this._handleSelection(this._activeOption);break;default:return}t.preventDefault()}_scrollToOption(t){if(!t)return;let e;const s=this.options.filter(h=>!h.hidden);this.hasSelectAll?e=s.indexOf(t)+1:e=s.indexOf(t);const n=this._getNumberOfGroupsBeforeOption(e),o=e+n,r=this.optionsWrapper,a=r.offsetHeight,l=this._config.selectOptionHeight,c=r.scrollTop;if(e>-1){const h=o*l,d=h+l>c+a;h!r.hidden),s=this._optionsToRender.filter(r=>!r.hidden),n=this.hasSelectAll?t-1:t;let o=0;for(let r=0;r<=n;r++)e[r].groupId&&s[o]&&s[o].id&&e[r].groupId===s[o].id&&o++;return o}_setNextOptionActive(){let t=this._activeOptionIndex+1;const e=this._getNavigationOptions();if(e[t]){for(;e[t].disabled;)if(t+=1,!e[t])return;this._updateActiveOption(e[t],t)}}_setPreviousOptionActive(){let t=this._activeOptionIndex-1;const e=this._getNavigationOptions();if(e[t]){for(;e[t].disabled;)if(t-=1,!e[t])return;this._updateActiveOption(e[t],t)}}_setFirstOptionActive(){const e=this._getNavigationOptions();this._updateActiveOption(e[0],0)}_setLastOptionActive(){const t=this._getNavigationOptions(),e=t.length-1;this._updateActiveOption(t[e],e)}_updateActiveOption(t,e){const s=this._activeOption;s&&s.removeActiveStyles(),t.setActiveStyles(),this._activeOptionIndex=e,this._activeOption=t}_listenToWrapperClick(){b.on(this._wrapper,"click",()=>{this.toggle()})}_listenToClearBtnClick(){b.on(this.clearButton,"click",t=>{t.preventDefault(),t.stopPropagation(),this._handleClear()})}_listenToClearBtnKeydown(){b.on(this.clearButton,"keydown",t=>{t.keyCode===Pt&&(this._handleClear(),t.preventDefault(),t.stopPropagation())})}_handleClear(){if(this.multiple)this._selectionModel.clear(),this._deselectAllOptions(this.options),this.hasSelectAll&&this._updateSelectAllState();else{const t=this._selectionModel.selection;this._selectionModel.clear(),t.deselect()}this._updateInputValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility(),this._emitValueChangeEvent(null),this._emitNativeChangeEvent()}_listenToOptionsClick(){b.on(this.optionsWrapper,"click",t=>{if(t.target.hasAttribute(hx))return;const s=t.target.nodeName==="DIV"?t.target:g.closest(t.target,gx);if(s.hasAttribute(dx)){this._handleSelectAll();return}const o=s.dataset.teId,r=this.options.find(a=>a.id===o);r&&!r.disabled&&this._handleSelection(r)})}_handleSelectAll(){this._selectAllOption.selected?(this._deselectAllOptions(this.options),this._selectAllOption.deselect()):(this._selectAllOptions(this.options),this._selectAllOption.select()),this._updateInputValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility(),this._emitValueChangeEvent(this.value),this._emitNativeChangeEvent()}_selectAllOptions(t){t.forEach(e=>{!e.selected&&!e.disabled&&(this._selectionModel.select(e),e.select())})}_deselectAllOptions(t){t.forEach(e=>{e.selected&&!e.disabled&&(this._selectionModel.deselect(e),e.deselect())})}_handleSelection(t){this.multiple?(this._handleMultiSelection(t),this.hasSelectAll&&this._updateSelectAllState()):this._handleSingleSelection(t),this._updateInputValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility()}_handleAutoSelection(t){this._singleOptionSelect(t),this._updateInputValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility()}_handleSingleSelection(t){this._singleOptionSelect(t),this.close(),this._input.focus()}_singleOptionSelect(t){const e=this._selectionModel.selections[0];e&&e!==t&&(this._selectionModel.deselect(e),e.deselect(),e.node.setAttribute(Ys,!1),b.trigger(this._element,Id,{value:e.value})),(!e||e&&t!==e)&&(this._selectionModel.select(t),t.select(),t.node.setAttribute(Ys,!0),b.trigger(this._element,Md,{value:t.value}),this._emitValueChangeEvent(this.value),this._emitNativeChangeEvent())}_handleMultiSelection(t){t.selected?(this._selectionModel.deselect(t),t.deselect(),t.node.setAttribute(Ys,!1),b.trigger(this._element,Id,{value:t.value})):(this._selectionModel.select(t),t.select(),t.node.setAttribute(Ys,!0),b.trigger(this._element,Md,{value:t.value})),this._emitValueChangeEvent(this.value),this._emitNativeChangeEvent()}_emitValueChangeEvent(t){b.trigger(this._element,lx,{value:t})}_emitNativeChangeEvent(){b.trigger(this._element,cx)}_updateInputValue(){const t=this.multiple?this._selectionModel.labels:this._selectionModel.label;let e;this.multiple&&this._config.selectDisplayedLabels!==-1&&this._selectionModel.selections.length>this._config.selectDisplayedLabels?e=`${this._selectionModel.selections.length} ${this._config.selectOptionsSelectedLabel}`:e=t,!this.multiple&&!this._isSelectionValid(this._selectionModel.selection)?this._input.value="":this._isLabelEmpty(this._selectionModel.selection)?this._input.value=" ":e?this._input.value=e:this.multiple||!this._optionsToRender[0]?this._input.value="":this._input.value=this._optionsToRender[0].label}_isSelectionValid(t){return!(t&&(t.disabled||t.value===""))}_isLabelEmpty(t){return!!(t&&t.label==="")}_appendFakeValue(){if(!this._selectionModel.selection||this._selectionModel._multiple)return;const t=this._selectionModel.selection.label;this._fakeValue=ox(t,this._classes),g.findOne(Bd,this._wrapper).appendChild(this._fakeValue)}_updateLabelPosition(){const t=this._element.hasAttribute(Ld),e=this._input.value!=="";this._label&&(t&&(e||this._isOpen||this._isFakeValueActive)?(this._label.setAttribute(xt,""),this._notch.setAttribute(xt,"")):(this._label.removeAttribute(xt),this._notch.removeAttribute(xt,"")))}_updateLabelPositionWhileClosing(){this._label&&(this._input.value!==""||this._isFakeValueActive?(this._label.setAttribute(xt,""),this._notch.setAttribute(xt,"")):(this._label.removeAttribute(xt),this._notch.removeAttribute(xt)))}_updateFakeLabelPosition(){this._fakeValue&&(this._input.value===""&&this._fakeValue.innerHTML!==""?(this._isFakeValueActive=!0,this._fakeValue.setAttribute(xt,"")):(this._isFakeValueActive=!1,this._fakeValue.removeAttribute(xt)))}_updateClearButtonVisibility(){if(!this.clearButton)return;this._selectionModel.selection||this._selectionModel.selections.length>0?v.addStyle(this.clearButton,{display:"block"}):v.addStyle(this.clearButton,{display:"none"})}_updateSelectAllState(){const t=this._selectAllOption.selected,e=Sa(this.options);!e&&t?this._selectAllOption.deselect():e&&!t&&this._selectAllOption.select()}toggle(){this._isOpen?this.close():this.open()}open(){const t=this._config.disabled,e=b.trigger(this._element,ax);this._isOpen||t||e.defaultPrevented||(this._openDropdown(),this._updateDropdownWidth(),this._setFirstActiveOption(),this._scrollToOption(this._activeOption),this._config.selectFilter&&(setTimeout(()=>{this.filterInput.focus()},0),this._listenToSelectSearch(),this._listenToDropdownKeydown()),this._listenToOptionsClick(),this._listenToOutsideClick(),this._listenToWindowResize(),this._isOpen=!0,this._updateLabelPosition(),this._setInputActiveStyles())}_openDropdown(){this._popper=Fi(this._input,this._dropdownContainer,{placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,1]}}]}),this._container.appendChild(this._dropdownContainer),setTimeout(()=>{this.dropdown.setAttribute(Rd,"")},0)}_updateDropdownWidth(){const t=this._input.offsetWidth;v.addStyle(this._dropdownContainer,{width:`${t}px`})}_setFirstActiveOption(){const t=this._getNavigationOptions(),e=this._activeOption;e&&e.removeActiveStyles();const s=this.multiple?this._selectionModel.selections[0]:this._selectionModel.selection;s?(this._activeOption=s,s.setActiveStyles(),this._activeOptionIndex=t.findIndex(n=>n===s)):(this._activeOption=null,this._activeOptionIndex=-1)}_setInputActiveStyles(){this._input.setAttribute(je,""),g.findOne(Ma,this._wrapper).setAttribute(je,"")}_listenToWindowResize(){b.on(window,"resize",this._handleWindowResize.bind(this))}_handleWindowResize(){this._dropdownContainer&&this._updateDropdownWidth()}_listenToSelectSearch(){this.filterInput.addEventListener("input",t=>{const e=t.target.value,s=this._config.selectFilterDebounce;this._debounceFilter(e,s)})}_debounceFilter(t,e){this._debounceTimeoutId&&clearTimeout(this._debounceTimeoutId),this._debounceTimeoutId=setTimeout(()=>{this._filterOptions(t)},e)}_filterOptions(t){const e=[];this._optionsToRender.forEach(o=>{const r=Object.prototype.hasOwnProperty.call(o,"options"),a=!r&&o.label.toLowerCase().includes(t.toLowerCase()),l={};r&&(l.label=o.label,l.options=this._filter(t,o.options),l.options.length>0&&e.push(l)),a&&e.push(o)});const s=this._config.selectNoResultText!=="",n=e.length!==0;if(n)this._updateOptionsListTemplate(e),this._popper.forceUpdate(),this._filteredOptionsList=this._getPlainOptions(e),this.hasSelectAll&&this._updateSelectAllState(),this._setFirstActiveOption();else if(!n&&s){const o=this._getNoResultTemplate();this.optionsWrapper.innerHTML=o}}_updateOptionsListTemplate(t){const e=g.findOne($d,this._dropdownContainer)||g.findOne(vx,this._dropdownContainer),s=kd(t,this._selectAllOption,this._config,this._classes);this.optionsWrapper.removeChild(e),this.optionsWrapper.appendChild(s)}_getNoResultTemplate(){return`
${this._config.selectNoResultText}
`}_filter(t,e){const s=t.toLowerCase();return e.filter(n=>n.label.toLowerCase().includes(s))}_listenToDropdownKeydown(){b.on(this.dropdown,"keydown",this._handleOpenKeydown.bind(this))}_listenToOutsideClick(){this._outsideClick=this._handleOutSideClick.bind(this),b.on(document,"click",this._outsideClick)}_listenToFocusChange(t=!0){if(t===!1){b.remove(this._input,"focus",()=>this._notch.setAttribute(je,"")),b.remove(this._input,"blur",()=>this._notch.removeAttribute(je));return}b.on(this._input,"focus",()=>this._notch.setAttribute(je,"")),b.on(this._input,"blur",()=>this._notch.removeAttribute(je))}_handleOutSideClick(t){const e=this._wrapper&&this._wrapper.contains(t.target),s=t.target===this._dropdownContainer,n=this._dropdownContainer&&this._dropdownContainer.contains(t.target);let o;this._toggleButton||(this._elementToggle=g.find(yx)),this._elementToggle&&this._elementToggle.forEach(r=>{const a=v.getDataAttribute(r,"select-toggle");(a===this._element.id||this._element.classList.contains(a))&&(this._toggleButton=r,o=this._toggleButton.contains(t.target))}),!e&&!s&&!n&&!o&&this.close()}close(){const t=b.trigger(this._element,rx);!this._isOpen||t.defaultPrevented||(this._config.selectFilter&&this.hasSelectAll&&(this._resetFilterState(),this._updateOptionsListTemplate(this._optionsToRender),this._config.multiple&&this._updateSelectAllState()),this._removeDropdownEvents(),this.dropdown.removeAttribute(Rd),setTimeout(()=>{this._input.removeAttribute(je),this._input.blur(),g.findOne(Ma,this._wrapper).removeAttribute(je),this._label&&!this.hasSelection&&(this._label.removeAttribute(xt),this._notch.setAttribute(xt,""),this._input.removeAttribute(xt),this._notch.removeAttribute(xt)),this._updateLabelPositionWhileClosing()},0),setTimeout(()=>{this._container&&this._dropdownContainer.parentNode===this._container&&this._container.removeChild(this._dropdownContainer),this._popper.destroy(),this._isOpen=!1,b.off(this.dropdown,"transitionend")},xx))}_resetFilterState(){this.filterInput.value="",this._filteredOptionsList=null}_removeDropdownEvents(){b.off(document,"click",this._outsideClick),this._config.selectFilter&&b.off(this.dropdown,"keydown"),b.off(this.optionsWrapper,"click")}_addMutationObserver(){this._mutationObserver=new MutationObserver(()=>{this._wrapper&&(this._updateSelections(),this._updateDisabledState())}),this._observeMutationObserver()}_updateSelections(){this._optionsToRender=this._getOptionsToRender(this._element),this._plainOptions=this._getPlainOptions(this._optionsToRender),this._selectionModel.clear(),this._setDefaultSelections(),this._updateInputValue(),this._updateFakeLabelPosition(),this._updateLabelPosition(),this._updateClearButtonVisibility(),this.hasSelectAll&&this._updateSelectAllState();const t=this._config.filter&&this.filterInput&&this.filterInput.value;this._isOpen&&!t?(this._updateOptionsListTemplate(this._optionsToRender),this._setFirstActiveOption()):this._isOpen&&t?(this._filterOptions(this.filterInput.value),this._setFirstActiveOption()):this._dropdownContainer=wd(this._dropdownContainerId,this._config,this._input.offsetWidth,this._dropdownHeight,this._selectAllOption,this._optionsToRender,this._customContent,this._classes)}_updateDisabledState(){const t=g.findOne(Nd,this._wrapper);this._element.hasAttribute("disabled")?(this._config.disabled=!0,t.setAttribute("disabled",""),t.setAttribute(Da,"")):(this._config.disabled=!1,t.removeAttribute("disabled"),t.removeAttribute(Da))}_observeMutationObserver(){this._mutationObserver&&this._mutationObserver.observe(this._element,{attributes:!0,childList:!0,characterData:!0,subtree:!0})}_disconnectMutationObserver(){this.mutationObserver&&(this._mutationObserver.disconnect(),this._mutationObserver=null)}_createSelectAllOption(){const t=this._selectAllId,e=null,s=!0,n="select-all",o=this._config.selectAllLabel,r=Sa(this.options),a=!1,l=!1,c=null,h=null,d=null;return new Cd(t,e,s,n,o,r,a,l,c,h,d)}dispose(){this._removeComponentEvents(),this._destroyMaterialSelect(),this._listenToFocusChange(!1),P.removeData(this._element,zs)}_removeComponentEvents(){b.off(this.input,"click"),b.off(this.wrapper,this._handleKeydown.bind(this)),b.off(this.clearButton,"click"),b.off(this.clearButton,"keydown"),b.off(window,"resize",this._handleWindowResize.bind(this))}_destroyMaterialSelect(){this._isOpen&&this.close(),this._destroyMaterialTemplate()}_destroyMaterialTemplate(){const t=this._wrapper.parentNode,e=g.find("label",this._wrapper);t.appendChild(this._element),e.forEach(s=>{t.appendChild(s)}),e.forEach(s=>{s.removeAttribute(xt)}),v.removeClass(this._element,this._classes.initialized),this._element.removeActiveStyles(Ld),t.removeChild(this._wrapper)}setValue(t){this.options.filter(s=>s.selected).forEach(s=>s.nativeOption.selected=!1),Array.isArray(t)?t.forEach(s=>{this._selectByValue(s)}):this._selectByValue(t),this._updateSelections()}_selectByValue(t){const e=this.options.find(s=>s.value===t);return e?(e.nativeOption.selected=!0,!0):!1}static jQueryInterface(t,e){return this.each(function(){let s=P.getData(this,zs);const n=typeof t=="object"&&t;if(!(!s&&/dispose/.test(t))&&(s||(s=new Lo(this,n)),typeof t=="string")){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](e)}})}static getInstance(t){return P.getData(t,zs)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const wx=i=>{Nl(()=>{const t=Rl();if(t){const e=i.NAME,s=t.fn[e];t.fn[e]=i.jQueryInterface,t.fn[e].Constructor=i,t.fn[e].noConflict=()=>(t.fn[e]=s,i.jQueryInterface)}})},kx=(i,t)=>{b.on(document,`click.te.${i.NAME}`,t,function(e){e.preventDefault(),i.getOrCreateInstance(this).toggle()})},Sx=(i,t)=>{b.on(document,`click.te.${i.NAME}.data-api`,t,function(e){if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ei(this))return;i.getOrCreateInstance(this).show()})},Ox=(i,t)=>{b.on(document,`click.te.${i.NAME}.data-api`,t,function(e){const s=Ie(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ei(this))return;b.one(s,i.EVENT_HIDDEN,()=>{ne(this)&&this.focus()});const n=g.findOne(i.OPEN_SELECTOR);n&&n!==s&&i.getInstance(n).hide(),i.getOrCreateInstance(s).toggle(this)})},Dx=(i,t)=>{b.on(document,`click.te.${i.NAME}`,t,e=>{e.preventDefault();const s=e.target.closest(t);i.getOrCreateInstance(s).toggle()})},Mx=(i,t)=>{b.on(document,`click.te.${i.NAME}`,t,function(e){const s=Ie(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),b.one(s,i.EVENT_SHOW,r=>{r.defaultPrevented||b.one(s,i.EVENT_HIDDEN,()=>{ne(this)&&this.focus()})});const n=g.findOne(`[${i.OPEN_SELECTOR}="true"]`);n&&i.getInstance(n).hide(),i.getOrCreateInstance(s).toggle(this)})},Ix=(i,t)=>{b.one(document,"mousedown",t,i.autoInitial(new i))},Lx=(i,t)=>{b.on(document,`click.te.${i.NAME}.data-api`,t,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();const s=yr(this);g.find(s).forEach(o=>{i.getOrCreateInstance(o,{toggle:!1}).toggle()})})},Ye={plugins:{legend:{labels:{color:"rgb(102,102,102)"}}}},Po={line:{options:{...Ye,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.0)",borderColor:"rgb(59, 112, 202)",borderWidth:2,tension:0},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},datasets:{borderColor:"red"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!1,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},bar:{options:{...Ye,backgroundColor:"rgb(59, 112, 202)",borderWidth:0,responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!0,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},pie:{options:{...Ye,elements:{arc:{backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},doughnut:{options:{...Ye,elements:{arc:{backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},polarArea:{options:{...Ye,elements:{arc:{backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0}}},radar:{options:{...Ye,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.5)",borderColor:"rgb(59, 112, 202)",borderWidth:2},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},scatter:{options:{...Ye,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.5)",borderColor:"rgb(59, 112, 202)",borderWidth:2,tension:0},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},datasets:{borderColor:"red"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!1,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},bubble:{options:{...Ye,elements:{point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0},scales:{x:{grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}}},Ks={alert:{name:"Alert",selector:"[data-te-alert-init]",isToggler:!1},animation:{name:"Animate",selector:"[data-te-animation-init]",isToggler:!1},carousel:{name:"Carousel",selector:"[data-te-carousel-init]",isToggler:!1},chips:{name:"ChipsInput",selector:"[data-te-chips-init]",isToggler:!1},chip:{name:"Chip",selector:"[data-te-chip-init]",isToggler:!1},datepicker:{name:"Datepicker",selector:"[data-te-datepicker-init]",isToggler:!1},input:{name:"Input",selector:"[data-te-input-wrapper-init]",isToggler:!1},scrollspy:{name:"ScrollSpy",selector:"[data-te-spy='scroll']",isToggler:!1},select:{name:"Select",selector:"[data-te-select-init]",isToggler:!1},sidenav:{name:"Sidenav",selector:"[data-te-sidenav-init]",isToggler:!1},stepper:{name:"Stepper",selector:"[data-te-stepper-init]",isToggler:!1},timepicker:{name:"Timepicker",selector:"[data-te-timepicker-init]",isToggler:!1},toast:{name:"Toast",selector:"[data-te-toast-init]",isToggler:!1},chart:{name:"Chart",selector:"[data-te-chart]",isToggler:!1,advanced:(i,t)=>{const e=o=>o[0]==="{"&&o[o.length-1]==="}"||o[0]==="["&&o[o.length-1]==="]",s=o=>typeof o!="string"?o:e(o)?JSON.parse(o.replace(/'/g,'"')):o,n=o=>{const r={};return Object.keys(o).forEach(a=>{if(a.match(/dataset.*/)){const l=a.slice(7,8).toLowerCase().concat(a.slice(8));r[l]=s(o[a])}}),r};g.find(t).forEach(o=>{if(v.getDataAttribute(o,"chart")!=="bubble"&&v.getDataAttribute(o,"chart")!=="scatter"){const r=v.getDataAttributes(o),a={data:{datasets:[n(r)]}};return r.chart&&(a.type=r.chart),r.labels&&(a.data.labels=JSON.parse(r.labels.replace(/'/g,'"'))),new i(o,{...a,...Po[a.type]})}return null})}},button:{name:"Button",selector:"[data-te-toggle='button']",isToggler:!0,callback:Dx},collapse:{name:"Collapse",selector:"[data-te-collapse-init]",isToggler:!0,callback:Lx},dropdown:{name:"Dropdown",selector:"[data-te-dropdown-toggle-ref]",isToggler:!0,callback:kx},modal:{name:"Modal",selector:"[data-te-toggle='modal']",isToggler:!0,callback:Mx},ripple:{name:"Ripple",selector:"[data-te-ripple-init]",isToggler:!0,callback:Ix},offcanvas:{name:"Offcanvas",selector:"[data-te-offcanvas-toggle]",isToggler:!0,callback:Ox},tab:{name:"Tab",selector:"[data-te-toggle='tab'], [data-te-toggle='pill'], [data-te-toggle='list']",isToggler:!0,callback:Sx}},Px=i=>Ks[i.NAME]||null,Rx=i=>{if(!i||[].includes(i.NAME))return;[].push(i.NAME);const t=Px(i),e=(t==null?void 0:t.isToggler)||!1;if(wx(i),t!=null&&t.advanced){t==null||t.advanced(i,t==null?void 0:t.selector);return}if(e){t==null||t.callback(i,t==null?void 0:t.selector);return}g.find(t==null?void 0:t.selector).forEach(s=>{let n=i.getInstance(s);n||(n=new i(s))})},Nx=i=>{i.forEach(t=>Rx(t))},Ia=(i,t=!1)=>{const e=Object.keys(Ks).map(s=>{if(!!document.body.querySelector(Ks[s].selector)){const o=i[Ks[s].name];return!o&&![].includes(s)&&t&&console.warn(`Please import ${Ks[s].name} from "tw-elements" package and add it to a object parameter inside "initTE" function`),o}});Nx(e)},$x=({inputID:i,labelText:t},e)=>(Ia({Input:Z},!1),`
+ + + +
+
+
+
+
+
`),Bx=({text:i,iconSVG:t},e)=>`
+ ${i} + + ${t} + +
`,Ro="chip",Hx=`te.${Ro}`,Hd="data-te-chip-close",La=`[${Hd}]`,Fx="delete.te.chips",Vx="select.te.chip",Wx=' ',zx={text:"string",closeIcon:"boolean",img:"object",iconSVG:"string"},jx={text:"",closeIcon:!1,img:{path:"",alt:""},iconSVG:Wx},Yx={icon:"float-right pl-[8px] text-[16px] opacity-[.53] cursor-pointer fill-[#afafaf] hover:text-[#8b8b8b] transition-all duration-200 ease-in-out",chipElement:"flex justify-between items-center h-[32px] leading-loose py-[5px] px-[12px] mr-4 my-[5px] text-[13px] font-normal text-[#4f4f4f] cursor-pointer bg-[#eceff1] dark:text-white dark:bg-neutral-600 rounded-[16px] transition-[opacity] duration-300 ease-linear [word-wrap: break-word] shadow-none normal-case hover:!shadow-none active:bg-[#cacfd1] inline-block font-medium leading-normal text-[#4f4f4f] text-center no-underline align-middle cursor-pointer select-none border-[.125rem] border-solid border-transparent py-1.5 px-3 text-xs rounded",chipCloseIcon:"w-4 float-right pl-[8px] text-[16px] opacity-[.53] cursor-pointer fill-[#afafaf] hover:fill-[#8b8b8b] dark:fill-gray-400 dark:hover:fill-gray-100 transition-all duration-200 ease-in-out"},Kx={icon:"string",chipElement:"string",chipCloseIcon:"string"};class vi{constructor(t,e={},s){this._element=t,this._options=this._getConfig(e),this._classes=this._getClasses(s)}static get NAME(){return Ro}init(){this._appendCloseIcon(),this._handleDelete(),this._handleTextChip(),this._handleClickOnChip()}dispose(){this._element=null,this._options=null,b.off(this._element,"click")}appendChip(){const{text:t,closeIcon:e,iconSVG:s}=this._options;return Bx({text:t,closeIcon:e,iconSVG:s},this._classes)}_appendCloseIcon(t=this._element){if(!(g.find(La,this._element).length>0)&&this._options.closeIcon){const e=z("span");e.classList=this._classes.icon,e.setAttribute(Hd),e.innerHTML=this._options.iconSVG,t.insertAdjacentElement("beforeend",e)}}_handleClickOnChip(){b.on(this._element,"click",t=>{const{textContent:e}=t.target,s={};s.tag=e.trim(),b.trigger(Vx,{event:t,obj:s})})}_handleDelete(){g.find(La,this._element).length!==0&&b.on(this._element,"click",La,()=>{b.trigger(this._element,Fx),this._element.remove()})}_handleTextChip(){this._element.innerText===""&&(this._element.innerText=this._options.text)}_getConfig(t){const e={...jx,...v.getDataAttributes(this._element),...t};return W(Ro,e,zx),e}_getClasses(t){const e=v.getDataClassAttributes(this._element);return t={...Yx,...e,...t},W(Ro,t,Kx),t}static getInstance(t){return P.getData(t,Hx)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}}const Us="chips",Xs=`data-te-${Us}`,Fd=`te.${Us}`,Ux=`${Xs}-init`,Bt=`${Xs}-active`,Vd=`${Xs}-initial`,Wd=`${Xs}-placeholder`,Xx=`${Xs}-input-wrapper`,Pa="data-te-chip-init",zd="data-te-chip-close",jd="data-te-chip-text",Gx=`[${Bt}]`,Ra=`[${Pa}]`,qx=`${Ra}${Gx}`,Na=`[${zd}]`,Zx=`[${Xx}]`,Qx=`[${jd}]`,Jx=`[${Wd}]`,tE="data-te-input-notch-leading-ref",eE="data-te-input-notch-middle-ref",iE=`[${tE}]`,sE=`[${eE}]`,os="data-te-input-state-active",$a="[data-te-input-notch-ref]",nE="add.te.chips",oE="arrowDown.te.chips",rE="arrowLeft.te.chips",aE="arrowRight.te.chips",lE="arrowUp.te.chips",Yd="delete.te.chips",Kd="select.te.chips",cE={inputID:"string",parentSelector:"string",initialValues:"array",editable:"boolean",labelText:"string"},hE={inputID:se("chips-input-"),parentSelector:"",initialValues:[{tag:"init1"},{tag:"init2"}],editable:!1,labelText:"Example label"},dE={opacity:"opacity-0",inputWrapperPadding:"p-[5px]",transition:"transition-all duration-300 ease-[cubic-bezier(0.25,0.1,0.25,1)]",contentEditable:"outline-none !border-[3px] !border-solid !border-[#b2b3b4]",chipsInputWrapper:"relative flex items-center flex-wrap transition-all duration-300 ease-[cubic-bezier(0.25,0.1,0.25,1)]",chipsInput:"peer block min-h-[auto] w-[150px] rounded border-0 bg-transparent py-[0.32rem] px-3 leading-[1.6] outline-none transition-all duration-200 ease-linear focus:placeholder:opacity-100 data-[te-input-state-active]:placeholder:opacity-100 motion-reduce:transition-none dark:text-gray-200 dark:placeholder:text-gray-200 [&:not([data-te-input-placeholder-active])]:placeholder:opacity-0",chipsLabel:"pointer-events-none absolute top-0 left-3 mb-0 max-w-[90%] origin-[0_0] truncate pt-[0.37rem] leading-[1.6] text-gray-500 transition-all duration-200 ease-out peer-focus:-translate-y-[0.9rem] peer-focus:scale-[0.8] peer-focus:text-primary peer-data-[te-input-state-active]:-translate-y-[0.9rem] peer-data-[te-input-state-active]:scale-[0.8] motion-reduce:transition-none dark:text-gray-200 dark:peer-focus:text-gray-200",chipsNotchesWrapper:"group flex absolute left-0 top-0 w-full max-w-full h-full text-left pointer-events-none",chipsNotchesLeading:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none left-0 top-0 h-full w-2 border-r-0 rounded-l-[0.25rem] group-data-[te-input-focused]:border-r-0 group-data-[te-input-state-active]:border-r-0 border-gray-300 dark:border-gray-600 group-data-[te-input-focused]:shadow-[-1px_0_0_#3b71ca,_0_1px_0_0_#3b71ca,_0_-1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary",chipsNotchesMiddle:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow-0 shrink-0 basis-auto w-auto max-w-[calc(100%-1rem)] h-full border-r-0 border-l-0 group-data-[te-input-focused]:border-x-0 group-data-[te-input-state-active]:border-x-0 group-data-[te-input-focused]:border-t group-data-[te-input-state-active]:border-t group-data-[te-input-focused]:border-solid group-data-[te-input-state-active]:border-solid group-data-[te-input-focused]:border-t-transparent group-data-[te-input-state-active]:border-t-transparent border-gray-300 dark:border-gray-600 group-data-[te-input-focused]:shadow-[0_1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary",chipsNotchesTrailing:"pointer-events-none border border-solid box-border bg-transparent transition-all duration-200 ease-linear motion-reduce:transition-none grow h-full border-l-0 rounded-r-[0.25rem] group-data-[te-input-focused]:border-l-0 group-data-[te-input-state-active]:border-l-0 border-gray-300 dark:border-gray-600 group-data-[te-input-focused]:shadow-[1px_0_0_#3b71ca,_0_-1px_0_0_#3b71ca,_0_1px_0_0_#3b71ca] group-data-[te-input-focused]:border-primary"},uE={opacity:"string",inputWrapperPadding:"string",transition:"string",contentEditable:"string",chipsInputWrapper:"string",chipsInput:"string",chipsLabel:"string",chipsNotchesWrapper:"string",chipsNotchesLeading:"string",chipsNotchesMiddle:"string",chipsNotchesTrailing:"string"};class Ud extends vi{constructor(e,s={},n){super(e,s);Ee(this,"_handleBlurInput",({target:e})=>{e.value.length>0&&this._handleCreateChip(e,e.value),this.allChips.length>0?(e.setAttribute(Bt,""),this.input.setAttribute(os,""),g.findOne($a,this.input.parentNode).setAttribute(os,""),this.chipsInputWrapper.classList.add(...this._classes.inputWrapperPadding.split(" "))):(e.removeAttribute(Bt),this.input.removeAttribute(os),g.findOne($a,this.input.parentNode).removeAttribute(os),this.chipsInputWrapper.classList.remove(...this._classes.inputWrapperPadding.split(" "))),this.allChips.forEach(s=>s.removeAttribute(Bt))});this._element=e,this._label=null,this._labelWidth=0,this._labelMarginLeft=0,this._notchLeading=null,this._notchMiddle=null,this._element&&P.setData(e,Fd,this),this._options=this._getConfig(s),this._classes=this._getClasses(n),this.numberClicks=0,this.init()}static get NAME(){return Us}get activeChip(){return g.findOne(qx,this._element)}get input(){return g.findOne("input",this._element)}get allChips(){return g.find(Ra,this._element)}get chipsInputWrapper(){return g.findOne(Zx,this._element)}init(){this._setChipsClass(),this._appendInputToElement(Wd),this._handleInitialValue(),this._handleInputText(),this._handleKeyboard(),this._handleChipsOnSelect(),this._handleEditable(),this._handleChipsFocus(),this._handleClicksOnChips(),this._getLabelData(),this._getLabelWidth(),this._getNotchData(),this._applyNotch()}dispose(){this._element=null,this._options=null}_getNotchData(){this._notchMiddle=g.findOne(sE,this._element),this._notchLeading=g.findOne(iE,this._element)}_getLabelData(){this._label=g.findOne("label",this._element)}_getLabelWidth(){this._labelWidth=this._label.clientWidth*.8+8}_applyNotch(){this._notchMiddle.style.width=`${this._labelWidth}px`,this._notchLeading.style.width=`${this._labelMarginLeft+9}px`,this._label!==null&&(this._label.style.marginLeft=`${this._labelMarginLeft}px`)}_setChipsClass(){this._element.setAttribute(Ux,"")}_handleDeleteEvents(e){const[s]=this.allChips.slice(-1);if(this.activeChip===null)s.remove(),this._handleEvents(e,Yd);else{const n=this.allChips.findIndex(a=>a===this.activeChip),o=this._handleActiveChipAfterRemove(n),r=[];if(this.activeChip===null)return;this.activeChip.remove(),this._handleEvents(e,Yd),this.numberClicks=n,o.setAttribute(Bt,""),this.allChips.forEach(a=>{a.hasAttribute(Bt)&&(r.push(a),r.length>1&&this.allChips.forEach(l=>l.remove()))})}}_handleUpEvents(e){this.numberClicks+=1,this.numberClicks===this.allChips.length+1&&(this.numberClicks=0),this._handleRightKeyboardArrow(this.numberClicks),this._handleEvents(e,aE),this._handleEvents(e,lE)}_handleDownEvents(e){this.numberClicks-=1,this.numberClicks<=0&&(this.numberClicks=this.allChips.length),this._handleLeftKeyboardArrow(this.numberClicks),this._handleEvents(e,rE),this._handleEvents(e,oE)}_keyboardEvents(e){const{target:s,keyCode:n,ctrlKey:o}=e;s.value.length>0||this.allChips.length===0||(n===Lv||n===Pv?this._handleDeleteEvents(e):n===Qi||n===Tt?this._handleUpEvents(e):n===Zi||n===ut?this._handleDownEvents(e):n===65&&o&&this._handleAddActiveClass())}_handleKeyboard(){b.on(this.input,"keydown",e=>this._keyboardEvents(e))}_handleEditable(){const{editable:e}=this._options;e&&this.allChips.forEach(s=>{b.on(s,"dblclick",n=>{const o=g.findOne(Na,s);s.classList.add(...this._classes.contentEditable.split(" ")),s.contentEditable=!0,s.focus(),setTimeout(()=>{v.addStyle(o,{display:"none"})},200),o.classList.add(...this._classes.opacity.split(" ")),n.target.textContent,b.trigger(s,Kd,{event:n,allChips:this.allChips})}),b.on(document,"click",({target:n})=>{const o=g.findOne(Na,s),r=g.findOne(Qx,s),a=n===s,l=s&&s.contains(n);!a&&!l&&(s.contentEditable=!1,s.classList.remove(...this._classes.contentEditable.split(" ")),r.textContent!==""&&setTimeout(()=>{v.addStyle(o,{display:"block"}),o.classList.remove(...this._classes.opacity.split(" "))},160)),r.textContent===""&&(setTimeout(()=>{s.classList.add(...this._classes.opacity.split(" "))},200),setTimeout(()=>{s.remove()},300))})})}_handleRemoveActiveClass(){this.allChips.forEach(e=>e.removeAttribute(Bt))}_handleAddActiveClass(){this.allChips.forEach(e=>e.setAttribute(Bt,""))}_handleRightKeyboardArrow(e){this._handleRemoveActiveClass(),e===0&&(e=1),this._handleAddActiveClassWithKebyboard(e)}_handleLeftKeyboardArrow(e){this._handleRemoveActiveClass(),this._handleAddActiveClassWithKebyboard(e)}_handleActiveChipAfterRemove(e){const s=e===0?1:e-1;return this.allChips[s]}_handleClicksOnChips(){b.on(this._element,"click",()=>{this.allChips.length===0&&(this.chipsInputWrapper.classList.remove(...this._classes.inputWrapperPadding.split(" ")),this.input.removeAttribute(Bt))})}_handleTextContent(){const e=[];return this.allChips.forEach(s=>e.push({tag:s.textContent.trim()})),e}_handleEvents(e,s){const n=this._handleTextContent(),o=this.allChips.filter(r=>r.hasAttribute(Bt)&&r);b.trigger(this._element,s,{event:e,allChips:this.allChips,arrOfObjects:n,active:o,activeObj:{tag:o.length<=0?"":o[0].textContent.trim()}})}_handleChipsFocus(){b.on(this._element,"click",({target:{attributes:e}})=>{const s=[...e];s.includes(Pa)||s.includes(zd)||s.includes(jd)||this.input.focus()})}_handleInitialValue(){if(this._appendInputToElement(Vd),this._element.hasAttribute(Vd)){const{initialValues:e}=this._options;e.forEach(({tag:s})=>this._handleCreateChip(this.input,s)),g.findOne($a,this.input.parentNode).setAttribute(os,""),this.input.setAttribute(Bt,""),this.input.setAttribute(os,"")}this.allChips.length>0&&(this.chipsInputWrapper.classList.add(...this._classes.inputWrapperPadding.split(" ")),this.chipsInputWrapper.classList.add(...this._classes.transition.split(" ")))}_handleKeysInputToElement(e){const{keyCode:s,target:n}=e;if(n.hasAttribute(Pa)){const o=g.findOne(Na,n);s===Pt&&(n.contentEditable=!1,n.classList.remove(...this._classes.contentEditable.split(" ")),n.textContent!==""?setTimeout(()=>{v.addStyle(o,{display:"block"}),o.classList.remove(...this._classes.opacity.split(" "))},160):n.textContent===""&&(setTimeout(()=>{n.classList.add(...this._classes.opacity.split(" "))},200),setTimeout(()=>{n.remove()},300)));return}if(s===Pt){if(n.value==="")return;this._handleCreateChip(n,n.value),this._handleRemoveActiveClass(),this.numberClicks=this.allChips.length+1,this._handleEvents(e,nE)}this.allChips.length>0?(this.chipsInputWrapper.classList.add(...this._classes.inputWrapperPadding.split(" ")),this.chipsInputWrapper.classList.add(...this._classes.transition.split(" "))):this.chipsInputWrapper.classList.remove(...this._classes.inputWrapperPadding.split(" "))}_handleInputText(){const e=g.findOne(Jx,this._element);b.on(this._element,"keyup",e,s=>this._handleKeysInputToElement(s)),b.on(this.input,"blur",s=>this._handleBlurInput(s))}_appendInputToElement(e){if(!this._element.hasAttribute(e))return;const s=$x(this._options,this._classes);this._element.insertAdjacentHTML("beforeend",s)}_handleCreateChip(e,s){const n=z("div"),o=vi.getInstance(n),r=new vi(o,{text:s},this._classes);this._options.parentSelector!==""?document.querySelector(this._options.parentSelector).insertAdjacentHTML("beforeend",r.appendChip()):e.insertAdjacentHTML("beforebegin",r.appendChip()),e.value="",g.find(Ra).forEach(a=>{let l=vi.getInstance(a);return l||(l=new vi(a,{},this._classes)),l.init()}),this._handleEditable()}_handleChipsOnSelect(){this.allChips.forEach(e=>{b.on(this._element,"click",s=>{b.trigger(e,Kd,{event:s,allChips:this.allChips})})})}_handleAddActiveClassWithKebyboard(e){let s;this.allChips[e-1]===void 0?s=this.allChips[e-2]:s=this.allChips[e-1],s.setAttribute(Bt)}_getConfig(e){const s={...hE,...v.getDataAttributes(this._element),...e};return W(Us,s,cE),s}_getClasses(e){const s=v.getDataClassAttributes(this._element);return e={...dE,...s,...e},W(Us,e,uE),e}static getInstance(e){return P.getData(e,Fd)}static getOrCreateInstance(e,s={}){return this.getInstance(e)||new this(e,typeof s=="object"?s:null)}}var fE=function(t){return pE(t)&&!_E(t)};function pE(i){return!!i&&typeof i=="object"}function _E(i){var t=Object.prototype.toString.call(i);return t==="[object RegExp]"||t==="[object Date]"||bE(i)}var gE=typeof Symbol=="function"&&Symbol.for,mE=gE?Symbol.for("react.element"):60103;function bE(i){return i.$$typeof===mE}function vE(i){return Array.isArray(i)?[]:{}}function Gs(i,t){return t.clone!==!1&&t.isMergeableObject(i)?rs(vE(i),i,t):i}function yE(i,t,e){return i.concat(t).map(function(s){return Gs(s,e)})}function xE(i,t){if(!t.customMerge)return rs;var e=t.customMerge(i);return typeof e=="function"?e:rs}function EE(i){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(i).filter(function(t){return Object.propertyIsEnumerable.call(i,t)}):[]}function Xd(i){return Object.keys(i).concat(EE(i))}function Gd(i,t){try{return t in i}catch{return!1}}function CE(i,t){return Gd(i,t)&&!(Object.hasOwnProperty.call(i,t)&&Object.propertyIsEnumerable.call(i,t))}function TE(i,t,e){var s={};return e.isMergeableObject(i)&&Xd(i).forEach(function(n){s[n]=Gs(i[n],e)}),Xd(t).forEach(function(n){CE(i,n)||(Gd(i,n)&&e.isMergeableObject(t[n])?s[n]=xE(n,e)(i[n],t[n],e):s[n]=Gs(t[n],e))}),s}function rs(i,t,e){e=e||{},e.arrayMerge=e.arrayMerge||yE,e.isMergeableObject=e.isMergeableObject||fE,e.cloneUnlessOtherwiseSpecified=Gs;var s=Array.isArray(t),n=Array.isArray(i),o=s===n;return o?s?e.arrayMerge(i,t,e):TE(i,t,e):Gs(t,e)}rs.all=function(t,e){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(s,n){return rs(s,n,e)},{})};var AE=rs,Ba=AE;const qd="chart",No="te.chart",wE="chart",Zd=(i,t,e)=>{const s=(n,o,r)=>{const a=n.slice();return o.forEach((l,c)=>{typeof a[c]>"u"?a[c]=r.cloneUnlessOtherwiseSpecified(l,r):r.isMergeableObject(l)?a[c]=Ba(n[c],l,r):n.indexOf(l)===-1&&a.push(l)}),a};return Ba(e[t],i,{arrayMerge:s})},kE={darkTicksColor:"#fff",darkLabelColor:"#fff",darkGridLinesColor:"#555",darkmodeOff:"undefined",darkBgColor:"#262626",options:null},SE={darkTicksColor:"string",darkLabelColor:"string",darkGridLinesColor:"string",darkmodeOff:"(string|null)",darkBgColor:"string",options:"(object|null)"};let Qd=class Yp{constructor(t,e,s={},n={}){this._waitForCharts(t,e,s,n)}async _getChartjs(){const{Chart:t,ArcElement:e,LineElement:s,BarElement:n,PointElement:o,BarController:r,BubbleController:a,DoughnutController:l,LineController:c,PieController:h,PolarAreaController:d,RadarController:u,ScatterController:f,CategoryScale:p,LinearScale:_,LogarithmicScale:m,RadialLinearScale:y,TimeScale:x,TimeSeriesScale:E,Decimation:C,Filler:T,Legend:A,Title:w,Tooltip:S,SubTitle:k}=await Promise.resolve().then(()=>tk);return t.register(e,s,n,o,r,a,l,c,h,d,u,f,p,_,m,y,x,E,C,T,A,w,S,k),t}async _getChartDataLabels(){const{ChartDataLabels:t}=await Promise.resolve().then(()=>Ck);return t}async _waitForCharts(t,e,s={},n={}){this._Chartjs=await this._getChartjs(),this._ChartDataLabels=await this._getChartDataLabels(),this._element=t,this._data=e,this._options=s,this._type=e.type,this._canvas=null,this._chart=null,this._darkOptions=this._getDarkConfig(n),this._darkModeClassContainer=document.querySelector("html"),this._prevConfig=null,this._observer=null,this._element&&(P.setData(t,No,this),v.addClass(this._element,wE),this._chartConstructor()),this._darkOptions.darkmodeOff!==null&&(this._handleMode(this.systemColorMode),this._observer=new MutationObserver(this._observerCallback.bind(this)),this._observer.observe(this._darkModeClassContainer,{attributes:!0}))}static get NAME(){return qd}get systemColorMode(){return localStorage.theme||(this._darkModeClassContainer.classList.contains("dark")?"dark":"light")}dispose(){this._observer.disconnect(),P.removeData(this._element,No),this._element=null}update(t,e){t&&(this._data={...this._data,...t},this._chart.data=this._data),this._prevConfig=this._chart.options,this._options={...this._options,...e},this._chart.options=Ba(this._chart.options,this._options),this._chart.update()}_getDarkConfig(t){let e={};const s=v.getDataAttributes(this._element);Object.keys(s).forEach(c=>c.startsWith("dark")&&(e[c]=s[c])),e={...kE,...e};const n={y:{ticks:{color:e.darkTicksColor},grid:{color:e.darkGridLinesColor}},x:{ticks:{color:e.darkTicksColor},grid:{color:e.darkGridLinesColor}}},o={r:{ticks:{color:e.darkTicksColor,backdropColor:e.darkBgColor},grid:{color:e.darkGridLinesColor},pointLabels:{color:e.darkTicksColor}}},l={scales:["pie","doughnut","polarArea","radar"].includes(this._type)?["polarArea","radar"].includes(this._type)?o:{}:n,plugins:{legend:{labels:{color:e.darkLabelColor}}}};return t={...e,options:{...l},...t},W(qd,t,SE),t}_chartConstructor(){if(this._data){this._createCanvas();const t=Zd(this._options,this._type,Po),e=[];t.dataLabelsPlugin&&e.push(this._ChartDataLabels),this._chart=new this._Chartjs(this._canvas,{...this._data,...t,plugins:e})}}_createCanvas(){this._canvas||(this._element.nodeName==="CANVAS"?this._canvas=this._element:(this._canvas=z("canvas"),this._element.appendChild(this._canvas)))}_handleMode(t){t==="dark"?(this._changeDatasetBorderColor(),this.update(null,this._darkOptions.options)):(this._changeDatasetBorderColor(!1),this._prevConfig&&this.update(null,this._prevConfig))}_observerCallback(t){for(const e of t)e.type==="attributes"&&this._handleMode(this.systemColorMode)}_changeDatasetBorderColor(t=!0){[...this._data.data.datasets].forEach(e=>["pie","doughnut","polarArea"].includes(this._type)&&(e.borderColor=t?this._darkOptions.darkBgColor:"#fff"))}static jQueryInterface(t,e,s){return this.each(function(){let n=P.getData(this,No);if(!(!n&&/dispose/.test(t))){if(!n){const o=e?Zd(e,s,Po):Po[s];n=new Yp(this,{...t,...o})}if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t](e,s)}}})}static getInstance(t){return P.getData(t,No)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e=="object"?e:null)}};Ia({Animate:qn,Alert:As,Button:On,ChipsInput:Ud,Chip:vi,Dropdown:$t,Carousel:ae,Collapse:re,Offcanvas:zi,Modal:Ss,Popover:zn,ScrollSpy:Is,Select:Lo,Tab:Un,Toast:Ls,Tooltip:Ms,Ripple:Ui,Datepicker:Ph,Timepicker:od,Sidenav:bi,Stepper:vd,Input:Z,Chart:Qd});/*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */function Te(){}const OE=function(){let i=0;return function(){return i++}}();function N(i){return i===null||typeof i>"u"}function Q(i){if(Array.isArray&&Array.isArray(i))return!0;const t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function $(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}const rt=i=>(typeof i=="number"||i instanceof Number)&&isFinite(+i);function Ht(i,t){return rt(i)?i:t}function R(i,t){return typeof i>"u"?t:i}const DE=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:i/t,Jd=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function G(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function U(i,t,e,s){let n,o,r;if(Q(i))if(o=i.length,s)for(n=o-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;ni,x:i=>i.x,y:i=>i.y};function Ke(i,t){return(eu[t]||(eu[t]=LE(t)))(i)}function LE(i){const t=PE(i);return e=>{for(const s of t){if(s==="")break;e=e&&e[s]}return e}}function PE(i){const t=i.split("."),e=[];let s="";for(const n of t)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(e.push(s),s="");return e}function Ha(i){return i.charAt(0).toUpperCase()+i.slice(1)}const Ft=i=>typeof i<"u",Ue=i=>typeof i=="function",iu=(i,t)=>{if(i.size!==t.size)return!1;for(const e of i)if(!t.has(e))return!1;return!0};function RE(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}const et=Math.PI,q=2*et,NE=q+et,Ho=Number.POSITIVE_INFINITY,$E=et/180,nt=et/2,Zs=et/4,su=et*2/3,Vt=Math.log10,me=Math.sign;function nu(i){const t=Math.round(i);i=Qs(i,t,i/1e3)?t:i;const e=Math.pow(10,Math.floor(Vt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function BE(i){const t=[],e=Math.sqrt(i);let s;for(s=1;sn-o).pop(),t}function as(i){return!isNaN(parseFloat(i))&&isFinite(i)}function Qs(i,t,e){return Math.abs(i-t)=i}function ou(i,t,e){let s,n,o;for(s=0,n=i.length;sl&&c=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function Wa(i,t,e){e=e||(r=>i[r]1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}const we=(i,t,e,s)=>Wa(i,e,s?n=>i[n][t]<=e:n=>i[n][t]Wa(i,e,s=>i[s][t]>=e);function zE(i,t,e){let s=0,n=i.length;for(;ss&&i[n-1]>e;)n--;return s>0||n{const s="_onData"+Ha(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){const r=n.apply(this,o);return i._chartjs.listeners.forEach(a=>{typeof a[s]=="function"&&a[s](...o)}),r}})})}function cu(i,t){const e=i._chartjs;if(!e)return;const s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(lu.forEach(o=>{delete i[o]}),delete i._chartjs)}function hu(i){const t=new Set;let e,s;for(e=0,s=i.length;e"u"?function(i){return i()}:window.requestAnimationFrame}();function uu(i,t,e){const s=e||(r=>Array.prototype.slice.call(r));let n=!1,o=[];return function(...r){o=s(r),n||(n=!0,du.call(window,()=>{n=!1,i.apply(t,o)}))}}function YE(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}const za=i=>i==="start"?"left":i==="end"?"right":"center",pt=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,KE=(i,t,e,s)=>i===(s?"left":"right")?e:i==="center"?(t+e)/2:t;function fu(i,t,e){const s=t.length;let n=0,o=s;if(i._sorted){const{iScale:r,_parsed:a}=i,l=r.axis,{min:c,max:h,minDefined:d,maxDefined:u}=r.getUserBounds();d&&(n=ct(Math.min(we(a,r.axis,c).lo,e?s:we(t,l,r.getPixelForValue(c)).lo),0,s-1)),u?o=ct(Math.max(we(a,r.axis,h,!0).hi+1,e?0:we(t,l,r.getPixelForValue(h),!0).hi+1),n,s)-n:o=s-n}return{start:n,count:o}}function pu(i){const{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;const o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}const Fo=i=>i===0||i===1,_u=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*q/e)),gu=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*q/e)+1,tn={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*nt)+1,easeOutSine:i=>Math.sin(i*nt),easeInOutSine:i=>-.5*(Math.cos(et*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>Fo(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>Fo(i)?i:_u(i,.075,.3),easeOutElastic:i=>Fo(i)?i:gu(i,.075,.3),easeInOutElastic(i){return Fo(i)?i:i<.5?.5*_u(i*2,.1125,.45):.5+.5*gu(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-tn.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?tn.easeInBounce(i*2)*.5:tn.easeOutBounce(i*2-1)*.5+.5};/*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + */function en(i){return i+.5|0}const Xe=(i,t,e)=>Math.max(Math.min(i,e),t);function sn(i){return Xe(en(i*2.55),0,255)}function Ge(i){return Xe(en(i*255),0,255)}function ke(i){return Xe(en(i/2.55)/100,0,1)}function mu(i){return Xe(en(i*100),0,100)}const Wt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},ja=[..."0123456789ABCDEF"],UE=i=>ja[i&15],XE=i=>ja[(i&240)>>4]+ja[i&15],Vo=i=>(i&240)>>4===(i&15),GE=i=>Vo(i.r)&&Vo(i.g)&&Vo(i.b)&&Vo(i.a);function qE(i){var t=i.length,e;return i[0]==="#"&&(t===4||t===5?e={r:255&Wt[i[1]]*17,g:255&Wt[i[2]]*17,b:255&Wt[i[3]]*17,a:t===5?Wt[i[4]]*17:255}:(t===7||t===9)&&(e={r:Wt[i[1]]<<4|Wt[i[2]],g:Wt[i[3]]<<4|Wt[i[4]],b:Wt[i[5]]<<4|Wt[i[6]],a:t===9?Wt[i[7]]<<4|Wt[i[8]]:255})),e}const ZE=(i,t)=>i<255?t(i):"";function QE(i){var t=GE(i)?UE:XE;return i?"#"+t(i.r)+t(i.g)+t(i.b)+ZE(i.a,t):void 0}const JE=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function bu(i,t,e){const s=t*Math.min(e,1-e),n=(o,r=(o+i/30)%12)=>e-s*Math.max(Math.min(r-3,9-r,1),-1);return[n(0),n(8),n(4)]}function tC(i,t,e){const s=(n,o=(n+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[s(5),s(3),s(1)]}function eC(i,t,e){const s=bu(i,1,.5);let n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function iC(i,t,e,s,n){return i===n?(t-e)/s+(t.5?h/(2-o-r):h/(o+r),l=iC(e,s,n,h,o),l=l*60+.5),[l|0,c||0,a]}function Ka(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(Ge)}function Ua(i,t,e){return Ka(bu,i,t,e)}function sC(i,t,e){return Ka(eC,i,t,e)}function nC(i,t,e){return Ka(tC,i,t,e)}function vu(i){return(i%360+360)%360}function oC(i){const t=JE.exec(i);let e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?sn(+t[5]):Ge(+t[5]));const n=vu(+t[2]),o=+t[3]/100,r=+t[4]/100;return t[1]==="hwb"?s=sC(n,o,r):t[1]==="hsv"?s=nC(n,o,r):s=Ua(n,o,r),{r:s[0],g:s[1],b:s[2],a:e}}function rC(i,t){var e=Ya(i);e[0]=vu(e[0]+t),e=Ua(e),i.r=e[0],i.g=e[1],i.b=e[2]}function aC(i){if(!i)return;const t=Ya(i),e=t[0],s=mu(t[1]),n=mu(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${ke(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}const yu={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},xu={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function lC(){const i={},t=Object.keys(xu),e=Object.keys(yu);let s,n,o,r,a;for(s=0;s>16&255,o>>8&255,o&255]}return i}let Wo;function cC(i){Wo||(Wo=lC(),Wo.transparent=[0,0,0,0]);const t=Wo[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}const hC=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function dC(i){const t=hC.exec(i);let e=255,s,n,o;if(t){if(t[7]!==s){const r=+t[7];e=t[8]?sn(r):Xe(r*255,0,255)}return s=+t[1],n=+t[3],o=+t[5],s=255&(t[2]?sn(s):Xe(s,0,255)),n=255&(t[4]?sn(n):Xe(n,0,255)),o=255&(t[6]?sn(o):Xe(o,0,255)),{r:s,g:n,b:o,a:e}}}function uC(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${ke(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}const Xa=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,ls=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function fC(i,t,e){const s=ls(ke(i.r)),n=ls(ke(i.g)),o=ls(ke(i.b));return{r:Ge(Xa(s+e*(ls(ke(t.r))-s))),g:Ge(Xa(n+e*(ls(ke(t.g))-n))),b:Ge(Xa(o+e*(ls(ke(t.b))-o))),a:i.a+e*(t.a-i.a)}}function zo(i,t,e){if(i){let s=Ya(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=Ua(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function Eu(i,t){return i&&Object.assign(t||{},i)}function Cu(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=Ge(i[3]))):(t=Eu(i,{r:0,g:0,b:0,a:1}),t.a=Ge(t.a)),t}function pC(i){return i.charAt(0)==="r"?dC(i):oC(i)}class jo{constructor(t){if(t instanceof jo)return t;const e=typeof t;let s;e==="object"?s=Cu(t):e==="string"&&(s=qE(t)||cC(t)||pC(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=Eu(this._rgb);return t&&(t.a=ke(t.a)),t}set rgb(t){this._rgb=Cu(t)}rgbString(){return this._valid?uC(this._rgb):void 0}hexString(){return this._valid?QE(this._rgb):void 0}hslString(){return this._valid?aC(this._rgb):void 0}mix(t,e){if(t){const s=this.rgb,n=t.rgb;let o;const r=e===o?.5:e,a=2*r-1,l=s.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=r*s.a+(1-r)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=fC(this._rgb,t._rgb,e)),this}clone(){return new jo(this.rgb)}alpha(t){return this._rgb.a=Ge(t),this}clearer(t){const e=this._rgb;return e.a*=1-t,this}greyscale(){const t=this._rgb,e=en(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){const e=this._rgb;return e.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return zo(this._rgb,2,t),this}darken(t){return zo(this._rgb,2,-t),this}saturate(t){return zo(this._rgb,1,t),this}desaturate(t){return zo(this._rgb,1,-t),this}rotate(t){return rC(this._rgb,t),this}}function Tu(i){return new jo(i)}function Au(i){if(i&&typeof i=="object"){const t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function wu(i){return Au(i)?i:Tu(i)}function Ga(i){return Au(i)?i:Tu(i).saturate(.5).darken(.1).hexString()}const yi=Object.create(null),qa=Object.create(null);function nn(i,t){if(!t)return i;const e=t.split(".");for(let s=0,n=e.length;se.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,s)=>Ga(s.backgroundColor),this.hoverBorderColor=(e,s)=>Ga(s.borderColor),this.hoverColor=(e,s)=>Ga(s.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return Za(this,t,e)}get(t){return nn(this,t)}describe(t,e){return Za(qa,t,e)}override(t,e){return Za(yi,t,e)}route(t,e,s,n){const o=nn(this,t),r=nn(this,s),a="_"+e;Object.defineProperties(o,{[a]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const l=this[a],c=r[n];return $(l)?Object.assign({},c,l):R(l,c)},set(l){this[a]=l}}})}}var B=new _C({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function gC(i){return!i||N(i.size)||N(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function Yo(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function mC(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let r=0;const a=e.length;let l,c,h,d,u;for(l=0;le.length){for(l=0;l0&&i.stroke()}}function on(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&o.strokeColor!=="";let l,c;for(i.save(),i.font=n.string,yC(i,o),l=0;l+i||0;function Ja(i,t){const e={},s=$(t),n=s?Object.keys(t):t,o=$(i)?s?r=>R(i[r],i[t[r]]):r=>i[r]:()=>i;for(const r of n)e[r]=AC(o(r));return e}function Ou(i){return Ja(i,{top:"y",right:"x",bottom:"y",left:"x"})}function Ci(i){return Ja(i,["topLeft","topRight","bottomLeft","bottomRight"])}function ht(i){const t=Ou(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function lt(i,t){i=i||{},t=t||B.font;let e=R(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let s=R(i.style,t.style);s&&!(""+s).match(CC)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:R(i.family,t.family),lineHeight:TC(R(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:R(i.weight,t.weight),string:""};return n.string=gC(n),n}function tt(i,t,e,s){let n=!0,o,r,a;for(o=0,r=i.length;oe&&a===0?0:a+l;return{min:r(s,-Math.abs(o)),max:r(n,o)}}function qe(i,t){return Object.assign(Object.create(i),t)}function tl(i,t=[""],e=i,s,n=()=>i[0]){Ft(s)||(s=Pu("_fallback",i));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:e,_fallback:s,_getTarget:n,override:r=>tl([r,...i],t,e,s)};return new Proxy(o,{deleteProperty(r,a){return delete r[a],delete r._keys,delete i[0][a],!0},get(r,a){return Mu(r,a,()=>PC(a,t,i,r))},getOwnPropertyDescriptor(r,a){return Reflect.getOwnPropertyDescriptor(r._scopes[0],a)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(r,a){return Ru(r).includes(a)},ownKeys(r){return Ru(r)},set(r,a,l){const c=r._storage||(r._storage=n());return r[a]=c[a]=l,delete r._keys,!0}})}function cs(i,t,e,s){const n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:Du(i,s),setContext:o=>cs(i,o,e,s),override:o=>cs(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,r){return delete o[r],delete i[r],!0},get(o,r,a){return Mu(o,r,()=>SC(o,r,a))},getOwnPropertyDescriptor(o,r){return o._descriptors.allKeys?Reflect.has(i,r)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,r)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,r){return Reflect.has(i,r)},ownKeys(){return Reflect.ownKeys(i)},set(o,r,a){return i[r]=a,delete o[r],!0}})}function Du(i,t={scriptable:!0,indexable:!0}){const{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:Ue(e)?e:()=>e,isIndexable:Ue(s)?s:()=>s}}const kC=(i,t)=>i?i+Ha(t):t,el=(i,t)=>$(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Mu(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t))return i[t];const s=e();return i[t]=s,s}function SC(i,t,e){const{_proxy:s,_context:n,_subProxy:o,_descriptors:r}=i;let a=s[t];return Ue(a)&&r.isScriptable(t)&&(a=OC(t,a,i,e)),Q(a)&&a.length&&(a=DC(t,a,i,r.isIndexable)),el(t,a)&&(a=cs(a,n,o&&o[t],r)),a}function OC(i,t,e,s){const{_proxy:n,_context:o,_subProxy:r,_stack:a}=e;if(a.has(i))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+i);return a.add(i),t=t(o,r||s),a.delete(i),el(i,t)&&(t=il(n._scopes,n,i,t)),t}function DC(i,t,e,s){const{_proxy:n,_context:o,_subProxy:r,_descriptors:a}=e;if(Ft(o.index)&&s(i))t=t[o.index%t.length];else if($(t[0])){const l=t,c=n._scopes.filter(h=>h!==l);t=[];for(const h of l){const d=il(c,n,i,h);t.push(cs(d,o,r&&r[i],a))}}return t}function Iu(i,t,e){return Ue(i)?i(t,e):i}const MC=(i,t)=>i===!0?t:typeof i=="string"?Ke(t,i):void 0;function IC(i,t,e,s,n){for(const o of t){const r=MC(e,o);if(r){i.add(r);const a=Iu(r._fallback,e,n);if(Ft(a)&&a!==e&&a!==s)return a}else if(r===!1&&Ft(s)&&e!==s)return null}return!1}function il(i,t,e,s){const n=t._rootScopes,o=Iu(t._fallback,e,s),r=[...i,...n],a=new Set;a.add(s);let l=Lu(a,r,e,o||e,s);return l===null||Ft(o)&&o!==e&&(l=Lu(a,r,o,l,s),l===null)?!1:tl(Array.from(a),[""],n,o,()=>LC(t,e,s))}function Lu(i,t,e,s,n){for(;e;)e=IC(i,t,e,s,n);return e}function LC(i,t,e){const s=i._getTarget();t in s||(s[t]={});const n=s[t];return Q(n)&&$(e)?e:n}function PC(i,t,e,s){let n;for(const o of t)if(n=Pu(kC(o,i),e),Ft(n))return el(i,n)?il(e,s,i,n):n}function Pu(i,t){for(const e of t){if(!e)continue;const s=e[i];if(Ft(s))return s}}function Ru(i){let t=i._keys;return t||(t=i._keys=RC(i._scopes)),t}function RC(i){const t=new Set;for(const e of i)for(const s of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(s);return Array.from(t)}function Nu(i,t,e,s){const{iScale:n}=i,{key:o="r"}=this._parsing,r=new Array(s);let a,l,c,h;for(a=0,l=s;ati==="x"?"y":"x";function $C(i,t,e,s){const n=i.skip?t:i,o=t,r=e.skip?t:e,a=Va(o,n),l=Va(r,o);let c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;const d=s*c,u=s*h;return{previous:{x:o.x-d*(r.x-n.x),y:o.y-d*(r.y-n.y)},next:{x:o.x+u*(r.x-n.x),y:o.y+u*(r.y-n.y)}}}function BC(i,t,e){const s=i.length;let n,o,r,a,l,c=hs(i,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")FC(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,r=i.length;owindow.getComputedStyle(i,null);function zC(i,t){return qo(i).getPropertyValue(t)}const jC=["top","right","bottom","left"];function Ti(i,t,e){const s={};e=e?"-"+e:"";for(let n=0;n<4;n++){const o=jC[n];s[o]=parseFloat(i[t+"-"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const YC=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function KC(i,t){const e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s;let r=!1,a,l;if(YC(n,o,i.target))a=n,l=o;else{const c=t.getBoundingClientRect();a=s.clientX-c.left,l=s.clientY-c.top,r=!0}return{x:a,y:l,box:r}}function Ai(i,t){if("native"in i)return i;const{canvas:e,currentDevicePixelRatio:s}=t,n=qo(e),o=n.boxSizing==="border-box",r=Ti(n,"padding"),a=Ti(n,"border","width"),{x:l,y:c,box:h}=KC(i,e),d=r.left+(h&&a.left),u=r.top+(h&&a.top);let{width:f,height:p}=t;return o&&(f-=r.width+a.width,p-=r.height+a.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/p*e.height/s)}}function UC(i,t,e){let s,n;if(t===void 0||e===void 0){const o=sl(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{const r=o.getBoundingClientRect(),a=qo(o),l=Ti(a,"border","width"),c=Ti(a,"padding");t=r.width-c.width-l.width,e=r.height-c.height-l.height,s=Go(a.maxWidth,o,"clientWidth"),n=Go(a.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:s||Ho,maxHeight:n||Ho}}const nl=i=>Math.round(i*10)/10;function XC(i,t,e,s){const n=qo(i),o=Ti(n,"margin"),r=Go(n.maxWidth,i,"clientWidth")||Ho,a=Go(n.maxHeight,i,"clientHeight")||Ho,l=UC(i,t,e);let{width:c,height:h}=l;if(n.boxSizing==="content-box"){const d=Ti(n,"border","width"),u=Ti(n,"padding");c-=u.width+d.width,h-=u.height+d.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?Math.floor(c/s):h-o.height),c=nl(Math.min(c,r,l.maxWidth)),h=nl(Math.min(h,a,l.maxHeight)),c&&!h&&(h=nl(c/2)),{width:c,height:h}}function Hu(i,t,e){const s=t||1,n=Math.floor(i.height*s),o=Math.floor(i.width*s);i.height=n/s,i.width=o/s;const r=i.canvas;return r.style&&(e||!r.style.height&&!r.style.width)&&(r.style.height=`${i.height}px`,r.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||r.height!==n||r.width!==o?(i.currentDevicePixelRatio=s,r.height=n,r.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}const GC=function(){let i=!1;try{const t={get passive(){return i=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return i}();function Fu(i,t){const e=zC(i,t),s=e&&e.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function wi(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function qC(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s==="middle"?e<.5?i.y:t.y:s==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function ZC(i,t,e,s){const n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},r=wi(i,n,e),a=wi(n,o,e),l=wi(o,t,e),c=wi(r,a,e),h=wi(a,l,e);return wi(c,h,e)}const Vu=new Map;function QC(i,t){t=t||{};const e=i+JSON.stringify(t);let s=Vu.get(e);return s||(s=new Intl.NumberFormat(i,t),Vu.set(e,s)),s}function an(i,t,e){return QC(t,e).format(i)}const JC=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},tT=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function ds(i,t,e){return i?JC(t,e):tT()}function Wu(i,t){let e,s;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,s=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=s)}function zu(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function ju(i){return i==="angle"?{between:Js,compare:FE,normalize:Nt}:{between:Ae,compare:(t,e)=>t-e,normalize:t=>t}}function Yu({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function eT(i,t,e){const{property:s,start:n,end:o}=e,{between:r,normalize:a}=ju(s),l=t.length;let{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;ul(n,E,y)&&a(n,E)!==0,T=()=>a(o,y)===0||l(o,E,y),A=()=>_||C(),w=()=>!_||T();for(let S=h,k=h;S<=d;++S)x=t[S%r],!x.skip&&(y=c(x[s]),y!==E&&(_=l(y,n,o),m===null&&A()&&(m=a(y,n)===0?S:k),m!==null&&w()&&(p.push(Yu({start:m,end:S,loop:u,count:r,style:f})),m=null),k=S,E=y));return m!==null&&p.push(Yu({start:m,end:d,loop:u,count:r,style:f})),p}function Uu(i,t){const e=[],s=i.segments;for(let n=0;nn&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function sT(i,t,e,s){const n=i.length,o=[];let r=t,a=i[t],l;for(l=t+1;l<=e;++l){const c=i[l%n];c.skip||c.stop?a.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=r=c.stop?l:null):(r=l,a.skip&&(t=l)),a=c}return r!==null&&o.push({start:t%n,end:r%n,loop:s}),o}function nT(i,t){const e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];const o=!!i._loop,{start:r,end:a}=iT(e,n,o,s);if(s===!0)return Xu(i,[{start:r,end:a,loop:o}],e,t);const l=aa({chart:t,initial:e.initial,numSteps:r,currentStep:Math.min(s-e.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=du.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;const o=s.items;let r=o.length-1,a=!1,l;for(;r>=0;--r)l=o[r],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),a=!0):(o[r]=o[o.length-1],o.pop());a&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const s=e.items;let n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var be=new aT;const qu="transparent",lT={boolean(i,t,e){return e>.5?t:i},color(i,t,e){const s=wu(i||qu),n=s.valid&&wu(t||qu);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}};class Zu{constructor(t,e,s,n){const o=e[s];n=tt([t.to,n,o,t.from]);const r=tt([t.from,o,n]);this._active=!0,this._fn=t.fn||lT[t.type||typeof r],this._easing=tn[t.easing]||tn.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=r,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);const n=this._target[this._prop],o=s-this._start,r=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=tt([t.to,e,n,t.from]),this._from=tt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,s=this._duration,n=this._prop,o=this._from,r=this._loop,a=this._to;let l;if(this._active=o!==a&&(r||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,a,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){const e=t?"res":"rej",s=this._promises||[];for(let n=0;ni!=="onProgress"&&i!=="onComplete"&&i!=="fn"}),B.set("animations",{colors:{type:"color",properties:hT},numbers:{type:"number",properties:cT}}),B.describe("animations",{_fallback:"animation"}),B.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>i|0}}}});class ol{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!$(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach(s=>{const n=t[s];if(!$(n))return;const o={};for(const r of dT)o[r]=n[r];(Q(n.properties)&&n.properties||[s]).forEach(r=>{(r===s||!e.has(r))&&e.set(r,o)})})}_animateOptions(t,e){const s=e.options,n=fT(t,s);if(!n)return[];const o=this._createAnimations(n,s);return s.$shared&&uT(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){const s=this._properties,n=[],o=t.$animations||(t.$animations={}),r=Object.keys(e),a=Date.now();let l;for(l=r.length-1;l>=0;--l){const c=r[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}const h=e[c];let d=o[c];const u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,a);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new Zu(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const s=this._createAnimations(t,e);if(s.length)return be.add(this._chart,s),!0}}function uT(i,t){const e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function nf(i,t){const{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:r,index:a}=s,l=o.axis,c=r.axis,h=mT(o,r,s),d=t.length;let u;for(let f=0;fe[s].axis===t).shift()}function yT(i,t){return qe(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function xT(i,t,e){return qe(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function ln(i,t){const e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(const n of t){const o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e]}}}const al=i=>i==="reset"||i==="none",of=(i,t)=>t?i:Object.assign({},i),ET=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:Ju(e,!0),values:null};class zt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ef(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&ln(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,p)=>d==="x"?u:d==="r"?p:f,o=e.xAxisID=R(s.xAxisID,rl(t,"x")),r=e.yAxisID=R(s.yAxisID,rl(t,"y")),a=e.rAxisID=R(s.rAxisID,rl(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,r,a),h=e.vAxisID=n(l,r,o,a);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(r),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&cu(this._data,this),t._stacked&&ln(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if($(e))this._data=gT(e);else if(s!==e){if(s){cu(s,this);const n=this._cachedMeta;ln(n),n._parsed=[]}e&&Object.isExtensible(e)&&jE(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,s=this.getDataset();let n=!1;this._dataCheck();const o=e._stacked;e._stacked=ef(e.vScale,e),e.stack!==s.stack&&(n=!0,ln(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&nf(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:r}=s,a=o.axis;let l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{Q(n[t])?u=this.parseArrayData(s,n,t,e):$(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);const f=()=>d[a]===null||c&&d[a]_||d<_}for(u=0;u=0;--u)if(!p()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let n,o,r;for(n=0,o=e.length;n=0&&tthis.getContext(s,n),_=c.resolveNamedOptions(u,f,p,d);return _.$shared&&(_.$shared=l,o[r]=Object.freeze(of(_,l))),_}_resolveAnimations(t,e,s){const n=this.chart,o=this._cachedDataOpts,r=`animation-${e}`,a=o[r];if(a)return a;let l;if(n.options.animation!==!1){const h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}const c=new ol(n,l&&l.animations);return l&&l._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||al(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),r=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:r}}updateElement(t,e,s,n){al(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!al(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,s=this._cachedMeta.data;for(const[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];const n=s.length,o=e.length,r=Math.min(o,n);r&&this.parse(0,r),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,a=c.length-1;a>=r;a--)c[a]=c[a-e]};for(l(o),a=t;an-o))}return i._cache.$bar}function TT(i){const t=i.iScale,e=CT(t,i.type);let s=t._length,n,o,r,a;const l=()=>{r===32767||r===-32768||(Ft(a)&&(s=Math.min(s,Math.abs(r-a)||s)),a=r)};for(n=0,o=e.length;n0?n[i-1]:null,a=iMath.abs(a)&&(l=a,c=r),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:r,max:a}}function rf(i,t,e,s){return Q(i)?kT(i,t,e,s):t[e.axis]=e.parse(i,s),t}function af(i,t,e,s){const n=i.iScale,o=i.vScale,r=n.getLabels(),a=n===o,l=[];let c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function OT(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.basel.controller.options.grouped),o=s.options.stacked,r=[],a=l=>{const c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(N(h)||isNaN(h))return!0};for(const l of n)if(!(e!==void 0&&a(l))&&((o===!1||r.indexOf(l.stack)===-1||o===void 0&&l.stack===void 0)&&r.push(l.stack),l.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,s){const n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,s=e.iScale,n=[];let o,r;for(o=0,r=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:s,yScale:n}=e,o=this.getParsed(t),r=s.getLabelForValue(o.x),a=n.getLabelForValue(o.y),l=o._custom;return{label:e.label,value:"("+r+", "+a+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:r,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=r.axis,d=a.axis;for(let u=e;uJs(E,a,l,!0)?1:Math.max(C,C*e,T,T*e),p=(E,C,T)=>Js(E,a,l,!0)?-1:Math.min(C,C*e,T,T*e),_=f(0,c,d),m=f(nt,h,u),y=p(et,c,d),x=p(et+nt,h,u);s=(_-y)/2,n=(m-x)/2,o=-(_+y)/2,r=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:r}}class ki extends zt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if($(s[t])){const{key:l="value"}=this._parsing;o=c=>+Ke(s[c],l)}let r,a;for(r=t,a=t+e;r0&&!isNaN(t)?q*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=an(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const s=this.chart;let n,o,r,a,l;if(!t){for(n=0,o=s.data.datasets.length;ni!=="spacing",_indexable:i=>i!=="spacing"},ki.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){const t=i.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{const r=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){let t=i.label;const e=": "+i.formattedValue;return Q(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};class dn extends zt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,r=this.chart._animationsDisabled;let{start:a,count:l}=fu(e,n,r);this._drawStart=a,this._drawCount=l,pu(e)&&(a=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!r,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=r.axis,f=a.axis,{spanGaps:p,segment:_}=this.options,m=as(p)?p:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||o||n==="none";let x=e>0&&this.getParsed(e-1);for(let E=e;E0&&Math.abs(T[u]-x[u])>m,_&&(A.parsed=T,A.raw=c.data[E]),d&&(A.options=h||this.resolveDataElementOptions(E,C.active?"active":n)),y||this.updateElement(C,E,A,n),x=T}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;const o=n[0].size(this.resolveDataElementOptions(0)),r=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,r)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}dn.id="line",dn.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},dn.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class un extends zt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=an(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return Nu.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{const o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),r=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),a=(o-r)/t.getVisibleDatasetCount();this.outerRadius=o-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,s,n){const o=n==="reset",r=this.chart,l=r.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*et;let f=u,p;const _=360/this.countVisibleElements();for(p=0;p{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?Jt(this.resolveDataElementOptions(t,e).angle||s):0}}un.id="polarArea",un.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},un.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){const t=i.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{const r=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){return i.chart.data.labels[i.dataIndex]+": "+i.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class Zo extends ki{}Zo.id="pie",Zo.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class fn extends zt{getLabelAndValue(t){const e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return Nu.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){const r=this.resolveDatasetElementOptions(t);this.options.showLine||(r.borderWidth=0);const a={_loop:!0,_fullLoop:o.length===n.length,options:r};this.updateElement(s,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){const o=this._cachedMeta.rScale,r=n==="reset";for(let a=e;a{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}};jt.defaults={},jt.defaultRoutes=void 0;const hf={values(i){return Q(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";const s=this.chart.options.locale;let n,o=i;if(e.length>1){const c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),o=PT(i,e)}const r=Vt(Math.abs(o)),a=Math.max(Math.min(-1*Math.floor(r),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),an(i,s,l)},logarithmic(i,t,e){if(i===0)return"0";const s=i/Math.pow(10,Math.floor(Vt(i)));return s===1||s===2||s===5?hf.numeric.call(this,i,t,e):""}};function PT(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var pn={formatters:hf};B.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>t.lineWidth,tickColor:(i,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:pn.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),B.route("scale.ticks","color","","color"),B.route("scale.grid","color","","borderColor"),B.route("scale.grid","borderColor","","borderColor"),B.route("scale.title","color","","color"),B.describe("scale",{_fallback:!1,_scriptable:i=>!i.startsWith("before")&&!i.startsWith("after")&&i!=="callback"&&i!=="parser",_indexable:i=>i!=="borderDash"&&i!=="tickBorderDash"}),B.describe("scales",{_fallback:"scale"}),B.describe("scale.ticks",{_scriptable:i=>i!=="backdropPadding"&&i!=="callback",_indexable:i=>i!=="backdropPadding"});function RT(i,t){const e=i.options.ticks,s=e.maxTicksLimit||NT(i),n=e.major.enabled?BT(t):[],o=n.length,r=n[0],a=n[o-1],l=[];if(o>s)return HT(t,l,n,o/s),l;const c=$T(n,t,s);if(o>0){let h,d;const u=o>1?Math.round((a-r)/(o-1)):null;for(Qo(t,l,c,N(u)?0:r-u,r),h=0,d=o-1;hn)return l}return Math.max(n,1)}function BT(i){const t=[];let e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,df=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e;function uf(i,t){const e=[],s=i.length/t,n=i.length;let o=0;for(;or+a)))return l}function zT(i,t){U(i,e=>{const s=e.gc,n=s.length/2;let o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:Ht(e,Ht(s,e)),max:Ht(s,Ht(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){G(this.options.beforeUpdate,[this])}update(t,e,s){const{beginAtZero:n,grace:o,ticks:r}=this.options,a=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=wC(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=a=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}const h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=ct(this.chart.width-d,0,this.maxWidth);a=t.offset?this.maxWidth/s:f/(s-1),d+6>a&&(a=f/(s-(t.offset?.5:1)),l=this.maxHeight-_n(t.grid)-e.padding-ff(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),r=Fa(Math.min(Math.asin(ct((h.highest.height+6)/a,-1,1)),Math.asin(ct(l/c,-1,1))-Math.asin(ct(u/c,-1,1)))),r=Math.max(n,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){G(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){G(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,r=this._isVisible(),a=this.isHorizontal();if(r){const l=ff(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=_n(o)+l):(t.height=this.maxHeight,t.width=_n(o)+l),s.display&&this.ticks.length){const{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,p=Jt(this.labelRotation),_=Math.cos(p),m=Math.sin(p);if(a){const y=s.mirror?0:m*d.width+_*u.height;t.height=Math.min(this.maxHeight,t.height+y+f)}else{const y=s.mirror?0:_*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+y+f)}this._calculatePadding(c,h,m,_)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){const{ticks:{align:o,padding:r},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){const h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+r)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+r)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+r,this.paddingBottom=d+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){G(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:o[w]||0,height:r[w]||0});return{first:A(0),last:A(e-1),widest:A(C),highest:A(T),widths:o,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return VE(this._alignToPixels?xi(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*n?a/s:l/n:l*n0}_computeGridLineItems(t){const e=this.axis,s=this.chart,n=this.options,{grid:o,position:r}=n,a=o.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),d=_n(o),u=[],f=o.setContext(this.getContext()),p=f.drawBorder?f.borderWidth:0,_=p/2,m=function(I){return xi(s,I,p)};let y,x,E,C,T,A,w,S,k,D,O,M;if(r==="top")y=m(this.bottom),A=this.bottom-d,S=y-_,D=m(t.top)+_,M=t.bottom;else if(r==="bottom")y=m(this.top),D=t.top,M=m(t.bottom)-_,A=y+_,S=this.top+d;else if(r==="left")y=m(this.right),T=this.right-d,w=y-_,k=m(t.left)+_,O=t.right;else if(r==="right")y=m(this.left),k=t.left,O=m(t.right)-_,T=y+_,w=this.left+d;else if(e==="x"){if(r==="center")y=m((t.top+t.bottom)/2+.5);else if($(r)){const I=Object.keys(r)[0],F=r[I];y=m(this.chart.scales[I].getPixelForValue(F))}D=t.top,M=t.bottom,A=y+_,S=A+d}else if(e==="y"){if(r==="center")y=m((t.left+t.right)/2);else if($(r)){const I=Object.keys(r)[0],F=r[I];y=m(this.chart.scales[I].getPixelForValue(F))}T=y-_,w=T-d,k=t.left,O=t.right}const L=R(n.ticks.maxTicksLimit,h),X=Math.max(1,Math.ceil(h/L));for(x=0;xo.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){const e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,r;const a=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,r=n.length;o{this.draw(n)}}]:[{z:s,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:s+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[];let o,r;for(o=0,r=e.length;o{const s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),r=t[e].split("."),a=r.pop(),l=r.join(".");B.route(o,n,l,a)})}function qT(i){return"id"in i&&"defaults"in i}class ZT{constructor(){this.controllers=new Jo(zt,"datasets",!0),this.elements=new Jo(jt,"elements"),this.plugins=new Jo(Object,"plugins"),this.scales=new Jo(Ze,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{const o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):U(n,r=>{const a=s||this._getRegistryForType(r);this._exec(t,a,r)})})}_exec(t,e,s){const n=Ha(t);G(s["before"+n],[],s),e[t](s),G(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let C=e;C0&&Math.abs(A[f]-E[f])>y,m&&(w.parsed=A,w.raw=c.data[C]),u&&(w.options=d||this.resolveDataElementOptions(C,T.active?"active":n)),x||this.updateElement(T,C,w,n),E=A}this.updateSharedOptions(d,n,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}const s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;const o=e[0].size(this.resolveDataElementOptions(0)),r=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,r)/2}}gn.id="scatter",gn.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1},gn.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(i){return"("+i.label+", "+i.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var pf=Object.freeze({__proto__:null,BarController:cn,BubbleController:hn,DoughnutController:ki,LineController:dn,PolarAreaController:un,PieController:Zo,RadarController:fn,ScatterController:gn});function Si(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class cl{constructor(t){this.options=t||{}}init(t){}formats(){return Si()}parse(t,e){return Si()}format(t,e){return Si()}add(t,e,s){return Si()}diff(t,e,s){return Si()}startOf(t,e,s){return Si()}endOf(t,e){return Si()}}cl.override=function(i){Object.assign(cl.prototype,i)};var _f={_date:cl};function QT(i,t,e,s){const{controller:n,data:o,_sorted:r}=i,a=n._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&r&&o.length){const l=a._reversePixels?WE:we;if(s){if(n._sharedOptions){const c=o[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){const d=l(o,t,e-h),u=l(o,t,e+h);return{lo:d.lo,hi:u.hi}}}}else return l(o,t,e)}return{lo:0,hi:o.length-1}}function mn(i,t,e,s,n){const o=i.getSortedVisibleDatasetMetas(),r=e[t];for(let a=0,l=o.length;a{l[r](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),s&&!a?[]:o}var mf={evaluateInteractionItems:mn,modes:{index(i,t,e,s){const n=Ai(t,i),o=e.axis||"x",r=e.includeInvisible||!1,a=e.intersect?hl(i,n,o,s,r):dl(i,n,o,!1,s,r),l=[];return a.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{const h=a[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){const n=Ai(t,i),o=e.axis||"xy",r=e.includeInvisible||!1;let a=e.intersect?hl(i,n,o,s,r):dl(i,n,o,!1,s,r);if(a.length>0){const l=a[0].datasetIndex,c=i.getDatasetMeta(l).data;a=[];for(let h=0;he.pos===t)}function vf(i,t){return i.filter(e=>bf.indexOf(e.pos)===-1&&e.box.axis===t)}function vn(i,t){return i.sort((e,s)=>{const n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function iA(i){const t=[];let e,s,n,o,r,a;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=vn(bn(t,"left"),!0),n=vn(bn(t,"right")),o=vn(bn(t,"top"),!0),r=vn(bn(t,"bottom")),a=vf(t,"x"),l=vf(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(r).concat(a),chartArea:bn(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(r).concat(a)}}function yf(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function xf(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function rA(i,t,e,s){const{pos:n,box:o}=e,r=i.maxPadding;if(!$(n)){e.size&&(i[n]-=e.size);const d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&xf(r,o.getPadding());const a=Math.max(0,t.outerWidth-yf(r,i,"left","right")),l=Math.max(0,t.outerHeight-yf(r,i,"top","bottom")),c=a!==i.w,h=l!==i.h;return i.w=a,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function aA(i){const t=i.maxPadding;function e(s){const n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function lA(i,t){const e=t.maxPadding;function s(n){const o={left:0,top:0,right:0,bottom:0};return n.forEach(r=>{o[r]=Math.max(t[r],e[r])}),o}return s(i?["left","right"]:["top","bottom"])}function yn(i,t,e,s){const n=[];let o,r,a,l,c,h;for(o=0,r=i.length,c=0;o{typeof _.beforeLayout=="function"&&_.beforeLayout()});const h=l.reduce((_,m)=>m.box.options&&m.box.options.display===!1?_:_+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/h,hBoxMaxHeight:r/2}),u=Object.assign({},n);xf(u,ht(s));const f=Object.assign({maxPadding:u,w:o,h:r,x:n.left,y:n.top},n),p=nA(l.concat(c),d);yn(a.fullSize,f,d,p),yn(l,f,d,p),yn(c,f,d,p)&&yn(l,f,d,p),aA(f),Ef(a.leftAndTop,f,d,p),f.x+=f.w,f.y+=f.h,Ef(a.rightAndBottom,f,d,p),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},U(a.chartArea,_=>{const m=_.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class ul{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}}class Cf extends ul{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const er="$chartjs",cA={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Tf=i=>i===null||i==="";function hA(i,t){const e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[er]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Tf(n)){const o=Fu(i,"width");o!==void 0&&(i.width=o)}if(Tf(s))if(i.style.height==="")i.height=i.width/(t||2);else{const o=Fu(i,"height");o!==void 0&&(i.height=o)}return i}const Af=GC?{passive:!0}:!1;function dA(i,t,e){i.addEventListener(t,e,Af)}function uA(i,t,e){i.canvas.removeEventListener(t,e,Af)}function fA(i,t){const e=cA[i.type]||i.type,{x:s,y:n}=Ai(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function ir(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function pA(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ir(a.addedNodes,s),r=r&&!ir(a.removedNodes,s);r&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function _A(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ir(a.removedNodes,s),r=r&&!ir(a.addedNodes,s);r&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}const xn=new Map;let wf=0;function kf(){const i=window.devicePixelRatio;i!==wf&&(wf=i,xn.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function gA(i,t){xn.size||window.addEventListener("resize",kf),xn.set(i,t)}function mA(i){xn.delete(i),xn.size||window.removeEventListener("resize",kf)}function bA(i,t,e){const s=i.canvas,n=s&&sl(s);if(!n)return;const o=uu((a,l)=>{const c=n.clientWidth;e(a,l),c{const l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return r.observe(n),gA(i,o),r}function fl(i,t,e){e&&e.disconnect(),t==="resize"&&mA(i)}function vA(i,t,e){const s=i.canvas,n=uu(o=>{i.ctx!==null&&e(fA(o,i))},i,o=>{const r=o[0];return[r,r.offsetX,r.offsetY]});return dA(s,t,n),n}class Sf extends ul{acquireContext(t,e){const s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(hA(t,e),s):null}releaseContext(t){const e=t.canvas;if(!e[er])return!1;const s=e[er].initial;["height","width"].forEach(o=>{const r=s[o];N(r)?e.removeAttribute(o):e.setAttribute(o,r)});const n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[er],!0}addEventListener(t,e,s){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),r={attach:pA,detach:_A,resize:bA}[e]||vA;n[e]=r(t,e,s)}removeEventListener(t,e){const s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:fl,detach:fl,resize:fl}[e]||uA)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return XC(t,e,s,n)}isAttached(t){const e=sl(t);return!!(e&&e.isConnected)}}function Of(i){return!Bu()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?Cf:Sf}class yA{constructor(){this._init=[]}notify(t,e,s,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const o=n?this._descriptors(t).filter(n):this._descriptors(t),r=this._notify(o,t,e,s);return e==="afterDestroy"&&(this._notify(o,t,"stop"),this._notify(this._init,t,"uninstall")),r}_notify(t,e,s,n){n=n||{};for(const o of t){const r=o.plugin,a=r[s],l=[e,n,o.options];if(G(a,l,r)===!1&&n.cancelable)return!1}return!0}invalidate(){N(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const s=t&&t.config,n=R(s.options&&s.options.plugins,{}),o=xA(s);return n===!1&&!e?[]:CA(t,o,n,e)}_notifyStateChanges(t){const e=this._oldCache||[],s=this._cache,n=(o,r)=>o.filter(a=>!r.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}}function xA(i){const t={},e=[],s=Object.keys(te.plugins.items);for(let o=0;o{const l=s[a];if(!$(l))return console.error(`Invalid scale configuration for scale: ${a}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);const c=_l(a,l),h=wA(c,n),d=e.scales||{};o[c]=o[c]||a,r[a]=qs(Object.create(null),[{axis:c},l,d[c],d[h]])}),i.data.datasets.forEach(a=>{const l=a.type||i.type,c=a.indexAxis||pl(l,t),d=(yi[l]||{}).scales||{};Object.keys(d).forEach(u=>{const f=AA(u,c),p=a[f+"AxisID"]||o[f]||f;r[p]=r[p]||Object.create(null),qs(r[p],[{axis:f},s[p],d[u]])})}),Object.keys(r).forEach(a=>{const l=r[a];qs(l,[B.scales[l.type],B.scale])}),r}function Df(i){const t=i.options||(i.options={});t.plugins=R(t.plugins,{}),t.scales=SA(i,t)}function Mf(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function OA(i){return i=i||{},i.data=Mf(i.data),Df(i),i}const If=new Map,Lf=new Set;function sr(i,t){let e=If.get(i);return e||(e=t(),If.set(i,e),Lf.add(e)),e}const En=(i,t,e)=>{const s=Ke(t,e);s!==void 0&&i.add(s)};class DA{constructor(t){this._config=OA(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Mf(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Df(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return sr(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return sr(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return sr(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,s=this.type;return sr(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const s=this._scopeCache;let n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){const{options:n,type:o}=this,r=this._cachedScopes(t,s),a=r.get(e);if(a)return a;const l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>En(l,t,d))),h.forEach(d=>En(l,n,d)),h.forEach(d=>En(l,yi[o]||{},d)),h.forEach(d=>En(l,B,d)),h.forEach(d=>En(l,qa,d))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Lf.has(e)&&r.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,yi[e]||{},B.datasets[e]||{},{type:e},B,qa]}resolveNamedOptions(t,e,s,n=[""]){const o={$shared:!0},{resolver:r,subPrefixes:a}=Pf(this._resolverCache,t,n);let l=r;if(IA(r,e)){o.$shared=!1,s=Ue(s)?s():s;const c=this.createResolver(t,s,a);l=cs(r,s,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){const{resolver:o}=Pf(this._resolverCache,t,s);return $(e)?cs(o,e,void 0,n):o}}function Pf(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));const n=e.join();let o=s.get(n);return o||(o={resolver:tl(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},s.set(n,o)),o}const MA=i=>$(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||Ue(i[e]),!1);function IA(i,t){const{isScriptable:e,isIndexable:s}=Du(i);for(const n of t){const o=e(n),r=s(n),a=(r||o)&&i[n];if(o&&(Ue(a)||MA(a))||r&&Q(a))return!0}return!1}var LA="3.9.1";const PA=["top","bottom","left","right","chartArea"];function Rf(i,t){return i==="top"||i==="bottom"||PA.indexOf(i)===-1&&t==="x"}function Nf(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function $f(i){const t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),G(e&&e.onComplete,[i],t)}function RA(i){const t=i.chart,e=t.options.animation;G(e&&e.onProgress,[i],t)}function Bf(i){return Bu()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}const nr={},Hf=i=>{const t=Bf(i);return Object.values(nr).filter(e=>e.canvas===t).pop()};function NA(i,t,e){const s=Object.keys(i);for(const n of s){const o=+n;if(o>=t){const r=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=r)}}}function $A(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}class gl{constructor(t,e){const s=this.config=new DA(e),n=Bf(t),o=Hf(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Of(n)),this.platform.updateConfig(s);const a=this.platform.acquireContext(n,r.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=OE(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new yA,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=YE(d=>this.update(d),r.resizeDelay||0),this._dataChanges=[],nr[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}be.listen(this,"complete",$f),be.listen(this,"progress",RA),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return N(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Hu(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return ku(this.canvas,this.ctx),this}stop(){return be.stop(this),this}resize(t,e){be.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(n,t,e,o),a=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,Hu(this,a,!0)&&(this.notifyPlugins("resize",{size:r}),G(s.onResize,[this,r],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};U(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){const t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((r,a)=>(r[a]=!1,r),{});let o=[];e&&(o=o.concat(Object.keys(e).map(r=>{const a=e[r],l=_l(r,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),U(o,r=>{const a=r.options,l=a.id,c=_l(l,a),h=R(a.type,r.dtype);(a.position===void 0||Rf(a.position,c)!==Rf(r.dposition))&&(a.position=r.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{const u=te.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(a,t)}),U(n,(r,a)=>{r||delete s[a]}),U(s,r=>{dt.configure(this,r,r.options),dt.addBox(this,r)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let r=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Nf("z","_idx"));const{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){U(this.scales,t=>{dt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!iu(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:s,start:n,count:o}of e){const r=s==="_removeElements"?-o:o;NA(t,n,r)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,s=o=>new Set(t.filter(r=>r[0]===o).map((r,a)=>a+","+r.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;dt.update(this,this.width,this.height,t);const e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],U(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s=t._clip,n=!s.disabled,o=this.chartArea,r={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",r)!==!1&&(n&&Ko(e,{left:s.left===!1?0:o.left-s.left,right:s.right===!1?this.width:o.right+s.right,top:s.top===!1?0:o.top-s.top,bottom:s.bottom===!1?this.height:o.bottom+s.bottom}),t.controller.draw(),n&&Uo(e),r.cancelable=!1,this.notifyPlugins("afterDatasetDraw",r))}isPointInArea(t){return on(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){const o=mf.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=qe(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const n=s?"show":"hide",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,n);Ft(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),r.update(o,{visible:s}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),be.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,r),t[o]=r},n=(o,r,a)=>{o.offsetX=r,o.offsetY=a,this._eventHandler(o)};U(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let r;const a=()=>{n("attach",a),this.attached=!0,this.resize(),s("resize",o),s("detach",r)};r=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",a)},e.isAttached(this.canvas)?a():r()}unbindEvents(){U(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},U(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){const n=s?"set":"remove";let o,r,a,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),a=0,l=t.length;a{const a=this.getDatasetMeta(o);if(!a)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:a.data[r],index:r}});!$o(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}_updateHoverStyles(t,e,s){const n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),r=o(e,t),a=s?t:o(t,e);r.length&&this.updateHoverStyle(r,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){const s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;const o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){const{_active:n=[],options:o}=this,r=e,a=this._getActiveElements(t,n,s,r),l=RE(t),c=$A(t,this._lastEvent,s,l);s&&(this._lastEvent=null,G(o.onHover,[t,a,this],this),l&&G(o.onClick,[t,a,this],this));const h=!$o(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}}const Ff=()=>U(gl.instances,i=>i._plugins.invalidate()),Qe=!0;Object.defineProperties(gl,{defaults:{enumerable:Qe,value:B},instances:{enumerable:Qe,value:nr},overrides:{enumerable:Qe,value:yi},registry:{enumerable:Qe,value:te},version:{enumerable:Qe,value:LA},getChart:{enumerable:Qe,value:Hf},register:{enumerable:Qe,value:(...i)=>{te.add(...i),Ff()}},unregister:{enumerable:Qe,value:(...i)=>{te.remove(...i),Ff()}}});function Vf(i,t,e){const{startAngle:s,pixelMargin:n,x:o,y:r,outerRadius:a,innerRadius:l}=t;let c=n/a;i.beginPath(),i.arc(o,r,a,s-c,e+c),l>n?(c=n/l,i.arc(o,r,l,e+c,s-c,!0)):i.arc(o,r,n,e+nt,s-nt),i.closePath(),i.clip()}function BA(i){return Ja(i,["outerStart","outerEnd","innerStart","innerEnd"])}function HA(i,t,e,s){const n=BA(i.options.borderRadius),o=(e-t)/2,r=Math.min(o,s*t/2),a=l=>{const c=(e-Math.min(o,l))*s/2;return ct(l,0,Math.min(o,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:ct(n.innerStart,0,r),innerEnd:ct(n.innerEnd,0,r)}}function us(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function ml(i,t,e,s,n,o){const{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0;let f=0;const p=n-l;if(s){const I=h>0?h-s:0,F=d>0?d-s:0,Y=(I+F)/2,Yt=Y!==0?p*Y/(Y+s):p;f=(p-Yt)/2}const _=Math.max(.001,p*d-e/et)/d,m=(p-_)/2,y=l+m+f,x=n-m-f,{outerStart:E,outerEnd:C,innerStart:T,innerEnd:A}=HA(t,u,d,x-y),w=d-E,S=d-C,k=y+E/w,D=x-C/S,O=u+T,M=u+A,L=y+T/O,X=x-A/M;if(i.beginPath(),o){if(i.arc(r,a,d,k,D),C>0){const Y=us(S,D,r,a);i.arc(Y.x,Y.y,C,D,x+nt)}const I=us(M,x,r,a);if(i.lineTo(I.x,I.y),A>0){const Y=us(M,X,r,a);i.arc(Y.x,Y.y,A,x+nt,X+Math.PI)}if(i.arc(r,a,u,x-A/u,y+T/u,!0),T>0){const Y=us(O,L,r,a);i.arc(Y.x,Y.y,T,L+Math.PI,y-nt)}const F=us(w,y,r,a);if(i.lineTo(F.x,F.y),E>0){const Y=us(w,k,r,a);i.arc(Y.x,Y.y,E,y-nt,k)}}else{i.moveTo(r,a);const I=Math.cos(k)*d+r,F=Math.sin(k)*d+a;i.lineTo(I,F);const Y=Math.cos(D)*d+r,Yt=Math.sin(D)*d+a;i.lineTo(Y,Yt)}i.closePath()}function FA(i,t,e,s,n){const{fullCircles:o,startAngle:r,circumference:a}=t;let l=t.endAngle;if(o){ml(i,t,e,s,r+q,n);for(let c=0;c=q||Js(o,a,l),_=Ae(r,c+u,h+u);return p&&_}getCenterPoint(t){const{x:e,y:s,startAngle:n,endAngle:o,innerRadius:r,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+o)/2,d=(r+a+c+l)/2;return{x:e+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:s}=this,n=(e.offset||0)/2,o=(e.spacing||0)/2,r=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=s>q?Math.floor(s/q):0,s===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(n){a=n/2;const c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*a,Math.sin(c)*a),this.circumference>=et&&(a=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const l=FA(t,this,a,o,r);WA(t,this,a,o,l,r),t.restore()}}fs.id="arc",fs.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0},fs.defaultRoutes={backgroundColor:"backgroundColor"};function Wf(i,t,e=t){i.lineCap=R(e.borderCapStyle,t.borderCapStyle),i.setLineDash(R(e.borderDash,t.borderDash)),i.lineDashOffset=R(e.borderDashOffset,t.borderDashOffset),i.lineJoin=R(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=R(e.borderWidth,t.borderWidth),i.strokeStyle=R(e.borderColor,t.borderColor)}function zA(i,t,e){i.lineTo(e.x,e.y)}function jA(i){return i.stepped?bC:i.tension||i.cubicInterpolationMode==="monotone"?vC:zA}function zf(i,t,e={}){const s=i.length,{start:n=0,end:o=s-1}=e,{start:r,end:a}=t,l=Math.max(n,r),c=Math.min(o,a),h=na&&o>a;return{count:s,start:l,loop:t.loop,ilen:c(r+(c?a-C:C))%o,E=()=>{_!==m&&(i.lineTo(h,m),i.lineTo(h,_),i.lineTo(h,y))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=a;++u){if(f=n[x(u)],f.skip)continue;const C=f.x,T=f.y,A=C|0;A===p?(T<_?_=T:T>m&&(m=T),h=(d*h+C)/++d):(E(),i.lineTo(C,T),p=A,d=0,_=m=T),y=T}E()}function bl(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?KA:YA}function UA(i){return i.stepped?qC:i.tension||i.cubicInterpolationMode==="monotone"?ZC:wi}function XA(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wf(i,t.options),i.stroke(n)}function GA(i,t,e,s){const{segments:n,options:o}=t,r=bl(t);for(const a of n)Wf(i,o,a.style),i.beginPath(),r(i,t,a,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}const qA=typeof Path2D=="function";function ZA(i,t,e,s){qA&&!t.options.segment?XA(i,t,e,s):GA(i,t,e,s)}class Se extends jt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){const n=s.spanGaps?this._loop:this._fullLoop;WC(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=nT(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,n=t[e],o=this.points,r=Uu(this,{property:e,start:n,end:n});if(!r.length)return;const a=[],l=UA(s);let c,h;for(c=0,h=r.length;ci!=="borderDash"&&i!=="fill"};function jf(i,t,e,s){const n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)=e)return i.slice(t,t+e);const r=[],a=(e-2)/(o-2);let l=0;const c=t+e-1;let h=t,d,u,f,p,_;for(r[l++]=i[h],d=0;df&&(f=p,u=i[x],_=x);r[l++]=u,h=_}return r[l++]=i[c],r}function nw(i,t,e,s){let n=0,o=0,r,a,l,c,h,d,u,f,p,_;const m=[],y=t+e-1,x=i[t].x,C=i[y].x-x;for(r=t;r_&&(_=c,u=r),n=(o*n+a.x)/++o;else{const A=r-1;if(!N(d)&&!N(u)){const w=Math.min(d,u),S=Math.max(d,u);w!==f&&w!==A&&m.push({...i[w],x:n}),S!==f&&S!==A&&m.push({...i[S],x:n})}r>0&&A!==f&&m.push(i[A]),m.push(a),h=T,o=0,p=_=c,d=u=f=r}}return m}function Uf(i){if(i._decimated){const t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{value:t})}}function Xf(i){i.data.datasets.forEach(t=>{Uf(t)})}function ow(i,t){const e=t.length;let s=0,n;const{iScale:o}=i,{min:r,max:a,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=ct(we(t,o.axis,r).lo,0,e-1)),c?n=ct(we(t,o.axis,a).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var Gf={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Xf(i);return}const s=i.width;i.data.datasets.forEach((n,o)=>{const{_data:r,indexAxis:a}=n,l=i.getDatasetMeta(o),c=r||n.data;if(tt([a,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;const h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=ow(l,c);const f=e.threshold||4*s;if(u<=f){Uf(n);return}N(r)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(_){this._data=_}}));let p;switch(e.algorithm){case"lttb":p=sw(c,d,u,s,e);break;case"min-max":p=nw(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=p})},destroy(i){Xf(i)}};function rw(i,t,e){const s=i.segments,n=i.points,o=t.points,r=[];for(const a of s){let{start:l,end:c}=a;c=El(l,c,n);const h=xl(e,n[l],n[c],a.loop);if(!t.segments){r.push({source:a,target:h,start:n[l],end:n[c]});continue}const d=Uu(t,h);for(const u of d){const f=xl(e,o[u.start],o[u.end],u.loop),p=Ku(a,n,f);for(const _ of p)r.push({source:_,target:u,start:{[e]:qf(h,f,"start",Math.max)},end:{[e]:qf(h,f,"end",Math.min)}})}}return r}function xl(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=Nt(n),o=Nt(o)),{property:i,start:n,end:o}}function aw(i,t){const{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:r,end:a})=>{a=El(r,a,n);const l=n[r],c=n[a];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function El(i,t,e){for(;t>i;t--){const s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function qf(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Zf(i,t){let e=[],s=!1;return Q(i)?(s=!0,e=i):e=aw(i,t),e.length?new Se({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Qf(i){return i&&i.fill!==!1}function lw(i,t,e){let n=i[t].fill;const o=[t];let r;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!rt(n))return n;if(r=i[n],!r)return!1;if(r.visible)return n;o.push(n),n=r.fill}return!1}function cw(i,t,e){const s=fw(i);if($(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return rt(n)&&Math.floor(n)===n?hw(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function hw(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function dw(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:$(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function uw(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:$(i)?s=i.value:s=t.getBaseValue(),s}function fw(i){const t=i.options,e=t.fill;let s=R(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function pw(i){const{scale:t,index:e,line:s}=i,n=[],o=s.segments,r=s.points,a=_w(t,e);a.push(Zf({x:null,y:t.bottom},s));for(let l=0;l=0;--r){const a=n[r].$filler;a&&(a.line.updateControlPoints(o,a.axis),s&&a.fill&&Cl(i.ctx,a,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){const o=s[n].$filler;Qf(o)&&Cl(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){const s=t.meta.$filler;!Qf(s)||e.drawTime!=="beforeDatasetDraw"||Cl(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const np=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},Aw=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index;class op extends jt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=G(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const s=t.labels,n=lt(s.font),o=n.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=np(s,o);let c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(r,o,a,l)+10):(h=this.maxHeight,c=this._fitCols(r,o,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){const{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a;let d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((p,_)=>{const m=s+e/2+o.measureText(p.text).width;(_===0||c[c.length-1]+m+2*a>r)&&(d+=h,c[c.length-(_>0?0:1)]=0,f+=h,u++),l[_]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+a}),d}_fitCols(t,e,s,n){const{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=r-t;let d=a,u=0,f=0,p=0,_=0;return this.legendItems.forEach((m,y)=>{const x=s+e/2+o.measureText(m.text).width;y>0&&f+n+2*a>h&&(d+=u+a,c.push({width:u,height:f}),p+=u+a,_++,u=f=0),l[y]={left:p,top:f,col:_,width:x,height:n},u=Math.max(u,x),f+=n+a}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,r=ds(o,this.left,this.width);if(this.isHorizontal()){let a=0,l=pt(s,this.left+n,this.right-this.lineWidths[a]);for(const c of e)a!==c.row&&(a=c.row,l=pt(s,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+n}else{let a=0,l=pt(s,this.top+t+n,this.bottom-this.columnSizes[a].height);for(const c of e)c.col!==a&&(a=c.col,l=pt(s,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;Ko(t,this),this._draw(),Uo(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:r}=t,a=B.color,l=ds(t.rtl,this.left,this.width),c=lt(r.font),{color:h,padding:d}=r,u=c.size,f=u/2;let p;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;const{boxWidth:_,boxHeight:m,itemHeight:y}=np(r,u),x=function(w,S,k){if(isNaN(_)||_<=0||isNaN(m)||m<0)return;n.save();const D=R(k.lineWidth,1);if(n.fillStyle=R(k.fillStyle,a),n.lineCap=R(k.lineCap,"butt"),n.lineDashOffset=R(k.lineDashOffset,0),n.lineJoin=R(k.lineJoin,"miter"),n.lineWidth=D,n.strokeStyle=R(k.strokeStyle,a),n.setLineDash(R(k.lineDash,[])),r.usePointStyle){const O={radius:m*Math.SQRT2/2,pointStyle:k.pointStyle,rotation:k.rotation,borderWidth:D},M=l.xPlus(w,_/2),L=S+f;Su(n,O,M,L,r.pointStyleWidth&&_)}else{const O=S+Math.max((u-m)/2,0),M=l.leftForLtr(w,_),L=Ci(k.borderRadius);n.beginPath(),Object.values(L).some(X=>X!==0)?rn(n,{x:M,y:O,w:_,h:m,radius:L}):n.rect(M,O,_,m),n.fill(),D!==0&&n.stroke()}n.restore()},E=function(w,S,k){Ei(n,k.text,w,S+y/2,c,{strikethrough:k.hidden,textAlign:l.textAlign(k.textAlign)})},C=this.isHorizontal(),T=this._computeTitleHeight();C?p={x:pt(o,this.left+d,this.right-s[0]),y:this.top+d+T,line:0}:p={x:this.left+d,y:pt(o,this.top+T+d,this.bottom-e[0].height),line:0},Wu(this.ctx,t.textDirection);const A=y+d;this.legendItems.forEach((w,S)=>{n.strokeStyle=w.fontColor||h,n.fillStyle=w.fontColor||h;const k=n.measureText(w.text).width,D=l.textAlign(w.textAlign||(w.textAlign=r.textAlign)),O=_+f+k;let M=p.x,L=p.y;l.setWidth(this.width),C?S>0&&M+O+d>this.right&&(L=p.y+=A,p.line++,M=p.x=pt(o,this.left+d,this.right-s[p.line])):S>0&&L+A>this.bottom&&(M=p.x=M+e[p.line].width+d,p.line++,L=p.y=pt(o,this.top+T+d,this.bottom-e[p.line].height));const X=l.x(M);x(X,L,w),M=KE(D,M+_+f,C?M+O:this.right,t.rtl),E(l.x(M),L,w),C?p.x+=O+d:p.y+=A}),zu(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,s=lt(e.font),n=ht(e.padding);if(!e.display)return;const o=ds(t.rtl,this.left,this.width),r=this.ctx,a=e.position,l=s.size/2,c=n.top+l;let h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=pt(t.align,d,this.right-u);else{const p=this.columnSizes.reduce((_,m)=>Math.max(_,m.height),0);h=c+pt(t.align,this.top,this.bottom-p-t.labels.padding-this._computeTitleHeight())}const f=pt(a,d,d+u);r.textAlign=o.textAlign(za(a)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=s.string,Ei(r,e.text,f,h,s)}_computeTitleHeight(){const t=this.options.title,e=lt(t.font),s=ht(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(Ae(t,this.left,this.right)&&Ae(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;si.chart.options.color,boxWidth:40,padding:10,generateLabels(i){const t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o}}=i.legend.options;return i._getSortedDatasetMetas().map(r=>{const a=r.controller.getStyle(e?0:void 0),l=ht(a.borderWidth);return{text:t[r.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!r.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:r.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}};class Tl extends jt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;const n=Q(s.text)?s.text.length:1;this._padding=ht(s.padding);const o=n*lt(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:e,left:s,bottom:n,right:o,options:r}=this,a=r.align;let l=0,c,h,d;return this.isHorizontal()?(h=pt(a,s,o),d=e+t,c=o-s):(r.position==="left"?(h=s+t,d=pt(a,n,e),l=et*-.5):(h=o-t,d=pt(a,e,n),l=et*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const s=lt(e.font),o=s.lineHeight/2+this._padding.top,{titleX:r,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(o);Ei(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:za(e.align),textBaseline:"middle",translation:[r,a]})}}function kw(i,t){const e=new Tl({ctx:i.ctx,options:t,chart:i});dt.configure(i,e,t),dt.addBox(i,e),i.titleBlock=e}var ap={id:"title",_element:Tl,start(i,t,e){kw(i,e)},stop(i){const t=i.titleBlock;dt.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){const s=i.titleBlock;dt.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const or=new WeakMap;var lp={id:"subtitle",start(i,t,e){const s=new Tl({ctx:i.ctx,options:e,chart:i});dt.configure(i,s,e),dt.addBox(i,s),or.set(i,s)},stop(i){dt.removeBox(i,or.get(i)),or.delete(i)},beforeUpdate(i,t,e){const s=or.get(i);dt.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Cn={average(i){if(!i.length)return!1;let t,e,s=0,n=0,o=0;for(t=0,e=i.length;t-1?i.split(` +`):i}function Sw(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:r,value:a}=o.getLabelAndValue(n);return{chart:i,label:r,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:a,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function cp(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:r,boxHeight:a}=t,l=lt(t.bodyFont),c=lt(t.titleFont),h=lt(t.footerFont),d=o.length,u=n.length,f=s.length,p=ht(t.padding);let _=p.height,m=0,y=s.reduce((C,T)=>C+T.before.length+T.lines.length+T.after.length,0);if(y+=i.beforeBody.length+i.afterBody.length,d&&(_+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),y){const C=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;_+=f*C+(y-f)*l.lineHeight+(y-1)*t.bodySpacing}u&&(_+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const E=function(C){m=Math.max(m,e.measureText(C).width+x)};return e.save(),e.font=c.string,U(i.title,E),e.font=l.string,U(i.beforeBody.concat(i.afterBody),E),x=t.displayColors?r+2+t.boxPadding:0,U(s,C=>{U(C.before,E),U(C.lines,E),U(C.after,E)}),x=0,e.font=h.string,U(i.footer,E),e.restore(),m+=p.width,{width:m,height:_}}function Ow(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function Dw(i,t,e,s){const{x:n,width:o}=s,r=e.caretSize+e.caretPadding;if(i==="left"&&n+o+r>t.width||i==="right"&&n-o-r<0)return!0}function Mw(i,t,e,s){const{x:n,width:o}=e,{width:r,chartArea:{left:a,right:l}}=i;let c="center";return s==="center"?c=n<=(a+l)/2?"left":"right":n<=o/2?c="left":n>=r-o/2&&(c="right"),Dw(c,i,t,e)&&(c="center"),c}function hp(i,t,e){const s=e.yAlign||t.yAlign||Ow(i,e);return{xAlign:e.xAlign||t.xAlign||Mw(i,t,e,s),yAlign:s}}function Iw(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function Lw(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function dp(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:r}=i,{xAlign:a,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Ci(r);let p=Iw(t,a);const _=Lw(t,l,c);return l==="center"?a==="left"?p+=c:a==="right"&&(p-=c):a==="left"?p-=Math.max(h,u)+n:a==="right"&&(p+=Math.max(d,f)+n),{x:ct(p,0,s.width-t.width),y:ct(_,0,s.height-t.height)}}function rr(i,t,e){const s=ht(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function up(i){return ve([],Oe(i))}function Pw(i,t,e){return qe(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function fp(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}class Al extends jt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new ol(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=Pw(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=s.beforeTitle.apply(this,[t]),o=s.title.apply(this,[t]),r=s.afterTitle.apply(this,[t]);let a=[];return a=ve(a,Oe(n)),a=ve(a,Oe(o)),a=ve(a,Oe(r)),a}getBeforeBody(t,e){return up(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:s}=e,n=[];return U(t,o=>{const r={before:[],lines:[],after:[]},a=fp(s,o);ve(r.before,Oe(a.beforeLabel.call(this,o))),ve(r.lines,a.label.call(this,o)),ve(r.after,Oe(a.afterLabel.call(this,o))),n.push(r)}),n}getAfterBody(t,e){return up(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:s}=e,n=s.beforeFooter.apply(this,[t]),o=s.footer.apply(this,[t]),r=s.afterFooter.apply(this,[t]);let a=[];return a=ve(a,Oe(n)),a=ve(a,Oe(o)),a=ve(a,Oe(r)),a}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],r=[];let a=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(a=a.sort((h,d)=>t.itemSort(h,d,s))),U(a,h=>{const d=fp(t.callbacks,h);n.push(d.labelColor.call(this,h)),o.push(d.labelPointStyle.call(this,h)),r.push(d.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,r=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const a=Cn[s.position].call(this,n,this._eventPosition);r=this._createItems(s),this.title=this.getTitle(r,s),this.beforeBody=this.getBeforeBody(r,s),this.body=this.getBody(r,s),this.afterBody=this.getAfterBody(r,s),this.footer=this.getFooter(r,s);const l=this._size=cp(this,s),c=Object.assign({},a,l),h=hp(this.chart,s,c),d=dp(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:r,cornerRadius:a}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Ci(a),{x:u,y:f}=t,{width:p,height:_}=e;let m,y,x,E,C,T;return o==="center"?(C=f+_/2,n==="left"?(m=u,y=m-r,E=C+r,T=C-r):(m=u+p,y=m+r,E=C-r,T=C+r),x=m):(n==="left"?y=u+Math.max(l,h)+r:n==="right"?y=u+p-Math.max(c,d)-r:y=this.caretX,o==="top"?(E=f,C=E-r,m=y-r,x=y+r):(E=f+_,C=E+r,m=y+r,x=y-r),T=E),{x1:m,x2:y,x3:x,y1:E,y2:C,y3:T}}drawTitle(t,e,s){const n=this.title,o=n.length;let r,a,l;if(o){const c=ds(s.rtl,this.x,this.width);for(t.x=rr(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",r=lt(s.titleFont),a=s.titleSpacing,e.fillStyle=s.titleColor,e.font=r.string,l=0;lE!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,rn(t,{x:m,y:_,w:c,h:l,radius:x}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),rn(t,{x:y,y:_+1,w:c-2,h:l-2,radius:x}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,_,c,l),t.strokeRect(m,_,c,l),t.fillStyle=r.backgroundColor,t.fillRect(y,_+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=lt(s.bodyFont);let u=d.lineHeight,f=0;const p=ds(s.rtl,this.x,this.width),_=function(S){e.fillText(S,p.x(t.x+f),t.y+u/2),t.y+=u+o},m=p.textAlign(r);let y,x,E,C,T,A,w;for(e.textAlign=r,e.textBaseline="middle",e.font=d.string,t.x=rr(this,m,s),e.fillStyle=s.bodyColor,U(this.beforeBody,_),f=a&&m!=="right"?r==="center"?c/2+h:c+2+h:0,C=0,A=n.length;C0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const r=Cn[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=cp(this,t),l=Object.assign({},r,this._size),c=hp(e,t,l),h=dp(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const r=ht(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Wu(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),zu(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!$o(s,n),r=this._positionChanged(n,e);(o||r)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,s),a=this._positionChanged(r,t),l=e||!$o(r,o)||a;return l&&(this._active=r,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e;const r=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&r.reverse(),r}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,r=Cn[o.position].call(this,t,e);return r!==!1&&(s!==r.x||n!==r.y)}}Al.positioners=Cn;var pp={id:"tooltip",_element:Al,positioners:Cn,afterInit(i,t,e){e&&(i.tooltip=new Al({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:Te,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndexi!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},_p=Object.freeze({__proto__:null,Decimation:Gf,Filler:sp,Legend:rp,SubTitle:lp,Title:ap,Tooltip:pp});const Rw=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Nw(i,t,e,s){const n=i.indexOf(t);if(n===-1)return Rw(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const $w=(i,t)=>i===null?null:ct(Math.round(i),0,t);class Tn extends Ze{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const s=this.getLabels();for(const{index:n,label:o}of e)s[n]===o&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(N(t))return null;const s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:Nw(s,t,R(e,t),this._addedLabels),$w(e,s.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:s,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){const t=this.min,e=this.max,s=this.options.offset,n=[];let o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let r=t;r<=e;r++)n.push({value:r});return n}getLabelForValue(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}Tn.id="category",Tn.defaults={ticks:{callback:Tn.prototype.getLabelForValue}};function Bw(i,t){const e=[],{bounds:n,step:o,min:r,max:a,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,p=h-1,{min:_,max:m}=t,y=!N(r),x=!N(a),E=!N(c),C=(m-_)/(d+1);let T=nu((m-_)/p/f)*f,A,w,S,k;if(T<1e-14&&!y&&!x)return[{value:_},{value:m}];k=Math.ceil(m/T)-Math.floor(_/T),k>p&&(T=nu(k*T/p/f)*f),N(l)||(A=Math.pow(10,l),T=Math.ceil(T*A)/A),n==="ticks"?(w=Math.floor(_/T)*T,S=Math.ceil(m/T)*T):(w=_,S=m),y&&x&&o&&HE((a-r)/o,T/1e3)?(k=Math.round(Math.min((a-r)/T,h)),T=(a-r)/k,w=r,S=a):E?(w=y?r:w,S=x?a:S,k=c-1,T=(S-w)/k):(k=(S-w)/T,Qs(k,Math.round(k),T/1e3)?k=Math.round(k):k=Math.ceil(k));const D=Math.max(ru(T),ru(w));A=Math.pow(10,N(l)?D:l),w=Math.round(w*A)/A,S=Math.round(S*A)/A;let O=0;for(y&&(u&&w!==r?(e.push({value:r}),wn=e?n:l,a=l=>o=s?o:l;if(t){const l=me(n),c=me(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(n===o){let l=1;(o>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(o*.05)),a(o+l),t||r(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=Bw(n,o);return t.bounds==="ticks"&&ou(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return an(t,this.chart.options.locale,this.options.ticks.format)}}class lr extends ar{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=rt(t)?t:0,this.max=rt(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=Jt(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}lr.id="linear",lr.defaults={ticks:{callback:pn.formatters.numeric}};function mp(i){return i/Math.pow(10,Math.floor(Vt(i)))===1}function Hw(i,t){const e=Math.floor(Vt(t.max)),s=Math.ceil(t.max/Math.pow(10,e)),n=[];let o=Ht(i.min,Math.pow(10,Math.floor(Vt(t.min)))),r=Math.floor(Vt(o)),a=Math.floor(o/Math.pow(10,r)),l=r<0?Math.pow(10,Math.abs(r)):1;do n.push({value:o,major:mp(o)}),++a,a===10&&(a=1,++r,l=r>=0?1:l),o=Math.round(a*Math.pow(10,r)*l)/l;while(r0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=rt(t)?Math.max(0,t):null,this.max=rt(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=l=>s=t?s:l,r=l=>n=e?n:l,a=(l,c)=>Math.pow(10,Math.floor(Vt(l))+c);s===n&&(s<=0?(o(1),r(10)):(o(a(s,-1)),r(a(n,1)))),s<=0&&o(a(n,-1)),n<=0&&r(a(s,1)),this._zero&&this.min!==this._suggestedMin&&s===a(this.min,0)&&o(a(s,-1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=Hw(e,this);return t.bounds==="ticks"&&ou(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":an(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=Vt(t),this._valueRange=Vt(this.max)-Vt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Vt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}cr.id="logarithmic",cr.defaults={ticks:{callback:pn.formatters.logarithmic,major:{enabled:!0}}};function wl(i){const t=i.ticks;if(t.display&&i.display){const e=ht(t.backdropPadding);return R(t.font&&t.font.size,B.font.size)+e.height}return 0}function Fw(i,t,e){return e=Q(e)?e:[e],{w:mC(i,t.string,e),h:e.length*t.lineHeight}}function bp(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function Vw(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,r=i.options.pointLabels,a=r.centerPointLabels?et/o:0;for(let l=0;lt.r&&(a=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+a)),n.startt.b&&(l=(n.end-t.b)/r,i.b=Math.max(i.b,t.b+l))}function zw(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,r=wl(o)/2,a=i.drawingArea,l=o.pointLabels.centerPointLabels?et/n:0;for(let c=0;c270||e<90)&&(i-=t),i}function Uw(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=s.setContext(i.getPointLabelContext(n)),r=lt(o.font),{x:a,y:l,textAlign:c,left:h,top:d,right:u,bottom:f}=i._pointLabelItems[n],{backdropColor:p}=o;if(!N(p)){const _=Ci(o.borderRadius),m=ht(o.backdropPadding);e.fillStyle=p;const y=h-m.left,x=d-m.top,E=u-h+m.width,C=f-d+m.height;Object.values(_).some(T=>T!==0)?(e.beginPath(),rn(e,{x:y,y:x,w:E,h:C,radius:_}),e.fill()):e.fillRect(y,x,E,C)}Ei(e,i._pointLabels[n],a,l+r.lineHeight/2,r,{color:o.color,textAlign:c,textBaseline:"middle"})}}function vp(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,q);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let r=1;r{const n=G(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?Vw(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=q/(this._pointLabels.length||1),s=this.options.startAngle||0;return Nt(t*e+Jt(s))}getDistanceFromCenterForValue(t){if(N(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(N(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(h!==0){a=this.getDistanceFromCenterForValue(c.value);const d=n.setContext(this.getContext(h-1));Xw(this,d,a,o)}}),s.display){for(t.save(),r=o-1;r>=0;r--){const c=s.setContext(this.getPointLabelContext(r)),{color:h,lineWidth:d}=c;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(r,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=lt(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,r=t.measureText(a.label).width,t.fillStyle=c.backdropColor;const d=ht(c.backdropPadding);t.fillRect(-r/2-d.left,-o-h.size/2-d.top,r+d.width,h.size+d.height)}Ei(t,a.label,0,-o,h,{color:c.color})}),t.restore()}drawTitle(){}}gs.id="radialLinear",gs.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:pn.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(i){return i},padding:5,centerPointLabels:!1}},gs.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},gs.descriptors={angleLines:{_fallback:"grid"}};const hr={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},kt=Object.keys(hr);function qw(i,t){return i-t}function yp(i,t){if(N(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let r=t;return typeof s=="function"&&(r=s(r)),rt(r)||(r=typeof s=="string"?e.parse(r,s):e.parse(r)),r===null?null:(n&&(r=n==="week"&&(as(o)||o===!0)?e.startOf(r,"isoWeek",o):e.startOf(r,n)),+r)}function xp(i,t,e,s){const n=kt.length;for(let o=kt.indexOf(i);o=kt.indexOf(e);o--){const r=kt[o];if(hr[r].common&&i._adapter.diff(n,s,r)>=t-1)return r}return kt[e?kt.indexOf(e):0]}function Qw(i){for(let t=kt.indexOf(i)+1,e=kt.length;t=t?e[s]:e[n];i[o]=!0}}function Jw(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+n.add(a,1,s))l=e[a],l>=0&&(t[l].major=!0);return t}function Cp(i,t,e){const s=[],n={},o=t.length;let r,a;for(r=0;r+t.value))}initOffsets(t){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;e=ct(e,0,r),s=ct(s,0,r),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,r=o.unit||xp(o.minUnit,e,s,this._getLabelCapacity(e)),a=R(o.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=as(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":r),t.diff(s,e,r)>1e5*a)throw new Error(e+" and "+s+" are too far apart with stepSize of "+a+" "+r);const p=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u_-m).map(_=>+_)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}_tickFormatFunction(t,e,s,n){const o=this.options,r=o.time.displayFormats,a=this._unit,l=this._majorUnit,c=a&&r[a],h=l&&r[l],d=s[e],u=l&&h&&d&&d.major,f=this._adapter.format(t,n||(u?h:c)),p=o.ticks.callback;return p?G(p,[f,e,s],this):f}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=we(i,"pos",t)),{pos:o,time:a}=i[s],{pos:r,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=we(i,"time",t)),{time:o,pos:a}=i[s],{time:r,pos:l}=i[n]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class ur extends ms{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=dr(e,this.min),this._tableRange=dr(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let r,a,l,c,h;for(r=0,a=t.length;r=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(r=0,a=n.length;re.right&&(s|=kp),te.bottom&&(s|=Sp),s}function sk(i,t){for(var e=i.x0,s=i.y0,n=i.x1,o=i.y1,r=fr(e,s,t),a=fr(n,o,t),l,c,h;!(!(r|a)||r&a);)l=r||a,l&Op?(c=e+(n-e)*(t.top-s)/(o-s),h=t.top):l&Sp?(c=e+(n-e)*(t.bottom-s)/(o-s),h=t.bottom):l&kp?(h=s+(o-s)*(t.right-e)/(n-e),c=t.right):l&wp&&(h=s+(o-s)*(t.left-e)/(n-e),c=t.left),l===r?(e=c,s=h,r=fr(e,s,t)):(n=c,o=h,a=fr(n,o,t));return{x0:e,x1:n,y0:s,y1:o}}function pr(i,t){var e=t.anchor,s=i,n,o;return t.clamp&&(s=sk(s,t.area)),e==="start"?(n=s.x0,o=s.y0):e==="end"?(n=s.x1,o=s.y1):(n=(s.x0+s.x1)/2,o=(s.y0+s.y1)/2),ek(n,o,i.vx,i.vy,t.align)}var _r={arc:function(i,t){var e=(i.startAngle+i.endAngle)/2,s=Math.cos(e),n=Math.sin(e),o=i.innerRadius,r=i.outerRadius;return pr({x0:i.x+s*o,y0:i.y+n*o,x1:i.x+s*r,y1:i.y+n*r,vx:s,vy:n},t)},point:function(i,t){var e=kl(i,t.origin),s=e.x*i.options.radius,n=e.y*i.options.radius;return pr({x0:i.x-s,y0:i.y-n,x1:i.x+s,y1:i.y+n,vx:e.x,vy:e.y},t)},bar:function(i,t){var e=kl(i,t.origin),s=i.x,n=i.y,o=0,r=0;return i.horizontal?(s=Math.min(i.x,i.base),o=Math.abs(i.base-i.x)):(n=Math.min(i.y,i.base),r=Math.abs(i.base-i.y)),pr({x0:s,y0:n+r,x1:s+o,y1:n,vx:e.x,vy:e.y},t)},fallback:function(i,t){var e=kl(i,t.origin);return pr({x0:i.x,y0:i.y,x1:i.x+(i.width||0),y1:i.y+(i.height||0),vx:e.x,vy:e.y},t)}},De=An.rasterize;function nk(i){var t=i.borderWidth||0,e=i.padding,s=i.size.height,n=i.size.width,o=-n/2,r=-s/2;return{frame:{x:o-e.left-t,y:r-e.top-t,w:n+e.width+t*2,h:s+e.height+t*2},text:{x:o,y:r,w:n,h:s}}}function ok(i,t){var e=t.chart.getDatasetMeta(t.datasetIndex).vScale;if(!e)return null;if(e.xCenter!==void 0&&e.yCenter!==void 0)return{x:e.xCenter,y:e.yCenter};var s=e.getBasePixel();return i.horizontal?{x:s,y:null}:{x:null,y:s}}function rk(i){return i instanceof fs?_r.arc:i instanceof ps?_r.point:i instanceof _s?_r.bar:_r.fallback}function ak(i,t,e,s,n,o){var r=Math.PI/2;if(o){var a=Math.min(o,n/2,s/2),l=t+a,c=e+a,h=t+s-a,d=e+n-a;i.moveTo(t,c),ls.x+s.w+e*2||i.y>s.y+s.h+e*2)},intersects:function(i){var t=this._points(),e=i._points(),s=[gr(t[0],t[1]),gr(t[0],t[3])],n,o,r;for(this._rotation!==i._rotation&&s.push(gr(e[0],e[1]),gr(e[0],e[3])),n=0;n=0;--e)for(n=i[e].$layout,s=e-1;s>=0&&n._visible;--s)o=i[s].$layout,o._visible&&n._box.intersects(o._box)&&t(n,o);return i}function _k(i){var t,e,s,n,o,r,a;for(t=0,e=i.length;tl.getProps([c],!0)[c]}),o=s.geometry(),r=Lp(a,s.model(),o),n._box.update(r,o,s.rotation()));return pk(i,function(l,c){var h=l._hidable,d=c._hidable;h&&d||d?c._visible=!1:h&&(l._visible=!1)})}var kn={prepare:function(i){var t=[],e,s,n,o,r;for(e=0,n=i.length;e=0;--e)if(s=i[e].$layout,s&&s._visible&&s._box.contains(t))return i[e];return null},draw:function(i,t){var e,s,n,o,r,a;for(e=0,s=t.length;eArray.isArray(e),t=t=>e(t)?t:[t];const n=e=>Array.from(e),r=e=>document.createTextNode(e);let i=e=>([...e.childNodes].forEach((e=>{if(e.nodeValue)return[...e.nodeValue].forEach((t=>{e.parentNode.insertBefore(r(t),e)})),void e.remove();i(e)})),e);const a=e=>{let t=document.implementation.createHTMLDocument();return t.body.innerHTML=e,i(t.body)},o="data-typeit-id",s="ti-cursor",l={started:!1,completed:!1,frozen:!1,destroyed:!1},u={breakLines:!0,cursor:{autoPause:!0,autoPauseDelay:500,animation:{frames:[0,0,1].map((e=>({opacity:e}))),options:{iterations:1/0,easing:"steps(2, start)",fill:"forwards"}}},cursorChar:"|",cursorSpeed:1e3,deleteSpeed:null,html:!0,lifeLike:!0,loop:!1,loopDelay:750,nextStringDelay:750,speed:100,startDelay:250,startDelete:!1,strings:[],waitUntilVisible:!1,beforeString:()=>{},afterString:()=>{},beforeStep:()=>{},afterStep:()=>{},afterComplete:()=>{}},c=`[${o}]:before {content: '.'; display: inline-block; width: 0; visibility: hidden;}`;function d(e,t=!1,n=!1){let r,i=e.querySelector(`.${s}`),a=document.createTreeWalker(e,NodeFilter.SHOW_ALL,{acceptNode:e=>{if(i&&n){if(e.classList?.contains(s))return NodeFilter.FILTER_ACCEPT;if(i.contains(e))return NodeFilter.FILTER_REJECT}return e.classList?.contains(s)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),o=[];for(;r=a.nextNode();)r.originalParent||(r.originalParent=r.parentNode),o.push(r);return t?o.reverse():o}function f(e,t=!0){return t?d(a(e)):n(e).map(r)}const h=e=>document.createElement(e),y=(e,t="")=>{let n=h("style");n.id=t,n.appendChild(r(e)),document.head.appendChild(n)},p=t=>(e(t)||(t=[t/2,t/2]),t),m=(e,t)=>Math.abs(Math.random()*(e+t-(e-t))+(e-t));let g=e=>e/2;const b=e=>"value"in e;let w=e=>"function"==typeof e?e():e;const T=e=>Number.isInteger(e);let v=(e,t=document,n=!1)=>t["querySelector"+(n?"All":"")](e);const E=(e,t)=>Object.assign({},e,t);let P={"font-family":"","font-weight":"","font-size":"","font-style":"","line-height":"",color:"",transform:"translateX(-.125em)"};const S=(e,t)=>new Array(t).fill(e),N=({queueItems:e,selector:t,cursorPosition:n,to:r})=>{if(T(t))return-1*t;let i=new RegExp("END","i").test(r),a=t?[...e].reverse().findIndex((({char:e})=>{let n=e.parentElement,r=n.matches(t);return!(!i||!r)||r&&n.firstChild.isSameNode(e)})):-1;return a<0&&(a=i?0:e.length-1),a-n+(i?0:1)};let L=e=>new Promise((t=>{requestAnimationFrame((async()=>{t(await e())}))})),C=e=>e?.getAnimations().find((t=>t.id===e.dataset.tiAnimationId)),D=({cursor:e,frames:t,options:n})=>{let r=e.animate(t,n);return r.pause(),r.id=e.dataset.tiAnimationId,L((()=>{L((()=>{r.play()}))})),r},I=e=>e.func?.call(null),M=async({index:e,queueItems:t,wait:n,cursor:r,cursorOptions:i})=>{let a=t[e][1],o=[],s=e,l=a,u=()=>l&&!l.delay,c=a.shouldPauseCursor()&&i.autoPause;for(;u();)o.push(l),u()&&s++,l=t[s]?t[s][1]:null;if(o.length)return await L((async()=>{for(let e of o)await I(e)})),s-1;let d,f=C(r);return f&&(d={...f.effect.getComputedTiming(),delay:c?i.autoPauseDelay:0}),await n((async()=>{f&&c&&f.cancel(),await L((()=>{I(a)}))}),a.delay),await(({cursor:e,options:t,cursorOptions:n})=>{if(!e||!n)return;let r,i=C(e);i&&(t.delay=i.effect.getComputedTiming().delay,r=i.currentTime,i.cancel());let a=D({cursor:e,frames:n.animation.frames,options:t});return r&&(a.currentTime=r),a})({cursor:r,options:d,cursorOptions:i}),e};return function(e,r={}){let L=async(e,t,n=!1)=>{K.frozen&&await new Promise((e=>{this.unfreeze=()=>{K.frozen=!1,e()}})),n||await Y.beforeStep(this),await((e,t,n)=>new Promise((r=>{n.push(setTimeout((async()=>{await e(),r()}),t||0))})))(e,t,W),n||await Y.afterStep(this)},C=(e,t)=>M({index:e,queueItems:t,wait:L,cursor:ne,cursorOptions:Y.cursor}),I=e=>((e,t)=>{if(!e)return;let n=e.parentNode;(n.childNodes.length>1||n.isSameNode(t)?e:n).remove()})(e,J),x=()=>b(J),A=(e=0)=>function(e){let{speed:t,deleteSpeed:n,lifeLike:r}=e;return n=null!==n?n:t/3,r?[m(t,g(t)),m(n,g(n))]:[t,n]}(Y)[e],$=()=>(e=>b(e)?n(e.value):d(e,!0).filter((e=>!(e.childNodes.length>0))))(J),H=(e,t)=>(ee.add(e),((e={})=>{let t=e.delay;t&&ee.add({delay:t})})(t),this),O=()=>G??X,F=(e={})=>[{func:()=>j(e)},{func:()=>j(Y)}],k=e=>{let t=Y.nextStringDelay;ee.add([{delay:t[0]},...e,{delay:t[1]}])},R=async()=>{if(!x()&&ne&&J.appendChild(ne),te){((e,t)=>{let n=`[${o}='${e}'] .${s}`,r=getComputedStyle(t),i=Object.entries(P).reduce(((e,[t,n])=>`${e} ${t}: var(--ti-cursor-${t}, ${n||r[t]});`),"");y(`${n} { display: inline-block; width: 0; ${i} }`,e)})(Z,J),ne.dataset.tiAnimationId=Z;let{animation:e}=Y.cursor,{frames:t,options:n}=e;D({frames:t,cursor:ne,options:{duration:Y.cursorSpeed,...n}})}},q=()=>{let e=Y.strings.filter((e=>!!e));e.forEach(((t,n)=>{if(this.type(t),n+1===e.length)return;let r=Y.breakLines?[{func:()=>_(h("BR")),typeable:!0}]:S({func:Q,delay:A(1)},ee.getTypeable().length);k(r)}))},z=async(e=!0)=>{K.started=!0;let t=t=>{ee.done(t,!e)};try{let n=[...ee.getQueue()];for(let e=0;ee+t)).forEach((e=>{let[r]=n[e];t(r)})),e=r}t(r)}}if(!e)return this;if(K.completed=!0,await Y.afterComplete(this),!Y.loop)throw"";let r=Y.loopDelay;L((async()=>{await(async e=>{let t=O();t&&await B({value:t});let n=$().map((e=>[Symbol(),{func:Q,delay:A(1),deletable:!0,shouldPauseCursor:()=>!0}]));for(let r=0;r{var t,n,r;t=e,n=X,r=$(),X=Math.min(Math.max(n+t,0),r.length),((e,t,n)=>{let r=t[n-1],i=v(`.${s}`,e);(e=r?.parentNode||e).insertBefore(i,r||null)})(J,$(),X)},_=e=>((e,t)=>{if(b(e))return void(e.value=`${e.value}${t.textContent}`);t.innerHTML="";let n=(r=t.originalParent,/body/i.test(r?.tagName)?e:t.originalParent||e);var r;n.insertBefore(t,v("."+s,n)||null)})(J,e),j=async e=>Y=E(Y,e),V=async()=>{x()?J.value="":$().forEach(I)},Q=()=>{let e=$();e.length&&(x()?J.value=J.value.slice(0,-1):I(e[X]))};this.break=function(e){return H({func:()=>_(h("BR")),typeable:!0},e)},this.delete=function(e=null,t={}){e=w(e);let n=F(t),r=e,{instant:i,to:a}=t,o=ee.getTypeable(),s=null===r?o.length:T(r)?r:N({queueItems:o,selector:r,cursorPosition:O(),to:a});return H([n[0],...S({func:Q,delay:i?0:A(1),deletable:!0},s),n[1]],t)},this.empty=function(e={}){return H({func:V},e)},this.exec=function(e,t={}){let n=F(t);return H([n[0],{func:()=>e(this)},n[1]],t)},this.move=function(e,t={}){e=w(e);let n=F(t),{instant:r,to:i}=t,a=N({queueItems:ee.getTypeable(),selector:null===e?"":e,to:i,cursorPosition:O()}),o=a<0?-1:1;return G=O()+a,H([n[0],...S({func:()=>B(o),delay:r?0:A(),cursorable:!0},Math.abs(a)),n[1]],t)},this.options=function(e,t={}){return e=w(e),j(e),H({},t)},this.pause=function(e,t={}){return H({delay:w(e)},t)},this.type=function(e,t={}){e=w(e);let{instant:n}=t,r=F(t),i=f(e,Y.html).map((e=>{return{func:()=>_(e),char:e,delay:n||(t=e,/<(.+)>(.*?)<\/(.+)>/.test(t.outerHTML))?0:A(),typeable:e.nodeType===Node.TEXT_NODE};var t})),a=[r[0],{func:async()=>await Y.beforeString(e,this)},...i,{func:async()=>await Y.afterString(e,this)},r[1]];return H(a,t)},this.is=function(e){return K[e]},this.destroy=function(e=!0){W.forEach(clearTimeout),W=[],w(e)&&ne&&I(ne),K.destroyed=!0},this.freeze=function(){K.frozen=!0},this.unfreeze=()=>{},this.reset=function(e){!this.is("destroyed")&&this.destroy(),e?(ee.wipe(),e(this)):ee.reset(),X=0;for(let t in K)K[t]=!1;return J[x()?"value":"innerHTML"]="",this},this.go=function(){return K.started?this:(R(),Y.waitUntilVisible?(((e,t)=>{new IntersectionObserver(((n,r)=>{n.forEach((n=>{n.isIntersecting&&(t(),r.unobserve(e))}))}),{threshold:1}).observe(e)})(J,z.bind(this)),this):(z(),this))},this.flush=function(e=(()=>{})){return R(),z(!1).then(e),this},this.getQueue=()=>ee,this.getOptions=()=>Y,this.updateOptions=e=>j(e),this.getElement=()=>J;let J="string"==typeof(U=e)?v(U):U;var U;let W=[],X=0,G=null,K=E({},l);r.cursor=(e=>{if("object"==typeof e){let t={},{frames:n,options:r}=u.cursor.animation;return t.animation=e.animation||{},t.animation.frames=e.animation?.frames||n,t.animation.options=E(r,e.animation?.options||{}),t.autoPause=e.autoPause??u.cursor.autoPause,t.autoPauseDelay=e.autoPauseDelay||u.cursor.autoPauseDelay,t}return!0===e?u.cursor:e})(r.cursor??u.cursor);let Y=E(u,r);Y=E(Y,{html:!x()&&Y.html,nextStringDelay:p(Y.nextStringDelay),loopDelay:p(Y.loopDelay)});let Z=Math.random().toString().substring(2,9),ee=function(e){let n=function(e){return t(e).forEach((e=>a.set(Symbol(e.char?.innerText),r({...e})))),this},r=e=>(e.shouldPauseCursor=function(){return Boolean(this.typeable||this.cursorable||this.deletable)},e),i=()=>Array.from(a.values()),a=new Map;return n(e),{add:n,set:function(e,t){let n=[...a.keys()];a.set(n[e],r(t))},wipe:function(){a=new Map,n(e)},reset:function(){a.forEach((e=>delete e.done))},destroy:e=>a.delete(e),done:(e,t=!1)=>t?a.delete(e):a.get(e).done=!0,getItems:(e=!1)=>e?i():i().filter((e=>!e.done)),getQueue:()=>a,getTypeable:()=>i().filter((e=>e.typeable))}}([{delay:Y.startDelay}]);J.dataset.typeitId=Z,y(c);let te=!!Y.cursor&&!x(),ne=(()=>{if(x())return;let e=h("span");return e.className=s,te?(e.innerHTML=a(Y.cursorChar).innerHTML,e):(e.style.visibility="hidden",e)})();Y.strings=(e=>{let t=J.innerHTML;return t?(J.innerHTML="",Y.startDelete?(J.innerHTML=t,i(J),k(S({func:Q,delay:A(1),deletable:!0},$().length)),e):t.replace(//g,"").trim().split(//).concat(e)):e})(t(Y.strings)),Y.strings.length&&q()}})); diff --git a/public/page/1/index.html b/public/page/1/index.html new file mode 100644 index 00000000..5e388f25 --- /dev/null +++ b/public/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/ \ No newline at end of file diff --git a/public/posts/index.html b/public/posts/index.html new file mode 100644 index 00000000..29d94ef9 --- /dev/null +++ b/public/posts/index.html @@ -0,0 +1,21 @@ +Posts · Blowfish + + + + + +

Posts

0 +· +0 +· +

There are no articles to list here yet.

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/posts/index.xml b/public/posts/index.xml new file mode 100644 index 00000000..154847e4 --- /dev/null +++ b/public/posts/index.xml @@ -0,0 +1 @@ +Posts on Blowfishhttps://nunocoracao.github.io/blowfish/posts/Recent content in Posts on BlowfishHugo -- gohugo.ioenMon, 13 Jun 2022 20:55:37 +0100 \ No newline at end of file diff --git a/public/posts/page/1/index.html b/public/posts/page/1/index.html new file mode 100644 index 00000000..0c59a131 --- /dev/null +++ b/public/posts/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/posts/ \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt index 457a45d6..fe1d4e6d 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,3 +1,3 @@ User-agent: * Allow: / -Sitemap: sitemap.xml +Sitemap: https://nunocoracao.github.io/blowfish/sitemap.xml diff --git a/public/samples/charts/featured.jpg b/public/samples/charts/featured.jpg new file mode 100644 index 00000000..66d78707 Binary files /dev/null and b/public/samples/charts/featured.jpg differ diff --git a/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_1200x0_resize_q75_box.jpg b/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..1ea716b7 Binary files /dev/null and b/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_600x0_resize_q75_box.jpg b/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..adc7c1e5 Binary files /dev/null and b/public/samples/charts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2293224_600x0_resize_q75_box.jpg differ diff --git a/public/samples/charts/index.html b/public/samples/charts/index.html new file mode 100644 index 00000000..198f1917 --- /dev/null +++ b/public/samples/charts/index.html @@ -0,0 +1,49 @@ +Charts · Blowfish + + + + + + +
  1. Samples/

Charts

1 min· +0 +· +0 +· +
chart +sample +graph +shortcodes
Table of Contents

Blowfish includes support for Chart.js using the chart shortcode. Simply wrap the chart markup within the shortcode. Blowfish automatically themes charts to match the configured colorScheme parameter, however the colours can be customised using normal Chart.js syntax.

Refer to the chart shortcode docs for more details.

The examples below are a small selection taken from the official Chart.js docs. You can also view the page source on GitHub to see the markup.

Bar chart +#

+

Line chart +#

+

Doughnut chart +#

+


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/diagrams-flowcharts/featured.jpg b/public/samples/diagrams-flowcharts/featured.jpg new file mode 100644 index 00000000..a8e8206c Binary files /dev/null and b/public/samples/diagrams-flowcharts/featured.jpg differ diff --git a/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_1200x0_resize_q75_box.jpg b/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..36532029 Binary files /dev/null and b/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_600x0_resize_q75_box.jpg b/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..b2d5ca00 Binary files /dev/null and b/public/samples/diagrams-flowcharts/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3847626_600x0_resize_q75_box.jpg differ diff --git a/public/samples/diagrams-flowcharts/index.html b/public/samples/diagrams-flowcharts/index.html new file mode 100644 index 00000000..f5e5481f --- /dev/null +++ b/public/samples/diagrams-flowcharts/index.html @@ -0,0 +1,107 @@ +Diagrams and Flowcharts · Blowfish + + + + + + +
  1. Samples/

Diagrams and Flowcharts

2 mins· +0 +· +0 +· +
mermaid +sample +diagram +shortcodes
Table of Contents

Mermaid diagrams are supported in Blowfish using the mermaid shortcode. Simply wrap the diagram markup within the shortcode. Blowfish automatically themes Mermaid diagrams to match the configured colorScheme parameter.

Refer to the mermaid shortcode docs for more details.

The examples below are a small selection taken from the official Mermaid docs. You can also view the page source on GitHub to see the markup.

Flowchart +#

graph TD +A[Christmas] -->|Get money| B(Go shopping) +B --> C{Let me think} +B --> G[/Another/] +C ==>|One| D[Laptop] +C -->|Two| E[iPhone] +C -->|Three| F[Car] +subgraph Section +C +D +E +F +G +end

Sequence diagram +#

sequenceDiagram +autonumber +par Action 1 +Alice->>John: Hello John, how are you? +and Action 2 +Alice->>Bob: Hello Bob, how are you? +end +Alice->>+John: Hello John, how are you? +Alice->>+John: John, can you hear me? +John-->>-Alice: Hi Alice, I can hear you! +Note right of John: John is perceptive +John-->>-Alice: I feel great! +loop Every minute +John-->Alice: Great! +end

Class diagram +#

classDiagram +Animal "1" <|-- Duck +Animal <|-- Fish +Animal <--o Zebra +Animal : +int age +Animal : +String gender +Animal: +isMammal() +Animal: +mate() +class Duck{ ++String beakColor ++swim() ++quack() +} +class Fish{ +-int sizeInFeet +-canEat() +} +class Zebra{ ++bool is_wild ++run() +}

Entity relationship diagram +#

erDiagram +CUSTOMER }|..|{ DELIVERY-ADDRESS : has +CUSTOMER ||--o{ ORDER : places +CUSTOMER ||--o{ INVOICE : "liable for" +DELIVERY-ADDRESS ||--o{ ORDER : receives +INVOICE ||--|{ ORDER : covers +ORDER ||--|{ ORDER-ITEM : includes +PRODUCT-CATEGORY ||--|{ PRODUCT : contains +PRODUCT ||--o{ ORDER-ITEM : "ordered in"


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/emoji/featured.jpg b/public/samples/emoji/featured.jpg new file mode 100644 index 00000000..ead95a3e Binary files /dev/null and b/public/samples/emoji/featured.jpg differ diff --git a/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_1200x0_resize_q75_box.jpg b/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..2c72b536 Binary files /dev/null and b/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_600x0_resize_q75_box.jpg b/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..49cb34b2 Binary files /dev/null and b/public/samples/emoji/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6397270_600x0_resize_q75_box.jpg differ diff --git a/public/samples/emoji/index.html b/public/samples/emoji/index.html new file mode 100644 index 00000000..82cadab4 --- /dev/null +++ b/public/samples/emoji/index.html @@ -0,0 +1,25 @@ +Emoji 🪂 · Blowfish + + + + + +
  1. Samples/

Emoji 🪂

1 min· +0 +· +0 +· +
emoji +sample

Emoji is supported throughout Blowfish by default. Emoji can be used in titles, menu items and article content.

Note: The rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack.

Emoji replacements are automatic throughout Blowfish, so you can use shorthand codes in your content and front matter and they will be converted to their corresponding symbols at build time.

Example: see_no_evil 🙈, hear_no_evil 🙉, speak_no_evil 🙊.

The Emoji cheat sheet is a useful reference for emoji shorthand codes.



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/external/featured.jpg b/public/samples/external/featured.jpg new file mode 100644 index 00000000..046dbeb2 Binary files /dev/null and b/public/samples/external/featured.jpg differ diff --git a/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_1200x0_resize_q75_box.jpg b/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..226e6e64 Binary files /dev/null and b/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_600x0_resize_q75_box.jpg b/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..fcc7c01d Binary files /dev/null and b/public/samples/external/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1721557_600x0_resize_q75_box.jpg differ diff --git a/public/samples/external/index.html b/public/samples/external/index.html new file mode 100644 index 00000000..7b572eea --- /dev/null +++ b/public/samples/external/index.html @@ -0,0 +1,16 @@ +An External Article · Blowfish + + + + + +
  1. Samples/

An External Article

1 min

This page uses the externalUrl front matter parameter to link to an article outside of this Hugo website.

It’s great for things like linking to posts on Medium or to research papers you may have hosted on third party websites.



Blowfish
Author
Blowfish
A powerful, lightweight theme for Hugo built with Tailwind CSS.

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/icons/featured.jpg b/public/samples/icons/featured.jpg new file mode 100644 index 00000000..0afbee29 Binary files /dev/null and b/public/samples/icons/featured.jpg differ diff --git a/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_1200x0_resize_q75_box.jpg b/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..9bd689b0 Binary files /dev/null and b/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_600x0_resize_q75_box.jpg b/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..b87f0672 Binary files /dev/null and b/public/samples/icons/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_1389352_600x0_resize_q75_box.jpg differ diff --git a/public/samples/icons/index.html b/public/samples/icons/index.html new file mode 100644 index 00000000..068fce56 --- /dev/null +++ b/public/samples/icons/index.html @@ -0,0 +1,72 @@ +Icons · Blowfish + + + + + +
  1. Samples/

Icons

1 min· +0 +· +0 +· +
icons +sample +shortcodes

Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode.

Additionally, custom icons are also fully supported. Simply provide your own SVG icon assets by placing them in the assets/icons/ directory in the root of your project. Any icons in the icons directory will then be available to use throughout the theme. In order achieve automatic color filling every SVG path needs fill=“currentColor” XML attribute.

The full list of built-in icons and their corresponding names can referenced below.

Icon namePreview
amazon
apple
bars
bell
blogger
bomb
bug
check
circle-info
code
codepen
comment
dev
discourse
docker
download
dribbble
edit
email
envelope
eye
facebook
fire
flickr
fork
foursquare
ghost
github
gitlab
globe
goodreads
google
hackernews
hashnode
heart-empty
heart
image
instagram
keybase
kickstarter
ko-fi
lastfm
lightbulb
link
linkedin
list
location-dot
lock
mastodon
medium
microsoft
moon
mug-hot
music
orcid
patreon
paypal
pencil
pgpkey
phone
pinterest
poo
reddit
researchgate
rss
rss-square
search
shield
skull-crossbones
slack
snapchat
soundcloud
stack-overflow
star
steam
stripe
substack
sun
tag
telegram
tiktok
triangle-exclamation
tumblr
twitch
twitter
wand-magic-sparkles
whatsapp
xmark
youtube


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/index.html b/public/samples/index.html new file mode 100644 index 00000000..aff84768 --- /dev/null +++ b/public/samples/index.html @@ -0,0 +1,89 @@ +Samples · Blowfish + + + + + +

Samples

0 +· +0 +· +
Blowfish brings your content to life. 😍

This section contains some demo pages that show how Blowfish renders different types of content. You can also see an example taxonomy listing page.

Sidenote: This page is just a standard Blowfish article listing and Hugo has been configured to generate a samples content type and display article summaries.


Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
Thumbnails
1 min· +0 +· +0 +
thumbnail +sample
Icons
1 min· +0 +· +0 +
icons +sample +shortcodes
Markdown
3 mins· +0 +· +0 +
markdown +css +html +sample
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo
Placeholder Text
·2 mins· +0 +· +0 +
markdown +text +sample +latin
Mathematical notation
1 min· +0 +· +0 +
sample +katex +maths +shortcodes
Diagrams and Flowcharts
2 mins· +0 +· +0 +
mermaid +sample +diagram +shortcodes
Charts
1 min· +0 +· +0 +
chart +sample +graph +shortcodes
Emoji 🪂
1 min· +0 +· +0 +
emoji +sample
An External Article + +
1 min

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/index.xml b/public/samples/index.xml new file mode 100644 index 00000000..b82a52bf --- /dev/null +++ b/public/samples/index.xml @@ -0,0 +1,2 @@ +Samples on Blowfishhttps://nunocoracao.github.io/blowfish/samples/Recent content in Samples on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used.Thumbnailshttps://nunocoracao.github.io/blowfish/samples/thumbnail_sample/Mon, 26 Sep 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/thumbnail_sample/A quick example of how to start using Thumbnails in your artciles.Iconshttps://nunocoracao.github.io/blowfish/samples/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/icons/Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode. +Additionally, custom icons are also fully supported.Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p>Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary.Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p>Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p>Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations.Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid.Emoji :parachute:https://nunocoracao.github.io/blowfish/samples/emoji/Tue, 05 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/emoji/📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸An External Articlehttps://nunocoracao.github.io/blowfish/samples/external/Thu, 24 Jan 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/external/The <code>externalUrl</code> front matter parameter can link to any URL. \ No newline at end of file diff --git a/public/samples/markdown/featured.jpg b/public/samples/markdown/featured.jpg new file mode 100644 index 00000000..fe947062 Binary files /dev/null and b/public/samples/markdown/featured.jpg differ diff --git a/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_1200x0_resize_q75_box.jpg b/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..f904018c Binary files /dev/null and b/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_600x0_resize_q75_box.jpg b/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..4a14f7a8 Binary files /dev/null and b/public/samples/markdown/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_6532481_600x0_resize_q75_box.jpg differ diff --git a/public/samples/markdown/index.html b/public/samples/markdown/index.html new file mode 100644 index 00000000..f50c6205 --- /dev/null +++ b/public/samples/markdown/index.html @@ -0,0 +1,135 @@ +Markdown · Blowfish + + + + + +
  1. Samples/

Markdown

3 mins· +0 +· +0 +· +
markdown +css +html +sample
Table of Contents

This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.

Headings +#

The following HTML <h1><h6> elements represent six levels of section headings. <h1> is the highest section level while <h6> is the lowest.

H1 +#

H2 +#

H3 +#

H4 +#

H5 +#
H6 +#

Paragraph +#

Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.

Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.

Blockquotes +#

The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.

Blockquote without attribution +#

Tiam, ad mint andaepu dandae nostion secatur sequo quae. +Note that you can use Markdown syntax within a blockquote.

Blockquote with attribution +#

Don’t communicate by sharing memory, share memory by communicating.
Rob Pike1

Tables +#

Tables aren’t part of the core Markdown spec, but Hugo supports supports them out-of-the-box.

NameAge
Bob27
Alice23

Inline Markdown within tables +#

ItalicsBoldCode
italicsboldcode

Code Blocks +#

Code block with backticks +#

<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>Example HTML5 Document</title>
+  </head>
+  <body>
+    <p>Test</p>
+  </body>
+</html>
+

Code block indented with four spaces +#

<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+

Code block with Hugo’s internal highlight shortcode +#

 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+
<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>

List Types +#

Ordered List +#

  1. First item
  2. Second item
  3. Third item

Unordered List +#

  • List item
  • Another item
  • And another item

Nested list +#

  • Fruit
    • Apple
    • Orange
    • Banana
  • Dairy
    • Milk
    • Cheese

Other Elements — abbr, sub, sup, kbd, mark +#

GIF is a bitmap image format.

H2O

Xn + Yn = Zn

Press CTRL+ALT+Delete to end the session.

Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures.


  1. The above quote is excerpted from Rob Pike’s talk about nothing during Gopherfest, November 18, 2015. ↩︎



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/mathematical-notation/featured.jpg b/public/samples/mathematical-notation/featured.jpg new file mode 100644 index 00000000..01a75a7e Binary files /dev/null and b/public/samples/mathematical-notation/featured.jpg differ diff --git a/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_1200x0_resize_q75_box.jpg b/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..d38cd512 Binary files /dev/null and b/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_600x0_resize_q75_box.jpg b/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..2ecfe742 Binary files /dev/null and b/public/samples/mathematical-notation/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_3236299_600x0_resize_q75_box.jpg differ diff --git a/public/samples/mathematical-notation/index.html b/public/samples/mathematical-notation/index.html new file mode 100644 index 00000000..77452fcf --- /dev/null +++ b/public/samples/mathematical-notation/index.html @@ -0,0 +1,62 @@ +Mathematical notation · Blowfish + + + + + + + +
  1. Samples/

Mathematical notation

1 min· +0 +· +0 +· +
sample +katex +maths +shortcodes
Table of Contents

KaTeX can be used to render mathematical notation within articles.

Blowfish will only bundle the KaTeX assets into your project if you make use of mathematical notation. In order for this to work, simply include the katex shortcode within the article. Example below:

{{< katex >}}
+

Any KaTeX syntax on that page will then be automatically rendered. Use the online reference of supported TeX functions for the available syntax.

Inline notation +#

Inline notation can be generated by wrapping the expression in \\( and \\) delimiters.

Example:

% KaTeX inline notation
+Inline notation: \\(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\\)
+

Inline notation: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)

Block notation +#

Alternatively, block notation can be generated using $$ delimiters. This will output the expression in its own HTML block.

Example:

% KaTeX block notation
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
+

$$ +\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } +$$



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/multiple-authors/featured.jpg b/public/samples/multiple-authors/featured.jpg new file mode 100644 index 00000000..35b66e15 Binary files /dev/null and b/public/samples/multiple-authors/featured.jpg differ diff --git a/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_1200x0_resize_q75_box.jpg b/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..125963e8 Binary files /dev/null and b/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_600x0_resize_q75_box.jpg b/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..12f903b4 Binary files /dev/null and b/public/samples/multiple-authors/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_891670_600x0_resize_q75_box.jpg differ diff --git a/public/samples/multiple-authors/index.html b/public/samples/multiple-authors/index.html new file mode 100644 index 00000000..f6aaf48a --- /dev/null +++ b/public/samples/multiple-authors/index.html @@ -0,0 +1,64 @@ +Multiple Authors · Blowfish + + + + + +
  1. Samples/

Multiple Authors

1 min· +0 +· +0 +· +
Nuno Coração
Dummy Second Author
authors +sample

This is an example of how an article with multiple authors will look like.



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/page/1/index.html b/public/samples/page/1/index.html new file mode 100644 index 00000000..d3f9ab6a --- /dev/null +++ b/public/samples/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/samples/ \ No newline at end of file diff --git a/public/samples/placeholder-text/index.html b/public/samples/placeholder-text/index.html new file mode 100644 index 00000000..3edd1bb1 --- /dev/null +++ b/public/samples/placeholder-text/index.html @@ -0,0 +1,58 @@ +Placeholder Text · Blowfish + + + + + +
  1. Samples/

Placeholder Text

·2 mins· +0 +· +0 +· +
markdown +text +sample +latin
Table of Contents

Lorem est tota propiore conpellat pectoribus de pectora summo.

Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.

  1. Exierant elisi ambit vivere dedere
  2. Duce pollice
  3. Eris modo
  4. Spargitque ferrea quos palude

Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.

  1. Comas hunc haec pietate fetum procerum dixit
  2. Post torum vates letum Tiresia
  3. Flumen querellas
  4. Arcanaque montibus omnes
  5. Quidem et

Vagus elidunt +#

The Van de Graaf Canon

Mane refeci capiebant unda mulcebat +#

Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. Faces illo pepulere tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.

Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.

Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel mitis temploque vocatus, inque alis, oculos nomen non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides parte.



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/rich-content/featured.jpg b/public/samples/rich-content/featured.jpg new file mode 100644 index 00000000..e3bf88d2 Binary files /dev/null and b/public/samples/rich-content/featured.jpg differ diff --git a/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_1200x0_resize_q75_box.jpg b/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..229f7c1a Binary files /dev/null and b/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_600x0_resize_q75_box.jpg b/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..fcf491c6 Binary files /dev/null and b/public/samples/rich-content/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_573680_600x0_resize_q75_box.jpg differ diff --git a/public/samples/rich-content/index.html b/public/samples/rich-content/index.html new file mode 100644 index 00000000..57e9d1f6 --- /dev/null +++ b/public/samples/rich-content/index.html @@ -0,0 +1,70 @@ +Rich Content · Blowfish + + + + + +
  1. Samples/

Rich Content

1 min· +0 +· +0 +· +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo
Table of Contents

Hugo ships with several built-in shortcodes for rich content, along with a privacy config and a set of simple shortcodes that enable static and no-JS versions of various social media embeds.

YouTube +#

Below is an example using the built-in youtube shortcode.

Twitter +#

This example uses the twitter_simple shortcode to output a Tweet. It requires two named parameters user and id.

Alternatively, the tweet shortcode can be used to embed a fully marked up Twitter card.

Gist +#

The gist shortcode can be used to embed a GitHub Gist. It requires two unnamed parameters: the username and ID of the Gist.

Vimeo +#

The vimeo_simple shortcode will embed a Vimeo video.

Sing Jan Swing - Kinetic Type


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/samples/thumbnail_sample/featured.jpg b/public/samples/thumbnail_sample/featured.jpg new file mode 100644 index 00000000..ab14a7f0 Binary files /dev/null and b/public/samples/thumbnail_sample/featured.jpg differ diff --git a/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_1200x0_resize_q75_box.jpg b/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_1200x0_resize_q75_box.jpg new file mode 100644 index 00000000..d00ff0ed Binary files /dev/null and b/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_1200x0_resize_q75_box.jpg differ diff --git a/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_600x0_resize_q75_box.jpg b/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_600x0_resize_q75_box.jpg new file mode 100644 index 00000000..f9380bec Binary files /dev/null and b/public/samples/thumbnail_sample/featured_hu3d03a01dcc18bc5be0e67db3d8d209a6_2207798_600x0_resize_q75_box.jpg differ diff --git a/public/samples/thumbnail_sample/index.html b/public/samples/thumbnail_sample/index.html new file mode 100644 index 00000000..34767247 --- /dev/null +++ b/public/samples/thumbnail_sample/index.html @@ -0,0 +1,77 @@ +Thumbnails · Blowfish + + + + + +
  1. Samples/

Thumbnails

1 min· +0 +· +0 +· +
thumbnail +sample

A quick example of how to start using Thumbnails in your articles.

If your average directory for an article looks like this:

content
+└── awesome_article.md
+

You need to change it from a single markdown file into a folder. Create a directory with the same name of the article, inside create a index.md file. You’ll get a structure similar to what’s below.

content
+└── awesome_article
+    └── featured.png
+

Inside the article you can now add an image file (almost all formats are supported but we recommend .png or .jpg) that starts with feature*. Example below.

content
+└── awesome_article
+    ├── index.md
+    └── featured.png
+

This will tell Blowfish that this article has a feature image that can be used both as a thumbnail across your website as well as for oEmbed cards across social platforms. As an example, you can try copy pasting the URL of this article into a platform that shows oEmbeds (e.g. Twitter, WhatsApp, Telegram, etc) and see what is displayed.



© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/series/documentation/index.html b/public/series/documentation/index.html new file mode 100644 index 00000000..365e935e --- /dev/null +++ b/public/series/documentation/index.html @@ -0,0 +1,114 @@ +Documentation · Blowfish + + + + + +
\ No newline at end of file diff --git a/public/series/documentation/index.xml b/public/series/documentation/index.xml new file mode 100644 index 00000000..0eba67a1 --- /dev/null +++ b/public/series/documentation/index.xml @@ -0,0 +1,7 @@ +Documentation on Blowfishhttps://nunocoracao.github.io/blowfish/series/documentation/Recent content in Documentation on BlowfishHugo -- gohugo.ioenWed, 19 Jan 2022 00:00:00 +0000Welcome to Blowfishhttps://nunocoracao.github.io/blowfish/docs/welcome/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/welcome/Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.Installationhttps://nunocoracao.github.io/blowfish/docs/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/installation/Simply follow the standard Hugo Quick Start procedure to get up and running quickly. +Detailed installation instructions can be found below. Instructions for updating the theme are also available. +Installation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.Getting Startedhttps://nunocoracao.github.io/blowfish/docs/getting-started/Sat, 15 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/getting-started/This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.Configurationhttps://nunocoracao.github.io/blowfish/docs/configuration/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/configuration/Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. +The theme ships with a default configuration that gets you up and running with a basic blog or static website.Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.Content Exampleshttps://nunocoracao.github.io/blowfish/docs/content-examples/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/content-examples/If you&rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.Serieshttps://nunocoracao.github.io/blowfish/docs/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/series/Blowfish provides a feature to group a set of articles together under a &ldquo;series&rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them.Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme.Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts. \ No newline at end of file diff --git a/public/series/documentation/page/1/index.html b/public/series/documentation/page/1/index.html new file mode 100644 index 00000000..234228b1 --- /dev/null +++ b/public/series/documentation/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/series/documentation/ \ No newline at end of file diff --git a/public/series/index.html b/public/series/index.html index a2923abf..179a5b50 100644 --- a/public/series/index.html +++ b/public/series/index.html @@ -1,423 +1,23 @@ - - - - - - - - - - - - Series · Blowfish - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- - - - - -
- -

Series

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

- © - 2022 - Your name here -

- - - - -

- - - Powered by Hugo & Blowfish -

- - -
- - - - - - -
- -
- - - +Series · Blowfish + + + + + +

Series

0 +· +0 +· +

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/series/index.xml b/public/series/index.xml index fb822769..f8999954 100644 --- a/public/series/index.xml +++ b/public/series/index.xml @@ -1,10 +1 @@ - - - - Series on Blowfish - /series/ - Recent content in Series on Blowfish - Hugo -- gohugo.io - en - - +Series on Blowfishhttps://nunocoracao.github.io/blowfish/series/Recent content in Series on BlowfishHugo -- gohugo.ioenWed, 19 Jan 2022 00:00:00 +0000Documentationhttps://nunocoracao.github.io/blowfish/series/documentation/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/series/documentation/ \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml index 1542a5cf..f7445d7a 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,45 +1 @@ - - - - - - /authors/ - daily - 0.5 - - - - - - / - daily - 0.5 - - - - - - /categories/ - daily - 0.5 - - - - - - /series/ - daily - 0.5 - - - - - - /tags/ - daily - 0.5 - - - - +https://nunocoracao.github.io/blowfish/examples/blowfish-lite/2022-11-07T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/2022-11-07T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/2022-11-07T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/blowfish-artist/2022-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/blowfish-lowkey/2022-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/multiple-authors/2022-10-12T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/2022-10-12T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/thumbnail_sample/2022-09-26T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/posts/2022-06-13T20:55:37+01:00always0.5https://nunocoracao.github.io/blowfish/docs/2022-01-19T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/welcome/2022-01-19T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/repo-blowfish-lite/2021-11-07T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/repo-blowfish-artist/2021-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/repo-blowfish-lowkey/2021-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/blowfish-template/2020-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/examples/blowfish-template-repo/2020-11-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/installation/2020-08-16T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/getting-started/2020-08-15T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/configuration/2020-08-14T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/icons/2022-03-09T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/users/2020-08-14T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/homepage-layout/2020-08-13T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/front-matter/2020-08-12T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/thumbnails/2020-08-12T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/shortcodes/2020-08-11T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/multi-author/2020-08-10T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/partials/2020-08-10T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/content-examples/2020-08-09T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/series/2020-08-09T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/advanced-customisation/2020-08-08T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/hosting-deployment/2020-08-07T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/docs/firebase-views/2020-08-03T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/markdown/2019-03-11T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/rich-content/2019-03-10T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/mathematical-notation/2019-03-08T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/charts/2019-03-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/2019-03-06T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/samples/emoji/2019-03-05T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/guides/template/1987-12-22T00:00:00+00:00always0.5https://nunocoracao.github.io/blowfish/guides/1987-12-22T00:00:00+00:00always0.5 \ No newline at end of file diff --git a/public/tags/advanced/featured.png b/public/tags/advanced/featured.png new file mode 100644 index 00000000..81dda1a9 Binary files /dev/null and b/public/tags/advanced/featured.png differ diff --git a/public/tags/advanced/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png b/public/tags/advanced/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png new file mode 100644 index 00000000..5a6e38bc Binary files /dev/null and b/public/tags/advanced/featured_hu61945c9a50a7e783444cb54fb71dc68a_650977_1200x0_resize_box_3.png differ diff --git a/public/tags/advanced/index.html b/public/tags/advanced/index.html new file mode 100644 index 00000000..90c6387b --- /dev/null +++ b/public/tags/advanced/index.html @@ -0,0 +1,27 @@ +Advanced · Blowfish + + + + + +

Advanced

0 +· +0 +· +

This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. 🚀

You can also use these content pages to define Hugo metadata like titles and descriptions that will be used for SEO and other purposes.

Advanced Customisation
9 mins· +0 +· +0 +
Advanced +css +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/advanced/index.xml b/public/tags/advanced/index.xml new file mode 100644 index 00000000..b0402553 --- /dev/null +++ b/public/tags/advanced/index.xml @@ -0,0 +1 @@ +Advanced on Blowfishhttps://nunocoracao.github.io/blowfish/tags/advanced/Recent content in Advanced on BlowfishHugo -- gohugo.ioenSat, 08 Aug 2020 00:00:00 +0000Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result. \ No newline at end of file diff --git a/public/tags/advanced/page/1/index.html b/public/tags/advanced/page/1/index.html new file mode 100644 index 00000000..b79435bd --- /dev/null +++ b/public/tags/advanced/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/advanced/ \ No newline at end of file diff --git a/public/tags/analytics/index.html b/public/tags/analytics/index.html new file mode 100644 index 00000000..b13dfb0c --- /dev/null +++ b/public/tags/analytics/index.html @@ -0,0 +1,31 @@ +analytics · Blowfish + + + + + +

analytics

0 +· +0 +· +
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/analytics/index.xml b/public/tags/analytics/index.xml new file mode 100644 index 00000000..76930f51 --- /dev/null +++ b/public/tags/analytics/index.xml @@ -0,0 +1,2 @@ +analytics on Blowfishhttps://nunocoracao.github.io/blowfish/tags/analytics/Recent content in analytics on BlowfishHugo -- gohugo.ioenMon, 10 Aug 2020 00:00:00 +0000Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params. \ No newline at end of file diff --git a/public/tags/analytics/page/1/index.html b/public/tags/analytics/page/1/index.html new file mode 100644 index 00000000..b9473f5d --- /dev/null +++ b/public/tags/analytics/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/analytics/ \ No newline at end of file diff --git a/public/tags/authors/index.html b/public/tags/authors/index.html new file mode 100644 index 00000000..eaa48c15 --- /dev/null +++ b/public/tags/authors/index.html @@ -0,0 +1,32 @@ +authors · Blowfish + + + + + +

authors

0 +· +0 +· +
Multiple Authors
1 min· +0 +· +0 +
Nuno Coração
Dummy Second Author
authors +sample
Multiple Authors
4 mins· +0 +· +0 +
authors +config +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/authors/index.xml b/public/tags/authors/index.xml new file mode 100644 index 00000000..5cf66a05 --- /dev/null +++ b/public/tags/authors/index.xml @@ -0,0 +1 @@ +authors on Blowfishhttps://nunocoracao.github.io/blowfish/tags/authors/Recent content in authors on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature. \ No newline at end of file diff --git a/public/tags/authors/page/1/index.html b/public/tags/authors/page/1/index.html new file mode 100644 index 00000000..90c163d7 --- /dev/null +++ b/public/tags/authors/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/authors/ \ No newline at end of file diff --git a/public/tags/chart/index.html b/public/tags/chart/index.html new file mode 100644 index 00000000..fd2b7215 --- /dev/null +++ b/public/tags/chart/index.html @@ -0,0 +1,28 @@ +chart · Blowfish + + + + + +

chart

0 +· +0 +· +
Charts
1 min· +0 +· +0 +
chart +sample +graph +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/chart/index.xml b/public/tags/chart/index.xml new file mode 100644 index 00000000..601210d5 --- /dev/null +++ b/public/tags/chart/index.xml @@ -0,0 +1 @@ +chart on Blowfishhttps://nunocoracao.github.io/blowfish/tags/chart/Recent content in chart on BlowfishHugo -- gohugo.ioenWed, 06 Mar 2019 00:00:00 +0000Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations. \ No newline at end of file diff --git a/public/tags/chart/page/1/index.html b/public/tags/chart/page/1/index.html new file mode 100644 index 00000000..73240310 --- /dev/null +++ b/public/tags/chart/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/chart/ \ No newline at end of file diff --git a/public/tags/comments/index.html b/public/tags/comments/index.html new file mode 100644 index 00000000..8d72cca9 --- /dev/null +++ b/public/tags/comments/index.html @@ -0,0 +1,31 @@ +comments · Blowfish + + + + + +

comments

0 +· +0 +· +
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/comments/index.xml b/public/tags/comments/index.xml new file mode 100644 index 00000000..244be2fe --- /dev/null +++ b/public/tags/comments/index.xml @@ -0,0 +1,2 @@ +comments on Blowfishhttps://nunocoracao.github.io/blowfish/tags/comments/Recent content in comments on BlowfishHugo -- gohugo.ioenMon, 10 Aug 2020 00:00:00 +0000Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params. \ No newline at end of file diff --git a/public/tags/comments/page/1/index.html b/public/tags/comments/page/1/index.html new file mode 100644 index 00000000..90b221cf --- /dev/null +++ b/public/tags/comments/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/comments/ \ No newline at end of file diff --git a/public/tags/config/index.html b/public/tags/config/index.html new file mode 100644 index 00000000..2bd71513 --- /dev/null +++ b/public/tags/config/index.html @@ -0,0 +1,44 @@ +config · Blowfish + + + + + +

config

0 +· +0 +· +
Configuration
17 mins· +0 +· +0 +
config +docs
Thumbnails
2 mins· +0 +· +0 +
thumbnail +config +docs
Front Matter
4 mins· +0 +· +0 +
front matter +config +docs
Multiple Authors
4 mins· +0 +· +0 +
authors +config +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/config/index.xml b/public/tags/config/index.xml new file mode 100644 index 00000000..b5f1a8f0 --- /dev/null +++ b/public/tags/config/index.xml @@ -0,0 +1,2 @@ +config on Blowfishhttps://nunocoracao.github.io/blowfish/tags/config/Recent content in config on BlowfishHugo -- gohugo.ioenFri, 14 Aug 2020 00:00:00 +0000Configurationhttps://nunocoracao.github.io/blowfish/docs/configuration/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/configuration/Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. +The theme ships with a default configuration that gets you up and running with a basic blog or static website.Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature. \ No newline at end of file diff --git a/public/tags/config/page/1/index.html b/public/tags/config/page/1/index.html new file mode 100644 index 00000000..7e913bbd --- /dev/null +++ b/public/tags/config/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/config/ \ No newline at end of file diff --git a/public/tags/content/index.html b/public/tags/content/index.html new file mode 100644 index 00000000..97a3cfb9 --- /dev/null +++ b/public/tags/content/index.html @@ -0,0 +1,26 @@ +content · Blowfish + + + + + +

content

0 +· +0 +· +
Content Examples
10 mins· +0 +· +0 +
content +example

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/content/index.xml b/public/tags/content/index.xml new file mode 100644 index 00000000..21a3e005 --- /dev/null +++ b/public/tags/content/index.xml @@ -0,0 +1 @@ +content on Blowfishhttps://nunocoracao.github.io/blowfish/tags/content/Recent content in content on BlowfishHugo -- gohugo.ioenSun, 09 Aug 2020 00:00:00 +0000Content Exampleshttps://nunocoracao.github.io/blowfish/docs/content-examples/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/content-examples/If you&rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project. \ No newline at end of file diff --git a/public/tags/content/page/1/index.html b/public/tags/content/page/1/index.html new file mode 100644 index 00000000..a78d35e8 --- /dev/null +++ b/public/tags/content/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/content/ \ No newline at end of file diff --git a/public/tags/css/index.html b/public/tags/css/index.html new file mode 100644 index 00000000..3cf4eff4 --- /dev/null +++ b/public/tags/css/index.html @@ -0,0 +1,34 @@ +css · Blowfish + + + + + +

css

0 +· +0 +· +
Advanced Customisation
9 mins· +0 +· +0 +
Advanced +css +docs
Markdown
3 mins· +0 +· +0 +
markdown +css +html +sample

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/css/index.xml b/public/tags/css/index.xml new file mode 100644 index 00000000..cf283858 --- /dev/null +++ b/public/tags/css/index.xml @@ -0,0 +1 @@ +css on Blowfishhttps://nunocoracao.github.io/blowfish/tags/css/Recent content in css on BlowfishHugo -- gohugo.ioenSat, 08 Aug 2020 00:00:00 +0000Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p> \ No newline at end of file diff --git a/public/tags/css/page/1/index.html b/public/tags/css/page/1/index.html new file mode 100644 index 00000000..940261f4 --- /dev/null +++ b/public/tags/css/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/css/ \ No newline at end of file diff --git a/public/tags/deployment/index.html b/public/tags/deployment/index.html new file mode 100644 index 00000000..af0bbed1 --- /dev/null +++ b/public/tags/deployment/index.html @@ -0,0 +1,30 @@ +deployment · Blowfish + + + + + +

deployment

0 +· +0 +· +
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/deployment/index.xml b/public/tags/deployment/index.xml new file mode 100644 index 00000000..53f793d4 --- /dev/null +++ b/public/tags/deployment/index.xml @@ -0,0 +1,2 @@ +deployment on Blowfishhttps://nunocoracao.github.io/blowfish/tags/deployment/Recent content in deployment on BlowfishHugo -- gohugo.ioenFri, 07 Aug 2020 00:00:00 +0000Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/deployment/page/1/index.html b/public/tags/deployment/page/1/index.html new file mode 100644 index 00000000..b245ed40 --- /dev/null +++ b/public/tags/deployment/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/deployment/ \ No newline at end of file diff --git a/public/tags/diagram/index.html b/public/tags/diagram/index.html new file mode 100644 index 00000000..28caffda --- /dev/null +++ b/public/tags/diagram/index.html @@ -0,0 +1,28 @@ +diagram · Blowfish + + + + + +

diagram

0 +· +0 +· +
Diagrams and Flowcharts
2 mins· +0 +· +0 +
mermaid +sample +diagram +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/diagram/index.xml b/public/tags/diagram/index.xml new file mode 100644 index 00000000..81bd5103 --- /dev/null +++ b/public/tags/diagram/index.xml @@ -0,0 +1 @@ +diagram on Blowfishhttps://nunocoracao.github.io/blowfish/tags/diagram/Recent content in diagram on BlowfishHugo -- gohugo.ioenWed, 06 Mar 2019 00:00:00 +0000Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid. \ No newline at end of file diff --git a/public/tags/diagram/page/1/index.html b/public/tags/diagram/page/1/index.html new file mode 100644 index 00000000..c424986d --- /dev/null +++ b/public/tags/diagram/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/diagram/ \ No newline at end of file diff --git a/public/tags/docs/index.html b/public/tags/docs/index.html new file mode 100644 index 00000000..decf0226 --- /dev/null +++ b/public/tags/docs/index.html @@ -0,0 +1,103 @@ +docs · Blowfish + + + + + +
\ No newline at end of file diff --git a/public/tags/docs/index.xml b/public/tags/docs/index.xml new file mode 100644 index 00000000..4178c3b1 --- /dev/null +++ b/public/tags/docs/index.xml @@ -0,0 +1,7 @@ +docs on Blowfishhttps://nunocoracao.github.io/blowfish/tags/docs/Recent content in docs on BlowfishHugo -- gohugo.ioenWed, 19 Jan 2022 00:00:00 +0000Welcome to Blowfishhttps://nunocoracao.github.io/blowfish/docs/welcome/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/welcome/Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision.Installationhttps://nunocoracao.github.io/blowfish/docs/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/installation/Simply follow the standard Hugo Quick Start procedure to get up and running quickly. +Detailed installation instructions can be found below. Instructions for updating the theme are also available. +Installation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.Getting Startedhttps://nunocoracao.github.io/blowfish/docs/getting-started/Sat, 15 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/getting-started/This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.Configurationhttps://nunocoracao.github.io/blowfish/docs/configuration/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/configuration/Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured. +The theme ships with a default configuration that gets you up and running with a basic blog or static website.Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend .Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Multiple Authorshttps://nunocoracao.github.io/blowfish/docs/multi-author/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/multi-author/Some websites have more than one author contributing with content and therefore require more than a single default author across the entire website. For those use-cases, Blowfish allows users to extend the list of authors using the multiple authors feature.Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.Serieshttps://nunocoracao.github.io/blowfish/docs/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/series/Blowfish provides a feature to group a set of articles together under a &ldquo;series&rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them.Advanced Customisationhttps://nunocoracao.github.io/blowfish/docs/advanced-customisation/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/advanced-customisation/There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/docs/page/1/index.html b/public/tags/docs/page/1/index.html new file mode 100644 index 00000000..2561a9b9 --- /dev/null +++ b/public/tags/docs/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/docs/ \ No newline at end of file diff --git a/public/tags/emoji/index.html b/public/tags/emoji/index.html new file mode 100644 index 00000000..0d39ccc6 --- /dev/null +++ b/public/tags/emoji/index.html @@ -0,0 +1,26 @@ +emoji · Blowfish + + + + + +

emoji

0 +· +0 +· +
Emoji 🪂
1 min· +0 +· +0 +
emoji +sample

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/emoji/index.xml b/public/tags/emoji/index.xml new file mode 100644 index 00000000..d74acd74 --- /dev/null +++ b/public/tags/emoji/index.xml @@ -0,0 +1 @@ +emoji on Blowfishhttps://nunocoracao.github.io/blowfish/tags/emoji/Recent content in emoji on BlowfishHugo -- gohugo.ioenTue, 05 Mar 2019 00:00:00 +0000Emoji :parachute:https://nunocoracao.github.io/blowfish/samples/emoji/Tue, 05 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/emoji/📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸 \ No newline at end of file diff --git a/public/tags/emoji/page/1/index.html b/public/tags/emoji/page/1/index.html new file mode 100644 index 00000000..c241f9de --- /dev/null +++ b/public/tags/emoji/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/emoji/ \ No newline at end of file diff --git a/public/tags/example/index.html b/public/tags/example/index.html new file mode 100644 index 00000000..b80c2344 --- /dev/null +++ b/public/tags/example/index.html @@ -0,0 +1,26 @@ +example · Blowfish + + + + + +

example

0 +· +0 +· +
Content Examples
10 mins· +0 +· +0 +
content +example

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/example/index.xml b/public/tags/example/index.xml new file mode 100644 index 00000000..03d43a9c --- /dev/null +++ b/public/tags/example/index.xml @@ -0,0 +1 @@ +example on Blowfishhttps://nunocoracao.github.io/blowfish/tags/example/Recent content in example on BlowfishHugo -- gohugo.ioenSun, 09 Aug 2020 00:00:00 +0000Content Exampleshttps://nunocoracao.github.io/blowfish/docs/content-examples/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/content-examples/If you&rsquo;ve been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project. \ No newline at end of file diff --git a/public/tags/example/page/1/index.html b/public/tags/example/page/1/index.html new file mode 100644 index 00000000..9b18c91b --- /dev/null +++ b/public/tags/example/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/example/ \ No newline at end of file diff --git a/public/tags/favicons/index.html b/public/tags/favicons/index.html new file mode 100644 index 00000000..10fec268 --- /dev/null +++ b/public/tags/favicons/index.html @@ -0,0 +1,31 @@ +favicons · Blowfish + + + + + +

favicons

0 +· +0 +· +
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/favicons/index.xml b/public/tags/favicons/index.xml new file mode 100644 index 00000000..31730fd3 --- /dev/null +++ b/public/tags/favicons/index.xml @@ -0,0 +1,2 @@ +favicons on Blowfishhttps://nunocoracao.github.io/blowfish/tags/favicons/Recent content in favicons on BlowfishHugo -- gohugo.ioenMon, 10 Aug 2020 00:00:00 +0000Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params. \ No newline at end of file diff --git a/public/tags/favicons/page/1/index.html b/public/tags/favicons/page/1/index.html new file mode 100644 index 00000000..dbd1cc9a --- /dev/null +++ b/public/tags/favicons/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/favicons/ \ No newline at end of file diff --git a/public/tags/firebase/index.html b/public/tags/firebase/index.html new file mode 100644 index 00000000..35790509 --- /dev/null +++ b/public/tags/firebase/index.html @@ -0,0 +1,27 @@ +firebase · Blowfish + + + + + +

firebase

0 +· +0 +· +
Firebase: Views & Likes
2 mins· +0 +· +0 +
firebase +views +likes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/firebase/index.xml b/public/tags/firebase/index.xml new file mode 100644 index 00000000..77d1a9ce --- /dev/null +++ b/public/tags/firebase/index.xml @@ -0,0 +1 @@ +firebase on Blowfishhttps://nunocoracao.github.io/blowfish/tags/firebase/Recent content in firebase on BlowfishHugo -- gohugo.ioenMon, 03 Aug 2020 00:00:00 +0000Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts. \ No newline at end of file diff --git a/public/tags/firebase/page/1/index.html b/public/tags/firebase/page/1/index.html new file mode 100644 index 00000000..b02ea4ef --- /dev/null +++ b/public/tags/firebase/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/firebase/ \ No newline at end of file diff --git a/public/tags/front-matter/index.html b/public/tags/front-matter/index.html new file mode 100644 index 00000000..f37c9a8d --- /dev/null +++ b/public/tags/front-matter/index.html @@ -0,0 +1,27 @@ +front matter · Blowfish + + + + + +

front matter

0 +· +0 +· +
Front Matter
4 mins· +0 +· +0 +
front matter +config +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/front-matter/index.xml b/public/tags/front-matter/index.xml new file mode 100644 index 00000000..4c2639ad --- /dev/null +++ b/public/tags/front-matter/index.xml @@ -0,0 +1 @@ +front matter on Blowfishhttps://nunocoracao.github.io/blowfish/tags/front-matter/Recent content in front matter on BlowfishHugo -- gohugo.ioenWed, 12 Aug 2020 00:00:00 +0000Front Matterhttps://nunocoracao.github.io/blowfish/docs/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/front-matter/In addition to the default Hugo front matter parameters, Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below. \ No newline at end of file diff --git a/public/tags/front-matter/page/1/index.html b/public/tags/front-matter/page/1/index.html new file mode 100644 index 00000000..7083023d --- /dev/null +++ b/public/tags/front-matter/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/front-matter/ \ No newline at end of file diff --git a/public/tags/gist/index.html b/public/tags/gist/index.html new file mode 100644 index 00000000..3efd72b7 --- /dev/null +++ b/public/tags/gist/index.html @@ -0,0 +1,31 @@ +gist · Blowfish + + + + + +

gist

0 +· +0 +· +
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/gist/index.xml b/public/tags/gist/index.xml new file mode 100644 index 00000000..cd0fcf87 --- /dev/null +++ b/public/tags/gist/index.xml @@ -0,0 +1 @@ +gist on Blowfishhttps://nunocoracao.github.io/blowfish/tags/gist/Recent content in gist on BlowfishHugo -- gohugo.ioenSun, 10 Mar 2019 00:00:00 +0000Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary. \ No newline at end of file diff --git a/public/tags/gist/page/1/index.html b/public/tags/gist/page/1/index.html new file mode 100644 index 00000000..544562e4 --- /dev/null +++ b/public/tags/gist/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/gist/ \ No newline at end of file diff --git a/public/tags/github/index.html b/public/tags/github/index.html new file mode 100644 index 00000000..27ccb1be --- /dev/null +++ b/public/tags/github/index.html @@ -0,0 +1,30 @@ +github · Blowfish + + + + + +

github

0 +· +0 +· +
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/github/index.xml b/public/tags/github/index.xml new file mode 100644 index 00000000..2a0097d9 --- /dev/null +++ b/public/tags/github/index.xml @@ -0,0 +1,2 @@ +github on Blowfishhttps://nunocoracao.github.io/blowfish/tags/github/Recent content in github on BlowfishHugo -- gohugo.ioenFri, 07 Aug 2020 00:00:00 +0000Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/github/page/1/index.html b/public/tags/github/page/1/index.html new file mode 100644 index 00000000..0543820e --- /dev/null +++ b/public/tags/github/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/github/ \ No newline at end of file diff --git a/public/tags/graph/index.html b/public/tags/graph/index.html new file mode 100644 index 00000000..3cb0a6f1 --- /dev/null +++ b/public/tags/graph/index.html @@ -0,0 +1,28 @@ +graph · Blowfish + + + + + +

graph

0 +· +0 +· +
Charts
1 min· +0 +· +0 +
chart +sample +graph +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/graph/index.xml b/public/tags/graph/index.xml new file mode 100644 index 00000000..3de7b7e9 --- /dev/null +++ b/public/tags/graph/index.xml @@ -0,0 +1 @@ +graph on Blowfishhttps://nunocoracao.github.io/blowfish/tags/graph/Recent content in graph on BlowfishHugo -- gohugo.ioenWed, 06 Mar 2019 00:00:00 +0000Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations. \ No newline at end of file diff --git a/public/tags/graph/page/1/index.html b/public/tags/graph/page/1/index.html new file mode 100644 index 00000000..ace36d29 --- /dev/null +++ b/public/tags/graph/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/graph/ \ No newline at end of file diff --git a/public/tags/homepage/index.html b/public/tags/homepage/index.html new file mode 100644 index 00000000..ef1db9cd --- /dev/null +++ b/public/tags/homepage/index.html @@ -0,0 +1,27 @@ +homepage · Blowfish + + + + + +

homepage

0 +· +0 +· +
Homepage Layout
4 mins· +0 +· +0 +
homepage +layouts +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/homepage/index.xml b/public/tags/homepage/index.xml new file mode 100644 index 00000000..f77039c5 --- /dev/null +++ b/public/tags/homepage/index.xml @@ -0,0 +1 @@ +homepage on Blowfishhttps://nunocoracao.github.io/blowfish/tags/homepage/Recent content in homepage on BlowfishHugo -- gohugo.ioenThu, 13 Aug 2020 00:00:00 +0000Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content. \ No newline at end of file diff --git a/public/tags/homepage/page/1/index.html b/public/tags/homepage/page/1/index.html new file mode 100644 index 00000000..9d71f8d2 --- /dev/null +++ b/public/tags/homepage/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/homepage/ \ No newline at end of file diff --git a/public/tags/hosting/index.html b/public/tags/hosting/index.html new file mode 100644 index 00000000..855b08c5 --- /dev/null +++ b/public/tags/hosting/index.html @@ -0,0 +1,30 @@ +hosting · Blowfish + + + + + +

hosting

0 +· +0 +· +
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/hosting/index.xml b/public/tags/hosting/index.xml new file mode 100644 index 00000000..ebd21113 --- /dev/null +++ b/public/tags/hosting/index.xml @@ -0,0 +1,2 @@ +hosting on Blowfishhttps://nunocoracao.github.io/blowfish/tags/hosting/Recent content in hosting on BlowfishHugo -- gohugo.ioenFri, 07 Aug 2020 00:00:00 +0000Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/hosting/page/1/index.html b/public/tags/hosting/page/1/index.html new file mode 100644 index 00000000..45ca8bad --- /dev/null +++ b/public/tags/hosting/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/hosting/ \ No newline at end of file diff --git a/public/tags/html/index.html b/public/tags/html/index.html new file mode 100644 index 00000000..99a4dbce --- /dev/null +++ b/public/tags/html/index.html @@ -0,0 +1,28 @@ +html · Blowfish + + + + + +

html

0 +· +0 +· +
Markdown
3 mins· +0 +· +0 +
markdown +css +html +sample

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/html/index.xml b/public/tags/html/index.xml new file mode 100644 index 00000000..3f10c7d6 --- /dev/null +++ b/public/tags/html/index.xml @@ -0,0 +1 @@ +html on Blowfishhttps://nunocoracao.github.io/blowfish/tags/html/Recent content in html on BlowfishHugo -- gohugo.ioenMon, 11 Mar 2019 00:00:00 +0000Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p> \ No newline at end of file diff --git a/public/tags/html/page/1/index.html b/public/tags/html/page/1/index.html new file mode 100644 index 00000000..8990710a --- /dev/null +++ b/public/tags/html/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/html/ \ No newline at end of file diff --git a/public/tags/icon/index.html b/public/tags/icon/index.html new file mode 100644 index 00000000..0345f85f --- /dev/null +++ b/public/tags/icon/index.html @@ -0,0 +1,39 @@ +icon · Blowfish + + + + + +

icon

0 +· +0 +· +
Shortcodes
12 mins· +0 +· +0 +
shortcodes +mermaid +icon +lead +docs
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/icon/index.xml b/public/tags/icon/index.xml new file mode 100644 index 00000000..c76f00f3 --- /dev/null +++ b/public/tags/icon/index.xml @@ -0,0 +1,3 @@ +icon on Blowfishhttps://nunocoracao.github.io/blowfish/tags/icon/Recent content in icon on BlowfishHugo -- gohugo.ioenTue, 11 Aug 2020 00:00:00 +0000Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params. \ No newline at end of file diff --git a/public/tags/icon/page/1/index.html b/public/tags/icon/page/1/index.html new file mode 100644 index 00000000..80a026a6 --- /dev/null +++ b/public/tags/icon/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/icon/ \ No newline at end of file diff --git a/public/tags/icons/index.html b/public/tags/icons/index.html new file mode 100644 index 00000000..2342028f --- /dev/null +++ b/public/tags/icons/index.html @@ -0,0 +1,27 @@ +icons · Blowfish + + + + + +

icons

0 +· +0 +· +
Icons
1 min· +0 +· +0 +
icons +sample +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/icons/index.xml b/public/tags/icons/index.xml new file mode 100644 index 00000000..a907f194 --- /dev/null +++ b/public/tags/icons/index.xml @@ -0,0 +1,2 @@ +icons on Blowfishhttps://nunocoracao.github.io/blowfish/tags/icons/Recent content in icons on BlowfishHugo -- gohugo.ioenFri, 14 Aug 2020 00:00:00 +0000Iconshttps://nunocoracao.github.io/blowfish/samples/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/icons/Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode. +Additionally, custom icons are also fully supported. \ No newline at end of file diff --git a/public/tags/icons/page/1/index.html b/public/tags/icons/page/1/index.html new file mode 100644 index 00000000..449dbcd9 --- /dev/null +++ b/public/tags/icons/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/icons/ \ No newline at end of file diff --git a/public/tags/index.html b/public/tags/index.html index 25b08f13..2416ad5c 100644 --- a/public/tags/index.html +++ b/public/tags/index.html @@ -1,423 +1,119 @@ - - - - - - - - - - - - Tags · Blowfish - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - -
- - - - - - - - - - - - - - - -
-
-
- - -
-
- -
-
- - - - - -
- -

Tags

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

- © - 2022 - Your name here -

- - - - -

- - - Powered by Hugo & Blowfish -

- - -
- - - - - - -
- -
- - - +Tags · Blowfish + + + + + +

Tags

0 +· +0 +· +

Blowfish has full support for Hugo taxonomies and will adapt to any taxonomy set up. Taxonomy listings like this one also support custom content to be displayed above the list of terms.

This area could be used to add some extra decriptive text to each taxonomy. Check out the advanced tag below to see how to take this concept even further.


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/index.xml b/public/tags/index.xml index 216bd7bd..80e7e1e3 100644 --- a/public/tags/index.xml +++ b/public/tags/index.xml @@ -1,10 +1 @@ - - - - Tags on Blowfish - /tags/ - Recent content in Tags on Blowfish - Hugo -- gohugo.io - en - - +Tags on Blowfishhttps://nunocoracao.github.io/blowfish/tags/Recent content in Tags on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000authorshttps://nunocoracao.github.io/blowfish/tags/authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/authors/samplehttps://nunocoracao.github.io/blowfish/tags/sample/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/sample/thumbnailhttps://nunocoracao.github.io/blowfish/tags/thumbnail/Mon, 26 Sep 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/thumbnail/docshttps://nunocoracao.github.io/blowfish/tags/docs/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/docs/newhttps://nunocoracao.github.io/blowfish/tags/new/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/new/installationhttps://nunocoracao.github.io/blowfish/tags/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/installation/confighttps://nunocoracao.github.io/blowfish/tags/config/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/config/iconshttps://nunocoracao.github.io/blowfish/tags/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/icons/shortcodeshttps://nunocoracao.github.io/blowfish/tags/shortcodes/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/shortcodes/usershttps://nunocoracao.github.io/blowfish/tags/users/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/users/homepagehttps://nunocoracao.github.io/blowfish/tags/homepage/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/homepage/layoutshttps://nunocoracao.github.io/blowfish/tags/layouts/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/layouts/front matterhttps://nunocoracao.github.io/blowfish/tags/front-matter/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/front-matter/iconhttps://nunocoracao.github.io/blowfish/tags/icon/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/icon/leadhttps://nunocoracao.github.io/blowfish/tags/lead/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/lead/mermaidhttps://nunocoracao.github.io/blowfish/tags/mermaid/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/mermaid/analyticshttps://nunocoracao.github.io/blowfish/tags/analytics/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/analytics/commentshttps://nunocoracao.github.io/blowfish/tags/comments/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/comments/faviconshttps://nunocoracao.github.io/blowfish/tags/favicons/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/favicons/partialshttps://nunocoracao.github.io/blowfish/tags/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/partials/privacyhttps://nunocoracao.github.io/blowfish/tags/privacy/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/privacy/contenthttps://nunocoracao.github.io/blowfish/tags/content/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/content/examplehttps://nunocoracao.github.io/blowfish/tags/example/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/example/serieshttps://nunocoracao.github.io/blowfish/tags/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/series/Advancedhttps://nunocoracao.github.io/blowfish/tags/advanced/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/advanced/This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing.csshttps://nunocoracao.github.io/blowfish/tags/css/Sat, 08 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/css/deploymenthttps://nunocoracao.github.io/blowfish/tags/deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/deployment/githubhttps://nunocoracao.github.io/blowfish/tags/github/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/github/hostinghttps://nunocoracao.github.io/blowfish/tags/hosting/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/hosting/netlifyhttps://nunocoracao.github.io/blowfish/tags/netlify/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/netlify/renderhttps://nunocoracao.github.io/blowfish/tags/render/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/render/firebasehttps://nunocoracao.github.io/blowfish/tags/firebase/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/firebase/likeshttps://nunocoracao.github.io/blowfish/tags/likes/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/likes/viewshttps://nunocoracao.github.io/blowfish/tags/views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/views/htmlhttps://nunocoracao.github.io/blowfish/tags/html/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/html/markdownhttps://nunocoracao.github.io/blowfish/tags/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/markdown/gisthttps://nunocoracao.github.io/blowfish/tags/gist/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/gist/twitterhttps://nunocoracao.github.io/blowfish/tags/twitter/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/twitter/vimeohttps://nunocoracao.github.io/blowfish/tags/vimeo/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/vimeo/youtubehttps://nunocoracao.github.io/blowfish/tags/youtube/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/youtube/latinhttps://nunocoracao.github.io/blowfish/tags/latin/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/latin/texthttps://nunocoracao.github.io/blowfish/tags/text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/text/katexhttps://nunocoracao.github.io/blowfish/tags/katex/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/katex/mathshttps://nunocoracao.github.io/blowfish/tags/maths/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/maths/charthttps://nunocoracao.github.io/blowfish/tags/chart/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/chart/diagramhttps://nunocoracao.github.io/blowfish/tags/diagram/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/diagram/graphhttps://nunocoracao.github.io/blowfish/tags/graph/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/graph/emojihttps://nunocoracao.github.io/blowfish/tags/emoji/Tue, 05 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/emoji/templatehttps://nunocoracao.github.io/blowfish/tags/template/Tue, 22 Dec 1987 00:00:00 +0000https://nunocoracao.github.io/blowfish/tags/template/ \ No newline at end of file diff --git a/public/tags/installation/index.html b/public/tags/installation/index.html new file mode 100644 index 00000000..93d86878 --- /dev/null +++ b/public/tags/installation/index.html @@ -0,0 +1,31 @@ +installation · Blowfish + + + + + +

installation

0 +· +0 +· +
Installation
5 mins· +0 +· +0 +
installation +docs
Getting Started
7 mins· +0 +· +0 +
installation +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/installation/index.xml b/public/tags/installation/index.xml new file mode 100644 index 00000000..096e11da --- /dev/null +++ b/public/tags/installation/index.xml @@ -0,0 +1,3 @@ +installation on Blowfishhttps://nunocoracao.github.io/blowfish/tags/installation/Recent content in installation on BlowfishHugo -- gohugo.ioenSun, 16 Aug 2020 00:00:00 +0000Installationhttps://nunocoracao.github.io/blowfish/docs/installation/Sun, 16 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/installation/Simply follow the standard Hugo Quick Start procedure to get up and running quickly. +Detailed installation instructions can be found below. Instructions for updating the theme are also available. +Installation # These instructions will get you up and running using Hugo and Blowfish from a completely blank state.Getting Startedhttps://nunocoracao.github.io/blowfish/docs/getting-started/Sat, 15 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/getting-started/This section assumes you have already installed the Blowfish theme. The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature. \ No newline at end of file diff --git a/public/tags/installation/page/1/index.html b/public/tags/installation/page/1/index.html new file mode 100644 index 00000000..8bbb9418 --- /dev/null +++ b/public/tags/installation/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/installation/ \ No newline at end of file diff --git a/public/tags/katex/index.html b/public/tags/katex/index.html new file mode 100644 index 00000000..b0224282 --- /dev/null +++ b/public/tags/katex/index.html @@ -0,0 +1,28 @@ +katex · Blowfish + + + + + +

katex

0 +· +0 +· +
Mathematical notation
1 min· +0 +· +0 +
sample +katex +maths +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/katex/index.xml b/public/tags/katex/index.xml new file mode 100644 index 00000000..8eb926d0 --- /dev/null +++ b/public/tags/katex/index.xml @@ -0,0 +1 @@ +katex on Blowfishhttps://nunocoracao.github.io/blowfish/tags/katex/Recent content in katex on BlowfishHugo -- gohugo.ioenFri, 08 Mar 2019 00:00:00 +0000Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p> \ No newline at end of file diff --git a/public/tags/katex/page/1/index.html b/public/tags/katex/page/1/index.html new file mode 100644 index 00000000..5a5aba8e --- /dev/null +++ b/public/tags/katex/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/katex/ \ No newline at end of file diff --git a/public/tags/latin/index.html b/public/tags/latin/index.html new file mode 100644 index 00000000..af809f52 --- /dev/null +++ b/public/tags/latin/index.html @@ -0,0 +1,28 @@ +latin · Blowfish + + + + + +

latin

0 +· +0 +· +
Placeholder Text
·2 mins· +0 +· +0 +
markdown +text +sample +latin

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/latin/index.xml b/public/tags/latin/index.xml new file mode 100644 index 00000000..85fca3bf --- /dev/null +++ b/public/tags/latin/index.xml @@ -0,0 +1 @@ +latin on Blowfishhttps://nunocoracao.github.io/blowfish/tags/latin/Recent content in latin on BlowfishHugo -- gohugo.ioenSat, 09 Mar 2019 00:00:00 +0000Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p> \ No newline at end of file diff --git a/public/tags/latin/page/1/index.html b/public/tags/latin/page/1/index.html new file mode 100644 index 00000000..0634b49a --- /dev/null +++ b/public/tags/latin/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/latin/ \ No newline at end of file diff --git a/public/tags/layouts/index.html b/public/tags/layouts/index.html new file mode 100644 index 00000000..ca6b7017 --- /dev/null +++ b/public/tags/layouts/index.html @@ -0,0 +1,27 @@ +layouts · Blowfish + + + + + +

layouts

0 +· +0 +· +
Homepage Layout
4 mins· +0 +· +0 +
homepage +layouts +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/layouts/index.xml b/public/tags/layouts/index.xml new file mode 100644 index 00000000..b224dd06 --- /dev/null +++ b/public/tags/layouts/index.xml @@ -0,0 +1 @@ +layouts on Blowfishhttps://nunocoracao.github.io/blowfish/tags/layouts/Recent content in layouts on BlowfishHugo -- gohugo.ioenThu, 13 Aug 2020 00:00:00 +0000Homepage Layouthttps://nunocoracao.github.io/blowfish/docs/homepage-layout/Thu, 13 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/homepage-layout/Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content. \ No newline at end of file diff --git a/public/tags/layouts/page/1/index.html b/public/tags/layouts/page/1/index.html new file mode 100644 index 00000000..968316dd --- /dev/null +++ b/public/tags/layouts/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/layouts/ \ No newline at end of file diff --git a/public/tags/lead/index.html b/public/tags/lead/index.html new file mode 100644 index 00000000..b48c974d --- /dev/null +++ b/public/tags/lead/index.html @@ -0,0 +1,29 @@ +lead · Blowfish + + + + + +

lead

0 +· +0 +· +
Shortcodes
12 mins· +0 +· +0 +
shortcodes +mermaid +icon +lead +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/lead/index.xml b/public/tags/lead/index.xml new file mode 100644 index 00000000..9b2bd599 --- /dev/null +++ b/public/tags/lead/index.xml @@ -0,0 +1,2 @@ +lead on Blowfishhttps://nunocoracao.github.io/blowfish/tags/lead/Recent content in lead on BlowfishHugo -- gohugo.ioenTue, 11 Aug 2020 00:00:00 +0000Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss. \ No newline at end of file diff --git a/public/tags/lead/page/1/index.html b/public/tags/lead/page/1/index.html new file mode 100644 index 00000000..196a8ded --- /dev/null +++ b/public/tags/lead/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/lead/ \ No newline at end of file diff --git a/public/tags/likes/index.html b/public/tags/likes/index.html new file mode 100644 index 00000000..6b2d8181 --- /dev/null +++ b/public/tags/likes/index.html @@ -0,0 +1,27 @@ +likes · Blowfish + + + + + +

likes

0 +· +0 +· +
Firebase: Views & Likes
2 mins· +0 +· +0 +
firebase +views +likes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/likes/index.xml b/public/tags/likes/index.xml new file mode 100644 index 00000000..dccd1c9f --- /dev/null +++ b/public/tags/likes/index.xml @@ -0,0 +1 @@ +likes on Blowfishhttps://nunocoracao.github.io/blowfish/tags/likes/Recent content in likes on BlowfishHugo -- gohugo.ioenMon, 03 Aug 2020 00:00:00 +0000Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts. \ No newline at end of file diff --git a/public/tags/likes/page/1/index.html b/public/tags/likes/page/1/index.html new file mode 100644 index 00000000..8980eff6 --- /dev/null +++ b/public/tags/likes/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/likes/ \ No newline at end of file diff --git a/public/tags/markdown/index.html b/public/tags/markdown/index.html new file mode 100644 index 00000000..17257516 --- /dev/null +++ b/public/tags/markdown/index.html @@ -0,0 +1,35 @@ +markdown · Blowfish + + + + + +

markdown

0 +· +0 +· +
Markdown
3 mins· +0 +· +0 +
markdown +css +html +sample
Placeholder Text
·2 mins· +0 +· +0 +
markdown +text +sample +latin

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/markdown/index.xml b/public/tags/markdown/index.xml new file mode 100644 index 00000000..3061cef7 --- /dev/null +++ b/public/tags/markdown/index.xml @@ -0,0 +1 @@ +markdown on Blowfishhttps://nunocoracao.github.io/blowfish/tags/markdown/Recent content in markdown on BlowfishHugo -- gohugo.ioenMon, 11 Mar 2019 00:00:00 +0000Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p>Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p> \ No newline at end of file diff --git a/public/tags/markdown/page/1/index.html b/public/tags/markdown/page/1/index.html new file mode 100644 index 00000000..6a659ee8 --- /dev/null +++ b/public/tags/markdown/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/markdown/ \ No newline at end of file diff --git a/public/tags/maths/index.html b/public/tags/maths/index.html new file mode 100644 index 00000000..d2be5b6b --- /dev/null +++ b/public/tags/maths/index.html @@ -0,0 +1,28 @@ +maths · Blowfish + + + + + +

maths

0 +· +0 +· +
Mathematical notation
1 min· +0 +· +0 +
sample +katex +maths +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/maths/index.xml b/public/tags/maths/index.xml new file mode 100644 index 00000000..dab32c4a --- /dev/null +++ b/public/tags/maths/index.xml @@ -0,0 +1 @@ +maths on Blowfishhttps://nunocoracao.github.io/blowfish/tags/maths/Recent content in maths on BlowfishHugo -- gohugo.ioenFri, 08 Mar 2019 00:00:00 +0000Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p> \ No newline at end of file diff --git a/public/tags/maths/page/1/index.html b/public/tags/maths/page/1/index.html new file mode 100644 index 00000000..eaa8a585 --- /dev/null +++ b/public/tags/maths/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/maths/ \ No newline at end of file diff --git a/public/tags/mermaid/index.html b/public/tags/mermaid/index.html new file mode 100644 index 00000000..a2fff1d7 --- /dev/null +++ b/public/tags/mermaid/index.html @@ -0,0 +1,36 @@ +mermaid · Blowfish + + + + + +

mermaid

0 +· +0 +· +
Shortcodes
12 mins· +0 +· +0 +
shortcodes +mermaid +icon +lead +docs
Diagrams and Flowcharts
2 mins· +0 +· +0 +
mermaid +sample +diagram +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/mermaid/index.xml b/public/tags/mermaid/index.xml new file mode 100644 index 00000000..59343b5f --- /dev/null +++ b/public/tags/mermaid/index.xml @@ -0,0 +1,2 @@ +mermaid on Blowfishhttps://nunocoracao.github.io/blowfish/tags/mermaid/Recent content in mermaid on BlowfishHugo -- gohugo.ioenTue, 11 Aug 2020 00:00:00 +0000Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid. \ No newline at end of file diff --git a/public/tags/mermaid/page/1/index.html b/public/tags/mermaid/page/1/index.html new file mode 100644 index 00000000..589615eb --- /dev/null +++ b/public/tags/mermaid/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/mermaid/ \ No newline at end of file diff --git a/public/tags/netlify/index.html b/public/tags/netlify/index.html new file mode 100644 index 00000000..a583d83f --- /dev/null +++ b/public/tags/netlify/index.html @@ -0,0 +1,30 @@ +netlify · Blowfish + + + + + +

netlify

0 +· +0 +· +
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/netlify/index.xml b/public/tags/netlify/index.xml new file mode 100644 index 00000000..ed8ec125 --- /dev/null +++ b/public/tags/netlify/index.xml @@ -0,0 +1,2 @@ +netlify on Blowfishhttps://nunocoracao.github.io/blowfish/tags/netlify/Recent content in netlify on BlowfishHugo -- gohugo.ioenFri, 07 Aug 2020 00:00:00 +0000Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/netlify/page/1/index.html b/public/tags/netlify/page/1/index.html new file mode 100644 index 00000000..365d5b9b --- /dev/null +++ b/public/tags/netlify/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/netlify/ \ No newline at end of file diff --git a/public/tags/new/index.html b/public/tags/new/index.html new file mode 100644 index 00000000..5608067e --- /dev/null +++ b/public/tags/new/index.html @@ -0,0 +1,26 @@ +new · Blowfish + + + + + +

new

0 +· +0 +· +
Welcome to Blowfish
3 mins· +0 +· +0 +
new +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/new/index.xml b/public/tags/new/index.xml new file mode 100644 index 00000000..fff274ef --- /dev/null +++ b/public/tags/new/index.xml @@ -0,0 +1 @@ +new on Blowfishhttps://nunocoracao.github.io/blowfish/tags/new/Recent content in new on BlowfishHugo -- gohugo.ioenWed, 19 Jan 2022 00:00:00 +0000Welcome to Blowfishhttps://nunocoracao.github.io/blowfish/docs/welcome/Wed, 19 Jan 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/welcome/Blowfish is packed with tons of features. The original aim of Blowfish was to develop a theme that was simple and lightweight. The theme is a fork of Congo and expands its initial vision. \ No newline at end of file diff --git a/public/tags/new/page/1/index.html b/public/tags/new/page/1/index.html new file mode 100644 index 00000000..bd5cb378 --- /dev/null +++ b/public/tags/new/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/new/ \ No newline at end of file diff --git a/public/tags/partials/index.html b/public/tags/partials/index.html new file mode 100644 index 00000000..e7ecbb0a --- /dev/null +++ b/public/tags/partials/index.html @@ -0,0 +1,31 @@ +partials · Blowfish + + + + + +

partials

0 +· +0 +· +
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/partials/index.xml b/public/tags/partials/index.xml new file mode 100644 index 00000000..50b5545e --- /dev/null +++ b/public/tags/partials/index.xml @@ -0,0 +1,2 @@ +partials on Blowfishhttps://nunocoracao.github.io/blowfish/tags/partials/Recent content in partials on BlowfishHugo -- gohugo.ioenMon, 10 Aug 2020 00:00:00 +0000Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params. \ No newline at end of file diff --git a/public/tags/partials/page/1/index.html b/public/tags/partials/page/1/index.html new file mode 100644 index 00000000..75f7c06a --- /dev/null +++ b/public/tags/partials/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/partials/ \ No newline at end of file diff --git a/public/tags/privacy/index.html b/public/tags/privacy/index.html new file mode 100644 index 00000000..b5ad4a6a --- /dev/null +++ b/public/tags/privacy/index.html @@ -0,0 +1,41 @@ +privacy · Blowfish + + + + + +

privacy

0 +· +0 +· +
Partials
4 mins· +0 +· +0 +
partials +analytics +privacy +comments +favicons +icon +docs
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/privacy/index.xml b/public/tags/privacy/index.xml new file mode 100644 index 00000000..330263d5 --- /dev/null +++ b/public/tags/privacy/index.xml @@ -0,0 +1,2 @@ +privacy on Blowfishhttps://nunocoracao.github.io/blowfish/tags/privacy/Recent content in privacy on BlowfishHugo -- gohugo.ioenMon, 10 Aug 2020 00:00:00 +0000Partialshttps://nunocoracao.github.io/blowfish/docs/partials/Mon, 10 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/partials/Analytics # Blowfish provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. +Fathom Analytics # To enable Fathom Analytics support, simply provide your Fathom site code in the config/_default/params.Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary. \ No newline at end of file diff --git a/public/tags/privacy/page/1/index.html b/public/tags/privacy/page/1/index.html new file mode 100644 index 00000000..70345952 --- /dev/null +++ b/public/tags/privacy/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/privacy/ \ No newline at end of file diff --git a/public/tags/render/index.html b/public/tags/render/index.html new file mode 100644 index 00000000..547ad327 --- /dev/null +++ b/public/tags/render/index.html @@ -0,0 +1,30 @@ +render · Blowfish + + + + + +

render

0 +· +0 +· +
Hosting & Deployment
4 mins· +0 +· +0 +
docs +hosting +deployment +github +netlify +render

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/render/index.xml b/public/tags/render/index.xml new file mode 100644 index 00000000..9c892e07 --- /dev/null +++ b/public/tags/render/index.xml @@ -0,0 +1,2 @@ +render on Blowfishhttps://nunocoracao.github.io/blowfish/tags/render/Recent content in render on BlowfishHugo -- gohugo.ioenFri, 07 Aug 2020 00:00:00 +0000Hosting & Deploymenthttps://nunocoracao.github.io/blowfish/docs/hosting-deployment/Fri, 07 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/hosting-deployment/There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario. +Blowfish is built using relative URLs throughout the theme. \ No newline at end of file diff --git a/public/tags/render/page/1/index.html b/public/tags/render/page/1/index.html new file mode 100644 index 00000000..1f00f367 --- /dev/null +++ b/public/tags/render/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/render/ \ No newline at end of file diff --git a/public/tags/sample/index.html b/public/tags/sample/index.html new file mode 100644 index 00000000..fe4a6e80 --- /dev/null +++ b/public/tags/sample/index.html @@ -0,0 +1,91 @@ +sample · Blowfish + + + + + +
\ No newline at end of file diff --git a/public/tags/sample/index.xml b/public/tags/sample/index.xml new file mode 100644 index 00000000..7e512169 --- /dev/null +++ b/public/tags/sample/index.xml @@ -0,0 +1,2 @@ +sample on Blowfishhttps://nunocoracao.github.io/blowfish/tags/sample/Recent content in sample on BlowfishHugo -- gohugo.ioenWed, 12 Oct 2022 00:00:00 +0000Multiple Authorshttps://nunocoracao.github.io/blowfish/samples/multiple-authors/Wed, 12 Oct 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/multiple-authors/A quick example of how multiple authors could be used.Thumbnailshttps://nunocoracao.github.io/blowfish/samples/thumbnail_sample/Mon, 26 Sep 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/thumbnail_sample/A quick example of how to start using Thumbnails in your artciles.Iconshttps://nunocoracao.github.io/blowfish/samples/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/icons/Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode. +Additionally, custom icons are also fully supported.Usershttps://nunocoracao.github.io/blowfish/users/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/users/Real websites that are built with Blowfish. Blowfish user? To add your site to this list, submit a pull request. Website Details nunocoracao.com Personal site - Theme author madoke.org Personal site code-chimp.Markdownhttps://nunocoracao.github.io/blowfish/samples/markdown/Mon, 11 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/markdown/<p>This article offers a sample of basic Markdown formatting that can be used in Blowfish, also it shows how some basic HTML elements are decorated.</p>Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary.Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p>Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p>Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations.Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid.Emoji :parachute:https://nunocoracao.github.io/blowfish/samples/emoji/Tue, 05 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/emoji/📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸 \ No newline at end of file diff --git a/public/tags/sample/page/1/index.html b/public/tags/sample/page/1/index.html new file mode 100644 index 00000000..97efe25b --- /dev/null +++ b/public/tags/sample/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/sample/ \ No newline at end of file diff --git a/public/tags/series/index.html b/public/tags/series/index.html new file mode 100644 index 00000000..3cc32d92 --- /dev/null +++ b/public/tags/series/index.html @@ -0,0 +1,26 @@ +series · Blowfish + + + + + +

series

0 +· +0 +· +
Series
2 mins· +0 +· +0 +
series +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/series/index.xml b/public/tags/series/index.xml new file mode 100644 index 00000000..96b16ff7 --- /dev/null +++ b/public/tags/series/index.xml @@ -0,0 +1 @@ +series on Blowfishhttps://nunocoracao.github.io/blowfish/tags/series/Recent content in series on BlowfishHugo -- gohugo.ioenSun, 09 Aug 2020 00:00:00 +0000Serieshttps://nunocoracao.github.io/blowfish/docs/series/Sun, 09 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/series/Blowfish provides a feature to group a set of articles together under a &ldquo;series&rdquo;. Placing an article under a series will display the rest of the series articles in each single page and provide a quick way to navigate amongst them. \ No newline at end of file diff --git a/public/tags/series/page/1/index.html b/public/tags/series/page/1/index.html new file mode 100644 index 00000000..819c4eb5 --- /dev/null +++ b/public/tags/series/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/series/ \ No newline at end of file diff --git a/public/tags/shortcodes/index.html b/public/tags/shortcodes/index.html new file mode 100644 index 00000000..24959018 --- /dev/null +++ b/public/tags/shortcodes/index.html @@ -0,0 +1,66 @@ +shortcodes · Blowfish + + + + + +

shortcodes

0 +· +0 +· +
Icons
1 min· +0 +· +0 +
icons +sample +shortcodes
Shortcodes
12 mins· +0 +· +0 +
shortcodes +mermaid +icon +lead +docs
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo
Mathematical notation
1 min· +0 +· +0 +
sample +katex +maths +shortcodes
Diagrams and Flowcharts
2 mins· +0 +· +0 +
mermaid +sample +diagram +shortcodes
Charts
1 min· +0 +· +0 +
chart +sample +graph +shortcodes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/shortcodes/index.xml b/public/tags/shortcodes/index.xml new file mode 100644 index 00000000..fa9e37eb --- /dev/null +++ b/public/tags/shortcodes/index.xml @@ -0,0 +1,3 @@ +shortcodes on Blowfishhttps://nunocoracao.github.io/blowfish/tags/shortcodes/Recent content in shortcodes on BlowfishHugo -- gohugo.ioenFri, 14 Aug 2020 00:00:00 +0000Iconshttps://nunocoracao.github.io/blowfish/samples/icons/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/icons/Blowfish has built-in support for a number of FontAwesome 6 icons. These can be included in your website through either the icon partial or icon shortcode. +Additionally, custom icons are also fully supported.Shortcodeshttps://nunocoracao.github.io/blowfish/docs/shortcodes/Tue, 11 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/shortcodes/In addition to all the default Hugo shortcodes, Blowfish adds a few extras for additional functionality. +Alert # alert outputs its contents as a stylised message box within your article. It&rsquo;s useful for drawing attention to important information that you don&rsquo;t want the reader to miss.Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary.Mathematical notationhttps://nunocoracao.github.io/blowfish/samples/mathematical-notation/Fri, 08 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/mathematical-notation/<p>KaTeX can be used to render mathematical notation within articles.</p>Chartshttps://nunocoracao.github.io/blowfish/samples/charts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/charts/Blowfish includes Chart.js for powerful charts and data visualisations.Diagrams and Flowchartshttps://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/Wed, 06 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/diagrams-flowcharts/It&rsquo;s easy to add diagrams and flowcharts to articles using Mermaid. \ No newline at end of file diff --git a/public/tags/shortcodes/page/1/index.html b/public/tags/shortcodes/page/1/index.html new file mode 100644 index 00000000..916927ae --- /dev/null +++ b/public/tags/shortcodes/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/shortcodes/ \ No newline at end of file diff --git a/public/tags/template/index.html b/public/tags/template/index.html new file mode 100644 index 00000000..3c51d842 --- /dev/null +++ b/public/tags/template/index.html @@ -0,0 +1,25 @@ +template · Blowfish + + + + + +

template

0 +· +0 +· +
Recipe Template
1 min· +0 +· +0 +
template

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/template/index.xml b/public/tags/template/index.xml new file mode 100644 index 00000000..d97ff8e7 --- /dev/null +++ b/public/tags/template/index.xml @@ -0,0 +1,2 @@ +template on Blowfishhttps://nunocoracao.github.io/blowfish/tags/template/Recent content in template on BlowfishHugo -- gohugo.ioenTue, 22 Dec 1987 00:00:00 +0000Recipe Templatehttps://nunocoracao.github.io/blowfish/guides/template/Tue, 22 Dec 1987 00:00:00 +0000https://nunocoracao.github.io/blowfish/guides/template/Thank you for wanting to contribute to Blowfish&rsquo;s community. +How to start? # This is a template article that will explain how to create a new article for Blowfish&rsquo;s guide section. \ No newline at end of file diff --git a/public/tags/template/page/1/index.html b/public/tags/template/page/1/index.html new file mode 100644 index 00000000..d1c90a28 --- /dev/null +++ b/public/tags/template/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/template/ \ No newline at end of file diff --git a/public/tags/text/index.html b/public/tags/text/index.html new file mode 100644 index 00000000..1025fc7c --- /dev/null +++ b/public/tags/text/index.html @@ -0,0 +1,28 @@ +text · Blowfish + + + + + +

text

0 +· +0 +· +
Placeholder Text
·2 mins· +0 +· +0 +
markdown +text +sample +latin

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/text/index.xml b/public/tags/text/index.xml new file mode 100644 index 00000000..5e5beb44 --- /dev/null +++ b/public/tags/text/index.xml @@ -0,0 +1 @@ +text on Blowfishhttps://nunocoracao.github.io/blowfish/tags/text/Recent content in text on BlowfishHugo -- gohugo.ioenSat, 09 Mar 2019 00:00:00 +0000Placeholder Texthttps://nunocoracao.github.io/blowfish/samples/placeholder-text/Sat, 09 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/placeholder-text/<p>Lorem est tota propiore conpellat pectoribus de pectora summo.</p> \ No newline at end of file diff --git a/public/tags/text/page/1/index.html b/public/tags/text/page/1/index.html new file mode 100644 index 00000000..21ccefe6 --- /dev/null +++ b/public/tags/text/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/text/ \ No newline at end of file diff --git a/public/tags/thumbnail/index.html b/public/tags/thumbnail/index.html new file mode 100644 index 00000000..cb402ef3 --- /dev/null +++ b/public/tags/thumbnail/index.html @@ -0,0 +1,32 @@ +thumbnail · Blowfish + + + + + +

thumbnail

0 +· +0 +· +
Thumbnails
1 min· +0 +· +0 +
thumbnail +sample
Thumbnails
2 mins· +0 +· +0 +
thumbnail +config +docs

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/thumbnail/index.xml b/public/tags/thumbnail/index.xml new file mode 100644 index 00000000..04480fa2 --- /dev/null +++ b/public/tags/thumbnail/index.xml @@ -0,0 +1 @@ +thumbnail on Blowfishhttps://nunocoracao.github.io/blowfish/tags/thumbnail/Recent content in thumbnail on BlowfishHugo -- gohugo.ioenMon, 26 Sep 2022 00:00:00 +0000Thumbnailshttps://nunocoracao.github.io/blowfish/samples/thumbnail_sample/Mon, 26 Sep 2022 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/thumbnail_sample/A quick example of how to start using Thumbnails in your artciles.Thumbnailshttps://nunocoracao.github.io/blowfish/docs/thumbnails/Wed, 12 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/thumbnails/Thumbnails # Blowfish was enhanced in order to make it easy to add visual support to your posts. To do so, you just need to place an image file (almost all formats are supported bue we recommend . \ No newline at end of file diff --git a/public/tags/thumbnail/page/1/index.html b/public/tags/thumbnail/page/1/index.html new file mode 100644 index 00000000..5e524899 --- /dev/null +++ b/public/tags/thumbnail/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/thumbnail/ \ No newline at end of file diff --git a/public/tags/twitter/index.html b/public/tags/twitter/index.html new file mode 100644 index 00000000..458bfc50 --- /dev/null +++ b/public/tags/twitter/index.html @@ -0,0 +1,31 @@ +twitter · Blowfish + + + + + +

twitter

0 +· +0 +· +
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/twitter/index.xml b/public/tags/twitter/index.xml new file mode 100644 index 00000000..cdcb69ff --- /dev/null +++ b/public/tags/twitter/index.xml @@ -0,0 +1 @@ +twitter on Blowfishhttps://nunocoracao.github.io/blowfish/tags/twitter/Recent content in twitter on BlowfishHugo -- gohugo.ioenSun, 10 Mar 2019 00:00:00 +0000Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary. \ No newline at end of file diff --git a/public/tags/twitter/page/1/index.html b/public/tags/twitter/page/1/index.html new file mode 100644 index 00000000..9a50fc43 --- /dev/null +++ b/public/tags/twitter/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/twitter/ \ No newline at end of file diff --git a/public/tags/users/index.html b/public/tags/users/index.html new file mode 100644 index 00000000..2ed209ce --- /dev/null +++ b/public/tags/users/index.html @@ -0,0 +1,25 @@ +users · Blowfish + + + + + +

users

0 +· +0 +· +
Users
0 +· +0 +
users +sample

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/users/index.xml b/public/tags/users/index.xml new file mode 100644 index 00000000..dca9e22b --- /dev/null +++ b/public/tags/users/index.xml @@ -0,0 +1 @@ +users on Blowfishhttps://nunocoracao.github.io/blowfish/tags/users/Recent content in users on BlowfishHugo -- gohugo.ioenFri, 14 Aug 2020 00:00:00 +0000Usershttps://nunocoracao.github.io/blowfish/users/Fri, 14 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/users/Real websites that are built with Blowfish. Blowfish user? To add your site to this list, submit a pull request. Website Details nunocoracao.com Personal site - Theme author madoke.org Personal site code-chimp. \ No newline at end of file diff --git a/public/tags/users/page/1/index.html b/public/tags/users/page/1/index.html new file mode 100644 index 00000000..04cebaf9 --- /dev/null +++ b/public/tags/users/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/users/ \ No newline at end of file diff --git a/public/tags/views/index.html b/public/tags/views/index.html new file mode 100644 index 00000000..6e8ee9d6 --- /dev/null +++ b/public/tags/views/index.html @@ -0,0 +1,27 @@ +views · Blowfish + + + + + +

views

0 +· +0 +· +
Firebase: Views & Likes
2 mins· +0 +· +0 +
firebase +views +likes

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/views/index.xml b/public/tags/views/index.xml new file mode 100644 index 00000000..8b2ceeda --- /dev/null +++ b/public/tags/views/index.xml @@ -0,0 +1 @@ +views on Blowfishhttps://nunocoracao.github.io/blowfish/tags/views/Recent content in views on BlowfishHugo -- gohugo.ioenMon, 03 Aug 2020 00:00:00 +0000Firebase: Views & Likeshttps://nunocoracao.github.io/blowfish/docs/firebase-views/Mon, 03 Aug 2020 00:00:00 +0000https://nunocoracao.github.io/blowfish/docs/firebase-views/In order to be able to support dynamic data across your website we&rsquo;ve added the support to integrate Firebase. This will allow you to use the views feature across lists and posts. \ No newline at end of file diff --git a/public/tags/views/page/1/index.html b/public/tags/views/page/1/index.html new file mode 100644 index 00000000..93e48beb --- /dev/null +++ b/public/tags/views/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/views/ \ No newline at end of file diff --git a/public/tags/vimeo/index.html b/public/tags/vimeo/index.html new file mode 100644 index 00000000..af4df9ec --- /dev/null +++ b/public/tags/vimeo/index.html @@ -0,0 +1,31 @@ +vimeo · Blowfish + + + + + +

vimeo

0 +· +0 +· +
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/vimeo/index.xml b/public/tags/vimeo/index.xml new file mode 100644 index 00000000..da5c7aba --- /dev/null +++ b/public/tags/vimeo/index.xml @@ -0,0 +1 @@ +vimeo on Blowfishhttps://nunocoracao.github.io/blowfish/tags/vimeo/Recent content in vimeo on BlowfishHugo -- gohugo.ioenSun, 10 Mar 2019 00:00:00 +0000Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary. \ No newline at end of file diff --git a/public/tags/vimeo/page/1/index.html b/public/tags/vimeo/page/1/index.html new file mode 100644 index 00000000..e9a0ae9e --- /dev/null +++ b/public/tags/vimeo/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/vimeo/ \ No newline at end of file diff --git a/public/tags/youtube/index.html b/public/tags/youtube/index.html new file mode 100644 index 00000000..f21844b0 --- /dev/null +++ b/public/tags/youtube/index.html @@ -0,0 +1,31 @@ +youtube · Blowfish + + + + + +

youtube

0 +· +0 +· +
Rich Content
1 min· +0 +· +0 +
shortcodes +privacy +sample +gist +twitter +youtube +vimeo

© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/public/tags/youtube/index.xml b/public/tags/youtube/index.xml new file mode 100644 index 00000000..a78a0ee5 --- /dev/null +++ b/public/tags/youtube/index.xml @@ -0,0 +1 @@ +youtube on Blowfishhttps://nunocoracao.github.io/blowfish/tags/youtube/Recent content in youtube on BlowfishHugo -- gohugo.ioenSun, 10 Mar 2019 00:00:00 +0000Rich Contenthttps://nunocoracao.github.io/blowfish/samples/rich-content/Sun, 10 Mar 2019 00:00:00 +0000https://nunocoracao.github.io/blowfish/samples/rich-content/This is an <em>example</em> of a <strong>rich</strong> content summary. \ No newline at end of file diff --git a/public/tags/youtube/page/1/index.html b/public/tags/youtube/page/1/index.html new file mode 100644 index 00000000..9adaf0a9 --- /dev/null +++ b/public/tags/youtube/page/1/index.html @@ -0,0 +1 @@ +https://nunocoracao.github.io/blowfish/tags/youtube/ \ No newline at end of file diff --git a/public/users/index.html b/public/users/index.html new file mode 100644 index 00000000..f3e7358e --- /dev/null +++ b/public/users/index.html @@ -0,0 +1,66 @@ +Users · Blowfish + + + + + +

Users

0 +· +0 +· +
users +sample
Real websites that are built with Blowfish.
Blowfish user? To add your site to this list, submit a pull request.
WebsiteDetails
nunocoracao.comPersonal site - Theme author
madoke.orgPersonal site
code-chimp.comPersonal site
mucahitkurtlar.github.ioPersonal site
brendanwallace.github.ioPersonal site
fedeizzo.devPersonal site
cuttontail.blogPersonal site
pmnxis.github.ioPersonal site
ciicadalab.github.ioOrganization site
georgiancodeclub.github.ioCollege club site
albertolvera.comPersonal site
chris.banes.devPersonal site
fahru.my.idPersonal site
jeknom.github.ioPersonal site
blog.watchstep.mePersonal site
overdevelop.ioPersonal site
loisvelasco.is-a.devPersonal site
tabletopflore.comPersonal site
omarohn.dePersonal site
spelucin.mePersonal site
insidemordecai.comPersonal site
jamesdixon.devPersonal site
blastomussa.devPersonal site
cdell.ioPersonal site
jam.dsg.liOrganization site
priyakdey.comPersonal site
sdehm.devPersonal site
dizzytech.dePersonal site
alejandro-ao.comPersonal site
adir1.comPersonal site
niklas-hartmann-dev.dePersonal site
blog.muffn.ioPersonal site
nick.bouwhuis.netPersonal site
vividscc.comBusiness site
muhalvin.github.ioPersonal site
mariuskimmina.comPersonal site
ashwinbalaji.xyzPersonal site
technicat.comCompany site
fugugames.comGames site
hyperbowl3d.comGame site
talkdimsum.comApp site
alanctanner.comPersonal site
rdgo.devPersonal site
ripplesding.github.ioPersonal site
terraformbuch.deBook site
shenshu.funPersonal site
hellstabber.github.ioPersonal site
clemsau.comPersonal site
lelouvincx.github.ioPersonal site
weaxsey.orgPersonal site
nikarashihatsu.github.ioPersonal site
blog.enmanuelmoreira.comPersonal site
halcyonstraits.comDoll photography
Blowfish user? To add your site to this list, submit a pull request.


© +2023 +Blowfish

Powered by Hugo & Blowfish

+
\ No newline at end of file diff --git a/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_288x288_fill_box_center_3.png b/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_288x288_fill_box_center_3.png deleted file mode 100644 index fa2a03ea..00000000 Binary files a/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_288x288_fill_box_center_3.png and /dev/null differ