diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/.well-known/keybase.txt b/.well-known/keybase.txt new file mode 100644 index 00000000..47ff069e --- /dev/null +++ b/.well-known/keybase.txt @@ -0,0 +1,76 @@ +================================================================== +https://keybase.io/codemonkeystech +-------------------------------------------------------------------- + +I hereby claim: + + * I am an admin of https://codemonkeys.tech + * I am codemonkeystech (https://keybase.io/codemonkeystech) on keybase. + * I have a public key with fingerprint B7E6 FB94 A589 876C CFC2 1E4B 1E07 E75C 19F1 AE0E + +To do so, I am signing this object: + +{ + "body": { + "key": { + "eldest_kid": "0101f45f3b18314b9168ac70f29f2f38db58a7ec070880ac6960716b31bc33d7179b0a", + "fingerprint": "b7e6fb94a589876ccfc21e4b1e07e75c19f1ae0e", + "host": "keybase.io", + "key_id": "1e07e75c19f1ae0e", + "kid": "0101f45f3b18314b9168ac70f29f2f38db58a7ec070880ac6960716b31bc33d7179b0a", + "uid": "029f675a227bfdd3462830dbcde10619", + "username": "codemonkeystech" + }, + "service": { + "hostname": "codemonkeys.tech", + "protocol": "https:" + }, + "type": "web_service_binding", + "version": 1 + }, + "ctime": 1682369338, + "expire_in": 157680000, + "prev": "534f1b580c6468d479a691012b703fbf43c7fdce683e014e2ea24fa256d9a5ff", + "seqno": 3, + "tag": "signature" +} + +which yields the signature: + +-----BEGIN PGP MESSAGE----- + +owNCWmg2MUFZJlNZ1nn6iAAB0H///n/79/73f/9/1nv7////7v/v2///29/7f/+/ +/fu/b6/AAvOOLsxWAdT1MTamTyeknpomTI09J6h6RgmmgxDTaaR5JpsoxNNPTTQm +jZJ6Gk0wCGTTGU9NI0aPU0PIQBnpCaPJMmaGTFPEyHqNqm8o9UOI0Gho0aGgAAGh +oHqaGmhoA0AAABoNAaAaAAAAADRoABoBoAB6gAAAAA1T1E2p4U02qn4qbTU0yAAB +o0GjQZNAAAyaAANABkZAADQAAAAAAAAAAAAAABqaTUmxTT0E9InqeCnk1GnqaHqD +INAA0BoAAGg9T1AAG1NqD1BpoAB6gAAAAD1GmgyPUAABoAAcOz/J8NTn0WIXrfQP +QlB5IaQMgAJ00aCjROIsoLSli34NAl/4ELWAkCpg6FYe+6AbwapJjjsSuI7G6poz +9b0Ax0FSXYUKBNQkiCiceRBlHbAz1aWp6hKTBA4DFtcvlM8C76cmX0usKf06Gkee +MI4E1sFBTnlkqgiZbNIlNoQiHIxHI5yMCIwJDM/6mdvRap1Ix5upJtfnk3ylzQEE +glhCObvYuzzetkUcrJmmFRFTIHjHtQowwCBDDEzVAQOXZJcIJgCfhAlgEwoqIRkw +hzMpCcEevukDKUDrdaHikJlxTDoeiiWzbr8QCfZCF7yZMw2+nOuPwMGc78izCejE +I7DwaxV17rggNGfQpZBtS4YhA0aHFSDAg+IGwaNESHkoDgVMRYiQplCQytIbYaYh +ifzXHrEnplHpQIiCy7czANDVNyz7sA0EgKojdLYxXNRA6N2i/3U+SHV9CxVmGVPn +a2U+PIDApLssOeAXKZDo9D/P6CBBVVC+VsQi1Ln3sEmnESrqLFomCnLKDC6OUhHn +Eaxr1DO0JZew9SYldj25aeE8m0PX4XkGBC8B3MBZU+5fZAwAVOBM0L5d2wvyvUw4 +O3O9BH73EqkRweQEfDAP/mBvprKcUHRUyZbOYBmUSFZ+kQFmcYllhDfHurqgUFSO +4SndpG1eFdDd+kxfGJOczKBBCHigZDJU5wkiqMHEEM1wcLCAIDYI7bF/NN101Fuf +WPXE2evxqZkFA+KI5DgXiE7enmXjxrEYzmOSWMuFTzvXhPaDeuQ5YD/HTXa2FBkD +vnDtFDkxIk3WxqQqyzVLaJC9vKJkmihEQCUtQIOUclPoOy9TQaSO2Jg0WmGMAkFR +eZRJYR+S6RlzWPDr1pTpBYh7J6mNKq+s7t5mdCQvszVSDbADAuykvN1jF5ujVGhQ +ttc6HQ9W+AjRZSAyiCe0khWxwHGpz4dr/Ot+q/p1DhUnck+4+s1f9aiH3+q8QVuy +rHPt4xL02gKzL4I7nj9l2uLxZGJ1rhQ6CZN9o9o22ojKmEHAc7402+2mb8hlSIVc +BVdWuaahw6ZfpWYR+gMX8iSW2MnIdYwUN0pOn89hlQQx2/C8vjX9smNXjcetiQLe +YMEaGKSN5kpj7CpSwvdY2/fB272OXkKwCr5pEinK3rpAZH5lk9oiKHGIH46cW3Vj ++2UG9bgUu+Awz2LjkGt4lZ/jETsdUtZjNEdIwejfsHcQ8I+7WWMXJJR/Y5qJQ8X7 +hMRaQyWaJrfnwotJpr7k0bqclJ6xmX/F3JFOFCQ1nn6iAA== +=Rrdl +-----END PGP MESSAGE----- + +And finally, I am proving ownership of this host by posting or +appending to this document. + +View my publicly-auditable identity here: https://keybase.io/codemonkeystech + +================================================================== diff --git a/404.html b/404.html new file mode 100644 index 00000000..e211fb55 --- /dev/null +++ b/404.html @@ -0,0 +1,65 @@ + + + + + + Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

404

That's a Four-Oh-Four.
+ Take me home. +
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..9146118c --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +codemonkeys.tech \ No newline at end of file diff --git a/android-chrome-144x144.png b/android-chrome-144x144.png new file mode 100644 index 00000000..57686e42 Binary files /dev/null and b/android-chrome-144x144.png differ diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 00000000..5fbb84d1 Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-256x256.png b/android-chrome-256x256.png new file mode 100644 index 00000000..d418cd2e Binary files /dev/null and b/android-chrome-256x256.png differ diff --git a/android-chrome-36x36.png b/android-chrome-36x36.png new file mode 100644 index 00000000..0f154ac5 Binary files /dev/null and b/android-chrome-36x36.png differ diff --git a/android-chrome-384x384.png b/android-chrome-384x384.png new file mode 100644 index 00000000..2aa87548 Binary files /dev/null and b/android-chrome-384x384.png differ diff --git a/android-chrome-48x48.png b/android-chrome-48x48.png new file mode 100644 index 00000000..433adc98 Binary files /dev/null and b/android-chrome-48x48.png differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 00000000..30a05c0b Binary files /dev/null and b/android-chrome-512x512.png differ diff --git a/android-chrome-72x72.png b/android-chrome-72x72.png new file mode 100644 index 00000000..f39c2876 Binary files /dev/null and b/android-chrome-72x72.png differ diff --git a/android-chrome-96x96.png b/android-chrome-96x96.png new file mode 100644 index 00000000..07ff881a Binary files /dev/null and b/android-chrome-96x96.png differ diff --git a/apple-touch-icon-114x114-precomposed.png b/apple-touch-icon-114x114-precomposed.png new file mode 100644 index 00000000..cd2f6760 Binary files /dev/null and b/apple-touch-icon-114x114-precomposed.png differ diff --git a/apple-touch-icon-120x120-precomposed.png b/apple-touch-icon-120x120-precomposed.png new file mode 100644 index 00000000..75da9d8b Binary files /dev/null and b/apple-touch-icon-120x120-precomposed.png differ diff --git a/apple-touch-icon-144x144-precomposed.png b/apple-touch-icon-144x144-precomposed.png new file mode 100644 index 00000000..27979206 Binary files /dev/null and b/apple-touch-icon-144x144-precomposed.png differ diff --git a/apple-touch-icon-152x152-precomposed.png b/apple-touch-icon-152x152-precomposed.png new file mode 100644 index 00000000..ad55668c Binary files /dev/null and b/apple-touch-icon-152x152-precomposed.png differ diff --git a/apple-touch-icon-180x180-precomposed.png b/apple-touch-icon-180x180-precomposed.png new file mode 100644 index 00000000..52165fff Binary files /dev/null and b/apple-touch-icon-180x180-precomposed.png differ diff --git a/apple-touch-icon-57x57-precomposed.png b/apple-touch-icon-57x57-precomposed.png new file mode 100644 index 00000000..0621cdbc Binary files /dev/null and b/apple-touch-icon-57x57-precomposed.png differ diff --git a/apple-touch-icon-60x60-precomposed.png b/apple-touch-icon-60x60-precomposed.png new file mode 100644 index 00000000..f10448c8 Binary files /dev/null and b/apple-touch-icon-60x60-precomposed.png differ diff --git a/apple-touch-icon-72x72-precomposed.png b/apple-touch-icon-72x72-precomposed.png new file mode 100644 index 00000000..bcab7e0d Binary files /dev/null and b/apple-touch-icon-72x72-precomposed.png differ diff --git a/apple-touch-icon-76x76-precomposed.png b/apple-touch-icon-76x76-precomposed.png new file mode 100644 index 00000000..dfefb996 Binary files /dev/null and b/apple-touch-icon-76x76-precomposed.png differ diff --git a/apple-touch-icon-precomposed.png b/apple-touch-icon-precomposed.png new file mode 100644 index 00000000..52165fff Binary files /dev/null and b/apple-touch-icon-precomposed.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 00000000..e00a7da5 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/assets/css/0.styles.8d2cb036.css b/assets/css/0.styles.8d2cb036.css new file mode 100644 index 00000000..77714d8b --- /dev/null +++ b/assets/css/0.styles.8d2cb036.css @@ -0,0 +1 @@ +svg[data-v-49140617]{position:absolute;right:7.5px;opacity:.75;cursor:pointer}svg.hover[data-v-49140617]{opacity:0}svg[data-v-49140617]:hover{opacity:1!important}span[data-v-49140617]{position:absolute;font-size:.85rem;line-height:.425rem;right:50px;opacity:0;transition:opacity .5s}.success[data-v-49140617]{opacity:1!important}.code-copy-added:hover>.code-copy svg{opacity:.75}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#ebebeb;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#eb7132}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#e6e6e6}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#e6e6e6}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#e6e6e6}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #754d34}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #754d34;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#eb7132}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #754d34}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #754d34}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:851px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:850px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.external-link-wrap{display:inline-flex}.external-link-headers{font-size:calc(1.075rem + .9vw);line-height:1.25}@media (min-width:75rem){.external-link-headers{font-size:1.75rem}}.external-link-headers span{font-size:calc(1.075rem + .9vw)}@media (min-width:75rem){.external-link-headers span{font-size:1.75rem}}svg.icon.outbound{color:#eb7132;margin:0 .125rem 0 .25rem}.custom-block.tip{background-color:#2c303a;border-color:#33eb61}.custom-block.warning{background-color:rgba(235,235,51,.2);border-color:#ebeb33;color:#f4f48b}.custom-block.warning .custom-block-title{color:#e8e817}.custom-block.danger{background-color:rgba(239,93,93,.2);border-color:#ef5d5d;color:#f8b9b9}.custom-block.danger .custom-block-title{color:#ea2e2e}.custom-block.details{background-color:#2c303a;margin:1rem 0;padding:1.5rem;border-radius:.3125rem}.custom-block.details summary{font-size:calc(1.025rem + .3vw)}@media (min-width:75rem){.custom-block.details summary{font-size:1.25rem}}.emoji-wrap{display:inline-flex}.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5{margin-top:-3.85rem}main.page .theme-default-content:not(.custom)>:first-child{margin-top:-5rem}main.page .theme-default-content{max-width:69.53125rem;padding-bottom:0}main.page .theme-default-content h1{padding-top:11rem;margin-bottom:-1rem}@media (max-width:61.25rem){main.page .theme-default-content h1,main.page .theme-default-content h2,main.page .theme-default-content h3,main.page .theme-default-content h4,main.page .theme-default-content h5{text-align:center}main.page .theme-default-content a.header-anchor{float:none}}main.page .theme-default-content div.emoji-wrap{text-decoration:inherit;display:inline-block}main.page .theme-default-content div.emoji-wrap span{display:inline-block}main.page .theme-default-content .theme-code-group{margin-top:2rem}main.page .theme-default-content .theme-code-group div.line-numbers-mode:before{font-size:1rem;top:.03125rem}main.page .theme-default-content .theme-code-group pre{margin-bottom:2rem}main.page .theme-default-content .theme-code-group pre code span{font-size:1em;height:100%}main.page .theme-default-content .theme-code-group .highlighted,main.page .theme-default-content .theme-code-group .highlighted:before{background-color:#18191b}@media (max-width:26.1875rem){main.page .theme-default-content div[class*=language-]{margin:0}}main.page .theme-default-content .remove-code-group-line-numbers div[class*=language-].line-numbers-mode pre{padding-left:1.5rem}main.page .theme-default-content .remove-code-group-line-numbers div[class*=language-].line-numbers-mode .line-numbers-wrapper,main.page .theme-default-content .remove-code-group-line-numbers div[class*=language-].line-numbers-mode:after{display:none}main.page .theme-default-content .codefence{color:#e6e6e6;margin-top:2rem;margin-bottom:0;border:.0625rem solid #0b0c0e;font-size:calc(1.0625rem + .75vw)}@media (min-width:75rem){main.page .theme-default-content .codefence{font-size:1.625rem}}main.page .theme-default-content .codefence .heading{background-color:#21252b;font-size:.85em;padding:.75rem}main.page .theme-default-content .codefence .heading:after{opacity:.95;font-size:calc(1.125rem + 1.5vw);margin:.375rem .75rem 0;background-size:.85em .605em;width:.85em;height:.605em}@media (min-width:75rem){main.page .theme-default-content .codefence .heading:after{font-size:2.25rem}}main.page .theme-default-content .codefence .CodeMirror{background-color:#282c34}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines{padding:.5rem 0}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-linenumber{font-size:calc(1.025rem + .3vw);color:#4e5565;padding:.125rem .25rem .125rem .375rem}@media (min-width:75rem){main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-linenumber{font-size:1.25rem}}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line{padding:.125rem .375rem}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-keyword{color:#cc99cd}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-def{color:#f08d49}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-operator{color:#67cdcc}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-number{color:#f28779}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-variable-2{color:#99c7ff}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-property{color:#dbd56e}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-comment{color:#999}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-variable{color:#e6e6e6}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-string{color:#7ec699}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-lines .CodeMirror-line .cm-atom{color:#9898cd}main.page .theme-default-content .codefence .CodeMirror .CodeMirror-gutters{background-color:#282c34}main.page .theme-default-content .codefence .compiler{background-color:#21252b;font-size:calc(1.0625rem + .75vw)}@media (min-width:75rem){main.page .theme-default-content .codefence .compiler{font-size:1.625rem}}main.page .theme-default-content .codefence .compiler code{font-size:calc(1.025rem + .3vw);color:#e6e6e6}@media (min-width:75rem){main.page .theme-default-content .codefence .compiler code{font-size:1.25rem}}main.page .theme-default-content .codefence .compiler .idle{border-top:.125rem solid #373d48;font-size:.85em;padding:.75rem}main.page .theme-default-content .codefence .compiler .idle svg{opacity:.9;width:1em;height:1em}main.page .theme-default-content .codefence .compiler .running{font-size:.85em;border-top-color:#429ab8;padding:.75rem}main.page .theme-default-content .codefence .compiler .running svg{width:.85em;height:.85em}main.page .theme-default-content .codefence .compiler .redo{font-size:.85em}main.page .theme-default-content .codefence .compiler .redo svg{width:1em;height:1em}main.page .theme-default-content .codefence .compiler .stdout{border-top-color:#42b983;padding:.75rem}main.page .theme-default-content .codefence .compiler .stderr{border-top-color:#b84242;padding:.75rem}main.page .theme-default-content .codefence .compiler .error{font-size:.85em;border-top-color:#b84242;padding:.75rem}main.page .theme-default-content .codefence .compiler .error svg{width:.85em;height:.85em}.post-term-one{color:#ebeb33;font-style:italic}.post-term-two{color:#33eb61;font-style:italic}.post-term-three{color:#33ebeb;font-style:italic}.post-term-four{color:#c9f;font-style:italic}.post-term-five{color:#ef5d5d;font-style:italic}.post-term-bold{font-weight:700}.post-example{margin-left:2.8125rem}.website-diagrams{display:flex;justify-content:center}.theme-default-content .inline-code-block{word-break:break-word;color:#fff;background-color:#373c49;border-radius:.1875rem}.edgePath .path{stroke:#754d34!important}.edgePath .arrowheadPath{fill:#754d34!important}.edgeLabel{background-color:#282c34!important;color:#e6e6e6!important;font-size:1rem}.edgeLabel rect{fill:#16181d!important;opacity:1!important}.node rect{fill:#282c34!important;stroke:#16181d!important;stroke-width:.125rem!important}.node .label{color:#e6e6e6!important}.pagination{display:flex;justify-content:space-between;padding-top:2rem}pre.vue-container{border-left:.5rem solid;border-color:#33eb61;border-radius:0;padding:.1rem 1.5rem;margin:2rem 0}pre.vue-container code p{padding:1em 0;margin:0 0 -22px}pre.vue-container code code{background-color:#33eb61;padding:.1875rem .3125rem;border-radius:.1875rem;color:#000}pre.vue-container code em{color:grey}table{margin:1.25rem 0}table thead tr{border-top:.0625rem solid #e6e6e6}table thead tr th{border:.0625rem solid #e6e6e6}table tbody tr:nth-child(2n){background-color:#21242c}table tbody tr{border-top:.0625rem solid #e6e6e6}table tbody tr td{border:.0625rem solid #e6e6e6}#app .badge{font-size:1rem;height:22px;line-height:1.125;border-radius:4px;padding:0 10px}#app .badge.tip{color:#a2f6a2}#app .badge.warning{color:#f4f48b}#app .badge.error{color:#f8b9b9}.pgp-public-key pre[class*=language-] .code-copy{display:none}h1{font-size:calc(1.15rem + 1.8vw)}@media (min-width:75rem){h1{font-size:2.5rem}}h2{font-size:calc(1.125rem + 1.5vw);border-bottom:.125rem solid #754d34}@media (min-width:75rem){h2{font-size:2.25rem}}h3{font-size:calc(1.1rem + 1.2vw)}@media (min-width:75rem){h3{font-size:2rem}}h4{font-size:calc(1.075rem + .9vw)}@media (min-width:75rem){h4{font-size:1.75rem}}h5{font-size:calc(1.05rem + .6vw)}@media (min-width:75rem){h5{font-size:1.5rem}}.pagination,button,li,p,span,td,th{font-size:calc(1.025rem + .3vw)}@media (min-width:75rem){.pagination,button,li,p,span,td,th{font-size:1.25rem}}a{display:inline-block}.sidebar-heading>span{font-size:calc(1.01875rem + .225vw)}@media (min-width:75rem){.sidebar-heading>span{font-size:1.1875rem}}.sidebar-group-items>li{font-size:calc(1.01563rem + .1875vw)}@media (min-width:75rem){.sidebar-group-items>li{font-size:1.15625rem}}.sidebar-sub-headers>li{font-size:calc(1.0125rem + .15vw)}@media (min-width:75rem){.sidebar-sub-headers>li{font-size:1.125rem}}.theme-code-group__li{font-size:calc(1.0625rem + .75vw)}@media (min-width:75rem){.theme-code-group__li{font-size:1.625rem}}.theme-code-block{font-size:calc(1.04375rem + .525vw)}@media (min-width:75rem){.theme-code-block{font-size:1.4375rem}}.no-wrap-icons,.wrap-icons{font-size:calc(1.1rem + 1.2vw)}@media (min-width:75rem){.no-wrap-icons,.wrap-icons{font-size:2rem}}.no-wrap-icons>a:not(:last-child){margin-right:calc(1.36875rem + 4.425vw)}@media (min-width:75rem){.no-wrap-icons>a:not(:last-child){margin-right:4.6875rem}}@media (min-width:26.3125rem){.wrap-icons>a{margin-left:calc(1.36875rem + 4.425vw)}}@media (max-width:26.25rem){.wrap-icons>a:not(:first-child){margin-left:calc(1.36875rem + 4.425vw)}}span.abbreviation{font-size:calc(1.0125rem + .15vw)}@media (min-width:75rem){span.abbreviation{font-size:1.125rem}}html,html body{background-color:#1f2229}@media (max-width:61.25rem){html body .page{padding-left:0}}@media (max-width:61.25rem){html body .theme-container.sidebar-open .sidebar{transform:translateX(0)}}@media (min-width:53.1875rem){html body .theme-container.no-sidebar .sidebar{display:block}}@media (min-width:61.3125rem){html body .theme-container.no-sidebar .sidebar{display:none}}html body .theme-container{min-height:calc(100vh - 10.8125rem)}@media (max-width:61.25rem){html body .theme-container .sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}html body .theme-container .sidebar .nav-links{display:block}}html body .theme-container .navbar{display:flex;align-items:center;height:4.5rem;background-color:#1f2229;border-bottom-width:.125rem}html body .theme-container .navbar .sidebar-button{margin-top:.375rem}html body .theme-container .navbar .site-name{font-size:calc(1.05rem + .6vw)}@media (min-width:75rem){html body .theme-container .navbar .site-name{font-size:1.5rem}}html body .theme-container .navbar .links{background-color:transparent;height:3rem;align-items:center}html body .theme-container .navbar .links .search-box{margin-right:1.5rem}html body .theme-container .navbar .links .search-box input{font-size:calc(1.0125rem + .15vw);background-color:transparent;border-width:.125rem;color:#e6e6e6}@media (min-width:75rem){html body .theme-container .navbar .links .search-box input{font-size:1.125rem}}html body .theme-container .navbar .links .search-box .suggestions{background-color:#1f2229;border:.125rem solid #754d34}html body .theme-container .navbar .links .search-box .suggestions .suggestion.focused{background-color:#1f2229}@media (max-width:61.25rem){html body .theme-container .navbar .links .search-box{margin-right:0}html body .theme-container .navbar .links .search-box input{left:0}html body .theme-container .navbar .links .search-box .suggestions{left:auto}}@media (max-width:66.5rem){html body .theme-container .navbar .links .search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}html body .theme-container .navbar .links .search-box input:focus{cursor:text;left:0;width:10rem;border-color:#eb7132}}@media (max-width:22rem){html body .theme-container .navbar .links .search-box input:focus{width:8rem}}@media (max-width:19.9375rem){html body .theme-container .navbar .links .search-box input:focus{width:6rem}}@media (max-width:18rem){html body .theme-container .navbar .links .search-box input:focus{width:5.5rem}}@media (max-width:959px) and (min-width:61.25rem){html body .theme-container .navbar .links .search-box .suggestions{left:0}}@media (max-width:61.25rem){html body .theme-container .navbar .links .search-box{margin-right:0}html body .theme-container .navbar .links .search-box input{left:1rem}html body .theme-container .navbar .links .search-box .suggestions{right:0}}html body .theme-container .navbar .links .nav-links{font-size:calc(1.025rem + .3vw)}@media (min-width:75rem){html body .theme-container .navbar .links .nav-links{font-size:1.25rem}}html body .theme-container .navbar .links .nav-links .nav-item:first-child{margin-left:0}html body .theme-container .navbar .links .nav-links .nav-item{margin-left:1.75rem}html body .theme-container .navbar .links .nav-links .nav-item a:not(.external).router-link-active{border-bottom:0}html body .theme-container .navbar .links .nav-links .nav-item .dropdown-title{font-size:calc(1.025rem + .3vw)}@media (min-width:75rem){html body .theme-container .navbar .links .nav-links .nav-item .dropdown-title{font-size:1.25rem}}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown{text-align:center;background-color:#1f2229;border:.125rem solid #754d34;padding:.8rem 0}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item{padding-bottom:.4rem}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a:first-child{color:inherit}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a:first-child.router-link-active:after{border-left:0}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a:first-child.router-link-active{color:#eb7132}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a:first-child.router-link-active:after{border-left:.3125rem solid #eb7132}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item h4{font-size:calc(1.025rem + .3vw);border-top:.0625rem solid #754d34;cursor:text;margin:.45rem .375rem 0}@media (min-width:75rem){html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item h4{font-size:1.25rem}}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a:hover{color:#eb7132}html body .theme-container .navbar .links .nav-links .nav-item .nav-dropdown .dropdown-item a.router-link-active:after{left:.75rem}html body .theme-container .navbar .links .nav-links .nav-item>a:not(.external).router-link-active,html body .theme-container .navbar .links .nav-links .nav-item>a:not(.external):hover{border-bottom:.125rem solid #ed7c42}html body .theme-container .sidebar{background-image:linear-gradient(90deg,#21242c,#1f2229);border-right:.125rem solid #754d34}html body .theme-container .sidebar .nav-links{border-bottom:0}html body .theme-container .sidebar .nav-links .nav-item:first-child{margin-top:1.15rem}html body .theme-container .sidebar .nav-links .nav-item:first-child a{color:inherit}html body .theme-container .sidebar .nav-links .nav-item:first-child a.router-link-active,html body .theme-container .sidebar .nav-links .nav-item:first-child a:hover{color:#eb7132}html body .theme-container .sidebar .nav-links .nav-item .nav-link{font-size:calc(1.01875rem + .225vw)}@media (min-width:75rem){html body .theme-container .sidebar .nav-links .nav-item .nav-link{font-size:1.1875rem}}html body .theme-container .sidebar .nav-links .nav-item .mobile-dropdown-title{font-size:calc(1.01875rem + .225vw)}@media (min-width:75rem){html body .theme-container .sidebar .nav-links .nav-item .mobile-dropdown-title{font-size:1.1875rem}}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a:first-child{color:inherit}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a:first-child.router-link-active:after{border-left:0}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a:first-child.router-link-active{color:#eb7132}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a:first-child.router-link-active:after{border-left:.3125rem solid #eb7132}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a{font-size:calc(1.01563rem + .1875vw)}@media (min-width:75rem){html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a{font-size:1.15625rem}}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item a:hover{color:#eb7132}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item h4{font-size:calc(1.01563rem + .1875vw)}@media (min-width:75rem){html body .theme-container .sidebar .nav-links .nav-item .dropdown-item h4{font-size:1.15625rem}}html body .theme-container .sidebar .nav-links .nav-item .dropdown-item .dropdown-subitem>a{font-size:calc(1.01563rem + .1875vw)}@media (min-width:75rem){html body .theme-container .sidebar .nav-links .nav-item .dropdown-item .dropdown-subitem>a{font-size:1.15625rem}}html body .theme-container .home{padding:8rem 0 0}html body .theme-container .home .hero{margin-left:2rem;margin-right:2rem;border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:box-shadow .2s;border-radius:5.625rem;margin-bottom:.625rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229);padding:2rem}html body .theme-container .home .hero .v-lazy-image-loaded{transition:transform .2s,filter .7s}html body .theme-container .home .hero h1{font-size:calc(1.2rem + 2.4vw)}@media (min-width:75rem){html body .theme-container .home .hero h1{font-size:3rem}}html body .theme-container .home .hero .description{font-size:calc(1.06rem + .72vw)}@media (min-width:75rem){html body .theme-container .home .hero .description{font-size:1.6rem}}html body .theme-container .home .hero .action-button{font-size:calc(1.02rem + .24vw)}@media (min-width:75rem){html body .theme-container .home .hero .action-button{font-size:1.2rem}}html body .theme-container .home .hero:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}html body .theme-container .home .hero:hover img{transform:scale(1.1)}html body .theme-container .home .features{margin-left:2rem;margin-right:2rem;border-top:.125rem solid #754d34;border-bottom:.125rem solid #754d34}html body .theme-container .home .features .feature{text-align:center}html body .theme-container .home .features .feature h2{font-size:calc(1.04rem + .48vw)}@media (min-width:75rem){html body .theme-container .home .features .feature h2{font-size:1.4rem}}@media (max-width:44.9375rem){html body .theme-container .home .hero{border-radius:3.75rem}}@media (max-width:26.1875rem){html body .theme-container .home .hero{border-radius:2.8125rem}}@media (min-width:26.3125rem) and (min-width:75rem){.wrap-icons>a{margin-left:4.6875rem}}@media (max-width:26.25rem) and (min-width:75rem){.wrap-icons>a:not(:first-child){margin-left:4.6875rem}}#nprogress{pointer-events:none}#nprogress .bar{background:#eb7132;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #eb7132,0 0 5px #eb7132;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#eb7132 transparent transparent #eb7132;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.go-to-top[data-v-5fd4ef0c]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#eb7132;z-index:1}.go-to-top[data-v-5fd4ef0c]:hover{color:#f19c70}@media (max-width:959px){.go-to-top[data-v-5fd4ef0c]{display:none}}.fade-enter-active[data-v-5fd4ef0c],.fade-leave-active[data-v-5fd4ef0c]{transition:opacity .3s}.fade-enter[data-v-5fd4ef0c],.fade-leave-to[data-v-5fd4ef0c]{opacity:0}.vp-icon{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}mjx-math{display:inline-block;text-align:left;line-height:0;text-indent:0;font-style:normal;font-weight:400;font-size:100%;font-size-adjust:none;letter-spacing:normal;word-wrap:normal;word-spacing:normal;white-space:nowrap;direction:ltr;padding:1px 0}mjx-container[jax=CHTML][display=true]{display:block;text-align:center;margin:1em 0}mjx-container[jax=CHTML][display=true] mjx-math{padding:0}mjx-container[jax=CHTML][justify=left]{text-align:left}mjx-container[jax=CHTML][justify=right]{text-align:right}mjx-mrow{display:inline-block;text-align:left}mjx-container [space="1"]{margin-left:.111em}mjx-container [space="2"]{margin-left:.167em}mjx-container [space="3"]{margin-left:.222em}mjx-container [space="4"]{margin-left:.278em}mjx-container [space="5"]{margin-left:.333em}mjx-container [rspace="1"]{margin-right:.111em}mjx-container [rspace="2"]{margin-right:.167em}mjx-container [rspace="3"]{margin-right:.222em}mjx-container [rspace="4"]{margin-right:.278em}mjx-container [rspace="5"]{margin-right:.333em}mjx-container [size=s]{font-size:70.7%}mjx-container [size=ss]{font-size:50%}mjx-container [size=Tn]{font-size:60%}mjx-container [size=sm]{font-size:85%}mjx-container [size=lg]{font-size:120%}mjx-container [size=Lg]{font-size:144%}mjx-container [size=LG]{font-size:173%}mjx-container [size=hg]{font-size:207%}mjx-container [size=HG]{font-size:249%}mjx-container [width=full]{width:100%}mjx-box{display:inline-block}mjx-block{display:block}mjx-itable{display:inline-table}mjx-row{display:table-row}mjx-row>*{display:table-cell}mjx-merror,mjx-mstyle,mjx-mtext{display:inline-block}mjx-merror{color:red;background-color:#ff0}mjx-mphantom{visibility:hidden}mjx-inferredMrow,mjx-mi,mjx-mo{display:inline-block;text-align:left}mjx-stretchy-h{display:inline-table;width:100%}mjx-stretchy-h>mjx-beg,mjx-stretchy-h>mjx-end{display:table-cell;width:0}mjx-stretchy-h>mjx-ext{display:table-cell;overflow:hidden;width:100%}mjx-stretchy-h>mjx-ext>mjx-c{transform:scalex(500);margin-right:-2em}mjx-stretchy-h>mjx-ext>mjx-c:before{padding:.001em 0}mjx-stretchy-h>mjx-beg>mjx-c{margin-right:-.1em}mjx-stretchy-h>mjx-end>mjx-c{margin-left:-.1em}mjx-stretchy-v{display:inline-block}mjx-stretchy-v>*{display:block}mjx-stretchy-v>mjx-beg{height:0}mjx-stretchy-v>mjx-end>mjx-c{display:block}mjx-stretchy-v>*>mjx-c{transform:scale(1);transform-origin:left center;overflow:hidden}mjx-stretchy-v>mjx-ext{display:block;height:100%;box-sizing:border-box;border:0 solid transparent;overflow:hidden}mjx-stretchy-v>mjx-ext>mjx-c{transform:scaleY(500) translateY(.1em);overflow:visible}mjx-mark{display:inline-block;height:0}mjx-mn,mjx-mpadded,mjx-ms,mjx-mspace{display:inline-block;text-align:left}mjx-menclose,mjx-rbox{display:inline-block;position:relative}mjx-menclose{text-align:left}mjx-menclose>mjx-dstrike{top:0;transform-origin:top left}mjx-menclose>mjx-dstrike,mjx-menclose>mjx-ustrike{display:inline-block;left:0;position:absolute;border-top:.067em solid}mjx-menclose>mjx-ustrike{bottom:0;transform-origin:bottom left}mjx-menclose>mjx-hstrike{border-top:.067em solid;position:absolute;left:0;right:0;bottom:50%;transform:translateY(.034em)}mjx-menclose>mjx-vstrike{border-left:.067em solid;position:absolute;top:0;bottom:0;right:50%;transform:translateX(.034em)}mjx-menclose>mjx-rbox{border:.067em solid;border-radius:.267em}mjx-menclose>mjx-cbox,mjx-menclose>mjx-rbox{position:absolute;top:0;bottom:0;right:0;left:0}mjx-menclose>mjx-cbox{border:.067em solid;border-radius:50%}mjx-menclose>mjx-arrow{position:absolute;left:0;bottom:50%;height:0;width:0}mjx-menclose>mjx-arrow>*{display:block;position:absolute;transform-origin:bottom;border-left:.268em solid;border-right:0;box-sizing:border-box}mjx-menclose>mjx-arrow>mjx-aline{left:0;top:-.034em;right:.201em;height:0;border-top:.067em solid;border-left:0}mjx-menclose>mjx-arrow[double]>mjx-aline{left:.201em;height:0}mjx-menclose>mjx-arrow>mjx-rthead{transform:skewX(.464rad);right:0;bottom:-1px;border-bottom:1px solid transparent;border-top:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-rbhead{transform:skewX(-.464rad);transform-origin:top;right:0;top:-1px;border-top:1px solid transparent;border-bottom:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-lthead{transform:skewX(-.464rad);left:0;bottom:-1px;border-left:0;border-right:.268em solid;border-bottom:1px solid transparent;border-top:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-lbhead{transform:skewX(.464rad);transform-origin:top;left:0;top:-1px;border-left:0;border-right:.268em solid;border-top:1px solid transparent;border-bottom:.134em solid transparent}mjx-menclose>dbox{position:absolute;top:0;bottom:0;left:-.3em;width:.6em;border:.067em solid;border-radius:50%;-webkit-clip-path:inset(0 0 0 .3em);clip-path:inset(0 0 0 .3em);box-sizing:border-box}mjx-mfrac{text-align:left}mjx-frac,mjx-mfrac{display:inline-block}mjx-frac{vertical-align:.17em;padding:0 .22em}mjx-frac[type=d]{vertical-align:.04em}mjx-frac[delims]{padding:0 .1em}mjx-frac[atop]{padding:0 .12em}mjx-frac[atop][delims]{padding:0}mjx-dtable{display:inline-table;width:100%}mjx-dtable>*{font-size:2000%}mjx-dbox{display:block;font-size:5%}mjx-den,mjx-num{display:block;text-align:center}mjx-mfrac[bevelled]>mjx-den,mjx-mfrac[bevelled]>mjx-num{display:inline-block}mjx-den[align=right],mjx-num[align=right]{text-align:right}mjx-den[align=left],mjx-num[align=left]{text-align:left}mjx-nstrut{display:inline-block;height:.054em;width:0;vertical-align:-.054em}mjx-nstrut[type=d]{height:.217em;vertical-align:-.217em}mjx-dstrut{display:inline-block;height:.505em;width:0}mjx-dstrut[type=d]{height:.726em}mjx-line{display:block;box-sizing:border-box;min-height:1px;height:.06em;border-top:.06em solid;margin:.06em -.1em;overflow:hidden}mjx-line[type=d]{margin:.18em -.1em}mjx-msqrt{text-align:left}mjx-msqrt,mjx-root{display:inline-block}mjx-root{white-space:nowrap}mjx-surd{vertical-align:top}mjx-sqrt,mjx-surd{display:inline-block}mjx-sqrt{padding-top:.07em}mjx-sqrt>mjx-box{border-top:.07em solid}mjx-sqrt.mjx-tall>mjx-box{padding-left:.3em;margin-left:-.3em}mjx-mroot,mjx-msub,mjx-msubsup,mjx-msup{display:inline-block;text-align:left}mjx-script{display:inline-block;padding-right:.05em}mjx-script>*{display:block}mjx-munder{display:inline-block}mjx-munder,mjx-over{text-align:left}mjx-munder:not([limits=false]){display:inline-table}mjx-munder>mjx-row{text-align:left}mjx-under{padding-bottom:.1em}mjx-mover{display:inline-block;text-align:left}mjx-mover:not([limits=false]){padding-top:.1em}mjx-mover:not([limits=false])>*{display:block;text-align:left}mjx-munderover{display:inline-block;text-align:left}mjx-munderover:not([limits=false]){padding-top:.1em}mjx-munderover:not([limits=false])>*{display:block}mjx-mmultiscripts{display:inline-block;text-align:left}mjx-prescripts{display:inline-table;padding-left:.05em}mjx-scripts{display:inline-table;padding-right:.05em}mjx-prescripts>mjx-row>mjx-cell{text-align:right}mjx-mfenced{display:inline-block;text-align:left}mjx-mtable{display:inline-block;text-align:center;vertical-align:.25em;position:relative;box-sizing:border-box}mjx-labels{position:absolute;left:0;top:0}mjx-table{display:inline-block}mjx-table>mjx-itable{vertical-align:middle;text-align:left;box-sizing:border-box}mjx-labels>mjx-itable{position:absolute;top:0}mjx-mtable[justify=left]{text-align:left}mjx-mtable[justify=right]{text-align:right}mjx-mtable[justify=left][side=left]{padding-right:0!important}mjx-mtable[justify=left][side=right]{padding-left:0!important}mjx-mtable[justify=right][side=left]{padding-right:0!important}mjx-mtable[justify=right][side=right]{padding-left:0!important}mjx-mtable[align]{vertical-align:baseline}mjx-mtable[align=top]>mjx-table{vertical-align:top}mjx-mtable[align=bottom]>mjx-table{vertical-align:bottom}mjx-mtable[align=baseline]>mjx-table,mjx-mtable[align=center]>mjx-table{vertical-align:middle}mjx-mtr{display:table-row;text-align:left}mjx-mtr[rowalign=top]>mjx-mtd{vertical-align:top}mjx-mtr[rowalign=center]>mjx-mtd{vertical-align:middle}mjx-mtr[rowalign=bottom]>mjx-mtd{vertical-align:bottom}mjx-mtr[rowalign=baseline]>mjx-mtd{vertical-align:baseline}mjx-mtr[rowalign=axis]>mjx-mtd{vertical-align:.25em}mjx-mlabeledtr{display:table-row;text-align:left}mjx-mlabeledtr[rowalign=top]>mjx-mtd{vertical-align:top}mjx-mlabeledtr[rowalign=center]>mjx-mtd{vertical-align:middle}mjx-mlabeledtr[rowalign=bottom]>mjx-mtd{vertical-align:bottom}mjx-mlabeledtr[rowalign=baseline]>mjx-mtd{vertical-align:baseline}mjx-mlabeledtr[rowalign=axis]>mjx-mtd{vertical-align:.25em}mjx-mtd{display:table-cell;text-align:center;padding:.215em .4em}mjx-mtd:first-child{padding-left:0}mjx-mtd:last-child{padding-right:0}mjx-mtable>*>mjx-itable>:first-child>mjx-mtd{padding-top:0}mjx-mtable>*>mjx-itable>:last-child>mjx-mtd{padding-bottom:0}mjx-tstrut{display:inline-block;height:1em;vertical-align:-.25em}mjx-labels[align=left]>mjx-mtr>mjx-mtd{text-align:left}mjx-labels[align=right]>mjx-mtr>mjx-mtd{text-align:right}mjx-mlabeledtr mjx-mtd[rowalign=top],mjx-mtr mjx-mtd[rowalign=top]{vertical-align:top}mjx-mlabeledtr mjx-mtd[rowalign=center],mjx-mtr mjx-mtd[rowalign=center]{vertical-align:middle}mjx-mlabeledtr mjx-mtd[rowalign=bottom],mjx-mtr mjx-mtd[rowalign=bottom]{vertical-align:bottom}mjx-mlabeledtr mjx-mtd[rowalign=baseline],mjx-mtr mjx-mtd[rowalign=baseline]{vertical-align:baseline}mjx-mlabeledtr mjx-mtd[rowalign=axis],mjx-mtr mjx-mtd[rowalign=axis]{vertical-align:.25em}mjx-maction{display:inline-block;text-align:left;position:relative}mjx-maction>mjx-tool{display:none;position:absolute;bottom:0;right:0;Width:0;height:0}mjx-tool>mjx-tip{display:inline-block;padding:.2em;border:1px solid #888;font-size:70%;background-color:#f8f8f8;color:#000;box-shadow:2px 2px 5px #aaa}mjx-maction[toggle]{cursor:pointer}mjx-status{display:block;position:fixed;left:1em;bottom:1em;min-width:25%;padding:.2em .4em;border:1px solid #888;font-size:90%;background-color:#f8f8f8;color:#000}mjx-mglyph{display:inline-block;text-align:left}mjx-mglyph>img{display:inline-block;border:0;padding:0}mjx-annotation,mjx-annotation-xml,mjx-semantics,mjx-TeXAtom{display:inline-block;text-align:left}mjx-c,mjx-c:before,mjx-utext{display:inline-block}mjx-utext{padding:.75em 0 .25em}mjx-measure-text{position:absolute;font-family:MJXZERO;white-space:nowrap;height:1px;width:1px;overflow:hidden}.MJX-TEX .mjx-n mjx-c{font-family:MJXZERO,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-i mjx-c{font-family:MJXZERO,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-b mjx-c{font-family:MJXZERO,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-b.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-BI,MJXTEX-B,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-cal mjx-c{font-family:MJXZERO,MJXTEX-C,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-cal.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-C-B,MJXTEX-C,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c{font-family:MJXZERO,MJXTEX-A,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1}.MJX-TEX .mjx-fr mjx-c{font-family:MJXZERO,MJXTEX-FR,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-fr.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-FR-B,MJXTEX-FR,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-sc mjx-c{font-family:MJXZERO,MJXTEX-SC,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-sc.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-SC-B,MJXTEX-SC,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss mjx-c{font-family:MJXZERO,MJXTEX-SS,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-SS-B,MJXTEX-SS,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-SS-I,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-b.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-SS-B,MJXTEX-SS-I,MJXTEX-BI,MJXTEX-B,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ty mjx-c{font-family:MJXZERO,MJXTEX-T,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-var mjx-c{font-family:MJXZERO,MJXTEX-A,MJXTEX,MJXTEX-I,MJXTEX-S1}.MJX-TEX .mjx-os mjx-c{font-family:MJXZERO,MJXTEX-C,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-os.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-C-B,MJXTEX-C,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-mit mjx-c{font-family:MJXZERO,MJXTEX-MI,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-lop mjx-c{font-family:MJXZERO,MJXTEX-S2,MJXTEX-S1,MJXTEX,MJXTEX-I,MJXTEX-A}.MJX-TEX .mjx-sop mjx-c{font-family:MJXZERO,MJXTEX-S1,MJXTEX,MJXTEX-I,MJXTEX-A}.MJX-TEX .mjx-s3 mjx-c{font-family:MJXZERO,MJXTEX-S3,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-s4 mjx-c{font-family:MJXZERO,MJXTEX-S4,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX{font-family:MJXZERO}.MJX-TEX mjx-stretchy-h mjx-c,.MJX-TEX mjx-stretchy-v mjx-c{font-family:MJXZERO,MJXTEX-S1,MJXTEX-S4,MJXTEX,MJXTEX-A!important}@font-face{font-family:MJXZERO;src:url(data:font/otf;base64,T1RUTwALAIAAAwAwQ0ZGIA9zN9cAAAhgAAAArUZGVE12+H9qAAAJEAAAABxHREVGACoAHgAACSwAAAAgT1MvMkDE54cAAAEgAAAAYGNtYXAADfKiAAAG/AAAAUJoZWFkCdzO7wAAALwAAAA2aGhlYQBmAJgAAAD0AAAAJGhtdHgA+gAAAAAJTAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZeMFXGAAAAGAAAAFenBvc3T/hgAzAAAIQAAAACAAAQAAAAMAAO7o+YVfDzz1AAsD6AAAAADVXaFMAAAAANVe7L4AAAAAAAAAAAAAAAgAAgAAAAAAAAABAAAAZP+cAAAA+gAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQA+gGQAAUAAAKKArwAAACMAooCvAAAAeAAMQECAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAFBmRWQAwO/87/wAZP+cAAAAZABkIAAAAAAAAAAAAAAAACAAIAABAAAAFgEOAAEAAAAAAAAAKgAAAAEAAAAAAAEADAAqAAEAAAAAAAIABwA2AAEAAAAAAAMAIwA9AAEAAAAAAAQADAAqAAEAAAAAAAUACwBgAAEAAAAAAAYADAAqAAEAAAAAAA0A9QBrAAEAAAAAAA4AGgFgAAEAAAAAABAADAAqAAEAAAAAABEABwA2AAMAAQQJAAAAUgF6AAMAAQQJAAEAGAHMAAMAAQQJAAIADgHkAAMAAQQJAAMARgHyAAMAAQQJAAQAGAHMAAMAAQQJAAUAFgI4AAMAAQQJAAYAGAHMAAMAAQQJAA0B6gJOAAMAAQQJAA4ANAQ4AAMAAQQJABAAGAHMAAMAAQQJABEADgHkQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBNYXRoSmF4IENvbnNvcnRpdW0uTWF0aEpheF9aZXJvUmVndWxhckZvbnRGb3JnZSA6IE1hdGhKYXhfWmVybyA6IDctNi0yMDE3VmVyc2lvbiAxLjFDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBNYXRoSmF4IENvbnNvcnRpdW0uICg8d3d3Lm1hdGhqYXgub3JnPiksCndpdGggUmVzZXJ2ZWQgRm9udCBOYW1lIE1hdGhKYXhfWmVyby4KClRoaXMgRm9udCBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS4KVGhpcyBsaWNlbnNlIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OgpodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTGh0dHA6Ly9zY3JpcHRzLnNpbC5vcmcvT0ZMAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA3ACAAVABoAGUAIABNAGEAdABoAEoAQQB4ACAAQwBvAG4AcwBvAHIAdABpAHUAbQBNAGEAdABoAEoAYQB4AF8AWgBlAHIAbwBSAGUAZwB1AGwAYQByAEYAbwBuAHQARgBvAHIAZwBlACAAOgAgAE0AYQB0AGgASgBhAHgAXwBaAGUAcgBvACAAOgAgADcALQA2AC0AMgAwADEANwBWAGUAcgBzAGkAbwBuACAAMQAuADEAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADcALAAgAFQAaABlACAATQBhAHQAaABKAGEAeAAgAEMAbwBuAHMAbwByAHQAaQB1AG0ALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAE0AYQB0AGgASgBhAHgAXwBaAGUAcgBvAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAA7/z//wAA7/z//xAFAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQBAAEBAQ1NYXRoSmF4X1plcm8AAQEBHfgcAPgdAfgeAvgeA/gYBIwMAfcTD673HhL3FhEABAEBCAs0QHVuaUVGRkMzLjBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIE1hdGhKYXggQ29uc29ydGl1bU1hdGhKYXhfWmVybwAAAAGHAAIBAQIDDg51ofhDnPdtjJmkBvtijQceoDlj/wwJiwwKvQq9Cx0AAATiFAAAAAAAAAEAAAAAzD2izwAAAADVXW5NAAAAANVdbk0AAQAAAAwAAAAUABwAAQABAAEAAQAEAAAAAQAAAAIAAAD6AAAAAAAA) format("opentype")}@font-face{font-family:MJXTEX;src:url(/assets/fonts/MathJax_Main-Regular.9995de47.woff) format("woff")}@font-face{font-family:MJXTEX-B;src:url(/assets/fonts/MathJax_Main-Bold.c9423d5d.woff) format("woff")}@font-face{font-family:MJXTEX-MI;src:url(/assets/fonts/MathJax_Main-Italic.7e83626b.woff) format("woff")}@font-face{font-family:MJXTEX-I;src:url(/assets/fonts/MathJax_Math-Italic.5589d1a8.woff) format("woff")}@font-face{font-family:MJXTEX-BI;src:url(/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff) format("woff")}@font-face{font-family:MJXTEX-S1;src:url(data:font/woff;base64,d09GRk9UVE8AABagAAsAAAAAIDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAEF0AABULkl+DEUZGVE0AABFoAAAAHAAAABxdKvsAR0RFRgAAEYQAAAAdAAAAIABeAARPUy8yAAARpAAAAE0AAABgPshXF2NtYXAAABH0AAAA6QAAAhoVJZqOaGVhZAAAEuAAAAAzAAAANgy+mDloaGVhAAATFAAAACAAAAAkAwUEGGhtdHgAABM0AAAAjQAAAMR0yQmkbWF4cAAAE8QAAAAGAAAABgAxUABuYW1lAAATzAAAAr0AAAZv+wCdtHBvc3QAABaMAAAAEwAAACD/hgAyeJylNwl0VFWW/1P85JFgUGKhrRlAQBYPaAgjyowiIIER0UTAFggCIYmQmJ1slaT2ql9V//5afu2VykYIIGGREDaBgLIFNS6AIratoPZg2840Kj39fniF3a+qgMaZtmfOmXq//v3vvnvvu+++d5fHMoMHMyzLjngut2rdgty6VYsL6wumTllUsLa6OLeSYQcxLDNFvpORZ7Hy7EHyHIX89ODIafJjGnfvwGUubdCdw9IY5s60QRV3pTEj04bPHs5MirIgZhhzLzOKGc88wsxgMpmFzGJmBZPHFDEVjIrRMRbGwfiYZmYj08V0MweYo8wp5j3mI+Yz5ivmW+Z7BjM/sRw7lE1ln2KXsLns2urSwvT02elRMC09o6qwOL8gr6xkDe1npE+dnltZWVZbXR4D+WW1pfGPNcU3UWuKo9jyyrL86ryqKE/G1PT11SUluVWFZaWVufmFebnFMXTGtDh4tLC0qmBt5U3s03EwNw4yY+Dp9DiYGgcZcRDjn5b+eBzMiIPZcTAnBubG+B7LfDwOYiSz09PjYGocZMTBP8fBdAoy582bGweZcTDv6bJyVWXh2nVVoyfmTRqdkZ4+Ywo1RfrouQXrC9eWjl6cV1hQmlcwefQzpXkP/93N/Rny+bLKktxihv5YZgiTxNzJPME8ycykm7aStTAaRstaWRsrsMCKrJ11sE7WxUqsm/WwXtbH+tkAG2RDbBMbZpvZFraVbWPb2Q1sB7uR7WQ3sZvZLexr7Fa2i93GTI2ejzHMg0wd8zYTYdPYLLZ80HzFBMVDihmKXEW5IqTYr/jL4HmDz3DLuHcS/jWBJBYkrk98K/HjxD+hkUN8Q64nlSTfkTwq+bHk7OR1ybpkKfmLoQ8NPXhHVsqUlEPDJg2bMyxnWFGkHHrlzF62l/4UvSPwQ/JW8lBCb6RWSbGRzMSUSHkKaceTLyrwZOxUAmn/muTiiSQVbUmw251OcIBDsBt8JBnfvwhnA3YBlo7jbDwU3+/1ifbouMVps6OyBEK5ppHVVASKiqygIk9GReK2aTiXTMSpSJPQwINulGhzmSQTTib3HSNZQFxAnEtIFqF9s4k3CTakdwrNI4MJeBJO/QqvBryBCpwoVw/8RslrI4+nEZNgAbXf4Ac3eJxOjysgP542uFF0Qkjn1YEeeLPFTFneJj/0XLvaw+KVPQq8kvygxEt6yORrV/HkHrIkISqylfxGKTgjUW4+YHEbXUbQgEEj6kWLHJ3HpXUaPRY3+MHvhdDtIuf0KDYMHFHiyT9dJZPz8JK0wa/HZI69SeD4QiFXkO+UoUQIC3aT/aXQwm0NPXwIeMAz4Ec4KkjWFkO7LlzVlbspqx01SgEndzjcs6Gzs60t2OncJEpwlNJRYt4VCve8s+1oyG2nBg8jCJklNXAmMAoCCGCwGqyza5dXVBTp1KYGvhYJZDonkEwxYG7QlpSVranW8VqzytRgBoB6aAAIm1tMAbOfR3uqt5QFSqQGISCSTCSSRzlXjdQQUG8sPlDZX7dD7xBCgILRZf0J1z12MVWHBw38u9JiFazUTo2iTbI5BLfVYztd21MWLEKps1xqoNs5A8bBS6LZofLW+Bs6ig+U9dWigKXRzGXV5FZUFesaDDVWlWCGlygduRNKBLOl3qRpbKytLa5fo0E1ZkGwWVGqTrCBBQxQJwqtEASnuN3X33qgc2NXICSFXe1IxI9yIs4UtFI4vPfEnhPNbkfUPtBE7e1Y1LxoT8Nec1jUCjgTCXg6x7eZw9rQ+q6VnQtaC31WUQPICDydA8WcYKZ8CL/I4m0DU5Wjk6Ldb9+1vjs8VXdsYJrygaTUWWOSUnVjKdSG9AYuVTeOfj6YlHK9KMZGtsbZaPcGW8T2D/mOttew2LcPz9unwL4R++Q/rk7AFZE/KmNfKdnR0X469Fv5a+WKObMWZJQg3gar6BF5r/NUd+8hFAxARNwHIItBLdebc6rgvUpqYtjP27lHu2adWv4JMvm5v8np/06pCXDLDmV3P9OJtE5Y5bJxXxafzz78FHLrXF7u4Efn+3+3FbnssF9r4Z6pzC5YloM0Wip+NXC3KyvfJX+mXDp2evq47Hp9QV29GWl4WM15nFt8Ld5DHQe79mxHPg9EmKhukwIBrqOzs6v1NZfHJQF0FG1+ZXMpCmghMomO4wUiXuAzcj1FB4sPVbUYtug9FgT7NC6uXiporfeNOzX98tKrFi91QPqzmCwGlHJ0w212wzql3sOt2b6iK6dD5S3zGZ0IVgd5rtncXdes/zH7UvqRsU6D0xRld7qd3iNXL13+8VSzr7u1WUJBF+zjjJYyvcqQU7WiOK8I6Y0CXkC1Wg1UP62Wq6qsLK4r5Y08dZyq7eW7yl9D2gBdVdQkuJQ4eq5Npo6egQfLEzCnGNhMHlEOHE30vd7Z9KYDhXquf5wXSjhs3aT2lyCHCa4ftRo5XUmFerkVqfPw2R51wq8dFU2GXUiQ54KcKU8AuP5fv0Tzf5mQnP35hH+OUJFypihncr9I8zOlBj6+fcIviOPtayN62NMDurjLq5Gow88RD/cDGX2RJIKAyLOkhBtPhj42UbDZrNSVbGB18A7BYXsD5BRA8hPil9iTB5y50VBj1LzyQvbqOTUva5abZ1sbBTIYCAuIMGNAHIWfwUXcFZz0+X+KosMpuCySYCefyNkWJ4h98AngYYAfE5qEM/wbpj1q9HnFmaytT6A2oQ04S7Bhb+WHaA0eFHkCuEgG6MBqo/pvvlbUrcBhbFeSySR5UwUnQlOgJYR2bKJfhwnXR0YhzBIpIHBNYBclyW7Hw3Ezfhh/hPA2+TOQOMFt8uvACCbeYhYsBBEzGU0OIOKJbOZsdrJKLotFj3/CD9LjOF6WleOjkYP28PxbCFw5AmwCmQyxR6Rvm93gNfvAC17J7qURC0++9Qh2ZPUaJANNYkaTzUgzzqld1zbsYo+dlJ89qbhKxisnJKX8/hYS7z35TfR1YwRfGUGH5YX/bXzU/ySKU96i27n70reY270jTlNWU1syChqddR5187rXyw9DK7Q6W7zbwpu2tO3d+YH796Hvkejj/I5Wh9/1ZvvuPc1vudvFAHTCRiFgam88+Gr36g28XeUBEQG43nfs9GDOvS+0PdDV0r4DQhCy+I0SXSdNXoLaYrOhBqOxHupRRVvVa1va27aOhHdy9j3vNNAEx0M1TRwq7YriwnkN6TZtI+Gs1UjQczprnVXH/7omf039i6YaQQvroVLUumuaVmwr2FfttLUa6fkEEFS2Ki3J4Fep842VGlWjwWDWWbWgBrVT5zE7DN6ojmLIabeHPZ5maEabajtKR+Kl8g6l4Sndw/x8QU2bBZkTV3bkHYB+OHf4reNNTtEuiiBS8QAIzydjlPDM6qU5KoNFa6UoUfTbQ95PPedc74hBMSTSsCR5LNye2teXQRZK+fOxC3L/BcV/ELuyBbxuj9/h3HoJK/A5hEfL4/EDkfEcHkTObZ3usHh0XlMLbISWFugA6ha02cnZaxN5j9GvcasB1YNGb9bZLOTcT+OsOuqk0VYdrt0Et+Y5NrBUCbxoEXm75Rwp+Jo48eyIWbvDb/SYJZsfYjr4XB5M5Yp2JLpEFzihQ9WyHlRgMBl1VkvJdEIVQoSqRqiKHKHKllyyOo1+naeeWr6+DqrofAMPf8Eeuygf/UKBR5ESWvmdF/En9iDX9PXxDz/e1dO2zX8CvoF3XzmU053fscL7IrJr7Nd/xUkqn7oTNkAw6ArbJTo37ge8CvAQwWP6bdHZxSdfPpi9Y2EzKvJUOQrBKJrBTKsoCwh0ufRLII/XkzHkjgbyb4IRyBAgqxCQfrDYza6GoGYDPZfeJk8z1Y/YY/r1XlKcGahTTkxKGThyW3XYkzbYgvN6CCTE8aobJV5eGlH1ROs7OkCru9vKSegheZQp7waeMmAVeVtJ8vIwUIa82xJ5fzzHp2C5WyEPGbisNICFt5jMdUSKHKferscUSnVOo2Txgg88HtEHkuAgw3E3InfjPZj+ORqeukUHxXuNXi3d4AvdigsDHynBLFrxcNKN8N1kD6F/jtBe1Dii3mOMBhqJVslSK5bk41S2j1BobrV4eIdRRFowGgSaWGUlcVzC39BbwDeX2OMX8WUaBy9fVNwdkdHAKuWkJPkPkQIlvCqo+fJSMpPOkkKm5L9qLLUWwKugFstdGU2PHsx+//n3132qu4wEHzTHm+jrxEvxWDwaZ24N29sdnfS80Q0R8PIqPItMA9KIIroRK7cVHziwrevAwcLXVuQVFa0eSfXB+Rdl9CUr+y4qbuiAHyB6JXk+ghJFFxfCSad//O7MkV0fdJ2PFcYiIBEKyMRRmMULlKcN75YfWfuHzNPjQiQJiXyEBgMZuQTODj7BY0OEvd6v5EWODApOODbvy5y+ko8NnyLBJSPg5BxeWU2eo4cqg6ysQrxAOaP4mJEuDpyLGmjg7N/UqluqPG/4sLxvJQrpyT3kXtroG99D7sH3hnzcmz1vb+r33754RHSRfcoomSHIvdxX/oHh09st5v108wdv9CFvEFMKKuZeTk6jN6kDWVsyvTNFPS3iY03QG54sn/9yFjJobs6GKTl37qO+U9HkvDiyTBnlVuu5rJXzy2ca9EK9EOOkF5yZ3vmbsw4gtQ9H2SgjF/MP+cGL1EWw9iLW3PQSPCWSr4QGnyZg9pmd0Afo2KIEKIT1otVZ16JuoZ4bDjub6cHcCDvQiWOJfdSFfVJA8gVpMd6sb1K7kdlJ7gA4wcFpEHmfKahz19u1YBJ4nreajFae19NQ+jxaRIYmNhgatVB9w1tPfC4fuRjTw2zhjTajLer5kVXRh6fu3eg3NPFo4MGEFrfk9YSRXJAI8hzYaZMsYXWoGqpBo+Eb4kzzUWRh5Ii8kFLMB5dNMjdrgtVAj7/FTC+LkZlwhYUrV64oYPCVKxMS8IoJyij85YHrCbGBG+gUufjugSLlyCSF/6mhQ2BoUm9Sb/LIpIS/DB2exoxMZZKit/1/YRYyrzA6ponZyvyO7Rg0bZCXBrsAQXbBLoh2ugBvC+nBU8kDT3JP5j67Nnq7iz60YrBIWuRVcW47ljDyAUqGF/PNo0CI3qRRQO3zcsn7d+xt6aHXL9qEzdYWvre6S01vejxKDlqDtiDsgT3N+3cAvLUbJLoLbrMbJa8qzFXlxYIpL5Y5VK5lG9a01khVTpTMiyYaXNEyWKfKLaLT/Z0SJhqo/vcSJvkflhPN2/27Pfud7a14rLsPhXCidMaH7wviedLB8O7/d71gqVaR0cbn1CTRPFdP7kNa8qR5xS9XAvFCAN1eCSTfOneWaE4hq2iCEU3uGdvnHn/hUE7fuvcbuowdtp2AdkKHfZvnvXDfzkOHjp/cftb9ueimKSyWyPrBaZP4cPS8ofWgV5vqke36r2wazrCkakVBfk7OwlcejioiGkRyV8sjX9XiZGQLCvg84E+sLs7cpA7U3jypyWTE0vHjlxJl1Qu65TATZvqXdSw6QpTfj8cjlh6v6tVegAtwOHCyA2Hlke+/P4KVHSf8vRTXBq2C3/hOw/GKt+biMeT+KyR9c6mkEl+l12DRQPc6CxY3Lq1FyX8FL9FaYwAAAAAAAAEAAAAAzD2izwAAAADG+TJPAAAAAMn0JeF4nGNgZGBg4ANiCQYQYGJgBEIDIGYB8xgABloAYwAAAHicY2BhamGcwMDKwMDUxbSHgYGhB0IzPmAwZGRiQAINDAzvBRjevIXxA9JcUxgOMCi8/88g9/8RUECOQU6BgaE/jhmqQAEIGQEjQxBnAAAAeJxjYGBgZoBgGQZGIMnAKALkMYL5LAw/gLQVgwKQJQUkNRn0GWIZqhlqGRYwHWO6w8ysIKY4UXGy4kXFy0qCSlJKykqqSnpKh5W5lS+ov9Ri0mLRYnv///9/oBkKDBpAvdFIepmQ9PJD9WorHVDmAOp9ocUA1vsXqPnh/1v/r/5f9b/3f8//rL+ufw3+ct//ea/+Xt09x3sO91jv/r379e6Xu+/vxt2VuhN2w/6a5jWNa+oChhC/kAsY2RgIGgCTZ2IGUywkGM/Kxo5XnoOBkwTTUIGYCDCqoEAcQnGRoJ2bB8YCAHUmSSwAAAB4nGNgZGBgAOLLEuvZ4vltvjJwM78AijBcjV21AUb/PfNvEasEcxCQy8HABBIFAGdaDTUAeJxjYGRgYJD7/4iBgaXv75n/ZawSDCARZGAIAJW9BiB4nGP4xWDE8IuBgfEUwwwgVmZyYjBnXMhwCkibAWkxJneGTBAGqWHS+f+DSYeBkYHh7xkgvsrMxcjINJuhAISZuRgswXgDgzkIsygwWDC/YMhn9GWYCNQzkfEGUNwYKN4HNB/EdkTFQLFTQCwGo5lmM1oA6UQg9mUJZ7CAYbh6HaCbgZghhYEBAAF/KMQAAAAAAFAAADEAAHicrVTLTttAFD2GBNRUiWBBF2w6m0pQOc5D3RAQEgJFCkpBEITabpBxhniQ40S2kwBS1/2CfkDVL+gndNlFu+sX9Ae67LLHk6GQilSibSx7zty5c+65984EwCOrAAvjn41XBlvI473BM5jHR4Nn8cRaMjiDJatjcBYPrbcGz9H+2eA8fsx+NbiA5WzG4AXks+sGL2I++5LMVuYBZy90lBRbWMYbg2e4+4PBs9jFJ4MzeGqtG5xlLq8NnqP9ncF567v1zeACnmW+GLxAPY8NXkQh28A2eujjEhEUOvCRQGAFHlY5VlHms4aiRhW+AjuQiLVvyFmLnoqWkKNkLQUaGjvAdq9/GamOn4gVb1VUy+W1YrVcKYsdGatOKFqekqEnbdEIPXo/h8vQPtN0cYETEitckbLCJTfxd92Lk5a6kpwe0trBAAE9I05lZxC4BHUmEpIjHSN6SJ2Ao0XX+E6PUPyds94Lk3ov6khRdcqiJiYUFH9FvAfjFIZjekW6nD1dzgr1MsVjGcWqF4qKU/kfUe7XYvseTU55NjDSj4OuUXqulTqmD5uMYyNHD6VXhVYd68yH/LZpue6dwB73dnXvpuftkC2HI64p8tze3SI6IxrpeqQsY4+Ao6cziE3EAXFbaxA6itS7G2hy3Ge1pM78hrk5wZDW4O7eORPKJuMKqhryVbpfp/ymtpu6uDriFg40Tnhqc7pbCfXUUOITky3tYp+2mLFizXVd6RKV16l02tWz77x7YmVjNBo5XZ6dc/fC4bHfXLVzI5X44lDGMhrKtkgvhNhzu3LyKji53JGv4vFyq3eWjNxIChoC5ckw5sZB2JaRSHwpWo2m2O/LcOzcHDvY4tZRd8ZkZq9wh64K3NNACq3FFfWtA+EmtZyfJP1aqRR7keonsROrIBVd2q8z878q158I//l/6ScbPUGCAAAAeJxjYGYAg//NDEYMWAAAKEQBuAA=) format("woff")}@font-face{font-family:MJXTEX-S2;src:url(data:font/woff;base64,d09GRk9UVE8AABVYAAsAAAAAHbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAD1cAABLoUO+TM0ZGVE0AABBgAAAAHAAAABxdKvsAR0RFRgAAEHwAAAAdAAAAIABWAARPUy8yAAAQnAAAAE0AAABgPshX0mNtYXAAABDsAAAAwwAAAdqEtw5laGVhZAAAEbAAAAAzAAAANg2pmDdoaGVhAAAR5AAAACAAAAAkA/AEwGhtdHgAABIEAAAAdQAAAKR8fAIEbWF4cAAAEnwAAAAGAAAABgApUABuYW1lAAAShAAAAr0AAAZv/gOhtnBvc3QAABVEAAAAEwAAACD/hgAyeJyNVwlYU9e2PsdwwgYqVdv02jbiPD6riHVAW+tEi9WOovVzRkShChEIAgGSABnPOhkgAwkJM4rUMijaOiAOaG/Vtl/vs77a6fW2771qWymt7e0+YYfetwP1u7Zf77svCfk5e62119pr773+FZYJC2NYln3ouWRl2rPJ+dvWpqtS4x57OXV37t7kbIYdxrDMLHEEIy5kxfhh4iKJuDjsl5KBO/LwLjn3Iidnz94vZ5gR8mEjRsqZGPmI50Yx40M2iLmfGc2MZaYws5n5zBImgVnDrGU2MslMGqNg9jPFjI4BpoLxMnVMM9PGHGe6mB7mCvMXZoAdxY5lJ+dmpsfGLosNwdzYOGX63p2pKYqMHfuyFTtzU5R0OC5uTmxObkZGsjJdkZmdvDM9JXlveqYydXd28t5BcdyKIVg5BAmDsCJ2COYMQdwQzA3B3NiFQxA/BMuGYHkIFiQsHIJB2bLY2CGYMwRxQ/D4EMynkPD00yuHIGEInl6h2FeQnb47TTluWsr0cXGxsfGPxcXOiR23MjUnfXfmuLUp6amZKakzx63KTJn1h3vxm8HnFdkZyXsZ+mKZCCaSGcE8wTxJ07yZ2coaGTWjYU2smeVZYAXWwlpZG2tny9kK1sE6WRfrZitZD+tlq1gf62er2Rq2lq1j69kGtpGZHtq9Ccxkxs+OYJezKVSpaxhINku2STIkxRJeUhU2KkzgNnFHuavcHemUcD8KR1kRD0VMjVgasTEiJ0KI+CxyQeRXUR33lQ+fOfzg8LPDbwy/Sa7AGTHhDHuGviRnHsIzxBYyQ3ommCejo8GE8GhyJboDJ96UiJcGHpSBjRc0HjITL5yDs7LwSd17/En4DD4VTla8V4+t7+PNOBzPrm/2+g80o0qPIIANrEab2YIUUjKGRE4iS5LI5jTygIrcD2Q+kHl+MqKNjLpANt0hS/EYEoGapRaLjVoh6vbGTUmbPCxbJvDlunLdwUxPYb0Ch5PZ75PN9cRakShsgUUQz2/RJWaRk3NIFplJFiK9Tq/jeaS18tUxHikegyPv4CUX8OY2/IAf3w94HuD5KjwiDY9Kwpsm4aVkDI5AammhATRjo7Hto4ExMge4bJZyqzUwXi69BlVQVepQC2VQYjTrTaaB8fLALCiEImeZh0fRcwfGdMul9d0sVnZLsJJa48JukkiHcGI3KZTSKQObj0sChgFOBj5qLP13k9VYobPqoAi0GqFY0AXGyQMzbHqL3mWsAA+4nFB177wbuiW+/s9lOFEe2EYSN+BCeXh4aOKfcSfdljcH/iTzhoMfQGvLc2T48r2bWhWdJaeQ2c1jHcdjt1BkqFX+z+KL8a8jTbnLylXaX/N5Ky62Xeiq/ou9li8SsBsJWG9xca5TzZ2nW2u8Lb5ah9sGAH4EXn15MXBaMPJGfotqnzpT9cKunVuKN+iVQh1P/IgnerOWMxWZNHp1btKGjav2qI28KZQfweQxvrune2N9UrnaqrEWI4tWIAZOIH6+rlxZu/T6Gox2VBqBLhl56HIGxpySS1tOsfjILSy5JMFR/b/IIMdh95VdVVxN8q6gO1AkkP0C8YXs7fnunEpV92IcsR14tEe9Y39WflJKxq7Cp03ZlmCSKbt4xeqk1YrCsjI75EC+wNcAqgQBPPaj3qM1LbXn2lvf8HTZ66EEsBXwbPhIqKh46/Vzl95Afk+j1++otIcSAD4Ajf3Vql0Hsg6kdeQdM5zgK+Ajqo9CZiWGenVX+hvr2zNqd9bs9KrtPGggH3iAPBS6OeIa8fIRtl8r9snGRYae8Ft1l1h8MVAiGx8ZHbwYktqGhPRhUDiwZkgY2BFcf17O3XeexfvwE6IZPynpf4NclfXjcN/lnvpPAbnOy0nOOpe0HVr1DaXtRZV5nnQEv2BTKZe/dl3ek4BK1om68yXSRfBSffEVxIt9IH4vmgHkZNU/U/p/+Q3qfu9WThKDZvH7cEH8nvs/1H4XnTzMco/nfhRcf0se9u1p9s/9iTKDCUxQgIQiXBNkOTyFbMbDSbxgtpiCh4M/AvBmesp4MFkNVt5qfgfEVkBir3AJz+bavql/u9yLUqTabE1OgXLtqiXbZuS8VLxWP8Og4omdJy8DIhGPgTAW+/E5Dk/C8TgKywVBsILAW3jrZDye/CKWoTI3PgEc7uCr4YwJjy/9NufjTYdU9aqG3Mbs6myvAlUUdwKnd+eeT/sUvYQfDX4HXPBzeq9NZkR3u39Ph6S/WB6mlumgzGAyoKBDHjhKdgZ2cQA5WYp0NIUMP5j1zkeYDUZzl8nek2SBTYMqpV6wW+x2hFv7ozgMgYbDP9DC69Q5tYCijQN3jshRSgd7AYcFHsNhErx4oEA2gZ6uunsk4uM4jJa+QbyrITY9RNX6/X+ghqfSvzn0edzv1EV7yCbkM/DmMXHrscCJQbsrx8RtnZfv6r6e3ZCxKy97d4x1zcn1b8MpOPpaw+HWE4evtfQ1ffEW1r+BX0bON13AfeW4cbrz6qHj/uPwLnh5L+8o+ibp2tIOnU1vBUC1OJxrxotdF2q/bcH/VvNh47t1lxra68otggWs4AKv0akvN3rVPKCMMqUadqNXm5QtR2qaOmKMV5LPJoCRvk38Tl1mdm5m2ta9CRlTsxe9QGA7SUKl20qAiy17atOONZnbVDtgFazyJx9Kbt7WmXFSmUUWbCeabBK+iyzfMzstDWlLDCatoIKicrXXaDXT4FocDR5oR9jfv0FWtq1gtiGDL+P1NJJcD7fx8O4u9UVDDe+BBmgQPPYa37snei63NFa2ueoA2aVGzaskXvUkwmcPyEDNa/gy1YxnVszdrzEVmPSAjFJb5es43v+xs9v3lbPj/Z2XVsMkFH3hZuDiTUl/Z3CyjC7fRk+5M7hBzo022cq8KpcK8qBQqys26YPr5f29phKerh2MKKteeTCmGvwuh99ivYVrsARfR3ir+AneGvyEwxJy/RapsZicKn9JNTRDbRM03nV1oX+0LDSHYLKWiKFJrQZnYUitGnzuCo/VJobcW5z0moQIujGvSRFTAKqS0kKzcRapIXRuRKgXQr1xhPqdhWvMtjJfgasAMiE/C3Joebl1m73QGzjRKxH9/atkRFI6LWV+wuMrVk9UkRheA6l8cB6QL4EMF4w2ZZ2KJhRq/fZ6JNgAjwR8DfBZwNMElxtP/w7L8NTzJ/1dztOAlYDjyRIPeVEoATINyFkE5BqQkYLRnls7OE2d39YQmmU44C950Sgk647m48hEPGzadbSsZ17rDLdGyIBceseC62iQ3wXe7JX09E+UTYyM3tP/+T0ET3n5A6ztJp3SXwX2XxlaKw/M7A6xc0hC+fuenqCzm2ip2Ya7AmqC7cFvZES7AXdSEyroxmHn8NtnJPQqmmR4YGCAq1A7dG7wgruS9yKoIM+IK7npuHQRfgUsIHyKX+nFpQg/IyZABSd4SitVUAxGnU6NyMBAkIvu/vIkfuccnY8G4ASH3eawWD7Dm/qwHuFV4rPgJavEVdxUrI/Hm8wWo6PUXkJrV0mRoLGpMB74GsxgXkRemU5KEXkmuBJ0nLnYq6FsHd2/mqZIdNJZKnrZnl7RgRNFR6/kQXkgtn+lbFIkHv+Y7GbpXxUfb8ZzZuJHyPNANPBU0ZLM5S+TifScSMkjzyXufVa1VFfK5/H5gPIpQ5cKZF8tWYjvj8Vxr9za9yPcgSuuq7VvH8PSnv/84voXH+BhXTi8Crktr1kOQh20gJtHZFLwtgzKhDJB79r92p5TcBaOdMA5OL+jdYt1PaTsgnWhcPGWXvH0d2xPn3iqVzzVJ3lw4a+RHhl4WEaapUSxltIBWK0HLZXHcSV+Aa/BRWcPlLfZ6yzIIsWjTLIf1L0pnz+HR0/9gsyoJotDHmnjwa8FooghzeJpaTnP2cDJO2lQo+RkrUwvcETqnnw07j3ycN88PKMAL+YdfDkISOgBrIjBzdKAnKc3zrTPrNFtV29UJf8jO6szVqtW6BCtMOJp3ExJSNED/NihxMvDOkNZl4cd7ZXck/CftX27vnjep23Ko3EFRwcfDo4WH+ZAaKr1ub+88vORvzkcgpNWElQjvZu8ETR5IU2Oh8IarU/jL64tqaa5/wF+hA+rbhz6wHO4/nj1IV9jc7sFUH+cRlabU6Ooyjo76+BkmDi0o+o9uckFmYU5it1mQCGXYsgt7fwNdh1aPHCDLnBL+n71gvVxmVNLh7Y7H/Lobk91xh1aeC7Xs6WVFhNB/JM4WogJXT3xv3vp7cM/9eK/3b2A4iskIKN8nwbL0YQJ4cvpPyY+z5ifT1s7Wl38ZW69m6+ndapR6AD003gpEAT2co2jqEpbGypfLqevvBIMgBH620/hHdBIKb0e3IK73O9whQpcY35Nns0kUAeAJvwkhQ+gjbcaGvb7lJANqnxD3lBV6LkdOHF7MCgaAPkMBj8C/TbZCzzqWh0St/Ic/i/AI8AuVNt8VbYasAr4Mxj88PTbaqjP8ytBCXkqQy6iRZushOBGNBAxcCIQEQ7iRsAredtvPRMP9LHQ19cngbC+vqlSvHmqLIT/XBDcPij4dTi6/9sHxYuymEiJ+6n7IuC+yDORZ6JiIqV/v2+UnIl5gOFCPy2XMd1sKvv3YQqDEDThJygfE9t8jozdQrhU2tCaXGm0OwI8rAU/2o4f6cCSFgEQNidy+NHdeFiGEKLoNrqTUduNO8u2FG0tSit6IQPtLnAUcvZSaxlQY7u1wnrYd6L6sPtC7RHnO1BD35Xm44YDZR9koTcLK41N+tbSA8Z2wFL46tjXp1B7dZmPMzhNDtrvgcGkM+0p3FqwR5uUl1r6LITOkcaSbM9yrDiAEht2VC0AFPWHvcihIwd7mj70dVWdb/jqpij9M267Js5uxFMq3675Gv2LVuOPO40cyNUWqB9fs5Uk7iBzZwUjXyAtK4OPZ5In8icqx//LNiKKN1CGozwnBI388Yqd3rnHFlx++sYCzL6EwwtfM7igFW7CO9Xvv45un/7wetfXB7p9Zx1XhEo4Ioj0B+yXlMV4u7F+/29P0shByjtL+Y8v0ZLp04iMTFm3RbWxdCMQJZB4vESNX+RdlD8pi6JBMh35j7OWn2/KQ1Hk4UIyMmnSvBmLl5JhO0hU9jL1ElgChGka1zX9NknCL5NYDK+2GbxwHNBxyk7tdvyQH4+88MNfv/3kP/CwYziq6brnBtwAzGT/vLF3JZ5AwnEYmfgeWta2pHaeU0tvWQ5kgMJcYEJR/wtA42GBAAAAAAEAAAAAzD2izwAAAADG+TJPAAAAAMn0JeF4nGNgZGBg4ANiCQYQYGJgBEINIGYB8xgABgIAWwAAAHicY2BhtmecwMDKwMDUxbSHgYGhB0IzPmAwZGRiQAINDAzvBRjevIXxA9JcUxgOMCi8/88g9/8RUECOQU6BgaE/jhmqQAEIGQEKkBAjAAAAeJxjYGBgZoBgGQZGBhC4AuQxgvksDDuAtBaDApDFBSQ1GfQZYhmqGWoZFjAdY7rDzKwkqCSlpKd0WJlb/aUWkxaLFtv7////A/UoMGgA1UYjqWVS4geq1VY6oMyh/kKLAaz2L1Dxw/+3/l/9v+p/7/+e/1l/Xf8a/OW+x3D3x90Xd8PvCt8wv6Z4TeGavIAm1G1EAkY2BoIaYPJMzGCKhQTjWdnY8cpzMHCSYBoqEORnEIaxhSAUFwnauXlgLACmbzOJAHicY2BkYGAA4ti7W+/G89t8ZeBmfgEUYbgau2oDjP4j/GcR+x7WACCXg4EJJAoAleMOSwB4nGNgZGBgkPv/iIGBzeKP8L8a9j0MIBFkoAkAiYgFtXicY/jFYMTwi4GBKZRhCxArM2szWDDeYHgApM2AtADTbIZyEAapYX7x/zfzCwYg+CMMxBIs/xgsQJh1CYM5UDyfSYfBnMWGwZzNgsEczA5HxUwCDA+AWABOJzMUAHEo63OgGVAMU8uow8AAwgwpDAwAR5Eh3gAAAAAAUAAAKQAAeJytVMtO20AUPYYEVFeJYEEXbDqbSlAlzkNsCAgJgSIFpSAIqtpukHGGeJDjRLaTAFLX/YJ+QNUv6Cd02UW76xf0B7rssseToZCKVKJtLHvO3Llz7rn3zgTAIysPC+NfAa8MtpDDe4NnMI+PBs/iibVkcAZLVsfgLB5abw2eo/2zwTn8mP1qcB7L2YzBC8hlNwxexHz2JZmtzAPOXugoKbawjDcGz3D3B4NnsYdPBmfw1NowOMtcXhs8R/s7g3PWd+ubwXmsZb4YvEA9jw1eRD7bwA566OMSERQ68JFAYAUeVjlWUeazjqJGFb4Cu5CItW/IWYueipaQo2QtBRoaO8BOr38ZqY6fiBVvVVTL5fVitVwpi10Zq04oWp6SoScLohF69H4Gl6F9puniAickVrgiZZVLbuLvuRcnLXUlOT2itYMBAnpGnMrOIHAJ6kwkJEc6RvSQOgFHi67xnR6h+DtnvRcm9V7UkaLqlEVNTCgo/op4D8YpDM/pFely9nQ5K9RboVlGseqFouJU/keU+7W4cI8mpzybGOnHQdcoPddKHdOHLcYpwKaH0qtCq4515kN+27Rc905gn3u7unfT83bIZuOYa4o8t3e3iM6IRroeKcvYI+Do6QxiE3FA3NYahI4i9e4GmhwPWC2pM79hbk4wpDW4u3fOhLLJuIKqhnyV7tcpv6ntpi6ujriNQ40TnlpbdyuhnhpKfGKypV3s0xYzVqy5ritdovI6lU67eoU7755Y2RyNRk6XZ+fcvXB47LdWC/ZIJb44krGMhrIt0gsh9t2unLwKjm0f+yoeL7d6Z8nIjaSgIVCeDGNuHIRtGYnEl6LVaIqDvgzHzs2xQ0HcOurOmMzsFe7QVYF7Gkihtbiivn0o3KRm+0nSr5VKsRepfhI7sQpS0aWDOjP/q3L9ifCf/5d+AkCAQY4AAAB4nGNgZgCD/80MRgxYAAAoRAG4AA==) format("woff")}@font-face{font-family:MJXTEX-S3;src:url(data:font/woff;base64,d09GRk9UVE8AAAysAAsAAAAAEmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAABu8AAAgJfCKV3kZGVE0AAAf4AAAAHAAAABxdKvsBR0RFRgAACBQAAAAdAAAAIABGAARPUy8yAAAINAAAAE4AAABgPshXPmNtYXAAAAiEAAAAngAAAar6/I+1aGVhZAAACSQAAAAzAAAANgnZmDloaGVhAAAJWAAAACAAAAAkACAFjGhtdHgAAAl4AAAAVwAAAGQ7uPuabWF4cAAACdAAAAAGAAAABgAZUABuYW1lAAAJ2AAAAr0AAAZvAQaluHBvc3QAAAyYAAAAEwAAACD/hgAyeJx1VXtQVNcZP9fdixfU9VHX2s4NruNYjQ2GaBwx1UaTYEI6aGpKTdWAm5XCIiwqEHnuyrIP9n737oNdFnZhQbQ+oDYY08xgLTFWZ2Q7dlIndSjTDjqxHdO0lhmNfBfOZtuzYqeTmfbcP373+33ne5xzf99cjmi1hOO4JfnG6tLXjbVFb5rri9dn7SouqSk3HiHcLMKRZ9UFRF3NqU/PUtdo1O9qxem3kq+L/BmRH+BFLmu+SMgCkStcKJJMcXbWIrIwFSSQ+WQpWUa+Q7LI8+R75CWSR94gu0khkUgvOUcu1FjM2dnbslOwPntdtbn8QLGpsuKdI8YDZpOxnNHr1mfnzMCmGdg2Ay+lYGNuzgykfLnbt78yA7kzsP3lykN1R8wlpdWG1aanDeuyszdlrct+LtvwSnGVucRieNNkLraYip8x5FlMa//nyb9G7qg8UmEsJ2xxJJ1kkAVkM9lCvk/2kULOTazExrVyHk7igJM5hfNyPs7PBbg2Lki+lbqK5WQFOc7N5X7M1XKfcA9nxTWKxqfp07yv+VhzU5ul3a41auu0Ae0Dfi9fxQMfuQbDau4wN8yWZngJrlH76Zq04cRRPWMTubN113TqB1j8D83UD5Nb9eCT5OYwXYvPr8Dd+SgZcXMN/gDwCKg/w4WqDjuwrz0sy+ADr9vnUYRycLv5uqbCwqrDtIhW0fn0RnlinjNXKoQc2CgXBrYPJHTIWGTek4eHCmNNgs89ALyi+FgOgRVXt97XqFvRp4fEnmfoI1pA28v2l71jMgnHvFJPZhR8Pj4WGRo6eQqLsArn440BVRf4vTwEt2FcGnLeLFfnUcZS5q06VThUFxHcvkbg611gW4bdtBuXJJ6CxGlBN3XvN5c0f07m6UMQ8vsCijKJg7hDdQlqvqjt4D/DphHcJHvliDXaAM1gd3hcHneSEyfvuK2SB1KPNdwYBUGHd5N5cVG4G+cQ4hoElhP74tTEKDTFaV8aq3X1V1NjlzTTh5Jr9RBwh+hKdamQeFyIspoGHPQo7kCLzyE3gK0ZGsDhtePKxNJUM9TM446Ea5IOKh6fM+QKQQQ6OiHytcKWuCYs8uV6NIn4FDXlY5+YXpQqrV5J5g2J6fwQh2PsapPJl/XR2dAB7HuB7PK6lLrQoa76zp0XjdetI84zskXChxJ+KVscZ4V3//7iZzTtqlAfCnl5nzfsD/m/vHpzvPde21nJIuMjGR9IlsCZzpEPr1+/2N15uisWEvyK3wuyojBRdAgQdQYqoMHB08U/2rSxarXDIvdLFCX6EVRLx+y7avaUvF1RYjIba6wOSYZaAWplpdPxl323nusyyMegWqYfyWx/f1vlyVW3N+DiAiHi7AeenQpHJzT4TZFv14MdnLIke3ytYdfdvZ+81mPwlnkS97xlx+nCz3Mmdgu9zUftfFl9ZV1lTYP1YLmtsbTo3bftBa1lSuJea1ktJa/mrd/b4JAUaBTACQ7eKkvHMyMQDfC46Mr4nZP3gwNSmYzTgoy3lAjf/ttTH18cPnX2g/5fdLf7QYYYdIPc7K8LHo7Vd77x6z03rH8VPBEJ/8BLOC2XtQxU3c+5QxddERoDTeACvkGSji5jsyZq76ojF764xYl8rzqiN2Q8ZiYvv3eZC6uT+uUZOlows8E142bmY684XTLjn7qkbh7UqJuTr+k9AB2s6TbZG/T71cti+kZol0LNwRZwQIur1eVxJvwiRsEt0OLpfTSLujutfFtLwAXsBJGTsTN9g+1R8HhbsTzZ5m0VdExOTFgSU7TEFB0X05djV5yOpT1xnP6P4rrEydvxlNqYi+nxvyE4FqddLCz/Cc8i8HRyjp525eMYC8hPqVP92zUNLkKXHm2J2zzq6egjGpM9bY5QSxiEaDTcuwxCtFEdZRrCT1dghHUrP8QIMkvARvWPEORj1s76TBs0t7gckmc5jVGWRaC2xHhKKF+w/AtZN1FoC/hDsvwIY6jHUQFt6m3opjZ1nKfMXo4xSXG12YNN0Aj2ZpeNzTiwGT/WtwtLEn24mH76kEZAEkBaQSOUmQJtTIyCna8L23oydZMwwcHExIQGtBMTq9Jw3yp9Cv8vv/Yx/4TVqX9ajAX6zAxN+MW56TA3YzhjeE5mRtq/5i5iv75vkFkct+EiyMHzIEvwlRm3SCB8VUq38CAFfwpscnBDP751Hn9ynr0oEIKpnfTbIRDmyBBUon584QrqT2EavAfnPOdcHzov2H9X+6Dil/a4s0PqgxMgnIA+6JD/Gfy8B+e93+6d/Dn4wdt8AtokaPE0uugLBVR/mKaBYAazctC/P3AglNezst8Y2hmwyaVQBfuhrPWga1tzTu2zFuFYq+Eg03lrezU4hDn/Bn5x3UoAAAAAAQAAAADMPaLPAAAAAMb5Mk8AAAAAyfQl4nicY2BkYGDgA2IJBhBgYmAEQgkgZgHzGAAFUgBLAAAAeJxjYGFazTiBgZWBgamLaQ8DA0MPhGZ8wGDIyMSABBoYGN4LMLx5C+MHpLmmMBxgUHj/n0Hu/yOggByDnAIDQ38cM1SBAhAyAgAxbhCOAAB4nGNgYGBmgGAZBkYGEFgC5DGC+SwMHUBajkEAKMLHoMCgyaDPEMtQzVDLsIDpGNMdZmYlKWVu9Zfv////D1SnwKABlI9GkmcCynOov3j/F6jg4f9b/6/+X/W/93/P/6y/rn8N/nLf/XqX44aOgCTUXjyAkY2BoCKYPBMzmGIhZCYSYGVjxyvPwcBJgmm4AT+E4iJBCzcPjAUAwEAoHgAAeJxjYGRgYADipW/uh8Tz23xl4GZ+ARRhuBq7agOM/hXxx4t1OesqIJeDgQkkCgCXpQ5xAHicY2BkYGCQ+/+IgYF1ya+I/29YlzOARJCBJAChfAateJxj+MVgxPCLgYHpAcNFIFZiEWEwZxJg+A6kLYA0N9M7hiYgbgapYV3y/w/rEgZGBoZfEUAcy/yCIZ/JneEbEHPD6XcMdUAcx6jDwADCDCkMDAAipRhzAAAAUAAAGQAAeJytVM1OE1EU/gZaiDVtYIELNt6NCZjp9Ec3FEJCIE1KKgRKjLohw/TSuWQ6bWamLZC49gl8AOMT+AguXejOJ/AFXLr0m9uLUENNUDuZud8999zvfOecewvggVWAhfHPxiuDLeTx3uAZzOOjwbN4ZC0ZnMGS1TE4i/vWW4PnaP9scB4/Zr8aXMByNmPwAvLZdYMXMZ99SWYrc4+zFzpKii0s443BM9z9weBZ7OKTwRk8ttYNzjKX1wbP0f7O4Lz13fpmcAFPM18MXqCehwYvopBtYBs99HGBCAod+EggsAIPqxyrKPNZQ1GjCl+BHUjE2jfkrEVPRUvIUbKWAg2NHWC717+IVMdPxIq3Kqrl8lqxWq6UxY6MVScULU/J0JO2aIQevZ/BZWifabo4xzGJFS5J+YRLbuLvuufHLXUpOT2ktYMBAnpGnMrOIHAJ6kwkJEc6RvSQOgFHi67xnR6h+DtnvRcm9V7UkaLqlEVNTCgo/op4B8YpDM/pFely9nQ5K9RboVlGseqFouJU/keUu7XYvkOTU54NjPTjoGuUnmmljunDJuPYyNFD6VWhVcc68yG/bVqueiewx71d3bvpeTtky+GIa4o8N3e3iE6JRroeKcvYI+Do6QxiE3FA3NYahI4i9e4Gmhz3WS2pM79mbk4wpDW4vXfOhLLJuIKqhnyV7tcJv6ntui6ujriFA40Tntqc7lZCPTWU+MRkS7vYpy1mrFhzXVW6ROV1Kp129exb755Y2RiNRk6XZ+fMPXd47DdX7dxIJb44lLGMhrIt0gsh9tyunLwKTi535Kt4vNzqnSYjN5KChkB5Moy5cRC2ZSQSX4pWoyn2+zIcOzfHDra4cdSdMZnZK9yhqwL3JJBCa3FFfetAuEkt5ydJv1YqxV6k+knsxCpIRZf268z8r8r1J8J//l/6CWXDQZoAAAB4nGNgZgCD/80MRgxYAAAoRAG4AA==) format("woff")}@font-face{font-family:MJXTEX-S4;src:url(data:font/woff;base64,d09GRk9UVE8AABQcAAsAAAAAHMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAADg4AABHZr+S44UZGVE0AAA8YAAAAHAAAABxdKvsBR0RFRgAADzQAAAAdAAAAIABhAARPUy8yAAAPVAAAAE0AAABgPshXmGNtYXAAAA+kAAAAtQAAAcr935afaGVhZAAAEFwAAAAzAAAANgnZmDloaGVhAAAQkAAAACAAAAAkACAHYGhtdHgAABCwAAAAjwAAANCVFRBcbWF4cAAAEUAAAAAGAAAABgA0UABuYW1lAAARSAAAAr0AAAZvBAmpunBvc3QAABQIAAAAEwAAACD/hgAyeJx1Vwl8FOXZn2GPjLmkwiLqGCI1ylEkBDDkRwEDJBULVIkVq6gNENhASCAkhGyy2ew1uzPPzN6bZLMJIRzKGRKRD/jC8ZX78OBID8XPRcWf/moVtbTvJO8G+04m2GLbmf3Ns+/xPP/neZ9jnqEprZaiaXrEgsIK4zOFG18rKDYVTZmwqGhlZUlhOUUPoWgqUx5KyXNoee4QOU8j52tZ2c/iNDahlNX/QccOeeRelqKGskPcP2GpNHbohvuonylcDHUvNZIaRT1GTaCmUNOp2dQ86llqMfUqVUSVUOspE2Wl3JSXaqBaqW3UbupN6jD1f9RZ6l3q99SH1KfUn6lvKZn6ntbTKfRw+iH6F/QSupguqywtzszMzVTI5MysiuKS5UXLytYsLS9cXryssIRMZ03OnKaSHJXkqmT2AMkZJHNUMlcleSrJHyADwgmZpJIslUxWyRSVTFXJkyrJVokKm6vC5qqwuSperoqXq+LNHmDIzpumEoUhLzMzUyUKbN6kqZkqGRxlqWSyShQl8vLz56okTyX5c8rWVpcXrzRWpI9ZNjY9KzMzZ0JW5qTM9LlF64tXlqYXLCsuKl1W9LP0eaXLnviP3r5rcmFZ+ZrCEopcNHUPlUgNpX5OzaBmUkuoV2kXVUdZaDfN0wINtEhLtIf20j7aTwfoIB2iw3QD3Ug30RG6mY7SLXQrvYluozfT7fQWeiu9jd5Ov06/Qe+gd9K76N30Hnov3UFNUWJmNJVBvU6PJn6W6Ku0POQLzXuaK5qY5lstpR2mtWij2kPaHu03uhd0y3Rv63P0+fpO/Xn9B/q/JiQnPJzwZEKImclsYf58zwuJVOLyxK4kJuk3SXzSueT05LXJb6dMSslNeSllfYot3gxH5byj9FFyaY6OQOPknXic/mi8ykBm43kJqfHm1K3IijSaXoHFYwzg4T2WKB6KJk5E+c+gFTNQYAU6BnIiyPd0omPvo8DbaMXnKB+RHY1RyQMeBjwuLy8xJn0duIAXeH5taW017saf4vR4JfSnkB9Kj1ehbvxJS9X2MkkQhSCEgYnqJcnrJQJSt8q/IgrsYfXvGMDt4SImNAQ/fAPnnMcLP8NtB/BFiP8U4o8W4ouTcNsCvDAL52Cyw2xyc8AztoAQTvPrgxAUJZDE7W+0tKFu9ClKlyuhNxV6k3G6XIW70SemtnVv8KIgOsEBjF1vcQj2Ualy4OSJvv0nNKzWw+ovGNzc7RvsLY63KZYAD7URc5QoG/b5Ah5f3w02ySSFCAgBYqK1TaY0K9idnJNJxQtYPKqHTcrooVF7jwa1k6EBnevBFjKHLD34nP4HqJOs/pABBJHIl2x9CpyH8znCXBiiEIlAM0gCkc+Hbitwbh/DBeu9VjCBpRZq70Zy9Gh8rF4yIAt76xq2zEbn2KSDClQX+kZx6VgWZxigBRp1EBLA5q33r4+aG01NpTvqWl773aoeR0wIARoBKDzwu18IMY6Y8cNnL1ua1uysa6hp3NhcE2Ze3qE7t7P7rUPdZy53fBiIiYTlfkDk2UB4xZC3u/FQ24Hdl05ffGcfE/KKACEGGqHF6V8FlfW61aYKc/nGvMUv/rJsdn2ZYy1nFJzC44BPMkI8gzfp+A2uKs5UnjE/a0qBxSp4YANUiZ5G6ycFF7K2ZfhM3ippAyPViPEMHeBT4uOiM/TL1pc6Xjj8i7cLPlrKtNr2gI7Y+xWxFz3K6o8boBqEEPf1sx9hKozTRBvgNMASYA8oI3/Onpmn8ptqdq2Jmpmd5bsrujYaTasqVq+rMZesqatZlL9qpjNHUJk8A3xpgo1xTC6esXBexbrlJWU1dk4QoJqpANia1gxtYd2x7W/t6Oo8c6rrYssVb5OnWWoV/eI3gE6K8gKhKPDmJsRcuvXlWaYxDE5ohy3gtITHn82/tRExjjfFIkFeCOiE8I3g51vdza4mpvKzgmvZF8o3lUdXR5mqcA3Ug84C/IZRSrL2/U0+fZGu69UZ0hOVwTWkjSItLf+197zhkcTU/pCyzMoBdQMZDm5g+26rO1Ct/PN9clunpm81q79o4LlleDlexWKBwQG276hOkJagbQXo+iIUI38EkZmJx8/CE7avu4iGIU3/A7pzGB3DB0Eg0UsyIwIB0RP0+eTjbFIAAkLIFrSBHRycW8kKA4nOf80IErel6GBPnNL/sHbkTgwfZG8FyPrBwUUS5P/CKFM9+CBhnv3PNcKIjrDYaMAHZ8sUYSRrf0cH0X2a3vdZrc1QrSfJCQK5HA6HDUfwZTwxPvnX8Z1mPNqOR/N4JuSD6HdLwj7YBcwWaCOJ7ZdAhANwUPpCPL6pdwxKlG1oh/xwIOzxgQe8Lg+pdIMo8iSbYXTiHchY/72keLpJHmMT+gAPlyctlffXI9aJZgIaQ0SKTokXq6ACSmAFKS4M5yZI+R68sgHPacezLpAKOT4+DLnxkYAt4CBliqQmqZItSpUkyARVfoUA7WK1VQaRl1werqVi7+LGKvQCfgfR8WGdcXsDfthPrMJjoBBINElCGwk2ZhfsUwzzEI9dcqOV9WhOJXpqvrwBj5eHYTc64gg5AgRNdChlsV5f7xSsowbB5D+qJg4MTvaPNIQgCCK5AoFACEXQZTRRnvw7eWcEjQ6i0RIx9RIITg8vroUyYMrIgxeInQIsJUo58ax6/NCKuAMTbTHR2lJVvNhU4XLwbnAzdp/Qlpb6WN+JGI2uxjToav8Dhhir34+iMXxTn/rY5g2D8yNi8tfZZKJ/5A87RxrQzRiOkt3KwoCIaEzTd0KLomzvghibkPCDCDKPoneJGJiJnzLgaDa6SbaSBXk4StL0Lum732CEOofu1fLlZcWrp03Px0Ns+BFSGyYCzgAchFbljFthL5wkrpT8DHktnAM0T0TNQq2/azN68DJivrsS8Pp8ypkB8SfTkqBIT9bID7Bal8Hl0glu+A3gPEVilmCx4hlz8WiclOXgOE6JXVCSyQ42UWBA8HEBDumy/4gfasDzRAtkDejhUfXYDuotiQwJ4mpAXkDp8AUphX+ourzy3Vev5/0++zhjDkVCujOdx//3wIkLH3V+FfiOVPMvlI1ke7USoRuhEkrBqERoqmxAKZrepbd/YmhJILEYUqKEvKm8008siK3+ytLh6OD+R4jAFgGtBfQ0nBMkhvcLUADLwAJugVHM4wFPADwSxsJU0eqdH31ux3NHH7uW8+3zTIOzg1RuK+qhB08EnTeoHEbAiYCnQ/huu4hZVkDTlZ/VSaB+rGuSBs3pG2FwuYmIarLVriQROTPXtefPZ+8e22gMGH2/Fc1QIeIyBvA8WEjyyCkS7+2FVlU+ObYgoAz4nBzbB2v+tOos8+JHcy5NOsLU+01KEeZUrLs9SEwcB3gEjIcnRavvqba8fU8fevJybmwxE7GZbbpnVyxeUvj8/GkrxjoeJcHzBOB0wN7/4jSPgn5DbAyjGVfQaJR0I+Dz+UCNHtLhKD5gQHGCD+tis9BD9Wie0Ag3FC7C++8eVDUNGQTSlwlKS7MQ8NMCbhYjzqIq/OBczDw61+HiOKVMKnHGlANsS4tCg1/32ZGrl47F9p7e8YHvfRIlnw9gBP8dA73Vu2i/ptfUr1T07xNcQWfASk6fs7s4RujnoJ+Lz2N14/AT+GJTnS5g93NA0mXTm1sOMweuyxVs36JG0G0SRV8wyKR29d77rgalI86AhP71OsTGxyAtvi7yAWvQ0QLM5khk8ygxFDezun1yLavrgJAO2muaqkUXcMQ8q9vh5OwCjwkTJswMFvrLSX/wHZGaxuJ0QwsEA4GwKCEtuo5YeQyDhN710IqF3nIdJmNM5gXJEbYGa4CpMtduGAU2AtS3KE4ez4FNtyFi3px2x+gVZkMD+PzeICP//UeW4zOAz+i8dp+zAZRDks/vp3/Mcx5dTQh6Az5ogAaHz+5l8JfAuXUOt+Air8/4xwl32PEVQMl0NS42tOjbyOn5gr5Qc3uo4U9/QcNPoomhkNgIfmgCjyj5SBUiIcUoD0HifW4S8Q6oFxwwzTmtbOGK7JfnznlpKmM3g1E3IDeRtp41wDpYR7KB8whNJBu6uS77/9dcLjn1yp7yjuWbjD67SN6OTAv4/dBhj+he+nju1ezup9+avGscCRpy7iTXBUvNqEE916NrBjAGzbojU6/Mib3cWr/P1Go/Xfme+STpC/+poqoho6hYB8Xwsq8omBPN27XocE3jmp2WqC1c286FuKAAVUC+LgZly0b0sUH51iCpyJMO2s27OVttpc1qqVmzpsYyY36GEac4rIKF9FpMHalCvBIW69RbtbCRZPx7kdPtrcF9La0NTKz7ytUjHzPBCHToUuNaBcQ6Qp6GkuPT9KlxI9yk4ebNmxrQ3rz5uB4tedyg0P++0J85sDA4ndqXMrw3ZEhL1DTMSr4HkhOPJh5NSkvUf598H0ulDaM0yrfgr6g4PZ1oKZAPKE60S3W+Sq8tABKglQdQwzFGLv5SXjleh8IvImOhRBztC3m3Sg1SgPwN8B4X1HtvP4WKeVJ1b+fiEreLSZrmwFR1emlmJc56pdJSY68yg5PnAi9K9ZJyBrwXAC62MWjBSTShAxma2qXd0k4gN9/KX7IfMv+l6Lqxq/6EbY+z070fGNLNpm5CGZ032lHW4fbG5mBbBPykKEmkKWrmOvkQL7l9pDVyEbHPVOH5BfgJI76vbj1fwpeQhqdU2ijlB1+LjO+a2lHUUBBiSvyveX6rdPpCtcAkeUFCD45CXycgFoBLc8NGcf2dNkl9Rc4DXM/g3ATAY8VmH+8RXofXYQdsE33AJP0DWbiWLwAAAAAAAQAAAADMPaLPAAAAAMb5Mk8AAAAAyfQl4nicY2BkYGDgA2IJBhBgYmAEQmMgZgHzGAAGewBmAAAAeJxjYGFmZZzAwMrAwNTFtIeBgaEHQjM+YDBkZGJAAg0MDO8FGN68hfED0lxTGA4wKLz/zyD3/xFQQI5BToGBoT+OGapAAQgZAfVvD+kAAAB4nGNgYGBmgGAZBkYGEDgC5DGC+SwMK4C0GoMCkMUGJDUZ9BliGaoZahkWMB1jusPMrCSlzK28Vnm7+ssHjA9D3v///x+oXoFBA6guGkkdE1Adh/JsoLoXDxgeBrz/C1T48P+t/1f/r/rf+7/nf9Zf178Gf7nvfr3LcafyTsENBwUtuTsCJlD3EAEY2RgIKobJMzGDKRZizQYCVjZ2vPIcDJwkmIYb8EMoLhK0cPPAWAAKajPsAAAAeJxjYGRgYADi+gqdffH8Nl8ZuJlfAEUYrsau2gCjf0z8Lceex3YNyOVgYAKJAgBvnw2OAHicY2BkYGCQ+/+IgYE98cfE/y/Y8xhAIsjABACbyAaDeJxj+MVgxPCLgYFZguEtECuy/GOwYHJn5IXQDKzMagwTQBikhj3x/yf2RAZGBoYfE4F4IfMLhnymekZepnoGVhjNnM2ojMAM8kD6JIhmms1oj8AMDECaHUQzVzI2MFcyrILQyGyGVSwKDPlAu3uAOJ1FgWkfCDMe+v8CiL/B6QlArMPAAMIMKQwMACkWM+QAAABQAAA0AAB4nK1Uy07bQBQ9hgTUVIlgQRdsOptKUCXOQ2wICAmBIgWlIAiq2m6QcYZ4kONEthMDUtf9gn5A1S/oJ3TZRbvrF/QHuuyyx5OhkIpUom0se87cuXPuuffOBMAjqwAL418Rrwy2kMd7g2cwj48Gz+KJtWRwBktW1+AsHlpvDZ6j/bPBefyY/WpwAcvZjMELyGc3DF7EfPYlma3MA85e6CgptrCMNwbPcPcHg2exh08GZ/DU2jA4y1xeGzxH+zuD89Z365vBBaxlvhi8QD2PDV5EIdvEDvoY4BIhFLrwEENgBS5WOdZQ4bOOkkZVvgK7kIi0b8BZm56KloCjZC0FmhrbwE5/cBmqrheLFXdV1CqV9VKtUq2IXRmpbiDarpKBK4uiGbj0fgaHoT2m6eACJyRWuCLlGpec2NtzLk7a6kpyekRrF0P49Aw5ld2h7xA0mEhAjnQM6SF1ArYWXec7PULpd85GP4gb/bArRc2uiLqYUFD6FfEejFMYntMr1OXs63JWqbdKswwj1Q9E1a7+jyj3a3HxHk1OeTaR6MdGzyg910pt04ctxikiRw+lV4VWHenMR/x2aLnuncA+9/Z076bnbZMth2OuKfLc3t0mOiNKdD1SlrGHz9HVGUQm4pC4ozUIHUXq3U20OB6wWlJnfsPcmmBIa3B37+wJZZNxBVWN+Crdr1N+U9tNXRwdcRuHGsc8tTndrZh66ijziciWdnFAW8RYkea6rnSZyhtUOu3qFe+8e2JlM0kSu8ezc+5c2Dz2W6vFXKJiTxzJSIYj2RHphRD7Tk9OXgU7lzv2VDRebvfP4sQJpaDBV64MIm4cBh0ZitiTot1siYOBDMbOrbFDUdw66vaYzOwVzshRvnPqS6G1OKKxfSicuJ7z4nhQL5cjN1SDOLIj5aeiywcNZv5X5foT4T//L/0EiwZBpgAAAHicY2BmAIP/zQxGDFgAAChEAbgA) format("woff")}@font-face{font-family:MJXTEX-A;src:url(/assets/fonts/MathJax_AMS-Regular.07173fb7.woff) format("woff")}@font-face{font-family:MJXTEX-C;src:url(data:font/woff;base64,d09GRk9UVE8AACWEAAsAAAAALvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAH50AACQyJmMC1UZGVE0AACCoAAAAHAAAABxdKvrmR0RFRgAAIMQAAAAdAAAAIABXAARPUy8yAAAg5AAAAFAAAABgQXJW9GNtYXAAACE0AAAAfwAAAWLiwp1NaGVhZAAAIbQAAAAzAAAANg4tmIBoaGVhAAAh6AAAACAAAAAkBHQDnmhtdHgAACIIAAAAlAAAAKhijgTFbWF4cAAAIpwAAAAGAAAABgAqUABuYW1lAAAipAAAAskAAAbbFaN4pXBvc3QAACVwAAAAEwAAACD/hgAyeJx9mgl0FGX67juGDp+o0UkbHWecBFEHRFRUFFFHREERFJVNdghk39OdXtJ7V3dXd9VbS+/7ls6ekB1Cwq6CIIwSVJTrKIrOjDODY3CtZspz7/9rnHvPuefe+afOSeeku9Lf8r7P83u+To5k2jRJTk7O7S+VNFeuKNFsf7aktqpCXtJYWbXrvtVlFcraErkk5xpJjmRe5iZJpjgnM/OazB25mVnT6sTa26c1XemR3i75+423SyQ33Z7z5K9ul8y6/a6bCiQoeweS3Ci5RfI7yQuSUolaYlDWV82fv2Q+flj23HNLf3lY9svDc882NLbIqyoqm2fO2XXPzIfmz19030PzH5w/c2mZoqqifuaaXVVl9bvK5s18oX7X/f/NSP8/T61qkNeV1ErwV47kV5ICiUxys6QQD+tWya8lt0l+I5kluVNyl+Ruye8lsyVzJPdI5krulcyT3Ce5X/KAZL7kQclDkoclCySPSB6VLJQ8JlkkeVzyRI4jx5lD5dCSudlZzsI3czmynHeuOZ1bPu0V6R+kn+R9MP0IOjHjkRn/uO7Q9ZEbWvNHb8q96btfnSm4JDtfePct82+97tZLt13/m8d+u/b23N/Jfnei6LPir2Z+MOuxWU/MWjurbpb+511wKLPsUM4h/JV76BZhbqZHnJt36Gd1If7tz8um5/+8K185nLlrMGfka0FzKVcgMxsKxVmr5ol3iXNOLRDmCHPe/gJ/f2DlZ+L9xUK+WF4IKjBJxenUH8RpRc1gZnTuV9rJg/AROjAdBmGI8XO9XMITDnYMtO4BHly0B9D37uV3FOfDhPDeRI5Q+3nuxczsQqjx2DpAOswMsykfEudPB/EWaKQpykE6HJTFWUWVA6oBaFaDM1K8D0bZM3AG9lD7AEWAS6YBaorLoYq1cA7GwVM8zdAHQbgLCeumOziKswEJNG0l5fpacwWpcujoehop8vLhgnB+ouCNvwpbL5eMyS6/IXxR2JjUdHQk4h1FECNiBg/JArBsItET6IfP4a0yWAHVLfWVddsqxK3izZQNURTYwJq9WIqzG0DYBEh4IY9leRY4JPsby3YKNwPr8DKMFloAgFTamymbzYyIPJLeAK/QC0ALwAD740kv7+Li3qj3VPeRdOQ4kl1m3eCHAPjAR7s1ny0cFiWAHnqg4rHifLF2TDg8KLhGCiaFacLvv3tUyJX98L2tsLS5uawYmr1NYdXglmO1n0EYwoyX+Sp65kTsAuvFfyx7+Skv0r/z2sQzbXbWztAM8ruk+1P9vak9SJYJtLrboQ1GlcO7Osrby/wvgxGstJl63rBpp2kthX8EK6rsUPf0tbX1FsFgc6jB25EeTE3ASeiqhJWwvPG1XWrSaXM6wEG/ZLMDIinagf+KgWFdJBrO68FDcFM9ZIcqWodkP/hV7hoog+d0O8sVOouOVEEV1HnlQaNbEcNFAzzDAGrzJNugC/UquqqK8sX1E8Kcicyj6hzhwKe5wjrx/kKoctsDII2x70Iv7IcjdDeNAuDxQJ+Td3AtIFWCgiVYK+NkKQ/NQjvsRX/8YrrHDf029wKAzHy7WwPSFqDBSVHUlpXzxQIkPio2g0YKBiCzu0uAUIx3t0D8TZ7TISUtGqaKRvV5l4T1hWIjCI3CMWl2Y84LOcLCYeHarwoOCTkvTAiVX8v+JTy8vXCgubW2Ut1cWuRaeGz1+6qwM0pF4DOYPND/RnJ3sBcOwkntvtrh2tHNvSsANYHc3mxGsp/0Nq3RTKCL0z8EP1MUtHdTrfA3mBweP4pC00O0y1rkBCdtczZb5LYmh4I0QwO8CiWBnTEnQ0H2ooGiEUlry4uhgdkFr4F4HxhYB0tydBgiwDBub9ueoY7jeOWC1rgWdTT4KuBJWGBc92q9ztbiaIHVsLOneRiRPg9IO9l0HPpQvnIsc92wsHakYO9l4aXvF0/JMsKdQqYwOZ37yDueHE2O9vcMBcN8mAtDHGKOkM3j8NvwaPBgnIBslMlut1ssDgMYUUNK0duXbBsosp/b3L8IdkK5vkb54CvrxGtA/D3clXhk9MWukrH6/YSfCtJBQNmiDnJD3u5YT2//QHLAi+v2Bz7K+CCO4tPhsD2lH2gZrB2sTzbG5N5SQKugqrphGxJ+N1I4TLTXerezOm4zbId7bHUNDS1aFVEHW6FswDxiS5GH4RCCv+z++JQf+fP8EAI3jfKFS1/24Wp76vvcDwW6MAAsVgWeA4ZPuvt9vTzu9iFGQMx3kMBCA+Rjc9fNR2vn1s12zgYNkAzpbk7oOnFXJSLuNpYHL3TBIHOAbUOefyYmB45xroH9w4fRe3+H3Ta3mA9S8SbYyTSxTZzZhSXA5eCcHDLlWYGkKUAOh5RyVouvAclbaToGKF+1N/PtaMHYqfLjgvN4xSnZpJCf+bmwsqZlO56k3C0PNntbAsaIPmD2kK0GFLEQpLS6pU6hkiPZn5vqDDWwGcxgZq3xhedf+hEECZz/Y/ICH2Y8EETB6TBkj5rb5fu14Q27UVNM2p/a3RHvQLLz0XZvHIZ/EaiWc88dvQ/QBtiqbGhAgsxfeBImykMbWSs4QQ8a2mLTm+vlDdUqZLGtGZS+uIfkCL8uZk1BEk6+s/tNQMzP3xbK/vz0c8f/RzEE2SAX8g93Dg12+DzxAIOlU7j18YQmqQwooR69uGrNoqKrMrhiKHPNKC7CxacF5WXZ18J1mwrrm1VVz5wq/aj4AOyO7E59fuyIkAvCTOildjs6DcL0dd/PDDuAYK7qNpYm1AhNhNJUrindqS7DpaSrtjfCNnglsnWgpG/XgHKv1UMH6QC8DsPtnWPI7QObFBYZlsvL5OU1DesAyb4uqY66sE6xxTyEvS6X38+HIYQ6Ve21RcKLmdWFISKs8+j8Gu8mbCEvaNfX1WnUamsjVIA83NJlSpAJaj9+Z1zdCbwcnzJjA0OxaMrfC50QdEZNKP/zjT/9OPn8iQyjLug5ltFdlh3sGStcO162r2gEJva8/VkomuyOtaNQQir7RLiVFm4FcEoZiiEYC1/lqfRVeBpZG2/3GhPmFNbfCBvkw3yATwdRbyzo9Yc5N8MyPPhJ3gwm0NlVFmS2S828jSWDlNva74gSe8l+xylCyHF8Dz8i4Y7pTIB0maEaShssatqBu5pEBABRZAVtlXSJOO8hcc7d4p3rn64qbzI7KAc24SaoTDq7qQDlJQDpGkp2FWcOCzsLWa24DiwOqeygncJeAYgGlh99W3r08zen9n6OAilYJeVms4+7HkT5a5STmX2HrGcKhDVfLPhe0F1eeVnWLhwX/lEYhFYuACMwSnRre1tSDYEa3sTYwIRM02Gjvl7eVN+0Vb0ON3plTN5uCjpZO9TB5rqsHTNUyIj6akZbXsd6mGBCrHBLTLjxYt8lT4pP4/34eP2by9LI6Aq5pYe79vT0j8bSvqS7HclGGBfjBQ/4aT/l0R8u6VyJFy/rl4tMT+1Y9YLNivkAY8ApLhD+Bne9x+6ygAPLNYmrjqSctMV5/xar3UBoDaBHVo8jUNTFtSfckC13rNs0ZaR0LeKv5GJBjXizdpl6bfUKu9GBdQBZ3Q5fURKG4rGkP9B2OL43PBzoCx7o+LbjXP87wXZPKJIaONrbNehHsnSIj7NBGHF26cMNLgtrAzOyTYcao0qrb9FWaDZqbJTSqrGVGm1Ok5WwK1vAgOw86cMNtko+mfnzmZzglHBuKjejFBYX1kBlk05RtWFH02bAAr3hSxCmw+noud73+j/af/xge0ewxzcIqD9uqSkGC2V2WqzN2jKjgmihnNhy7BzlwwvmZb1sfyASju1G6b2J/Xw7phQ3uGG8Lr6VxVKEXSJLVnb6AWLe5mXPopdWbn+s6ffmHfYSKIVHOp8/WNGlHNbvh3+AID3+7l/CCTd2e+Sx80RR/nGYzOydzLly3+XcoUxDYSfXn4ikGI5zs67Eidej511u3KjOep34xE5xyYviw8iqNjukWlJnMZlsdgLzDThYp8vJY7M6Dx/jDe5zCbkRQTL+5Tvoq8njF1J/dXdy7ZCGP5e9uWr4mbEVHvEGKIcK2grinYR425P1DyDahiveAdk9BXQFPV+onw462uLQaO5Z+cS9G1fUvKybT6FyCPdLjwq3DQm/Tgu/cQ/7TmExZRkIwlk4YRhXn6retxkeQPniS8pJYf+koJrM6ZkKXxbqL+cKCuF/Fhqs0md3vLqqYaVJTjThcl58fsNf4Du8IyfP/DUQcfnwinpsPG62BiiVG1WVG7Y0rodFsGYMw1qMj/nbWl/fN34okfQl+Q4G9bOpYCLh9129L0AwetjFlgXkUUVUk8Yyn2IDgSRK7t3TcRK32T4SdoGJdtiMpI2y46na3A4/XpPhZCSBArFQGtsdBk3SZ+jd7t8MFrDQNphL3P3qpmda5NhxyhFs7qk8KEf57ppJgfnTc5NCzXfPTRbIuoXWzL8Kz+YN9wFdDJRpg72hVrxph3jjGvEm1ZbaVXaLww6QXVwzS3DNnpaYuRXZQ8DqoZlq0LdorFanHfCIGFxtibLBpjevUrSbQfv9B/t6RkffGheu6TqLOLewHKSyo5yVc/qhA0Zaw62cyxWnccN20+7s7Ui8MU+81o5lHUNSzJNKnowcDr/FR/kIsIjh/wnS72gGYqSPYiiaQDKXxUUGut/sHi6i4vpAgwvJnASjBHEtI86Au2k7LCdfblCWOG0UCQ788uySFXVBOpqK4z2eIV53tuyDTyczjjMF+6YEYUp2ULhLeK/QN90tXPeWcM3Zib7WkeBR6IfdjoTebcNKbYEs/DmdhuZdGgWy41yBi9fO45rrgrZINJJKvXEestGLp3lbX3NkvQ/ZGAUOIuVQRzbZxEd2ideKN5eJDxCVDizO8Hzq1cHKroYB3REMunkXz0Ex0OYam1a5pnmnoslosDnUgKx522CrvzSJZHqzy4rRmmoyaloIC9YlOxA8HbIj2cEx1ShxhOqEKNPqPpc4dWj83O43Oia7fwiMRk5mo6DdbQVUBduq7SpSR2pJs2pj1fZyhVKvsDYBmrP9T5eL84Vfbz4juN96ZVJoO1sgHJ0S8r+RHcy2dJptDyXiXh/DuoORrmgqEYyHdnv78aTjFpDDa0pRaliHHDoFjd2wAXuT1tpoVKmwMuONYig8PJedxsDdjxstK7NOs8PY/FTz0oZndNsdWV6xeh1eHDpgMBFr5V2uQGwi9WbH+ejrSPaJpw37lHANCLmMlGfCPMsiW61Utcj4tH0ZskyH2pC20+ymGGzkf4VPR3rfcPncUTxjv5Uz0kqn3KTVIovFaXMYDVSL0wwKMAZxq3jZENvmfT/8btflzn8OCrmD/0DuKOfBN/oIFk+KqlQb1GbdGvHh+tnIphCvB+ndWmCKY4fjF70n+G7XPqwcXmfA4SValcEaEG+Gu1eufcLYYsDBHFl9uNDyxSd/UUbhwmThbPD6pN296bHksdCAfyh1oe1ScCQ6FuwKdwcj6FTe25hmPGy7tzvpjbI8wwEHbpLLtsS9eY/BUzQBK52biF26FfItO/RbnDaazKqd2xmCJNsZjMeQz8e5+KA75vJ6uIinxzXEeZgBGGDQacDpSdEk36RZbSy1VGueapxpLGkpMdQY1TodEqWUVEGqjXoDQTgIXFBkVoo5OgXCEhCqGD3d6Xk3enJfZByxLsaFh+WzcWZQUo3GFq1a6SYcAPYm9hEM7ZXidZNX5k3m7L+ce+W9K4sLxWvzFkA1baHFa81i/tNr7jMoLU2OFqfFbQ9i32/3JSKRgMfHhxHj4rysK31sfPREJO0GOMegM2AhpPPu3yQu3iausDXZmii7dl3lxtImtUFja4An4NX98Ek2XbNefDuTtXAvwZtpNaW0aHRqrUODY22jR+nVtG86WvlBNsSEMGh8HPz80PGzPQPpPaFR1u3tdHd2fBc9mniz7x9D7/X3ooAfLx50w1h7oI3N7gELLpJz8Cj/oPJ45o1D3PGcvkvCzR8KH3+YKySvrCn8f7HiFwsKMgEeg4LLy+MwzVDkOrKGWG58qXFe472191bcb9c5LJjP7G67DxMnfrdWxLkie0L9A1/3fNNxKXk+cNI7yXVx4xAGv53/3xCDMveL1xb2cekkDMCIPFnOVoPO1mSZvUucO2v1suYGQo2Zz8HgUSHP4j+KC48ubisd3Dli4mhsTIC76K8n29/HheECF/hItzGbe5tbrErTjh2KtVkpYwh+U9szwk07hNsMY8QYpCDm9Xd0oNOnhV9//laEu1qYKBo0a4v10ymTxx7BcahZeS7z4Yc5GV7Izc1AJlpo5alAFpai6XQ8hlGoPxtqQrSbDBr7m2PbMGjYMJC9YF9WsW59XW1zdfPW6hXNy6vEW5Fivvbl9esNBjOmLtqJmcSZLXJf1i7SiQTy+yK0tJvqIUfNF5UBqtMRdyZwIovgvfWzn8T/9E7qFOvNjhF5bJy1SA8KolmvMmDIarFr7QRBIENeGdvoWpJYnJTz2/D0GbdP6glE+jyRUJ+3I3Sk9WLkYPxgx9m+N3s6A/4gl8BGHKuHnQh0DiOG2/yMfuNPV27H4VT4Z0Y/lfuvJZcKQc0oGT1XyVn9Fr8lRMYhu74uJslHXL3RdJBl/V4UCnivHi3ZOSvoQG62kXanA6+CDRy804evg9CL4IOEsLhDmOc95D/I+vkgE8S3BKkAgdeBxL7jpA1anQaJvxYfFOeKSx5/pKlh6bLsmYN22JawtFvT5pFK4foG4bpmocC2B8DGI6y/+OYmUJkMOouFdpANWvG6OnHGDnFG84pN4m01KhuZDWdIzqv8phCJ24/El4OykwaDrh5qcVGQjMOrHlNgzMTOBhy2mLbWtsHOvZ3HRr7bK+S0f9KBAx/sFyuGRElsQ+vmrq3I38JR/qsv5lif66Nz4weEa4WbhCeErTjGwzbRBeIdKP8nvJZ5Py5UF8hSwqUr6woboU5l0TrttNNRqxXvqRTnrhMfUCzV1+ot2VFaGAWv8hnCiHTRuMjtmFptdq3WWAnNUH1APgpxiHhj0f6+rjcGvkUjgrRHmNYqTONiXIRhgWcojzL1/OCdncuOiHfEyk7NjioYCAHqgy4crJnswRfF0JA9HnQNCw9E3+4T8keE4rbz3vZgP+fCAhgJhD1IdrQt2OsZYGOYHL3eWDzQhzEsRnk0eEAWrMuv2rcoq6tRXY38+VViY9P92hflc5D6SdIn3XxBc6D0xxIhd4dwc7WAnEFHgGaQi2DtRfkXlGczn0/mHJ/KRDH5ZxfDBGYsnsvNy3ZteKW6vGG7aqNVQ2NP4B087Yck0xmORbOyz3vjqUPtI11dqVTA2wM/wd4FIObCdutGY0ntnGcffLIUVWobiC2wHirCtel1e2omMcdHMSr4osKdnwrSH99OBoMBdwD923j+T2xygNFpJJWG+WufXbr50erVLa9alyFsRTp8iTceXvhpWa++B9fZOEx4J2LC3DcEmXDLhPD7yITvGEwgoWDtJfHGonytUDIp/A0nhBum/kNC4Bg2u+5O+2uUpllcsUV87mlxFc4JpA7XNum2eaAXhlpDrW5f52Ti6JvCQ3uEZ2LCfYgNdIP0S3hPPVLRpgw24GJV2FVGefmTj28Vc63NtJ3S2RqMGkwi6BcU4e0cBoUfsFKNXTgbCnR0+oMDY6lx9z7Gw3hwooEQFSaD9iQR1sVKh19s+wMGrh3MDsDXf0wb+d+Lt052nTlzNlOKvT5vKlPyTe6VhZkFhbDSsKFxbfnSVS89V1WvbyCqbLuIGudyGpVjx5Bq7DqL0WghyKzrYmDwYWxOUjFqhBw2n1ZerO2wDllRJ9ntbL+qbwH2/dAXr6cnWQ/DX6UUzkw3OxsNGG9w7HU4zESjxVQDr8KuwMrWFveaJM3QzEdt7x0Qrjn3jXBDQpiHGH921+HbyndX7alMVwU34LZpcpooUdIi5i1dcu/apTWPwjMIHhtafaKhzZRy9MJp+KlzZK/Xy7vx8gRsrBHXpI3SEKhK32ivwctSG2jsqOvRj2O6S7Epd2vkrd3Hx8cPHTrceSZ7dvvHe8WbMFj+VpnNUkL7mRzh2kuZR/5TUEQuBqxSrfjaJnHDE+J6u4HEBEnZPDb/v12Sc0eGfOnTwqK9wsKksAjx3VI8qVDRJ3DRPKhoNQTV2PU3NJfWNdTLd7Zss5M0ZnZajYest6Emk1pDGcDiwpsWpgL2oCmujjSkV3ct96uCqmR1WtVhRzztwmEsCq1snD8efnto73goHItjlfBasQ3jhnSaSKSxGC0mvUahUZaCCnR+bbsuRSSrP24ZM3YaE04XxQOgqdHv/5QUclg/g1UfhvTddYl1g0v42YAW5q0COb3VKOY0PvxC8zP/dzHNxDrw2WRBfOqDb4SVl2umZJmM4craQmyZTFaXnTQNc6yPbtzyikZhktubKCsQVy8La0ee2mRjnyKl85F/rD1XMVwR3M5iewEDDmoms0qx8dWaRwA9A1vaqvYaY/YQncge7LpCiAu4OGnUE496/BzH/huCjVBDVbQ0NcnlmkrYBgqPKtyCRjacqP0Ug9fFjsn9reFQIB775UCY9V2d5R7NUFkvamqtj61v35HUBNUJRdrYgXOCn/Vz/ujEQOdpmIDX9XEdkv3gs7gMWEgImnBaHHqGcpM8xngvrqOuUDx+lWejiAthfvCj9xe1Ls0CdebHc/3qnCvaLF6a8sQSnMHN1BLi0Y07X9UqLI24oM1u8moMZ71cp3egzR/PcivGOEiH+1OeEO+BbwF9A0at1Kq54+elNrlhk3qdcgNJOAkcTa7Chgd8jJfr9vckQx0ovb/9TOQo5+/4vluY0SNc2/Z19tzRg8PGdwxA2jXk3dfe2oF8AU8ke+Jkw+GhHhQalR7lL8Bb+fbZHO3UqSnh2anc9sz5wjAkPYlQ2Bfko5DEhA9KLLFau9pSY6goX7hJzNVsMmxEtkaHHE9lVef2Awas9fTVj5EYLzPi2Rsf7zo7/uEHH36NXG7eBbR2VZ14DTwH9XFtN35VmA3x3cHTXa7uX44WkRn0JG5XCyk1Y8+EJDfh2Zc1tpuPCIu73vW3+TpcSRbDN5Z9r5WzYCKiKtQGlYM017ZsIOR2vbpsofik+FtxybyVzXqjTQUbQL0XjiJIcWlPOjiRODD+bfc7gU5/Z3y/rx8nq4GWWCVshSpzmQqVKOVKjMSEF68qyp+dOffji6cKhO1fCm8flzW2X7mhkPA4fEVe3I5+Z48tpU3VDq9OzgbxNnjcJM40raZttA2ro5Ez+wGx2Y8BmJD7rf1jQyeOnj07cfS9z8//mBDyWDxrCCLZEJwpO/ySy4z30UGpTdqd0Ah6lojCXudALewEK21zWlHjo3eLMnGWWKDRNiqz535BzMV/B+HJOiHvlTeQrLGxvT6yFVB5WZ0aS1fXFcmpHOGFL6+8djw3O2Krh/QK07rFO8XiIlhpf8b8B9tGy2qH0WGiTLgNTZw5AF6G5xNpYY7wrHCbsHFKWIt4N+fOckVom6d+SCxOi/Nd4lxuKdAMyRNe2ucOed/74tC7CBvoU+eEu6M/4d0OYdV5UzNUHbHyZpbIMhkmYrVJVw1VSMcQgaFUfXkRbh+L06JdtXH+07OUtVtXaTUIY2VcahEW1AsLtgmzrZ3aIxSHjQ9LQSOUY3/EiAKslc3GBBrb4s7Fip0vz1o5d8k9qjpDS/YoFL+3P/CB6z14Gz4gJrVHENFmbDNEFb3lyR2ASksbm4vz4Zdoe2Qqc2QqVzif+VehL4+nPTRPDxi49a61KCD+Tgqk2CRe//DDtbUWDe6KyoS8H3bDQDqc4rHmUy7E21wOtTXcWoRLl2V5d2Rs9+TEcPtXx7MY4nqcq/M8xC4/KA+QXioG6BCMBAY6UqFoypNmgySvByXdZNRorNYss9aCsdXaj8wjhLDC6Ufgao9IL799enzfYCycTvtCkQQfglY00NJetXNLuRrLrbco7vRYspqBXcahrxZfEqfjOAtmYQExZOu0xPVBQ9DCy7Oa+WSVbjXtvPr5HpFN3W1MXyKeQvnbMhe+zul9XeC/FCxHcy9kLhTGIeWPRTCY+WlpuzNtjRlObB26Myg+wFUzu6AMyp2LnBr8hk6DZePOTfVyEmGyxwC+ma9rt4xTYafXgltGUQU1sGZ065g+6IhQoV/Im2de9/7w0eXvhDuFu6eER4eEuzxdWHfb4Yi+pz5tCKh8SkBkNinQequuAS+5gcedk4I2c8ASMviwEYDJabTKUd39y0XJQ7N1LfJGDF4J9jBuXOGRZmHuixcbRrb2vAybYaeyrhYZDHYC50KL14kbMD/IfPDaOUF1fs0x4eUP158rkD19+JYIRF1BT9wT4trhAMSpzwkkM39FJOgJzGwcFv5jweNDIwdTHfGBwAAXBN7JO1masQKyYmuyUzVEWTPRSFTo5C0KpMorZZvYZZ77fQoGt6DslUrGxUsvnvvTuQ/fR23pGC3tosJUlk3ddp5CspkszWOxTzF9SczgHI0vIqZx1zJIdrPdCkwxMIFAJPr+ubfeOfF+NMlyrBt7AZM9LLCyZtDRWkJuQjKkYqRNjJl9DcP9tBf9FLMJsvDtgMds967f9qJJZ6jNeqyLCmNoTnmTYZQK43AfCe1JhA5BK/Q7DtqQbMMb1gTVT6N2MOikeo3dLm9AYq44Q7wBrA6pkjDowAi44N1OtJ8+AAqFdM68x54W8+/U6gkTWJHN5fQVZf8r5OcHYSoHpqamcmHa1NTsPGHL7MLs43/zxJWrT/z71/kZ581Xthaqk1fuY6IDeUUzcgOLr78Wrp9xaMah64pm5P2v6wv+Cyb7dp8AAAAAAAABAAAAAMw9os8AAAAAxvkyTwAAAADJ9CXHeJxjYGRgYOADYgkGEGBiYARCTSBmAfMYAAYNAFwAAAB4nGNgYUpknMDAysDA1MW0h4GBoQdCMz5gMGRkYkACDQwM7wUY3ryF8QPSXFMYDjAovP/PIPf/EVBAjkFOgYGhP44ZJMu0ikEBCBkBG0IQ8HicY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMFgyRDEseP///3+gqAKDAYMjkPcXyH34/9L/0//bBLSgJsABIxsDuhAGQJdnYmZhZWPn4OTihgrw8PLxCwgKCYuIiolLSEpJy8jKySsoKimrqBIwmdpAjSxdAD02FYAAeJxjYGRgYADiL8KHN8bz23xl4GZ+ARRhuBq7aj2M/v/ovwZLIbMokMvBwAQSBQCIvg3IAHicY2BkYGCQ+/+IgYFl4/9H/x6wFDKARJCBFgCqbgcVeJxj+MVgxPCLgYHxC4M6EIcBsQ4QawGxDBAbQdnmQKwNYjPLMcgxTWRQYOJn4GFmZhBmEgDyzzMIMQUz6DD7AmnF/4+YljHoM/0CqtnEoMCykUGG2eT/U2YZBiumHQzCzIYMRcwBQH1xILUMSkxF/98zpTJIMt9hkGQ6yWDCNIdBnukqgyrYTToQzJDCwAAArGwjmAAAUAAAKgAAeJy1VN1KG0EYPRuzSlNMFaEX9WauJMHN5qelYBBBlEAkKhqR0ovKmIzZkc1m2dlk9Qn6CL3uE/Si9AlKr3rZi170VUrpt5OxNiUVFcyyO2e//eacM983EwBPrTwsjH8OXhtsYQkfDM5gDt8MnsGq9dzgLJatdwbbeGx9NXgWy5knBs/jV7ZocB7P7DcGL2DJfm/wIubsL8RsZR/R2yutkmILK3hrcIZmfzZ4Bsf4YXAWL60Tg21ay0eDZyn+3eB562dm1eA8XtgFgxewYl8avIi8/QlbGCDEJSJI9OAhBkMBHRRprKFC1xpKGlXpZtiGgNK5Ab21KVNSJKBRUC0Zmhq7wNYgvIxkz4tZoVNktUplrVSrVCtsWyjZC1i7I0XQEQ5rBh3K3gUnaQ87NF7ghGxx+FomIhTSF0m02OWxt8MvTra4L3sRDz1JwUOS7mFI+ZyycSh6Q58TaNDSAmJNx4gyhF6Sq5dRp/t2mqV/+RuDIG4Mop5gNbfC6myKp9IfD/fUuJHzmHIj3YSBbkKV1lSlsIiUHASs6lYfRvduW8W5w2ZJedaR6MtF33g/195d070N0nGQowypvzLtXelajOjZpchVxxn2aG5fd/x2lXCJOYcj/aYmmNqEzgglukIp4zjD1/PS1SijPiTc1X6YVhR6dhMtGvdJSegqXDO3JhjSekzvrDvhbFKXkasR3VJ38JSeaey6RlwrbuJA45j2fU53LiY/dZTpUsSWdjSkmCItpbmuql4m5w1y+r/j7Ew9z6ywniSJ26fddM4vXDosG0Unl8jYY4dCiWgkuiw9RmyP98W0A+TmckeeVOOk9uAsTngkGAV82RGBounDoCsiFnuCtZstth+KYJzcGic47K/j4I7JzFzGR1z6/NQXTDvirLF5wHhcz3lxHNbLZdWJZBgrV0k/tV7eb9D671W0mwgf4B/vN8NCYPYAAAB4nGNgZgCD/80MRgxYAAAoRAG4AA==) format("woff")}@font-face{font-family:MJXTEX-C-B;src:url(data:font/woff;base64,d09GRk9UVE8AACa0AAsAAAAAMDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAIMsAACWhxti3MEZGVE0AACHUAAAAHAAAABxdKvrlR0RFRgAAIfAAAAAdAAAAIABXAARPUy8yAAAiEAAAAFQAAABgQqJfMWNtYXAAACJkAAAAfwAAAWLiwp1NaGVhZAAAIuQAAAAzAAAANg8JmLhoaGVhAAAjGAAAACAAAAAkBU8EQGhtdHgAACM4AAAAmgAAAKhxhgV4bWF4cAAAI9QAAAAGAAAABgAqUABuYW1lAAAj3AAAAsEAAAauadlq8nBvc3QAACagAAAAEwAAACD/hgAyeJydeml4FGXabgfs8I5o1LStjqMJO4gb7g6KG4sKIygMOwSyEbKnk05635danqre9yWdpNPZ9xAghLCJICiKuAwu44iD5/OMDmG+Qd/mlNd1zts48+O7ru+cHyf1o3N1dXXV+zz3cy9VnSW66SZRVlbWb98olO9dXajctbywqrysvrBub3nxw6/UVpWIsqaJskQPpW8XpfOz0rOmpWdPT8+5qU4ou0/8+vWvxPeJ/nrbfSLR7fdlPX3HfaI598035IpQ5ggkuk10l+h+0euiQpFcpG6sKV+y5OUl5GXlqlUrfn1Z+evLquW1dar68rK98lmLih+Y9fiSJb9/+PEljy2ZtaK0obysZtaG4vLSmuLSh2a9XlP8yP/tMv+b99fW1lcXVonIX5boDlGuSCK6UyQl13S36B7Rb0X3iuaI5ormieaLFogWihaJHhAtFj0oekj0sOgR0aOiJaLHRI+LnhA9KXpK9LToGdGzot+Lloqey6Ky6CwmixUtzixxDjn4YNaKaXnT757+P276VvxOtmGGDFX+Rn5z68yaW7bfWp1Tf5vu9k/uSOXaJe/e2SW9eNfluz+95/S94t/tvE9z/5N5K/P+OWvO7Io5e+f2zR2ce2but3P/8UshTKZXTmZNkr/pk3fhxeluYXH25C8KKXn3l5Uzcn4pzFEfTd98JGsc5+PdOH86HlVL8dLPPsJL8+GCcUI2Wn5oZ/Jlv5mrhSZAimwdyGkDLWQ3bn0JhDwkLP1sJV6a90V6gTSqder4N8HA1UENFLMFrJ5V0AraYq4s1eyEnVAaNfci2ksn2AQbYg/CKHRxHRDkTznD0Ugk0ubrhzFI2hIqlMOfxuNnsrAK3z39y/RdUmgANmRDQ9ktXCt4uTDX7XRwiAOFcFe+8OCbMzYABTRjolg7aJBthoIzJ/KOwiH+C/gCJpgjgBKcL5HvngFR1ml2UTwFGwCtw3/MBvwGeBkn7bE5jGADFgy2rbI1hqcANWTrLKwDZCgH8F249d3c937C2/CiN85KruLb8GHpQLK9Px+CdNDmY3iWBwBXP++HJHTRLbajus5aKIY6k1IuRwqF1S787tk1JZsrWJaiWQqU0MhRfsrB+ABvBrwJfODkkZMnfy4k+d7h6cYPgo91U067g+IZ0IIMGIZqtCspk82EjNk6VniSBeC4y2N+l5uPeSLuA9GIpzmEJFd7WiJxOAAHNCl5S2XP1uaVXgNXTr7gKVijqN9jNtg1oER7k/UDeTlC2SncewSrjudO4CeFO/ECPBM/INyFn5JcxivTt0o7Yj2hAXgHYjJYC1Wswaow7mmql5lMZBUVTCHNcWwDAhVHkytlOBiCfeSqQ1TUGjL7DEjynzG5WwbroZSR29SGPTL5VtgL1e66kNoL4HU6eLfD4UDNYX87JNHByv7tm2vLduaRNtg5W2TJP7ZiEXwLn3ePHeroiQ3AMRi2NquT9cM7uzeGkNYZdIoHo/3tzSkk+bG5PdQJw9BMxS2xmlMvD8yDhfDyFtUq2sgawYQKOmrGxzu6xvNgsClRG0A5wqYz+J4zufgDfL+Qi3Ml3+BqYZN0hBO3c4dhAs7BIDMGceC90AYtjNPspHkrVAIqxfcMZw+Ak7TL6+Sd0JLZa3FmALUXkOR8Kd5CIPVWBlJk4+08zdtAATrQsywwBKIsa6eFy7/kMXbEEMgSJCiAJp+y84yLHBEF/BvyPd/ge4V7tmXvIHi0MxY7y4AemWeQIWDCdnIWLMI+qTANhGkcrsN+8Y0+XjjyF3xn7kk8a/GHeDN+RPJjuiBdKGXByliZrapNpo2wCdYFCqNaF8XZaRvF+uFh9OgMEJ4FC0+TJTIJSBBEBSLJgQOtb0MXpDT+Jp/KUQGrELxO1xvkhvo6XY3VxhrABHtA5pdHzG6Tn+MAHBzPoWZ3NOZpRpJrpGw8ROBgfaLItQPqqmE3FMTLO2sG9040fAh4HuCb/wR4FoLvdry3pq8qXBQoJOxQbKhWkVZSNKkSIDzTMcPHJJlWCEOI83If+d7rPnw4EAyFeRfPgwe8KMIEDHk56nfwfxzBK44RCC/Cy/A9ws14oSSdfiD9nbRRr1JBJcF6zdi+9o6RPPhsx9DrESvXBGpA6uwnLC8V7VxdsFaxEhaBMKd3wVcb+xtHdcfhIIx5u8K90YGeRBdZTlt/YASOw6eKidLhwoM746/BOqhpqNuLGIaLiPnPPPuivS2jh/rfhQD4GT+D3BC0umm0XdBLmxW8iVsEz7EltibaZLeYTQajzqag7WBjbaSIDRFtEtk8tjDjo+P0BAzC+5GjXV3RqN/dB91MgIppUQ4+jWd3KrLwW/ie6fjpdIEUnIyb5inSSRXBjx0oI23bK6iB4mxOykUT5JHyoxg4OaeTEKXTmXD1eVMEsPx+bopDP2fzQNtrKndsVMiayt98pOpBejGoyNRZPbXt8j7ohVSbO4VIG91wgDvMJRy9nsut54Ym0aUr4rGJgTGOEBXhLB/E2ICBZ7it8Cws49aCkTNCE68FVM03kQlHOepT6TOEXKZe/Ss2/3XVVcnJdBt+SwoXdn+wahhJLmbmAzjkdYuP9XYcIDX+27LTQi5Bl4kUhwEza2VL7JX6WoXRrFRajUhRaaqAEtjrr05U+3UJgj8n5aQBdtZX1Cj3IMllY6NNRqjuyWNr/ybvsLVT/QRI+dc+wb/Nl1wUbsEfSaHSUCNrMJvttMWGVoyKS1rKEzSvCWgjhLm9vNfhDXaPRE9x6JPJ8tfyhRm/lEgll59aP/LnfDgY70+lQqFYyAEcO6DcJx+TDzY56RZ9oglqkHXG6vV1LxBK3fMOXnYUf3cig0dhJr4Hv0DweA1bhT3SIzDsH4z9dPzET4CfgH+qPi09VTda1Lk11OQycTKwgo2zASqCclODaYt82w7VRmstpYFSeCleNFY4VnhQ9QFhHB8XdaE2b6o52uJw8g4OkGYGNctYWllR31Br2A11oHRqvWSSEqFwAlJoWNZZXCyrLcl77KPS7/M+TgvSblNHjbPSoSCKXghlYGFN1p26iqYmo9FEaW1E4veA3qNpNgVpH9NLBoBQxTAhd7Jxfj7BR5w+3usLeD3BQIs3RUAfAhdLULpnG35EuPsf30yl9Yrc61I8V3IQz9kmbYWYtz26r3P/gfOXUSIlhnPsF3l4franIPFMUI4kSl9jh34Aklzc2e6Pez/sD3rbIq0t0AwBi8PiJGqnYA3UHqXCZGfoTJE8tNsa0h2xDCv+rsEBwM9CB3CMAzE87aA5oqrkQ3awEp0tsWyv1NXSVkK+RmSomWG3iJ8RFr8kiGcL9y5/tKi4yoIkBxmWJlirhOoWe4oOUn49OdRqt1jlcuV22IveOFY4mYdP4RPS3gOHLnQfQn/Bs0Er5sxEw1X8q14BuQqR/bEZL2XXAcNqrChnSD11XaTITX+I5wm34vmSb8h/m6VLN1W9kLcFqiJ7WsiSKpkSpUym01kzXGrw0knjSFOH7SQpZoD4m0u+v/SfP4FC/lTKFxzYHx1nD1Ofb554vQ2ZnQG3WHL+7MDFt50Xuf3KnuKELGTkKzgNGFkLu9T0XNmKdRYrbbczyNHh/QC8EDB59GAEI6O3Gyjh7tVac41K2QAaMARsQUDNEHP1REOegIvwOLDkY1pB3CRk1wnZquWKzeXrzVqaFB3pCBfltXGdgfZ4Iuz1h9sG3k2eSvxpGD/wEZaePxwLdXpbYBIG5bATgZIymq1y9bamx6obLFqbhSpV1tUSqjL6rUFCTSl3FNDfvy1anJ/zgGIqnZjKSuB5eD+ePz09iddJC+gqeV1tbXWVfAvsgD2xuraiwYaj8CcIcxHO77/Y9/nB42jfofHkp9AOYQvUkoZbGBul09doasxqYAl7GHliNBHRbcJhA3AklewOx3vOelLOEB+CIPQYWhqCWg9NpgVZwUrmzgY0gYnwola448mlwrSCNRVLTS8wxMESsRBmf7kYzwWUoTwP9577g+TZ0cG2oZ5UVzjm8oAfCBGpgIzA6zCVVl3NwmfwLHwQz5v+811fZh8geuLn8Cwvvn8/nnbh04mTJwfPpA41H4EzgJcKs04Jz/kNsJvbDWg3FLImWGpfrnqzukxd3lAnq6tV1ZqrWDsxtjToffYwIBe4ODc34D7QEe8gJ+cdfoffE3a5gsFz0aOkg2SejcgsLNorLH5LWIjMCooRFxp31+prGTuZCQrMbruPQtdz0r+Tgtxea5Vp1pdt21bx8o45tcIdgOzZwDn9rsA5/PAIfjCKH0bg8bJiF/hZYldnm/DMbSDci3Lmaq6kV+J1C6/kDuF5VXg+Xkewvg9X4bTUbDPZDOYXN255Tb2SNpAlGeHVE2WnNe22EDtIeuaDAIdwVvTKO+fOtbZ6AqQhIZNTDUpWYWvSay0mi05XVl6teAvQqy91vp9PDJeLc7o6o72Jtq6+0fhRRzvv4ULOvsBwKtTucHPEkCGCc0Me8TgRWSeS9OlDliCh9FSwPRgMB/tJtGiDHipA+yk3GTgwG5uIL5S8bwpSwTwXwYibP+afGAuOE9FzkJWGGK+VYNXo1bh17kpHKTFlfQZyHEu8GMEKu8S8aMe6P5QUNxVAEYJNvbL+JpTzn9X/mI8fIBtaOIX/gMUPXcmVvBkblIKdpzzW1oZedZ/Vw0bYMJlKL1nRee+XR/edjaUOXmo/gfxtJIqIJbMcJrctDCPwdm9Lv9PjSoAHSe5kfXaH2YmEbvC2ieOTLRf8Y5yTdwOPOOdfYT+IT+xjbfnAuOwuBkmQm/awYX6f59hgoJtzcA6ypGalX8MrnTwIHg5JrMJ9IGQTxG9gigwlcrmuUWlU28w2HVmcyW8JEQswFI/FEH4IKI24Xri1WLj5j8JMVXHR80Y1Ma6EX2VOlV8VR5I3jQE2A/6d9PICQpc5NYL4yiI849xUetXV3Eky1pfwPMnhdDJ9SkogTLM0bdLI1Eq9zm4CMxh91jA52YGWzu5ke/d+fytyhRyZAW2xxDUhRazEuwH0xD3TsJx6Xr66TLhrxTOCWCHcjRgDqyYkJtz++ZP4DjgLX6ZO9CG7Tty0uXarQmGnLKwMCvkSZ6kbSbQKJxEEqKSLFPUyg95GMgFYHZSHIp6bbaYnLMM0yYi9xFUGuEnvkdaDfRffmfya8FFoNPk9AUfI4NRCEb22QluE1OurthXWq00N1kZYAOu/gB+hxdHmboudHzp1sLunZTI4CWj0OBTn5+Cu7Vdx0dRj32HFVC7+ntQiK1OLsfQG6Si809cyNHg8FfmEqFdMSziMIqxlpXZat5oKKD1jAEDEaOvy6gnizMx23Y4SkkUlX4HJQ3vt6GR2TwrYfGB1BeZa5XrllsaNmiLC3zbe5CXwaYfeUGfC7w2G3F7EOz1RX1v76dBQy7soOPQDiH/iLGwzwdVhF+/M2HcoEubDQ6B2GDwmr85rjZkjFhd0wp8d7yeOj6BkS3+vow/CZreexJzNdfJqq5lkbxaZsmXacCofkp6T3gOJn47jl0/ifF8b7yIDGzS5dcRcvFmurlXWrBeWKt9EtFEs+UqYlr16F3D5JDSEnJHou/5J1zFnD9dGhi5ujRhCqqjGW0oIw0DUFAkPGAX0wqsLjGraBhaUkY+8nFWEZNVTWW+nKakfgnzItS/U1x3oGHNNuP4MaD+YDeLKXQ3r6hbUC9NqH96+Gm3I/gNReJVVbm3QajRanUWf6b/T5iVO2Q1YBhg4NdvtRhcjHx+NHeGIbSYTEzS71VDNlKrr6pHZPB/mcT6/ePztvos9+PaWv4TGwoOellDSE0Dn4SNOPOIbTcVSLq+DUAn4rE6rCwmvZi+CpwnlPsWsNW6SFyiLquXVRq3NYNey1A1CN/gzhJ7zoZB9Nf3DVNYxvHA63oEl0pDFo82rhiJlnaxJYc+UsYmzuNXh0r6aI8qUMUmPwPuwP/xOJ/ps6MNT+y5EUp5EaKIX3932cepM84HOE53tbreTa+YCnIdsqM8/3B5N/teLuyt7BckxDFtC19j3mlYpXivbWLC7vHSLagttZDIGyhCwE3tAtLOjrdvt5Z2uSHisvXsofqilm/sE0BEwmcRrXtuxuEB4mlDIXE25oqimpsJE5poM5jJYMQrnwecMgp/o4pOaS2kOS3PxJjy/Gmfjo/gmyfd/T49IM+6jP45SIdCJ6bXGVapXawRULMzcKUyzmxgbuQx9kIrCQcfx4XCXy5c8HexDI9eG8e3xb8PveT8hEtoGvNlld7CETLRgoPU2YnKkq41W9KvLQRmXk3d96y+3SS2ZWMHUm2tVlnqbmqYMdr1NZmskSDM4DT6zW9FiCqIdp7b/R80lkk30Q/Z2aEb+Ge5QIh6PvH3ou+OHoijoFMeZGEtrQeexB2wokD3gONIJ+yBhDikDmoCeryPYMmeynW1T01sVT2x75g+7tyNlo0FhV5P1mDPhhpgTS2TpCeH2d55treqsatYHLVEzcStuktuSQNjs2tn2L3g35yZjFDJ5SVjNuaj5aflPaYSLciW7z6qJp+70dcVRyBsF8RjTRf2gRZKW903d9DhhEy+JCN9GMHq/7at/QTlgchlI/F++xVKB9Jy4git17SDjv3t2rN6xjUPV4A6K44PBoeaPO/GMgW/GzgZj3kAoGAhwXAiQJ3swVl+RDxbaQOTB4KNCcATOTwR6SA6IkHh+vHxg/Y2bNnZiHm64qIct89avfGbrusLnKh8w11jqDDvUrxkrtHVmjd1mNKNGjdFo1dMZU0ORmSb9ybn+6PUNiqz/dZhYwOGEFMyc1WELyPc1DjFh8PNh94HWQ+fGfzp0beCH5HfI3epSi5PLDgi3tG1q2dGxs7cw2sQxGTbnCIUHORaO7kOXPxEfOYhvuoZn4OkolRQTY0SzlHmVXlgIL8JuR5Wn3NUQ1LWb3OSoOPF22RFypqgr5gq6hpsnkgFPLOYP+jzErgaNbg1kQki5CqktVooiLaQiTNg2yLYQpf6+FUPL5RvG0g8xqpn0iyIDTjM029BQUYmEy8In4i07l7xIAgonHze27Zp6E6+uxLfb46ynCbbDpiJTLfm4ntEhnTC9bt4uIatwjmyLUmex21kT1+BQ+LRhiyejutVQthK2kYlqImEr/TeFGz+YK2k5hPOltmwLkQ+LpaFBtZMQhtxjbNU2G5rNXZmgznn48dD46eEf0eDfRnBuG74JOaJOk3hMyPpYWNq/pnNT77bBgqCGp920k+bIOg7D8TFfj8PDUiRgAjgD3r5BPGcY/24/zm+9EDnoSzg8POf19naMRQ84AkB8tgO1BXqOkyNbqYiCGOsqq9y8RbFzT21hY7n8j3VPFwu3bxZeLRPmICLnLMtRroYhQ4uiX9NbfW4jvmU9nlOKxUhyzJLg/XIogMIqVb2VkADbZBBulQl3lAgzG1eqdpl0NqvFbgS0FxrimiipxWb11XR0KussnpfuIAC63ph+QGqfAcITgkjIFe6VNVFGthGEW+G5jxuu2FroJJkyD+cFj/tc66nRY6h7X3/nWKI72t0caHeS6aFcJGHyRlJuC0uzOkZjkxuQMHvlLOGWMiHXuMdeRmSwiW9yKtqE7EvL8G9UPjbBNsNluNBycQRhdOp/Xp682nE8chZOAc55668LWgwONacmBKVlDcw89dzlry9AGrmilNLfCJ808UGWKPTyQ/GOdr/f5fWEgql4d7QZ+YLRqNfl8/gdRChw1tHHhaz8nCu46FP8ztWs62+R1eIXXpMOw7G+lg5/ZOwfyQvI2x4EcT8cdO/z4fl9+PErQ1jqijniEIWJht7S5IuHXuKFPNgKW4kxR//vsPFr1kD/Xdh4n4QNDkjmNGmEkvXCzhXCM0hTQt6yZVIeoY303utZ0j5tc5OvlrdmxI6Iuo21WcpVlXJFccVq7Qv2csZol+uRjbbTLCB3i7j16/hl39d8kAiXAzlDM87Dh4ZRBWmxUlgwRU0dm1qIZ6Zvv5qLbyG93kPMVF76fVwvldQUmF837SFRLvsJ99pj8D3xcQHOG/ryxGcXBvuiA/5DgHPhL4+DkJu5gcBake2VmnWbNj79jHBbifC8VUa6YGZKjEU1BhltuxGS9CEqAaiTbad7rQPWbsuFxquVo+aTNiRxEKMCsRublxt0Dwf74uf6JyZDh2/4bAeSrM1IrMWJDNk76TdLjHtZirEzxJY3U1bCCATYG/yvNdd5t0dIsTicNfLzN6cnD5/qOtk2Hj4MpxHgu5+/JIhSCpeeqwILWEg4bQQVraeXG1+uWVnw9MaVyyqXIXWxZQ+B4dzzq7/TeNkQG808euCT/Nfeo4H9o7Gom3gjFDK6tHk5uJcMCDv1ayx14LnT8Tq1dJA71pvocvs7z8YPTeK7+/HvwvhOzk82UvnWGV/B27ZhQ58x0QQVoLDWGpUNu9dqV1BqAg5LplTVBhmiM09MbBkbE8ikQ9pt99rDOp8hrPBpBl7tWu/TxhpRsyyhbTe7GT/JPV/D1dHP34tHAiFngGhTpmABI3GVqA72amvlDUq5oSyTrziKa/I0dNYdodyGpLFVfsAcM8aQ1R9yi99NvT0yuL+rP9bnG+UDRCFj0Mr6rBFjQhuWhbakXuWfALQyewNs/P+P0oHAWGDS5SOx3UE+ZMrWC+t2Ca/8XlhjUdGWf3sSlKMlCTg2ldWO5/cTb/8Cyft4F94v1bBmRmXbpC4olReYmigNqKA00pBUjVSMq06Z/IQoCLJ+hA/jHw5cO/bBRfgz9JiTilRd3+aupZ17Qjq3KqD2a0PmIDKHiJdvgYQ74fd7/SP+PuLJh+zdlhjlYF02n9mpBx0CM2UmvkIXoGMw7jg+Eup0BhwxIltDqtaaYF14g3szoJdgq2Z9zUt7Nm1S/dGuIf5Ol3mgoAGat3hkUXlSmVJ0a4+oP5Ptk7dVhdRuJShBS+msWmSUm8x15hpjua2YcMbGcFmyLm4M2JqJcybNI6TC+90o5o+EfEGvn/eAjwlZHJmbIa+lL14bUGS9my6SEnTwIedoaKwn1M45Ms7GGSbZ1oOwKttqtRhpC8vUP1grILReaBTrdqh2Nu6waJnMJBpIa2HCOdHd1uVyOz3eWHIicTQyiXhf8m8dP6PDePMVkn5hnMQYjhgmF7ffdbh1sLu9JZbkYhAyu7T/onGkpBpMKiMy237pZrSMeJe5UFPcsLp411b9VnIme2bmvVSEXLhTPZWeUmSZ8Hwnaesa0tZI+rA0ARHXcMLrjJHB8oPbBjowMTq7lpSmuuy5ksf0FboipNttq4RKWNe6e5+i2eRi2gEvBLwY33sVizRrjVupYkbLasCIStrV+/J6uKj7eMexVMZqBILeG1bD5M7cBtFTFWrUYBDbvcQSxhxjroHgodZve651fxMd592eaHwkcoCEZH/m1h7aA+srFdUsUzzf1PSC8IAwV3hl7sp6rdpiAAVZk5HEdEsn9CNIOFrdbYF9kZH9V9pPEpB3Jg77BiAFw42xEshgiCSuNbZnKwqK9DprJiMbfLYMzlPXlzdlYRshj3e/mT6ZviRtZ5LWqPGDnWNCdkh4xbkLmmAt2Wqp3SCD2jgJGU4+4kOHOj87ceowGYy5V/H9ffi37qSjFRLo8x1nluVZsk2ZJ7ZmuVxZACXQ6NI3wxi1X+4sJf1iaJu5oamivgptXLX0xcWvIJWOnRSz55hR22EdvrP6+x3vlI+Vtq5zqknXLEyBaVsJ8RsGvzXTvnRB+tKPWbgU34e78RL8wzfT29P/lBJN8ue1QIclYjq3a0C4A4Q3YLVdmGnYlIndZFM5lNHMfSbeySO3s7m5dwDPxg/iO/DSf+JXvGF3gCN47/x9eOewcGe7cLdfmOXYy5t9dsSzPOu48UjQxXuc44c6uvB0fMslPHPySu/ZltOeI5yXCxIuhk+qTr3uIKogN6nlhj1WJWPKPAh26eLQT6ca+QrC9QxtsWttOpMC7X1t3bMvPIG0KjHjYT10vBE/sgs/vA7PMrca21gHw1ucNE++bBu1toC4QsajIT6Cke3WyNbMW75o2SNatc1itaLwDK6NayfSMMQMMh1GvKD0hzf21TYrfIWANqzdVp2f8xN35UaaJlC34bl4VYbF4umT0k5I+Jv9yOf2gTgGQdprCRp9ane9tyYg3AvAEZ+vNAnzlz75x40Fal1Dg0mPdAqrBtSosqNuKC9jp53g4Ts9XbFEIkzqR6YmUUWTGXNSXmIsnBzncqNE/NjA5wdHkgeSHADr3OvcFZjDayO1IVmzJmXxEPT3ExW+ccNwwjPe2tsTjfqiJJSEM4PdADKj2milgEAXbQPDgHWCdWjw84wDgas7Jr52+vzB8eFYOJn0h8PNnowDGtzbtockoTd3mWoICVK8DTnsbsrHxombJ3RIsazdVrpXmP0ccMj6npgeoPpZt3VU162MGf0Kv56nQcfpoBBkdI1pvXJrAVQik8caycuZEJ7F917frchKT8P348ovpn+SPkpyWsrXHkN+j3jI3mbskDUrIk2R6v1PEQC5hWWcJsPACOw2+4Y94mp1pVZz4+cBmR8I1HtUgaagIW5N0WGLz0LmqmIb7CBkz1t4U/itia2fQkafvHy/7+3uU/sun7381cdfX/7nmZ+7/xMFhhzN0EWE0c34jKcKJ1eQkcoEsxpd4w4oRxp3Y2T/IVlRHjlxk11X8cz659euUTVVVjJEzTNAhrj9DDVkuNp4ufoM0vYquxWJ+o6y1kqvwaHhNbAC1pcVl2o11oyjIxSRGbqfuWsLf8ZVl/ATeHqupO76tPQF6RiolcJsYdZqEG/I3HBh6uw1TaYm2sZkLsfksfkpdIg9BPWN4ideevTlxS9XNBAxMFuMRM+s5IvtUXBn7mBAi6OFGwUkGXoX8DL7RRL6OQjxk77jqfGR/X2jJyPHeQ+XuecUMJKci0rg+V26Elu9UWFQouLstQ5hHreGR5K6t7iuNvH54xj9sH8EuZxJEHeTxjuZX+d3Pwz1eJP/ciVeym12WVw2rpZDBjCRSIlaW8Xvnjz/0Ykzre0uLwFzwOQ2QOY5roXV0FpWBptBuN+1HlB99nLri5Vrt1XUVZbpC5kbMReMXrKcEOfjQ66R0MHO8Ahyd3j5XkBt2Udgij7CoMwvcYQymMqCKXxsajrcNDW1MDs9b6E085rzy6M39kz9ewfe8e8d+MaOf72dk/74zuvbpYrE9UVce3923s3TAy/e8hu45ebJmydn5t2c/b9vyf0/62YiOAAAAAABAAAAAMw9os8AAAAAxvkyTwAAAADJ9CXGeJxjYGRgYOADYgkGEGBiYARCTSBmAfMYAAYNAFwAAAB4nGNgYdrHtIeBlYGBqQtIMzD0QGjGBwyGjExAPgMHAwQ0MDC8F2B48xbKZQhIc01hWMCg8P4/g9z/R0ABOQY5BQaG/jhmkCzTOgYFIGQEAEr3EWZ4nGNgYGBmgGAZBkYGEIgB8hjBfBYGByDNw8DBwARkKzBYMkQxLHj///9/oKgCgwGDI5D3F8h9+P/S/9P/2wS0oCbAASMbA7oQBkCXZ2JmYWVj5+Dk4oYK8PDy8QsICgmLiIqJS0hKScvIyskrKCopq6gSMJnaQI0sXQA9NhWAAHicY2BkYGAA4mf/4lzj+W2+MnAzvwCKMFyNXbUeRv9/+l+X1ZPZA6iOg4EJJAoAjMcN6QB4nGNgZGBgkPv/iIGBNen/038XWT0ZQCLIQAsAnvcGlHicY/jFYMTwi4GByZ5BD4gDgNgYiA2AWAGILaFsByhtwDyTQZ3pDYMGUyqDCHMNgwhTPIMqsx6DINMqBiPm20B+0/+nzNwMpszpDBrMIgyarEkMaswr/79g7mKwZ9YC6lnNUMF8D6huB4MkUwuDGtPp/9+YHjJIskxkkGQ2ZLBg+s6gwmzEoAdyE+MXINZhYGBIYWAAAPNOIFYAAAAAUAAAKgAAeJytlE9LG0EYxp/VrLUpSkUopac5FIkQN3/oxSCCVQKRqNXYUnqRMRmzI5vdsLsmeig99txboR+i/QC99dxLP0g/QSl9djJiA7FoMcvO/Obdd573nXdmAuCRMw8Ho18Rbyw7WMRny1PI4bvlaRScp5ZzeOy8s+zigfPF8gztPy3P4XfOtTyPJ27N8kMsum8tLyDnfqKyk7vP0WsTJWMHS3hveQqz+GZ5Gi/ww3IOZWfHssu1fLQ8Q/tXy3POr6l7lufxzM1Zfogl96XlBcy6H7CJCH1cIIZGFz5SCBTQxjL7Ksp8VrFiqMJXYAsKifENOWrRU9MSslespUDDsAdsRv2LWHf9VBTay6JaLq+uVMuVsthSie6GotXWKmyromiEbXrvQDK0j2325zhiWhKBCROT+vyiKYsdmfrb8vxoUwa6G8u+r2l8ziUE6BCigG2dw5BiWR9TQJmVeCb7Gt+bhVq5kq1HYVqP4q4SVa8samJCEiuj0LeWvl7qFfOOTaUjU+kKV1ChWcWJjkJR8Sp3Gu52x6B4i4OQ6axhaB4PPZvyqUnZs1u0zjhF5OmhzVeBA6OelWDAtkPL5bYK7HJuz2zrzQrgUTmPQzNKxpRapBPSkN6xURx5BGZetprERj8jd0w+wkRUZnYDTfZ7jKRMFa6Um2MKWT0mb6g3ltl4XMGsBnw17RLHbDPbVY2kibiBfcMpD3fe7FzKfGoo8Umolu1on7aEsRKjdVn1EjOvM9Prrmpx4l0VhbXhcOj1eJRO5bnHe7G+XMwPdeqLA5WoeKA6IrsxYlf21KS74uXzh75ORk6t6CQdylgJGgLdVmHC6WdhR8Ui9ZVoNZpir6/CkXNz5FAUf90CbyRm5wo5kDqQx4ESJiMp6hv7Qqa1vJ+m/VqplLRj3U8TL9FBlnppr871/1fR/iV4d/9mfwDrbFK+AAAAeJxjYGYAg//NDEYMWAAAKEQBuAA=) format("woff")}@font-face{font-family:MJXTEX-FR;src:url(/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff) format("woff")}@font-face{font-family:MJXTEX-FR-B;src:url(/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff) format("woff")}@font-face{font-family:MJXTEX-SS;src:url(/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff) format("woff")}@font-face{font-family:MJXTEX-SS-B;src:url(/assets/fonts/MathJax_SansSerif-Bold.07281897.woff) format("woff")}@font-face{font-family:MJXTEX-SS-I;src:url(/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff) format("woff")}@font-face{font-family:MJXTEX-SC;src:url(/assets/fonts/MathJax_Script-Regular.4c74e33b.woff) format("woff")}@font-face{font-family:MJXTEX-T;src:url(/assets/fonts/MathJax_Typewriter-Regular.72815766.woff) format("woff")}@font-face{font-family:MJXTEX-V;src:url(data:font/woff;base64,d09GRk9UVE8AAARwAAsAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAADKAAAAQkAAAElso6A7EZGVE0AAAQ0AAAAHAAAABx3J0njR0RFRgAABFAAAAAYAAAAHAAoAAJPUy8yAAABaAAAAEkAAABgd6mCHGNtYXAAAALcAAAANAAAAUIADSQ4aGVhZAAAAQgAAAA1AAAANgw5vZloaGVhAAABQAAAAB4AAAAkBKMBLmhtdHgAAARoAAAABgAAAAYCEQAAbWF4cAAAAWAAAAAGAAAABgACUABuYW1lAAABtAAAASYAAAIx/gQR3nBvc3QAAAMQAAAAFgAAACD/hgAzeNpjYGRgYADir0asH+L5bb4ycDO/AIowXJ28TRJCHzzLIMvEwnid6RSQy8HABBIFAFQsC7IAAAB42mNgZGBgOvXfgoGB8QsDEDBeZ2BkQAWMAGVAA9QAAAAAUAAAAgAAeNpjYGH8wviFgZWBgamLaQ8DA0MPhGZ8wGDIyAQUZWBjZoABRiBWgHEC0lxTGA4oTlKcxHTqvwVQ5SmGE1A1EKAAhIwAzIwNswAAAHjalZCxasMwEIZ/xU5KKXTM1EF0iqEJcZZAhkJxyRDIYoLX1BhhC2IryHJJxr5QX6YP0ico9OzckqRLDfJ9+u+/O0kA7vEJgdMX0DqxID1g7uEGc2YPj3hm9jHEG3Mfd3hnHnS6B+Hf0i7GB7PAA76Ye9T/m9nDK36YfTyJF+Y+hqJkHrR6ZPZHq/PCyVEWyNk0nMtNoeQ6dcUqPcjIVLWxTjclK9tEZc7YWOXNLrVLU7mlsbmSC3luGLPjbzVRttamkuEkRASDPY6w0MhRwEFihIyeSmKGKUJ6KIkNZRTFNVJyFFhRPNC+ra5Q09+SrtGgvPBskVBlRkrriYlzcu0oZ7Hsql0XLenthMXVlPMO44se//G2OUun1d1cSXebIPwFZj5mrgAAeNpjYGBgZoBgGQZGBhCwAfIYwXwWBgUgzQKEQL7ipP//IeS9fKhKBkY2BhhzxAIA+yMHZXjaY2BmAIP/zQxGQIqRAQ0AAChVAbkAAHjaY2RgYWJgZGQU900syfBKrIgPS00uyS/SDUpNL81JLAJJqf7gZ/ghw/hDlumHHPMPcZYeHsYVP2b8yP4Zx/rdln/295VC3x0EGVgYGblNvCISi4ryy4sy0zNKnPMLKsEMBY1kTQUjA0NzhZCMVAWoPQrO+XnF+UUlmaW52G1GFWVgYGBsZ2BiZGRK4fvB+9NLtLtuZu7Uao7fv9laW1vaupu6mya2TWrj+G7f9d2+m7WuITO3u7K7flrzlO7p3d39U6ctXL5w3qrZMyb193TP6J7cMaF5Akf5jJoFrYvap3f2t/d19LX3tnXXdzc3djdy8HXzcG3m2sq9mYdnKw/vjw4RAKc+clgAAAAAAAABAAAAAMw9os8AAAAA1VXxAgAAAADVk7YReNpjYGRgYOABYhEgZoRCFjCbAQADFgArAfQAAAAdAAA=) format("woff")}@font-face{font-family:MJXTEX-VB;src:url(data:font/woff;base64,d09GRk9UVE8AAARcAAsAAAAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAADGAAAAQcAAAEfGT6+mEZGVE0AAAQgAAAAHAAAABx3J0n8R0RFRgAABDwAAAAYAAAAHAAoAAJPUy8yAAABaAAAAEkAAABgd7yCRmNtYXAAAALMAAAANAAAAUIADSQ4aGVhZAAAAQgAAAA1AAAANgyFt9poaGVhAAABQAAAAB0AAAAkBPMBb2htdHgAAARUAAAABgAAAAYCYAAAbWF4cAAAAWAAAAAGAAAABgACUABuYW1lAAABtAAAARYAAAHs9k2y63Bvc3QAAAMAAAAAFgAAACD/hgAzeNpjYGRgYABiU6dQ9nh+m68M3MwvgCIMVydvM4bQu98xKDIxMskxXQaq42BgAokCABb+CfEAAAB42mNgZGBguvxfD0jaMwABkxwDIwMqYAQARfsCZwAAAAAAUAAAAgAAeNpjYGGyZ/zCwMrAwNTFtIeBgaEHQjM+YDBkZAKKMrAxM8AAIxArwDgBaa4pDAsUJylOYrr8Xw+o8jLDJagaCFAAQkYAiH0M8QAAAHjadY/NasJAFIW/mCgthW4K3XZWRReKcSNIKUXBheCmiFuRGJIUzchkBH2pPkGfpss+RW+SQaQ/AzPnuydn7p0At7zjUa+O7Jo97qSquUHAk2OfB14cBxeZJjesHLcq38cLrqV65c2xxyMfjhtc8enY55kvx8FFpsm913bcKv2J3p9MlqRWtaOOGvTDoVqksZqvbTpbH9VE54U2NjvsnLNaxpHVpjvW2025pzq3U22SWI3UH5FlbIpM5yrshUzQ7DlhyEhIsSjaRPJfigF9QoZCC/kSi85ZSyJlJnqUurydU8hpxM84sPuRWbGUm5E4ZabLWHTL5qzTqoOt1MgLyimjX5P+61K6RuZnVRclr+0RfgNnQFOYAAB42mNgYGBmgGAZBkYGELAB8hjBfBYGBSDNAoRAvuKk//8h5L18qEoGRjYGGHPEAgD7IwdleNpjYGYAg//NDEZAipEBDQAAKFUBuQAAeNpjZGBhYmBkZBTxTSzJ8EqsiA9LTS7JL9J1ys9JAYmr/uBn+CHD+EOW6Ycc8w9xlh4exjU/pv7Y9DOd9bs5/7zvC4S+WwkysDAycpu4hyYWFeWXF2WmZ5Q45xdUghkKGsmaCkYGhuYKIRmpClBLFJzz84rzi0oyS3OxWIsqxMDAwNjOwMTIyJTI9+2H1k8v0e666WWTGzj+sLHVtzS0dld210xtmtHG8d2h67tDd10ta21te1d3dXf1jNo53dO7+/rmzF6yZOmc1dPnTZ4yoXt+94zWybWTOfKnV89uWNI8p3VCeXdVd2NVdz0HXzcP12aurdybeXi28vD+6BD5kSEKAO9nb1wAAAAAAQAAAADMPaLPAAAAANVV8QIAAAAA1ZO2KnjaY2BkYGDgAWIRIGaEQhYwmwEAAxYAKwI/AAAAIQAA) format("woff")}.MJX-TEX mjx-stretchy-v[c="("] mjx-beg mjx-c:before{content:"\239B";width:.875em;padding:1.154em 0 .655em}.MJX-TEX mjx-stretchy-v[c="("] mjx-ext mjx-c:before{content:"\239C";width:.875em}.MJX-TEX mjx-stretchy-v[c="("] mjx-end mjx-c:before{content:"\239D";width:.875em;padding:1.165em 0 .644em}.MJX-TEX mjx-stretchy-v[c="("]>mjx-end{margin-top:-1.809em}.MJX-TEX mjx-stretchy-v[c="("]>mjx-ext{border-top-width:1.779em;border-bottom-width:1.779em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-beg mjx-c:before{content:"\239E";width:.875em;padding:1.154em 0 .655em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-ext mjx-c:before{content:"\239F";width:.875em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-end mjx-c:before{content:"\23A0";width:.875em;padding:1.165em 0 .644em}.MJX-TEX mjx-stretchy-v[c=")"]>mjx-end{margin-top:-1.809em}.MJX-TEX mjx-stretchy-v[c=")"]>mjx-ext{border-top-width:1.779em;border-bottom-width:1.779em}.MJX-TEX .mjx-stretched mjx-c[c="-"]:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="-"] mjx-ext mjx-c:before{content:"\2212";padding:.583em 0 .082em}.MJX-TEX mjx-stretchy-h[c="="] mjx-ext mjx-c:before{content:"=";padding:.583em 0 .082em}.MJX-TEX mjx-stretchy-v[c="["] mjx-beg mjx-c:before{content:"\23A1";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="["] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="["] mjx-end mjx-c:before{content:"\23A3";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="["]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="["]>mjx-ext{border-top-width:1.769em;border-bottom-width:1.769em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-beg mjx-c:before{content:"\23A4";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-end mjx-c:before{content:"\23A6";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="]"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="]"]>mjx-ext{border-top-width:1.769em;border-bottom-width:1.769em}.MJX-TEX .mjx-stretched mjx-c[c="^"]:before{content:"\2C6"}.MJX-TEX .mjx-stretched mjx-c[c=_]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c=_] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="{"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-mid mjx-c:before{content:"\23A8";width:.889em;padding:1.16em 0 .66em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-mid{margin-top:-.91em;margin-bottom:-.91em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-ext{height:50%;border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="|"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="}"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-mid mjx-c:before{content:"\23AC";width:.889em;padding:1.16em 0 .66em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-mid{margin-top:-.91em;margin-bottom:-.91em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-ext{height:50%;border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX .mjx-stretched mjx-c[c="~"]:before{content:"\2DC"}.MJX-TEX mjx-stretchy-h[c=AF] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2C9"]:before{content:"\AF"}.MJX-TEX mjx-stretchy-h[c="2C9"] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="302"]:before{content:"\2C6"}.MJX-TEX .mjx-stretched mjx-c[c="303"]:before{content:"\2DC"}.MJX-TEX .mjx-stretched mjx-c[c="332"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="332"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="2013"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2014"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2014"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2015"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2015"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="2016"] mjx-ext mjx-c:before{content:"\2225";width:.528em;padding-left:0}.MJX-TEX .mjx-stretched mjx-c[c="2017"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2017"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="203E"]:before{content:"\AF"}.MJX-TEX mjx-stretchy-h[c="203E"] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="20D7"]:before{content:"\2192"}.MJX-TEX mjx-stretchy-h[c="20D7"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="20D7"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2190"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2190"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-v[c="2191"] mjx-beg mjx-c:before{content:"\2191";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2191"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2191"]>mjx-ext{border-top-width:.57em}.MJX-TEX mjx-stretchy-h[c="2192"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2192"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2193"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2193"] mjx-end mjx-c:before{content:"\2193";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2193"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="2193"]>mjx-ext{border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-beg mjx-c:before{content:"\2191";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-end mjx-c:before{content:"\2193";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2195"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="2195"]>mjx-ext{border-top-width:.57em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="219E"] mjx-beg mjx-c:before{content:"\219E";padding:.417em 0 0}.MJX-TEX mjx-stretchy-h[c="21A0"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="219E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A0"] mjx-end mjx-c:before{content:"\21A0";padding:.417em 0 0}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-beg mjx-c:before{content:"\2191";width:.771em;padding:.6em 0 0 .104em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="21A5"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="21A5"]>mjx-ext{border-top-width:.57em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-end mjx-c:before{content:"\2193";width:.771em;padding:.6em 0 0 .104em}.MJX-TEX mjx-stretchy-v[c="21A7"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21A7"]>mjx-ext{border-top-width:.638em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-v[c="21B0"] mjx-beg mjx-c:before{content:"\21B0";width:.584em;padding:.722em 0 0 .084em}.MJX-TEX mjx-stretchy-v[c="21B0"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21B0"]>mjx-ext{border-top-width:.692em}.MJX-TEX mjx-stretchy-v[c="21B1"] mjx-beg mjx-c:before{content:"\21B1";width:.584em;padding:.722em 0 0 .084em}.MJX-TEX mjx-stretchy-v[c="21B1"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21B1"]>mjx-ext{border-top-width:.692em}.MJX-TEX mjx-stretchy-h[c="21BC"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="21BC"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21BD"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="21BD"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-v[c="21BE"] mjx-beg mjx-c:before{content:"\21BE";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21BE"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21BE"]>mjx-ext{border-top-width:.858em}.MJX-TEX mjx-stretchy-v[c="21BF"] mjx-beg mjx-c:before{content:"\21BF";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21BF"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21BF"]>mjx-ext{border-top-width:.858em}.MJX-TEX mjx-stretchy-h[c="21C0"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21C0"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="21C1"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21C1"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="21C2"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21C2"] mjx-end mjx-c:before{content:"\21C2";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21C2"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="21C2"]>mjx-ext{border-bottom-width:.858em}.MJX-TEX mjx-stretchy-v[c="21C3"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21C3"] mjx-end mjx-c:before{content:"\21C3";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21C3"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="21C3"]>mjx-ext{border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="21D0"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="21D0"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-v[c="21D1"] mjx-beg mjx-c:before{content:"\21D1";width:.778em;padding:.599em 0 0}.MJX-TEX mjx-stretchy-v[c="21D1"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D1"]>mjx-ext{border-top-width:.569em}.MJX-TEX mjx-stretchy-h[c="21D2"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="21D2"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-v[c="21D3"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D3"] mjx-end mjx-c:before{content:"\21D3";width:.778em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="21D3"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21D3"]>mjx-ext{border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-beg mjx-c:before{content:"\21D1";width:.778em;padding:.599em 0 0}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-end mjx-c:before{content:"\21D3";width:.778em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="21D5"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21D5"]>mjx-ext{border-top-width:.569em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="21DA"] mjx-beg mjx-c:before{content:"\21DA";padding:.611em 0 .111em}.MJX-TEX mjx-stretchy-h[c="21DA"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="21DB"] mjx-ext mjx-c:before{content:"\2261"}.MJX-TEX mjx-stretchy-h[c="21DB"] mjx-end mjx-c:before{content:"\21DB";padding:.611em 0 .111em}.MJX-TEX mjx-stretchy-h[c="2212"] mjx-ext mjx-c:before{content:"\2212";padding:.583em 0 .082em}.MJX-TEX .mjx-stretched mjx-c[c="2215"]:before{content:"/"}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-beg mjx-c:before{content:"\E001";width:1.056em;padding:.605em 0 .014em}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-ext mjx-c:before{content:"\E000";width:1.056em}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-end mjx-c:before{content:"\23B7";width:1.056em;padding:.935em 0 .885em}.MJX-TEX mjx-stretchy-v[c="221A"]>mjx-end{margin-top:-1.82em}.MJX-TEX mjx-stretchy-v[c="221A"]>mjx-ext{border-top-width:.589em;border-bottom-width:1.79em}.MJX-TEX mjx-stretchy-v[c="2223"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="2225"] mjx-ext mjx-c:before{content:"\2225";width:.528em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="2308"] mjx-beg mjx-c:before{content:"\23A1";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="2308"] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2308"]>mjx-ext{border-top-width:1.769em}.MJX-TEX mjx-stretchy-v[c="2309"] mjx-beg mjx-c:before{content:"\23A4";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="2309"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2309"]>mjx-ext{border-top-width:1.769em}.MJX-TEX mjx-stretchy-v[c="230A"] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="230A"] mjx-end mjx-c:before{content:"\23A3";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="230A"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="230A"]>mjx-ext{border-bottom-width:1.769em}.MJX-TEX mjx-stretchy-v[c="230B"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="230B"] mjx-end mjx-c:before{content:"\23A6";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="230B"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="230B"]>mjx-ext{border-bottom-width:1.769em}.MJX-TEX .mjx-stretched mjx-c[c="2312"]:before{content:"\23DC"}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX .mjx-stretched mjx-c[c="2322"]:before{content:"\23DC"}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX .mjx-stretched mjx-c[c="2323"]:before{content:"\23DD"}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2329"]:before{content:"\27E8"}.MJX-TEX .mjx-stretched mjx-c[c="232A"]:before{content:"\27E9"}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-beg mjx-c:before{content:"\23AA";width:.889em;padding:.29em 0 .015em}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-end mjx-c:before{content:"\23AA";width:.889em;padding:.29em 0 .015em}.MJX-TEX mjx-stretchy-v[c="23AA"]>mjx-end{margin-top:-.305em}.MJX-TEX mjx-stretchy-v[c="23AA"]>mjx-ext{border-top-width:.275em;border-bottom-width:.275em}.MJX-TEX .mjx-stretched mjx-c[c="23AF"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="23AF"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="23B0"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="23B0"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="23B1"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="23B1"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-beg mjx-c:before{content:"\250C";padding:.694em 0 0}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-end mjx-c:before{content:"\2510";padding:.694em 0 0}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-beg mjx-c:before{content:"\2514";padding:.366em 0 .022em}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-end mjx-c:before{content:"\2518";padding:.366em 0 .022em}.MJX-TEX mjx-stretchy-v[c="23D0"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-mid mjx-c:before{content:"\E153\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DE"]>mjx-ext{width:50%}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-mid mjx-c:before{content:"\E151\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DF"]>mjx-ext{width:50%}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-beg mjx-c:before{content:"\2CA";padding:.699em 0 0}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-ext mjx-c:before{content:"\2C9"}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-beg mjx-c:before{content:"\2CB";padding:.699em 0 0}.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-ext mjx-c:before{content:"\2C9"}.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-end mjx-c:before{content:"\2CA";padding:.699em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2500"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2500"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2758"]:before{content:"\2223"}.MJX-TEX mjx-stretchy-v[c="2758"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="27EE"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="27EE"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="27EF"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="27EF"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX .mjx-stretched mjx-c[c="27F5"]:before{content:"\2190"}.MJX-TEX mjx-stretchy-h[c="27F5"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27F5"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX .mjx-stretched mjx-c[c="27F6"]:before{content:"\2192"}.MJX-TEX mjx-stretchy-h[c="27F6"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27F6"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27F7"]:before{content:"\2194"}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27F8"]:before{content:"\21D0"}.MJX-TEX mjx-stretchy-h[c="27F8"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27F8"] mjx-ext mjx-c:before{content:"="}.MJX-TEX .mjx-stretched mjx-c[c="27F9"]:before{content:"\21D2"}.MJX-TEX mjx-stretchy-h[c="27F9"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27F9"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX .mjx-stretched mjx-c[c="27FA"]:before{content:"\21D4"}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX .mjx-stretched mjx-c[c="27FB"]:before{content:"\21A4"}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX .mjx-stretched mjx-c[c="27FC"]:before{content:"\21A6"}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27FD"]:before{content:"\2906"}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX .mjx-stretched mjx-c[c="27FE"]:before{content:"\2907"}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-beg mjx-c:before{content:"\22A8";padding:.75em 0 .249em}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-beg mjx-c:before{content:"\22A8";padding:.75em 0 .249em}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-beg mjx-c:before{content:"\21BE";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-end mjx-c:before{content:"\21C2";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="294F"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="294F"]>mjx-ext{border-top-width:.858em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-beg mjx-c:before{content:"\21BF";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-end mjx-c:before{content:"\21C3";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2951"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="2951"]>mjx-ext{border-top-width:.858em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="295B"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="295B"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295B"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-beg mjx-c:before{content:"\21BE";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="295C"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="295C"]>mjx-ext{border-top-width:.858em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-end mjx-c:before{content:"\21C2";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="295D"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="295D"]>mjx-ext{border-top-width:.638em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="295F"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="295F"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295F"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-beg mjx-c:before{content:"\21BF";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="2960"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="2960"]>mjx-ext{border-top-width:.858em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-end mjx-c:before{content:"\21C3";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2961"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="2961"]>mjx-ext{border-top-width:.638em;border-bottom-width:.858em}.MJX-TEX .mjx-stretched mjx-c[c="3008"]:before{content:"\27E8"}.MJX-TEX .mjx-stretched mjx-c[c="3009"]:before{content:"\27E9"}.MJX-TEX .mjx-stretched mjx-c[c=FE37]:before{content:"\23DE"}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-mid mjx-c:before{content:"\E153\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE37]>mjx-ext{width:50%}.MJX-TEX .mjx-stretched mjx-c[c=FE38]:before{content:"\23DF"}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-mid mjx-c:before{content:"\E151\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE38]>mjx-ext{width:50%}.MJX-TEX mjx-c[c=" "]:before{width:.25em;content:" "}.MJX-TEX mjx-c[c="!"]:before{width:.278em;padding:.716em 0 0;content:"!"}.MJX-TEX mjx-c[c="22"]:before{width:.5em;padding:.694em 0 0;content:"\22"}.MJX-TEX mjx-c[c="#"]:before{width:.833em;padding:.694em 0 .194em;content:"#"}.MJX-TEX mjx-c[c="$"]:before{width:.5em;padding:.75em 0 .056em;content:"$"}.MJX-TEX mjx-c[c="%"]:before{width:.833em;padding:.75em 0 .056em;content:"%"}.MJX-TEX mjx-c[c="&"]:before{width:.778em;padding:.716em 0 .022em;content:"&"}.MJX-TEX mjx-c[c="27"]:before{width:.278em;padding:.694em 0 0;content:"\27"}.MJX-TEX mjx-c[c="("]:before{width:.389em;padding:.75em 0 .25em;content:"("}.MJX-TEX mjx-c[c=")"]:before{width:.389em;padding:.75em 0 .25em;content:")"}.MJX-TEX mjx-c[c="*"]:before{width:.5em;padding:.75em 0 0;content:"*"}.MJX-TEX mjx-c[c="+"]:before{width:.778em;padding:.583em 0 .082em;content:"+"}.MJX-TEX mjx-c[c=","]:before{width:.278em;padding:.121em 0 .194em;content:","}.MJX-TEX mjx-c[c="-"]:before{width:.333em;padding:.252em 0 0;content:"-"}.MJX-TEX mjx-c[c="."]:before{width:.278em;padding:.12em 0 0;content:"."}.MJX-TEX mjx-c[c="/"]:before{width:.5em;padding:.75em 0 .25em;content:"/"}.MJX-TEX mjx-c[c="0"]:before{width:.5em;padding:.666em 0 .022em;content:"0"}.MJX-TEX mjx-c[c="1"]:before{width:.5em;padding:.666em 0 0;content:"1"}.MJX-TEX mjx-c[c="2"]:before{width:.5em;padding:.666em 0 0;content:"2"}.MJX-TEX mjx-c[c="3"]:before{width:.5em;padding:.665em 0 .022em;content:"3"}.MJX-TEX mjx-c[c="4"]:before{width:.5em;padding:.677em 0 0;content:"4"}.MJX-TEX mjx-c[c="5"]:before{width:.5em;padding:.666em 0 .022em;content:"5"}.MJX-TEX mjx-c[c="6"]:before{width:.5em;padding:.666em 0 .022em;content:"6"}.MJX-TEX mjx-c[c="7"]:before{width:.5em;padding:.676em 0 .022em;content:"7"}.MJX-TEX mjx-c[c="8"]:before{width:.5em;padding:.666em 0 .022em;content:"8"}.MJX-TEX mjx-c[c="9"]:before{width:.5em;padding:.666em 0 .022em;content:"9"}.MJX-TEX mjx-c[c=":"]:before{width:.278em;padding:.43em 0 0;content:":"}.MJX-TEX mjx-c[c=";"]:before{width:.278em;padding:.43em 0 .194em;content:";"}.MJX-TEX mjx-c[c="<"]:before{width:.778em;padding:.54em 0 .04em;content:"<"}.MJX-TEX mjx-c[c="="]:before{width:.778em;padding:.583em 0 .082em;content:"="}.MJX-TEX mjx-c[c=">"]:before{width:.778em;padding:.54em 0 .04em;content:">"}.MJX-TEX mjx-c[c="?"]:before{width:.472em;padding:.705em 0 0;content:"?"}.MJX-TEX mjx-c[c="@"]:before{width:.778em;padding:.705em 0 .011em;content:"@"}.MJX-TEX mjx-c[c=A]:before{width:.75em;padding:.716em 0 0;content:"A"}.MJX-TEX mjx-c[c=B]:before{width:.708em;padding:.683em 0 0;content:"B"}.MJX-TEX mjx-c[c=C]:before{width:.722em;padding:.705em 0 .021em;content:"C"}.MJX-TEX mjx-c[c=D]:before{width:.764em;padding:.683em 0 0;content:"D"}.MJX-TEX mjx-c[c=E]:before{width:.681em;padding:.68em 0 0;content:"E"}.MJX-TEX mjx-c[c=F]:before{width:.653em;padding:.68em 0 0;content:"F"}.MJX-TEX mjx-c[c=G]:before{width:.785em;padding:.705em 0 .022em;content:"G"}.MJX-TEX mjx-c[c=H]:before{width:.75em;padding:.683em 0 0;content:"H"}.MJX-TEX mjx-c[c=I]:before{width:.361em;padding:.683em 0 0;content:"I"}.MJX-TEX mjx-c[c=J]:before{width:.514em;padding:.683em 0 .022em;content:"J"}.MJX-TEX mjx-c[c=K]:before{width:.778em;padding:.683em 0 0;content:"K"}.MJX-TEX mjx-c[c=L]:before{width:.625em;padding:.683em 0 0;content:"L"}.MJX-TEX mjx-c[c=M]:before{width:.917em;padding:.683em 0 0;content:"M"}.MJX-TEX mjx-c[c=N]:before{width:.75em;padding:.683em 0 0;content:"N"}.MJX-TEX mjx-c[c=O]:before{width:.778em;padding:.705em 0 .022em;content:"O"}.MJX-TEX mjx-c[c=P]:before{width:.681em;padding:.683em 0 0;content:"P"}.MJX-TEX mjx-c[c=Q]:before{width:.778em;padding:.705em 0 .193em;content:"Q"}.MJX-TEX mjx-c[c=R]:before{width:.736em;padding:.683em 0 .022em;content:"R"}.MJX-TEX mjx-c[c=S]:before{width:.556em;padding:.705em 0 .022em;content:"S"}.MJX-TEX mjx-c[c=T]:before{width:.722em;padding:.677em 0 0;content:"T"}.MJX-TEX mjx-c[c=U]:before{width:.75em;padding:.683em 0 .022em;content:"U"}.MJX-TEX mjx-c[c=V]:before{width:.75em;padding:.683em 0 .022em;content:"V"}.MJX-TEX mjx-c[c=W]:before{width:1.028em;padding:.683em 0 .022em;content:"W"}.MJX-TEX mjx-c[c=X]:before{width:.75em;padding:.683em 0 0;content:"X"}.MJX-TEX mjx-c[c=Y]:before{width:.75em;padding:.683em 0 0;content:"Y"}.MJX-TEX mjx-c[c=Z]:before{width:.611em;padding:.683em 0 0;content:"Z"}.MJX-TEX mjx-c[c="["]:before{width:.278em;padding:.75em 0 .25em;content:"["}.MJX-TEX mjx-c[c="5C"]:before{width:.5em;padding:.75em 0 .25em;content:"\5C"}.MJX-TEX mjx-c[c="]"]:before{width:.278em;padding:.75em 0 .25em;content:"]"}.MJX-TEX mjx-c[c="^"]:before{width:.5em;padding:.694em 0 0;content:"^"}.MJX-TEX mjx-c[c=_]:before{width:.5em;padding:0 0 .062em;content:"_"}.MJX-TEX mjx-c[c="`"]:before{width:.5em;padding:.699em 0 0;content:"`"}.MJX-TEX mjx-c[c=a]:before{width:.5em;padding:.448em 0 .011em;content:"a"}.MJX-TEX mjx-c[c=b]:before{width:.556em;padding:.694em 0 .011em;content:"b"}.MJX-TEX mjx-c[c=c]:before{width:.444em;padding:.448em 0 .011em;content:"c"}.MJX-TEX mjx-c[c=d]:before{width:.556em;padding:.694em 0 .011em;content:"d"}.MJX-TEX mjx-c[c=e]:before{width:.444em;padding:.448em 0 .011em;content:"e"}.MJX-TEX mjx-c[c=f]:before{width:.306em;padding:.705em 0 0;content:"f"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c=f]:last-child:before{width:.372em}.MJX-TEX mjx-c[c=g]:before{width:.5em;padding:.453em 0 .206em;content:"g"}.MJX-TEX mjx-c[c=h]:before{width:.556em;padding:.694em 0 0;content:"h"}.MJX-TEX mjx-c[c=i]:before{width:.278em;padding:.669em 0 0;content:"i"}.MJX-TEX mjx-c[c=j]:before{width:.306em;padding:.669em 0 .205em;content:"j"}.MJX-TEX mjx-c[c=k]:before{width:.528em;padding:.694em 0 0;content:"k"}.MJX-TEX mjx-c[c=l]:before{width:.278em;padding:.694em 0 0;content:"l"}.MJX-TEX mjx-c[c=m]:before{width:.833em;padding:.442em 0 0;content:"m"}.MJX-TEX mjx-c[c=n]:before{width:.556em;padding:.442em 0 0;content:"n"}.MJX-TEX mjx-c[c=o]:before{width:.5em;padding:.448em 0 .01em;content:"o"}.MJX-TEX mjx-c[c=p]:before{width:.556em;padding:.442em 0 .194em;content:"p"}.MJX-TEX mjx-c[c=q]:before{width:.528em;padding:.442em 0 .194em;content:"q"}.MJX-TEX mjx-c[c=r]:before{width:.392em;padding:.442em 0 0;content:"r"}.MJX-TEX mjx-c[c=s]:before{width:.394em;padding:.448em 0 .011em;content:"s"}.MJX-TEX mjx-c[c=t]:before{width:.389em;padding:.615em 0 .01em;content:"t"}.MJX-TEX mjx-c[c=u]:before{width:.556em;padding:.442em 0 .011em;content:"u"}.MJX-TEX mjx-c[c=v]:before{width:.528em;padding:.431em 0 .011em;content:"v"}.MJX-TEX mjx-c[c=w]:before{width:.722em;padding:.431em 0 .011em;content:"w"}.MJX-TEX mjx-c[c=x]:before{width:.528em;padding:.431em 0 0;content:"x"}.MJX-TEX mjx-c[c=y]:before{width:.528em;padding:.431em 0 .204em;content:"y"}.MJX-TEX mjx-c[c=z]:before{width:.444em;padding:.431em 0 0;content:"z"}.MJX-TEX mjx-c[c="{"]:before{width:.5em;padding:.75em 0 .25em;content:"{"}.MJX-TEX mjx-c[c="|"]:before{width:.278em;padding:.75em 0 .249em;content:"|"}.MJX-TEX mjx-c[c="}"]:before{width:.5em;padding:.75em 0 .25em;content:"}"}.MJX-TEX mjx-c[c="~"]:before{width:.5em;padding:.318em 0 0;content:"~"}.MJX-TEX mjx-c[c=A0]:before{width:.25em;content:"\A0"}.MJX-TEX mjx-c[c=A3]:before{width:.769em;padding:.714em 0 .011em;content:"\A3";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c=A5]:before{width:.75em;padding:.683em 0 0;content:"\A5"}.MJX-TEX mjx-c[c=A8]:before{width:.5em;padding:.669em 0 0;content:"\A8"}.MJX-TEX mjx-c[c=AC]:before{width:.667em;padding:.356em 0 0;content:"\AC"}.MJX-TEX mjx-c[c=AE]:before{width:.947em;padding:.709em 0 .175em;content:"\AE"}.MJX-TEX mjx-c[c=AF]:before{width:.5em;padding:.59em 0 0;content:"\AF"}.MJX-TEX mjx-c[c=B0]:before{width:.5em;padding:.715em 0 0;content:"\B0"}.MJX-TEX mjx-c[c=B1]:before{width:.778em;padding:.666em 0 0;content:"\B1"}.MJX-TEX mjx-c[c=B4]:before{width:.5em;padding:.699em 0 0;content:"\B4"}.MJX-TEX mjx-c[c=B7]:before{width:.278em;padding:.31em 0 0;content:"\22C5"}.MJX-TEX mjx-c[c=D7]:before{width:.778em;padding:.491em 0 0;content:"\D7"}.MJX-TEX mjx-c[c=F0]:before{width:.556em;padding:.749em 0 .021em;content:"\F0"}.MJX-TEX mjx-c[c=F7]:before{width:.778em;padding:.537em 0 .036em;content:"\F7"}.MJX-TEX mjx-c[c="127"]:before{width:.54em;padding:.695em 0 .013em;content:"\127"}.MJX-TEX mjx-c[c="131"]:before{width:.278em;padding:.442em 0 0;content:"\131"}.MJX-TEX mjx-c[c="237"]:before{width:.306em;padding:.442em 0 .205em;content:"\237"}.MJX-TEX mjx-c[c="2B9"]:before{width:.275em;padding:.56em 0 0;content:"\2032"}.MJX-TEX mjx-c[c="2C6"]:before{width:.5em;padding:.694em 0 0;content:"\2C6"}.MJX-TEX mjx-c[c="2C7"]:before{width:.5em;padding:.644em 0 0;content:"\2C7"}.MJX-TEX mjx-c[c="2C9"]:before{width:.5em;padding:.59em 0 0;content:"\2C9"}.MJX-TEX mjx-c[c="2CA"]:before{width:.5em;padding:.699em 0 0;content:"\2CA"}.MJX-TEX mjx-c[c="2CB"]:before{width:.5em;padding:.699em 0 0;content:"\2CB"}.MJX-TEX mjx-c[c="2D8"]:before{width:.5em;padding:.694em 0 0;content:"\2D8"}.MJX-TEX mjx-c[c="2D9"]:before{width:.5em;padding:.669em 0 0;content:"\2D9"}.MJX-TEX mjx-c[c="2DA"]:before{width:.5em;padding:.715em 0 0;content:"\2DA"}.MJX-TEX mjx-c[c="2DC"]:before{width:.5em;padding:.668em 0 0;content:"\2DC"}.MJX-TEX mjx-c[c="300"]:before{width:0;padding:.699em 0 0;content:"\300"}.MJX-TEX mjx-c[c="301"]:before{width:0;padding:.699em 0 0;content:"\301"}.MJX-TEX mjx-c[c="302"]:before{width:0;padding:.694em 0 0;content:"\302"}.MJX-TEX mjx-c[c="303"]:before{width:0;padding:.668em 0 0;content:"\303"}.MJX-TEX mjx-c[c="304"]:before{width:0;padding:.59em 0 0;content:"\304"}.MJX-TEX mjx-c[c="306"]:before{width:0;padding:.694em 0 0;content:"\306"}.MJX-TEX mjx-c[c="307"]:before{width:0;padding:.669em 0 0;content:"\307"}.MJX-TEX mjx-c[c="308"]:before{width:0;padding:.669em 0 0;content:"\308"}.MJX-TEX mjx-c[c="30A"]:before{width:0;padding:.715em 0 0;content:"\30A"}.MJX-TEX mjx-c[c="30B"]:before{width:0;padding:.701em 0 0;content:"\30B"}.MJX-TEX mjx-c[c="30C"]:before{width:0;padding:.644em 0 0;content:"\30C"}.MJX-TEX mjx-c[c="338"]:before{width:0;padding:.716em 0 .215em;content:"\338"}.MJX-TEX mjx-c[c="391"]:before{width:.75em;padding:.716em 0 0;content:"A"}.MJX-TEX mjx-c[c="392"]:before{width:.708em;padding:.683em 0 0;content:"B"}.MJX-TEX mjx-c[c="393"]:before{width:.625em;padding:.68em 0 0;content:"\393"}.MJX-TEX mjx-c[c="394"]:before{width:.833em;padding:.716em 0 0;content:"\394"}.MJX-TEX mjx-c[c="395"]:before{width:.681em;padding:.68em 0 0;content:"E"}.MJX-TEX mjx-c[c="396"]:before{width:.611em;padding:.683em 0 0;content:"Z"}.MJX-TEX mjx-c[c="397"]:before{width:.75em;padding:.683em 0 0;content:"H"}.MJX-TEX mjx-c[c="398"]:before{width:.778em;padding:.705em 0 .022em;content:"\398"}.MJX-TEX mjx-c[c="399"]:before{width:.361em;padding:.683em 0 0;content:"I"}.MJX-TEX mjx-c[c="39A"]:before{width:.778em;padding:.683em 0 0;content:"K"}.MJX-TEX mjx-c[c="39B"]:before{width:.694em;padding:.716em 0 0;content:"\39B"}.MJX-TEX mjx-c[c="39C"]:before{width:.917em;padding:.683em 0 0;content:"M"}.MJX-TEX mjx-c[c="39D"]:before{width:.75em;padding:.683em 0 0;content:"N"}.MJX-TEX mjx-c[c="39E"]:before{width:.667em;padding:.677em 0 0;content:"\39E"}.MJX-TEX mjx-c[c="39F"]:before{width:.778em;padding:.705em 0 .022em;content:"O"}.MJX-TEX mjx-c[c="3A0"]:before{width:.75em;padding:.68em 0 0;content:"\3A0"}.MJX-TEX mjx-c[c="3A1"]:before{width:.681em;padding:.683em 0 0;content:"P"}.MJX-TEX mjx-c[c="3A2"]:before{width:.778em;padding:.705em 0 .022em;content:"\398"}.MJX-TEX mjx-c[c="3A3"]:before{width:.722em;padding:.683em 0 0;content:"\3A3"}.MJX-TEX mjx-c[c="3A4"]:before{width:.722em;padding:.677em 0 0;content:"T"}.MJX-TEX mjx-c[c="3A5"]:before{width:.778em;padding:.705em 0 0;content:"\3A5"}.MJX-TEX mjx-c[c="3A6"]:before{width:.722em;padding:.683em 0 0;content:"\3A6"}.MJX-TEX mjx-c[c="3A7"]:before{width:.75em;padding:.683em 0 0;content:"X"}.MJX-TEX mjx-c[c="3A8"]:before{width:.778em;padding:.683em 0 0;content:"\3A8"}.MJX-TEX mjx-c[c="3A9"]:before{width:.722em;padding:.704em 0 0;content:"\3A9"}.MJX-TEX mjx-c[c="3D2"]:before{width:.778em;padding:.705em 0 0;content:"\3A5"}.MJX-TEX mjx-c[c="3DC"]:before{width:.653em;padding:.68em 0 0;content:"F"}.MJX-TEX mjx-c[c="3DD"]:before{width:.778em;padding:.605em 0 .085em;content:"\3DD"}.MJX-TEX mjx-c[c="3F0"]:before{width:.667em;padding:.434em 0 .006em;content:"\3F0"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="3F0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="3F0"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="3F6"]:before{width:.429em;padding:.44em 0 0;content:"\220D"}.MJX-TEX mjx-c[c="2000"]:before{width:.5em;content:"\2000"}.MJX-TEX mjx-c[c="2001"]:before{width:1em;content:"\2001"}.MJX-TEX mjx-c[c="2002"]:before{width:.5em;content:"\2002"}.MJX-TEX mjx-c[c="2003"]:before{width:1em;content:"\2003"}.MJX-TEX mjx-c[c="2004"]:before{width:.333em;content:"\2004"}.MJX-TEX mjx-c[c="2005"]:before{width:.25em;content:"\2005"}.MJX-TEX mjx-c[c="2006"]:before{width:.167em;content:"\2006"}.MJX-TEX mjx-c[c="2009"]:before{width:.167em;content:"\2009"}.MJX-TEX mjx-c[c="200A"]:before{width:.1em;content:"\200A"}.MJX-TEX mjx-c[c="200B"]:before{width:0;content:"\200B"}.MJX-TEX mjx-c[c="200C"]:before{width:0;content:"\200C"}.MJX-TEX mjx-c[c="2013"]:before{width:.5em;padding:.285em 0 0;content:"\2013"}.MJX-TEX mjx-c[c="2014"]:before,.MJX-TEX mjx-c[c="2015"]:before{width:1em;padding:.285em 0 0;content:"\2014"}.MJX-TEX mjx-c[c="2016"]:before{width:.5em;padding:.75em 0 .25em;content:"\2225"}.MJX-TEX mjx-c[c="2017"]:before{width:.5em;padding:0 0 .062em;content:"_"}.MJX-TEX mjx-c[c="2018"]:before{width:.278em;padding:.694em 0 0;content:"\2018"}.MJX-TEX mjx-c[c="2019"]:before{width:.278em;padding:.694em 0 0;content:"\2019"}.MJX-TEX mjx-c[c="201C"]:before{width:.5em;padding:.694em 0 0;content:"\201C"}.MJX-TEX mjx-c[c="201D"]:before{width:.5em;padding:.694em 0 0;content:"\201D"}.MJX-TEX mjx-c[c="2020"]:before{width:.444em;padding:.705em 0 .216em;content:"\2020"}.MJX-TEX mjx-c[c="2021"]:before{width:.444em;padding:.705em 0 .205em;content:"\2021"}.MJX-TEX mjx-c[c="2022"]:before{width:.5em;padding:.444em 0 0;content:"\2219"}.MJX-TEX mjx-c[c="2026"]:before{width:1.172em;padding:.12em 0 0;content:"\2026"}.MJX-TEX mjx-c[c="2032"]:before{width:.275em;padding:.56em 0 0;content:"\2032"}.MJX-TEX mjx-c[c="2033"]:before{width:.55em;padding:.56em 0 0;content:"\2032\2032"}.MJX-TEX mjx-c[c="2034"]:before{width:.825em;padding:.56em 0 0;content:"\2032\2032\2032"}.MJX-TEX mjx-c[c="2035"]:before{width:.275em;padding:.56em 0 0;content:"\2035"}.MJX-TEX mjx-c[c="2036"]:before{width:.55em;padding:.56em 0 0;content:"\2035\2035"}.MJX-TEX mjx-c[c="2037"]:before{width:.825em;padding:.56em 0 0;content:"\2035\2035\2035"}.MJX-TEX mjx-c[c="203E"]:before{width:.5em;padding:.59em 0 0;content:"\2C9"}.MJX-TEX mjx-c[c="2044"]:before{width:.5em;padding:.75em 0 .25em;content:"/"}.MJX-TEX mjx-c[c="2057"]:before{width:1.1em;padding:.56em 0 0;content:"\2032\2032\2032\2032"}.MJX-TEX mjx-c[c="2061"]:before{width:0;content:"\2061"}.MJX-TEX mjx-c[c="2062"]:before{width:0;content:"\2062"}.MJX-TEX mjx-c[c="2063"]:before{width:0;content:"\2063"}.MJX-TEX mjx-c[c="2064"]:before{width:0;content:"\2064"}.MJX-TEX mjx-c[c="20D7"]:before{width:.5em;padding:.714em 0 0;content:"\2192";font-family:MJXZERO,MJXTEX-V}.MJX-TEX mjx-c[c="2102"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="210B"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="210B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="210B"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="210C"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="210D"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="210E"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="210F"]:before{width:.54em;padding:.695em 0 .013em;content:"\210F";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2110"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2110"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2110"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="2111"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="2112"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2112"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2112"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="2113"]:before{width:.417em;padding:.705em 0 .02em;content:"\2113"}.MJX-TEX mjx-c[c="2115"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2118"]:before{width:.636em;padding:.453em 0 .216em;content:"\2118"}.MJX-TEX mjx-c[c="2119"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="211A"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="211B"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="211C"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="211D"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2124"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2126"]:before{width:.722em;padding:.704em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2127"]:before{width:.722em;padding:.684em 0 .022em;content:"\2127"}.MJX-TEX mjx-c[c="2128"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="212C"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="212D"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="2130"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2130"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2130"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="2131"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2131"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2131"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="2132"]:before{width:.556em;padding:.695em 0 0;content:"\2132"}.MJX-TEX mjx-c[c="2133"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2133"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2133"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="2135"]:before{width:.611em;padding:.694em 0 0;content:"\2135"}.MJX-TEX mjx-c[c="2136"]:before{width:.667em;padding:.763em 0 .021em;content:"\2136"}.MJX-TEX mjx-c[c="2137"]:before{width:.444em;padding:.764em 0 .043em;content:"\2137"}.MJX-TEX mjx-c[c="2138"]:before{width:.667em;padding:.764em 0 .043em;content:"\2138"}.MJX-TEX mjx-c[c="2141"]:before{width:.639em;padding:.705em 0 .023em;content:"\2141"}.MJX-TEX mjx-c[c="2190"]:before{width:1em;padding:.511em 0 .011em;content:"\2190"}.MJX-TEX mjx-c[c="2191"]:before{width:.5em;padding:.694em 0 .193em;content:"\2191"}.MJX-TEX mjx-c[c="2192"]:before{width:1em;padding:.511em 0 .011em;content:"\2192"}.MJX-TEX mjx-c[c="2193"]:before{width:.5em;padding:.694em 0 .194em;content:"\2193"}.MJX-TEX mjx-c[c="2194"]:before{width:1em;padding:.511em 0 .011em;content:"\2194"}.MJX-TEX mjx-c[c="2195"]:before{width:.5em;padding:.772em 0 .272em;content:"\2195"}.MJX-TEX mjx-c[c="2196"]:before{width:1em;padding:.72em 0 .195em;content:"\2196"}.MJX-TEX mjx-c[c="2197"]:before{width:1em;padding:.72em 0 .195em;content:"\2197"}.MJX-TEX mjx-c[c="2198"]:before{width:1em;padding:.695em 0 .22em;content:"\2198"}.MJX-TEX mjx-c[c="2199"]:before{width:1em;padding:.695em 0 .22em;content:"\2199"}.MJX-TEX mjx-c[c="219A"]:before{width:1em;padding:.437em 0 0;content:"\219A"}.MJX-TEX mjx-c[c="219B"]:before{width:1em;padding:.437em 0 0;content:"\219B"}.MJX-TEX mjx-c[c="219E"]:before{width:1em;padding:.417em 0 0;content:"\219E"}.MJX-TEX mjx-c[c="21A0"]:before{width:1em;padding:.417em 0 0;content:"\21A0"}.MJX-TEX mjx-c[c="21A2"]:before{width:1.111em;padding:.417em 0 0;content:"\21A2"}.MJX-TEX mjx-c[c="21A3"]:before{width:1.111em;padding:.417em 0 0;content:"\21A3"}.MJX-TEX mjx-c[c="21A6"]:before{width:1em;padding:.511em 0 .011em;content:"\21A6"}.MJX-TEX mjx-c[c="21A9"]:before{width:1.126em;padding:.511em 0 .011em;content:"\21A9"}.MJX-TEX mjx-c[c="21AA"]:before{width:1.126em;padding:.511em 0 .011em;content:"\21AA"}.MJX-TEX mjx-c[c="21AB"]:before{width:1em;padding:.575em 0 .041em;content:"\21AB"}.MJX-TEX mjx-c[c="21AC"]:before{width:1em;padding:.575em 0 .041em;content:"\21AC"}.MJX-TEX mjx-c[c="21AD"]:before{width:1.389em;padding:.417em 0 0;content:"\21AD"}.MJX-TEX mjx-c[c="21AE"]:before{width:1em;padding:.437em 0 0;content:"\21AE"}.MJX-TEX mjx-c[c="21B0"]:before{width:.5em;padding:.722em 0 0;content:"\21B0"}.MJX-TEX mjx-c[c="21B1"]:before{width:.5em;padding:.722em 0 0;content:"\21B1"}.MJX-TEX mjx-c[c="21B6"]:before{width:1em;padding:.461em 0 0;content:"\21B6"}.MJX-TEX mjx-c[c="21B7"]:before{width:1em;padding:.46em 0 0;content:"\21B7"}.MJX-TEX mjx-c[c="21BA"]:before{width:.778em;padding:.65em 0 .083em;content:"\21BA"}.MJX-TEX mjx-c[c="21BB"]:before{width:.778em;padding:.65em 0 .083em;content:"\21BB"}.MJX-TEX mjx-c[c="21BC"]:before{width:1em;padding:.511em 0 0;content:"\21BC"}.MJX-TEX mjx-c[c="21BD"]:before{width:1em;padding:.27em 0 .011em;content:"\21BD"}.MJX-TEX mjx-c[c="21BE"]:before{width:.417em;padding:.694em 0 .194em;content:"\21BE"}.MJX-TEX mjx-c[c="21BF"]:before{width:.417em;padding:.694em 0 .194em;content:"\21BF"}.MJX-TEX mjx-c[c="21C0"]:before{width:1em;padding:.511em 0 0;content:"\21C0"}.MJX-TEX mjx-c[c="21C1"]:before{width:1em;padding:.27em 0 .011em;content:"\21C1"}.MJX-TEX mjx-c[c="21C2"]:before{width:.417em;padding:.694em 0 .194em;content:"\21C2"}.MJX-TEX mjx-c[c="21C3"]:before{width:.417em;padding:.694em 0 .194em;content:"\21C3"}.MJX-TEX mjx-c[c="21C4"]:before{width:1em;padding:.667em 0 0;content:"\21C4"}.MJX-TEX mjx-c[c="21C6"]:before{width:1em;padding:.667em 0 0;content:"\21C6"}.MJX-TEX mjx-c[c="21C7"]:before{width:1em;padding:.583em 0 .083em;content:"\21C7"}.MJX-TEX mjx-c[c="21C8"]:before{width:.833em;padding:.694em 0 .193em;content:"\21C8"}.MJX-TEX mjx-c[c="21C9"]:before{width:1em;padding:.583em 0 .083em;content:"\21C9"}.MJX-TEX mjx-c[c="21CA"]:before{width:.833em;padding:.694em 0 .194em;content:"\21CA"}.MJX-TEX mjx-c[c="21CB"]:before{width:1em;padding:.514em 0 .014em;content:"\21CB"}.MJX-TEX mjx-c[c="21CC"]:before{width:1em;padding:.671em 0 .011em;content:"\21CC"}.MJX-TEX mjx-c[c="21CD"]:before{width:1em;padding:.534em 0 .035em;content:"\21CD"}.MJX-TEX mjx-c[c="21CE"]:before{width:1em;padding:.534em 0 .037em;content:"\21CE"}.MJX-TEX mjx-c[c="21CF"]:before{width:1em;padding:.534em 0 .035em;content:"\21CF"}.MJX-TEX mjx-c[c="21D0"]:before{width:1em;padding:.525em 0 .024em;content:"\21D0"}.MJX-TEX mjx-c[c="21D1"]:before{width:.611em;padding:.694em 0 .194em;content:"\21D1"}.MJX-TEX mjx-c[c="21D2"]:before{width:1em;padding:.525em 0 .024em;content:"\21D2"}.MJX-TEX mjx-c[c="21D3"]:before{width:.611em;padding:.694em 0 .194em;content:"\21D3"}.MJX-TEX mjx-c[c="21D4"]:before{width:1em;padding:.526em 0 .025em;content:"\21D4"}.MJX-TEX mjx-c[c="21D5"]:before{width:.611em;padding:.772em 0 .272em;content:"\21D5"}.MJX-TEX mjx-c[c="21DA"]:before{width:1em;padding:.611em 0 .111em;content:"\21DA"}.MJX-TEX mjx-c[c="21DB"]:before{width:1em;padding:.611em 0 .111em;content:"\21DB"}.MJX-TEX mjx-c[c="21DD"]:before{width:1em;padding:.417em 0 0;content:"\21DD"}.MJX-TEX mjx-c[c="21E0"]:before{width:1.334em;padding:.437em 0 0;content:"\21E0"}.MJX-TEX mjx-c[c="21E2"]:before{width:1.334em;padding:.437em 0 0;content:"\21E2"}.MJX-TEX mjx-c[c="2200"]:before{width:.556em;padding:.694em 0 .022em;content:"\2200"}.MJX-TEX mjx-c[c="2201"]:before{width:.5em;padding:.846em 0 .021em;content:"\2201"}.MJX-TEX mjx-c[c="2202"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202"}.MJX-TEX mjx-c[c="2203"]:before{width:.556em;padding:.694em 0 0;content:"\2203"}.MJX-TEX mjx-c[c="2204"]:before{width:.556em;padding:.716em 0 .215em;content:"\2203\338"}.MJX-TEX mjx-c[c="2205"]:before{width:.5em;padding:.772em 0 .078em;content:"\2205"}.MJX-TEX mjx-c[c="2206"]:before{width:.833em;padding:.716em 0 0;content:"\394"}.MJX-TEX mjx-c[c="2207"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207"}.MJX-TEX mjx-c[c="2208"]:before{width:.667em;padding:.54em 0 .04em;content:"\2208"}.MJX-TEX mjx-c[c="2209"]:before{width:.667em;padding:.716em 0 .215em;content:"\2209"}.MJX-TEX mjx-c[c="220B"]:before{width:.667em;padding:.54em 0 .04em;content:"\220B"}.MJX-TEX mjx-c[c="220C"]:before{width:.667em;padding:.716em 0 .215em;content:"\220B\338"}.MJX-TEX mjx-c[c="220D"]:before{width:.429em;padding:.44em 0 0;content:"\220D"}.MJX-TEX mjx-c[c="220F"]:before{width:.944em;padding:.75em 0 .25em;content:"\220F"}.MJX-TEX mjx-c[c="2210"]:before{width:.944em;padding:.75em 0 .25em;content:"\2210"}.MJX-TEX mjx-c[c="2211"]:before{width:1.056em;padding:.75em 0 .25em;content:"\2211"}.MJX-TEX mjx-c[c="2212"]:before{width:.778em;padding:.583em 0 .082em;content:"\2212"}.MJX-TEX mjx-c[c="2213"]:before{width:.778em;padding:.5em 0 .166em;content:"\2213"}.MJX-TEX mjx-c[c="2214"]:before{width:.778em;padding:.766em 0 .093em;content:"\2214"}.MJX-TEX mjx-c[c="2215"]:before{width:.5em;padding:.75em 0 .25em;content:"\2215"}.MJX-TEX mjx-c[c="2216"]:before{width:.778em;padding:.43em 0 .023em;content:"\2216";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2217"]:before{width:.5em;padding:.465em 0 0;content:"\2217"}.MJX-TEX mjx-c[c="2218"]:before{width:.5em;padding:.444em 0 0;content:"\2218"}.MJX-TEX mjx-c[c="2219"]:before{width:.5em;padding:.444em 0 0;content:"\2219"}.MJX-TEX mjx-c[c="221A"]:before{width:.833em;padding:.8em 0 .2em;content:"\221A"}.MJX-TEX mjx-c[c="221D"]:before{width:.778em;padding:.442em 0 .011em;content:"\221D"}.MJX-TEX mjx-c[c="221E"]:before{width:1em;padding:.442em 0 .011em;content:"\221E"}.MJX-TEX mjx-c[c="2220"]:before{width:.722em;padding:.694em 0 0;content:"\2220"}.MJX-TEX mjx-c[c="2221"]:before{width:.722em;padding:.714em 0 .02em;content:"\2221"}.MJX-TEX mjx-c[c="2222"]:before{width:.722em;padding:.551em 0 .051em;content:"\2222"}.MJX-TEX mjx-c[c="2223"]:before{width:.278em;padding:.75em 0 .249em;content:"\2223"}.MJX-TEX mjx-c[c="2224"]:before{width:.278em;padding:.75em 0 .252em;content:"\2224"}.MJX-TEX mjx-c[c="2225"]:before{width:.5em;padding:.75em 0 .25em;content:"\2225"}.MJX-TEX mjx-c[c="2226"]:before{width:.5em;padding:.75em 0 .25em;content:"\2226"}.MJX-TEX mjx-c[c="2227"]:before{width:.667em;padding:.598em 0 .022em;content:"\2227"}.MJX-TEX mjx-c[c="2228"]:before{width:.667em;padding:.598em 0 .022em;content:"\2228"}.MJX-TEX mjx-c[c="2229"]:before{width:.667em;padding:.598em 0 .022em;content:"\2229"}.MJX-TEX mjx-c[c="222A"]:before{width:.667em;padding:.598em 0 .022em;content:"\222A"}.MJX-TEX mjx-c[c="222B"]:before{width:.417em;padding:.716em 0 .216em;content:"\222B"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222B"]:last-child:before{width:.472em}.MJX-TEX mjx-c[c="222C"]:before{width:.819em;padding:.805em 0 .306em;content:"\222C"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222C"]:last-child:before{width:.957em}.MJX-TEX mjx-c[c="222D"]:before{width:1.166em;padding:.805em 0 .306em;content:"\222D"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222D"]:last-child:before{width:1.304em}.MJX-TEX mjx-c[c="222E"]:before{width:.472em;padding:.805em 0 .306em;content:"\222E"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222E"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="2234"]:before{width:.667em;padding:.471em 0 .082em;content:"\2234"}.MJX-TEX mjx-c[c="2235"]:before{width:.667em;padding:.471em 0 .082em;content:"\2235"}.MJX-TEX mjx-c[c="223C"]:before{width:.778em;padding:.367em 0 0;content:"\223C"}.MJX-TEX mjx-c[c="223D"]:before{width:.778em;padding:.367em 0 0;content:"\223D"}.MJX-TEX mjx-c[c="2240"]:before{width:.278em;padding:.583em 0 .083em;content:"\2240"}.MJX-TEX mjx-c[c="2241"]:before{width:.778em;padding:.467em 0 0;content:"\2241"}.MJX-TEX mjx-c[c="2242"]:before{width:.778em;padding:.463em 0 0;content:"\2242"}.MJX-TEX mjx-c[c="2243"]:before{width:.778em;padding:.464em 0 0;content:"\2243"}.MJX-TEX mjx-c[c="2244"]:before{width:.778em;padding:.716em 0 .215em;content:"\2243\338"}.MJX-TEX mjx-c[c="2245"]:before{width:.778em;padding:.589em 0 0;content:"\2245"}.MJX-TEX mjx-c[c="2246"]:before,.MJX-TEX mjx-c[c="2247"]:before{width:.778em;padding:.652em 0 .155em;content:"\2246"}.MJX-TEX mjx-c[c="2248"]:before{width:.778em;padding:.483em 0 0;content:"\2248"}.MJX-TEX mjx-c[c="2249"]:before{width:.778em;padding:.716em 0 .215em;content:"\2248\338"}.MJX-TEX mjx-c[c="224A"]:before{width:.778em;padding:.579em 0 .039em;content:"\224A"}.MJX-TEX mjx-c[c="224D"]:before{width:.778em;padding:.484em 0 0;content:"\224D"}.MJX-TEX mjx-c[c="224E"]:before{width:.778em;padding:.492em 0 0;content:"\224E"}.MJX-TEX mjx-c[c="224F"]:before{width:.778em;padding:.492em 0 0;content:"\224F"}.MJX-TEX mjx-c[c="2250"]:before{width:.778em;padding:.67em 0 0;content:"\2250"}.MJX-TEX mjx-c[c="2251"]:before{width:.778em;padding:.609em 0 .108em;content:"\2251"}.MJX-TEX mjx-c[c="2252"]:before{width:.778em;padding:.601em 0 .101em;content:"\2252"}.MJX-TEX mjx-c[c="2253"]:before{width:.778em;padding:.601em 0 .102em;content:"\2253"}.MJX-TEX mjx-c[c="2256"]:before{width:.778em;padding:.367em 0 0;content:"\2256"}.MJX-TEX mjx-c[c="2257"]:before{width:.778em;padding:.721em 0 0;content:"\2257"}.MJX-TEX mjx-c[c="225C"]:before{width:.778em;padding:.859em 0 0;content:"\225C"}.MJX-TEX mjx-c[c="2260"]:before{width:.778em;padding:.716em 0 .215em;content:"\2260"}.MJX-TEX mjx-c[c="2261"]:before{width:.778em;padding:.464em 0 0;content:"\2261"}.MJX-TEX mjx-c[c="2262"]:before{width:.778em;padding:.716em 0 .215em;content:"\2261\338"}.MJX-TEX mjx-c[c="2264"]:before{width:.778em;padding:.636em 0 .138em;content:"\2264"}.MJX-TEX mjx-c[c="2265"]:before{width:.778em;padding:.636em 0 .138em;content:"\2265"}.MJX-TEX mjx-c[c="2266"]:before{width:.778em;padding:.753em 0 .175em;content:"\2266"}.MJX-TEX mjx-c[c="2267"]:before{width:.778em;padding:.753em 0 .175em;content:"\2267"}.MJX-TEX mjx-c[c="2268"]:before{width:.778em;padding:.752em 0 .286em;content:"\2268"}.MJX-TEX mjx-c[c="2269"]:before{width:.778em;padding:.752em 0 .286em;content:"\2269"}.MJX-TEX mjx-c[c="226A"]:before{width:1em;padding:.568em 0 .067em;content:"\226A"}.MJX-TEX mjx-c[c="226B"]:before{width:1em;padding:.567em 0 .067em;content:"\226B"}.MJX-TEX mjx-c[c="226C"]:before{width:.5em;padding:.75em 0 .25em;content:"\226C"}.MJX-TEX mjx-c[c="226D"]:before{width:.778em;padding:.716em 0 .215em;content:"\224D\338"}.MJX-TEX mjx-c[c="226E"]:before{width:.778em;padding:.708em 0 .209em;content:"\226E"}.MJX-TEX mjx-c[c="226F"]:before{width:.778em;padding:.708em 0 .209em;content:"\226F"}.MJX-TEX mjx-c[c="2270"]:before{width:.778em;padding:.801em 0 .303em;content:"\2270"}.MJX-TEX mjx-c[c="2271"]:before{width:.778em;padding:.801em 0 .303em;content:"\2271"}.MJX-TEX mjx-c[c="2272"]:before{width:.778em;padding:.732em 0 .228em;content:"\2272"}.MJX-TEX mjx-c[c="2273"]:before{width:.778em;padding:.732em 0 .228em;content:"\2273"}.MJX-TEX mjx-c[c="2274"]:before{width:.778em;padding:.732em 0 .228em;content:"\2272\338"}.MJX-TEX mjx-c[c="2275"]:before{width:.778em;padding:.732em 0 .228em;content:"\2273\338"}.MJX-TEX mjx-c[c="2276"]:before{width:.778em;padding:.681em 0 .253em;content:"\2276"}.MJX-TEX mjx-c[c="2277"]:before{width:.778em;padding:.681em 0 .253em;content:"\2277"}.MJX-TEX mjx-c[c="2278"]:before{width:.778em;padding:.716em 0 .253em;content:"\2276\338"}.MJX-TEX mjx-c[c="2279"]:before{width:.778em;padding:.716em 0 .253em;content:"\2277\338"}.MJX-TEX mjx-c[c="227A"]:before{width:.778em;padding:.539em 0 .041em;content:"\227A"}.MJX-TEX mjx-c[c="227B"]:before{width:.778em;padding:.539em 0 .041em;content:"\227B"}.MJX-TEX mjx-c[c="227C"]:before{width:.778em;padding:.58em 0 .153em;content:"\227C"}.MJX-TEX mjx-c[c="227D"]:before{width:.778em;padding:.58em 0 .154em;content:"\227D"}.MJX-TEX mjx-c[c="227E"]:before{width:.778em;padding:.732em 0 .228em;content:"\227E"}.MJX-TEX mjx-c[c="227F"]:before{width:.778em;padding:.732em 0 .228em;content:"\227F"}.MJX-TEX mjx-c[c="2280"]:before{width:.778em;padding:.705em 0 .208em;content:"\2280"}.MJX-TEX mjx-c[c="2281"]:before{width:.778em;padding:.705em 0 .208em;content:"\2281"}.MJX-TEX mjx-c[c="2282"]:before{width:.778em;padding:.54em 0 .04em;content:"\2282"}.MJX-TEX mjx-c[c="2283"]:before{width:.778em;padding:.54em 0 .04em;content:"\2283"}.MJX-TEX mjx-c[c="2284"]:before{width:.778em;padding:.716em 0 .215em;content:"\2282\338"}.MJX-TEX mjx-c[c="2285"]:before{width:.778em;padding:.716em 0 .215em;content:"\2283\338"}.MJX-TEX mjx-c[c="2286"]:before{width:.778em;padding:.636em 0 .138em;content:"\2286"}.MJX-TEX mjx-c[c="2287"]:before{width:.778em;padding:.636em 0 .138em;content:"\2287"}.MJX-TEX mjx-c[c="2288"]:before{width:.778em;padding:.801em 0 .303em;content:"\2288"}.MJX-TEX mjx-c[c="2289"]:before{width:.778em;padding:.801em 0 .303em;content:"\2289"}.MJX-TEX mjx-c[c="228A"]:before{width:.778em;padding:.635em 0 .241em;content:"\228A"}.MJX-TEX mjx-c[c="228B"]:before{width:.778em;padding:.635em 0 .241em;content:"\228B"}.MJX-TEX mjx-c[c="228E"]:before{width:.667em;padding:.598em 0 .022em;content:"\228E"}.MJX-TEX mjx-c[c="228F"]:before{width:.778em;padding:.539em 0 .041em;content:"\228F"}.MJX-TEX mjx-c[c="2290"]:before{width:.778em;padding:.539em 0 .041em;content:"\2290"}.MJX-TEX mjx-c[c="2291"]:before{width:.778em;padding:.636em 0 .138em;content:"\2291"}.MJX-TEX mjx-c[c="2292"]:before{width:.778em;padding:.636em 0 .138em;content:"\2292"}.MJX-TEX mjx-c[c="2293"]:before{width:.667em;padding:.598em 0 0;content:"\2293"}.MJX-TEX mjx-c[c="2294"]:before{width:.667em;padding:.598em 0 0;content:"\2294"}.MJX-TEX mjx-c[c="2295"]:before{width:.778em;padding:.583em 0 .083em;content:"\2295"}.MJX-TEX mjx-c[c="2296"]:before{width:.778em;padding:.583em 0 .083em;content:"\2296"}.MJX-TEX mjx-c[c="2297"]:before{width:.778em;padding:.583em 0 .083em;content:"\2297"}.MJX-TEX mjx-c[c="2298"]:before{width:.778em;padding:.583em 0 .083em;content:"\2298"}.MJX-TEX mjx-c[c="2299"]:before{width:.778em;padding:.583em 0 .083em;content:"\2299"}.MJX-TEX mjx-c[c="229A"]:before{width:.778em;padding:.582em 0 .082em;content:"\229A"}.MJX-TEX mjx-c[c="229B"]:before{width:.778em;padding:.582em 0 .082em;content:"\229B"}.MJX-TEX mjx-c[c="229D"]:before{width:.778em;padding:.582em 0 .082em;content:"\229D"}.MJX-TEX mjx-c[c="229E"]:before{width:.778em;padding:.689em 0 0;content:"\229E"}.MJX-TEX mjx-c[c="229F"]:before{width:.778em;padding:.689em 0 0;content:"\229F"}.MJX-TEX mjx-c[c="22A0"]:before{width:.778em;padding:.689em 0 0;content:"\22A0"}.MJX-TEX mjx-c[c="22A1"]:before{width:.778em;padding:.689em 0 0;content:"\22A1"}.MJX-TEX mjx-c[c="22A2"]:before{width:.611em;padding:.694em 0 0;content:"\22A2"}.MJX-TEX mjx-c[c="22A3"]:before{width:.611em;padding:.694em 0 0;content:"\22A3"}.MJX-TEX mjx-c[c="22A4"]:before{width:.778em;padding:.668em 0 0;content:"\22A4"}.MJX-TEX mjx-c[c="22A5"]:before{width:.778em;padding:.668em 0 0;content:"\22A5"}.MJX-TEX mjx-c[c="22A8"]:before{width:.867em;padding:.75em 0 .249em;content:"\22A8"}.MJX-TEX mjx-c[c="22A9"]:before{width:.722em;padding:.694em 0 0;content:"\22A9"}.MJX-TEX mjx-c[c="22AA"]:before{width:.889em;padding:.694em 0 0;content:"\22AA"}.MJX-TEX mjx-c[c="22AC"]:before{width:.611em;padding:.695em 0 0;content:"\22AC"}.MJX-TEX mjx-c[c="22AD"]:before{width:.611em;padding:.695em 0 0;content:"\22AD"}.MJX-TEX mjx-c[c="22AE"]:before{width:.722em;padding:.695em 0 0;content:"\22AE"}.MJX-TEX mjx-c[c="22AF"]:before{width:.722em;padding:.695em 0 0;content:"\22AF"}.MJX-TEX mjx-c[c="22B2"]:before{width:.778em;padding:.539em 0 .041em;content:"\22B2"}.MJX-TEX mjx-c[c="22B3"]:before{width:.778em;padding:.539em 0 .041em;content:"\22B3"}.MJX-TEX mjx-c[c="22B4"]:before{width:.778em;padding:.636em 0 .138em;content:"\22B4"}.MJX-TEX mjx-c[c="22B5"]:before{width:.778em;padding:.636em 0 .138em;content:"\22B5"}.MJX-TEX mjx-c[c="22B8"]:before{width:1.111em;padding:.408em 0 0;content:"\22B8"}.MJX-TEX mjx-c[c="22BA"]:before{width:.556em;padding:.431em 0 .212em;content:"\22BA"}.MJX-TEX mjx-c[c="22BB"]:before{width:.611em;padding:.716em 0 0;content:"\22BB"}.MJX-TEX mjx-c[c="22BC"]:before{width:.611em;padding:.716em 0 0;content:"\22BC"}.MJX-TEX mjx-c[c="22C0"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C0"}.MJX-TEX mjx-c[c="22C1"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C1"}.MJX-TEX mjx-c[c="22C2"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C2"}.MJX-TEX mjx-c[c="22C3"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C3"}.MJX-TEX mjx-c[c="22C4"]:before{width:.5em;padding:.488em 0 0;content:"\22C4"}.MJX-TEX mjx-c[c="22C5"]:before{width:.278em;padding:.31em 0 0;content:"\22C5"}.MJX-TEX mjx-c[c="22C6"]:before{width:.5em;padding:.486em 0 0;content:"\22C6"}.MJX-TEX mjx-c[c="22C7"]:before{width:.778em;padding:.545em 0 .044em;content:"\22C7"}.MJX-TEX mjx-c[c="22C8"]:before{width:.9em;padding:.505em 0 .005em;content:"\22C8"}.MJX-TEX mjx-c[c="22C9"]:before{width:.778em;padding:.492em 0 0;content:"\22C9"}.MJX-TEX mjx-c[c="22CA"]:before{width:.778em;padding:.492em 0 0;content:"\22CA"}.MJX-TEX mjx-c[c="22CB"]:before{width:.778em;padding:.694em 0 .022em;content:"\22CB"}.MJX-TEX mjx-c[c="22CC"]:before{width:.778em;padding:.694em 0 .022em;content:"\22CC"}.MJX-TEX mjx-c[c="22CD"]:before{width:.778em;padding:.464em 0 0;content:"\22CD"}.MJX-TEX mjx-c[c="22CE"]:before{width:.76em;padding:.578em 0 .021em;content:"\22CE"}.MJX-TEX mjx-c[c="22CF"]:before{width:.76em;padding:.578em 0 .022em;content:"\22CF"}.MJX-TEX mjx-c[c="22D0"]:before{width:.778em;padding:.54em 0 .04em;content:"\22D0"}.MJX-TEX mjx-c[c="22D1"]:before{width:.778em;padding:.54em 0 .04em;content:"\22D1"}.MJX-TEX mjx-c[c="22D2"]:before{width:.667em;padding:.598em 0 .022em;content:"\22D2"}.MJX-TEX mjx-c[c="22D3"]:before{width:.667em;padding:.598em 0 .022em;content:"\22D3"}.MJX-TEX mjx-c[c="22D4"]:before{width:.667em;padding:.736em 0 .022em;content:"\22D4"}.MJX-TEX mjx-c[c="22D6"]:before{width:.778em;padding:.541em 0 .041em;content:"\22D6"}.MJX-TEX mjx-c[c="22D7"]:before{width:.778em;padding:.541em 0 .041em;content:"\22D7"}.MJX-TEX mjx-c[c="22D8"]:before{width:1.333em;padding:.568em 0 .067em;content:"\22D8"}.MJX-TEX mjx-c[c="22D9"]:before{width:1.333em;padding:.568em 0 .067em;content:"\22D9"}.MJX-TEX mjx-c[c="22DA"]:before{width:.778em;padding:.886em 0 .386em;content:"\22DA"}.MJX-TEX mjx-c[c="22DB"]:before{width:.778em;padding:.886em 0 .386em;content:"\22DB"}.MJX-TEX mjx-c[c="22DE"]:before{width:.778em;padding:.734em 0 0;content:"\22DE"}.MJX-TEX mjx-c[c="22DF"]:before{width:.778em;padding:.734em 0 0;content:"\22DF"}.MJX-TEX mjx-c[c="22E0"]:before{width:.778em;padding:.801em 0 .303em;content:"\22E0"}.MJX-TEX mjx-c[c="22E1"]:before{width:.778em;padding:.801em 0 .303em;content:"\22E1"}.MJX-TEX mjx-c[c="22E2"]:before{width:.778em;padding:.716em 0 .215em;content:"\2291\338"}.MJX-TEX mjx-c[c="22E3"]:before{width:.778em;padding:.716em 0 .215em;content:"\2292\338"}.MJX-TEX mjx-c[c="22E6"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E6"}.MJX-TEX mjx-c[c="22E7"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E7"}.MJX-TEX mjx-c[c="22E8"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E8"}.MJX-TEX mjx-c[c="22E9"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E9"}.MJX-TEX mjx-c[c="22EA"]:before{width:.778em;padding:.706em 0 .208em;content:"\22EA"}.MJX-TEX mjx-c[c="22EB"]:before{width:.778em;padding:.706em 0 .208em;content:"\22EB"}.MJX-TEX mjx-c[c="22EC"]:before{width:.778em;padding:.802em 0 .303em;content:"\22EC"}.MJX-TEX mjx-c[c="22ED"]:before{width:.778em;padding:.801em 0 .303em;content:"\22ED"}.MJX-TEX mjx-c[c="22EE"]:before{width:.278em;padding:1.3em 0 .03em;content:"\22EE"}.MJX-TEX mjx-c[c="22EF"]:before{width:1.172em;padding:.31em 0 0;content:"\22EF"}.MJX-TEX mjx-c[c="22F1"]:before{width:1.282em;padding:1.52em 0 0;content:"\22F1"}.MJX-TEX mjx-c[c="2305"]:before{width:.611em;padding:.716em 0 0;content:"\22BC"}.MJX-TEX mjx-c[c="2306"]:before{width:.611em;padding:.813em 0 .097em;content:"\2A5E"}.MJX-TEX mjx-c[c="2308"]:before{width:.444em;padding:.75em 0 .25em;content:"\2308"}.MJX-TEX mjx-c[c="2309"]:before{width:.444em;padding:.75em 0 .25em;content:"\2309"}.MJX-TEX mjx-c[c="230A"]:before{width:.444em;padding:.75em 0 .25em;content:"\230A"}.MJX-TEX mjx-c[c="230B"]:before{width:.444em;padding:.75em 0 .25em;content:"\230B"}.MJX-TEX mjx-c[c="231C"]:before{width:.5em;padding:.694em 0 0;content:"\250C"}.MJX-TEX mjx-c[c="231D"]:before{width:.5em;padding:.694em 0 0;content:"\2510"}.MJX-TEX mjx-c[c="231E"]:before{width:.5em;padding:.366em 0 .022em;content:"\2514"}.MJX-TEX mjx-c[c="231F"]:before{width:.5em;padding:.366em 0 .022em;content:"\2518"}.MJX-TEX mjx-c[c="2322"]:before{width:1em;padding:.388em 0 0;content:"\2322"}.MJX-TEX mjx-c[c="2323"]:before{width:1em;padding:.378em 0 0;content:"\2323"}.MJX-TEX mjx-c[c="2329"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="232A"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c="23B0"]:before{width:.412em;padding:.744em 0 .244em;content:"\23B0"}.MJX-TEX mjx-c[c="23B1"]:before{width:.412em;padding:.744em 0 .244em;content:"\23B1"}.MJX-TEX mjx-c[c="23D0"]:before{width:.667em;padding:.602em 0 0;content:"\23D0"}.MJX-TEX mjx-c[c="24C8"]:before{width:.902em;padding:.709em 0 .175em;content:"\24C8"}.MJX-TEX mjx-c[c="250C"]:before{width:.5em;padding:.694em 0 0;content:"\250C"}.MJX-TEX mjx-c[c="2510"]:before{width:.5em;padding:.694em 0 0;content:"\2510"}.MJX-TEX mjx-c[c="2514"]:before{width:.5em;padding:.366em 0 .022em;content:"\2514"}.MJX-TEX mjx-c[c="2518"]:before{width:.5em;padding:.366em 0 .022em;content:"\2518"}.MJX-TEX mjx-c[c="2571"]:before{width:.889em;padding:.694em 0 .195em;content:"\2571"}.MJX-TEX mjx-c[c="2572"]:before{width:.889em;padding:.694em 0 .195em;content:"\2572"}.MJX-TEX mjx-c[c="25A0"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="25A1"]:before{width:.778em;padding:.689em 0 0;content:"\25A1"}.MJX-TEX mjx-c[c="25AA"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="25B2"]:before{width:.722em;padding:.575em 0 .02em;content:"\25B2"}.MJX-TEX mjx-c[c="25B3"]:before{width:.889em;padding:.716em 0 0;content:"\25B3"}.MJX-TEX mjx-c[c="25B4"]:before{width:.722em;padding:.575em 0 .02em;content:"\25B2"}.MJX-TEX mjx-c[c="25B5"]:before{width:.889em;padding:.716em 0 0;content:"\25B3"}.MJX-TEX mjx-c[c="25B6"]:before,.MJX-TEX mjx-c[c="25B8"]:before{width:.778em;padding:.539em 0 .041em;content:"\25B6"}.MJX-TEX mjx-c[c="25B9"]:before{width:.5em;padding:.505em 0 .005em;content:"\25B9"}.MJX-TEX mjx-c[c="25BC"]:before{width:.722em;padding:.576em 0 .019em;content:"\25BC"}.MJX-TEX mjx-c[c="25BD"]:before{width:.889em;padding:.5em 0 .215em;content:"\25BD"}.MJX-TEX mjx-c[c="25BE"]:before{width:.722em;padding:.576em 0 .019em;content:"\25BC"}.MJX-TEX mjx-c[c="25BF"]:before{width:.889em;padding:.5em 0 .215em;content:"\25BD"}.MJX-TEX mjx-c[c="25C0"]:before,.MJX-TEX mjx-c[c="25C2"]:before{width:.778em;padding:.539em 0 .041em;content:"\25C0"}.MJX-TEX mjx-c[c="25C3"]:before{width:.5em;padding:.505em 0 .005em;content:"\25C3"}.MJX-TEX mjx-c[c="25CA"]:before{width:.667em;padding:.716em 0 .132em;content:"\25CA"}.MJX-TEX mjx-c[c="25EF"]:before{width:1em;padding:.715em 0 .215em;content:"\25EF"}.MJX-TEX mjx-c[c="25FB"]:before{width:.778em;padding:.689em 0 0;content:"\25A1"}.MJX-TEX mjx-c[c="25FC"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="2605"]:before{width:.944em;padding:.694em 0 .111em;content:"\2605"}.MJX-TEX mjx-c[c="2660"]:before{width:.778em;padding:.727em 0 .13em;content:"\2660"}.MJX-TEX mjx-c[c="2661"]:before{width:.778em;padding:.716em 0 .033em;content:"\2661"}.MJX-TEX mjx-c[c="2662"]:before{width:.778em;padding:.727em 0 .162em;content:"\2662"}.MJX-TEX mjx-c[c="2663"]:before{width:.778em;padding:.726em 0 .13em;content:"\2663"}.MJX-TEX mjx-c[c="266D"]:before{width:.389em;padding:.75em 0 .022em;content:"\266D"}.MJX-TEX mjx-c[c="266E"]:before{width:.389em;padding:.734em 0 .223em;content:"\266E"}.MJX-TEX mjx-c[c="266F"]:before{width:.389em;padding:.723em 0 .223em;content:"\266F"}.MJX-TEX mjx-c[c="2713"]:before{width:.833em;padding:.706em 0 .034em;content:"\2713"}.MJX-TEX mjx-c[c="2720"]:before{width:.833em;padding:.716em 0 .022em;content:"\2720"}.MJX-TEX mjx-c[c="2758"]:before{width:.278em;padding:.75em 0 .249em;content:"\2223"}.MJX-TEX mjx-c[c="27E8"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="27E9"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c="27EE"]:before{width:.412em;padding:.744em 0 .244em;content:"\27EE"}.MJX-TEX mjx-c[c="27EF"]:before{width:.412em;padding:.744em 0 .244em;content:"\27EF"}.MJX-TEX mjx-c[c="27F5"]:before{width:1.609em;padding:.511em 0 .011em;content:"\27F5"}.MJX-TEX mjx-c[c="27F6"]:before{width:1.638em;padding:.511em 0 .011em;content:"\27F6"}.MJX-TEX mjx-c[c="27F7"]:before{width:1.859em;padding:.511em 0 .011em;content:"\27F7"}.MJX-TEX mjx-c[c="27F8"]:before{width:1.609em;padding:.525em 0 .024em;content:"\27F8"}.MJX-TEX mjx-c[c="27F9"]:before{width:1.638em;padding:.525em 0 .024em;content:"\27F9"}.MJX-TEX mjx-c[c="27FA"]:before{width:1.858em;padding:.525em 0 .024em;content:"\27FA"}.MJX-TEX mjx-c[c="27FC"]:before{width:1.638em;padding:.511em 0 .011em;content:"\27FC"}.MJX-TEX mjx-c[c="29EB"]:before{width:.667em;padding:.716em 0 .132em;content:"\29EB"}.MJX-TEX mjx-c[c="29F8"]:before{width:.778em;padding:.716em 0 .215em;content:"/";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="2A00"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A00"}.MJX-TEX mjx-c[c="2A01"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A01"}.MJX-TEX mjx-c[c="2A02"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A02"}.MJX-TEX mjx-c[c="2A04"]:before{width:.833em;padding:.75em 0 .249em;content:"\2A04"}.MJX-TEX mjx-c[c="2A06"]:before{width:.833em;padding:.75em 0 .249em;content:"\2A06"}.MJX-TEX mjx-c[c="2A0C"]:before{width:1.638em;padding:.805em 0 .306em;content:"\222C\222C"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2A0C"]:last-child:before{width:1.776em}.MJX-TEX mjx-c[c="2A2F"]:before{width:.778em;padding:.491em 0 0;content:"\D7"}.MJX-TEX mjx-c[c="2A3F"]:before{width:.75em;padding:.683em 0 0;content:"\2A3F"}.MJX-TEX mjx-c[c="2A5E"]:before{width:.611em;padding:.813em 0 .097em;content:"\2A5E"}.MJX-TEX mjx-c[c="2A7D"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A7D"}.MJX-TEX mjx-c[c="2A7E"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A7E"}.MJX-TEX mjx-c[c="2A85"]:before{width:.778em;padding:.762em 0 .29em;content:"\2A85"}.MJX-TEX mjx-c[c="2A86"]:before{width:.778em;padding:.762em 0 .29em;content:"\2A86"}.MJX-TEX mjx-c[c="2A87"]:before{width:.778em;padding:.635em 0 .241em;content:"\2A87"}.MJX-TEX mjx-c[c="2A88"]:before{width:.778em;padding:.635em 0 .241em;content:"\2A88"}.MJX-TEX mjx-c[c="2A89"]:before{width:.778em;padding:.761em 0 .387em;content:"\2A89"}.MJX-TEX mjx-c[c="2A8A"]:before{width:.778em;padding:.761em 0 .387em;content:"\2A8A"}.MJX-TEX mjx-c[c="2A8B"]:before{width:.778em;padding:1.003em 0 .463em;content:"\2A8B"}.MJX-TEX mjx-c[c="2A8C"]:before{width:.778em;padding:1.003em 0 .463em;content:"\2A8C"}.MJX-TEX mjx-c[c="2A95"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A95"}.MJX-TEX mjx-c[c="2A96"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A96"}.MJX-TEX mjx-c[c="2AAF"]:before{width:.778em;padding:.636em 0 .138em;content:"\2AAF"}.MJX-TEX mjx-c[c="2AB0"]:before{width:.778em;padding:.636em 0 .138em;content:"\2AB0"}.MJX-TEX mjx-c[c="2AB5"]:before{width:.778em;padding:.752em 0 .286em;content:"\2AB5"}.MJX-TEX mjx-c[c="2AB6"]:before{width:.778em;padding:.752em 0 .286em;content:"\2AB6"}.MJX-TEX mjx-c[c="2AB7"]:before{width:.778em;padding:.761em 0 .294em;content:"\2AB7"}.MJX-TEX mjx-c[c="2AB8"]:before{width:.778em;padding:.761em 0 .294em;content:"\2AB8"}.MJX-TEX mjx-c[c="2AB9"]:before{width:.778em;padding:.761em 0 .337em;content:"\2AB9"}.MJX-TEX mjx-c[c="2ABA"]:before{width:.778em;padding:.761em 0 .337em;content:"\2ABA"}.MJX-TEX mjx-c[c="2AC5"]:before{width:.778em;padding:.753em 0 .215em;content:"\2AC5"}.MJX-TEX mjx-c[c="2AC6"]:before{width:.778em;padding:.753em 0 .215em;content:"\2AC6"}.MJX-TEX mjx-c[c="2ACB"]:before{width:.778em;padding:.783em 0 .385em;content:"\2ACB"}.MJX-TEX mjx-c[c="2ACC"]:before{width:.778em;padding:.783em 0 .385em;content:"\2ACC"}.MJX-TEX mjx-c[c="3008"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="3009"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c=E006]:before{width:.222em;padding:.43em 0 .023em;content:"\E006"}.MJX-TEX mjx-c[c=E007]:before{width:.389em;padding:.431em 0 .024em;content:"\E007"}.MJX-TEX mjx-c[c=E008]:before{width:.778em;padding:.605em 0 .085em;content:"\E008"}.MJX-TEX mjx-c[c=E009]:before{width:.667em;padding:.434em 0 .006em;content:"\E009"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c=E009]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c=E009]:last-child:before{width:.734em}.MJX-TEX mjx-c[c=E00C]:before{width:.778em;padding:.752em 0 .284em;content:"\E00C"}.MJX-TEX mjx-c[c=E00D]:before{width:.778em;padding:.752em 0 .284em;content:"\E00D"}.MJX-TEX mjx-c[c=E00E]:before{width:.778em;padding:.919em 0 .421em;content:"\E00E"}.MJX-TEX mjx-c[c=E00F]:before{width:.778em;padding:.801em 0 .303em;content:"\E00F"}.MJX-TEX mjx-c[c=E010]:before{width:.778em;padding:.801em 0 .303em;content:"\E010"}.MJX-TEX mjx-c[c=E011]:before{width:.778em;padding:.919em 0 .421em;content:"\E011"}.MJX-TEX mjx-c[c=E016]:before{width:.778em;padding:.828em 0 .33em;content:"\E016"}.MJX-TEX mjx-c[c=E017]:before{width:.778em;padding:.752em 0 .332em;content:"\E017"}.MJX-TEX mjx-c[c=E018]:before{width:.778em;padding:.828em 0 .33em;content:"\E018"}.MJX-TEX mjx-c[c=E019]:before{width:.778em;padding:.752em 0 .333em;content:"\E019"}.MJX-TEX mjx-c[c=E01A]:before{width:.778em;padding:.634em 0 .255em;content:"\E01A"}.MJX-TEX mjx-c[c=E01B]:before{width:.778em;padding:.634em 0 .254em;content:"\E01B"}.MJX-TEX mjx-c[c="1D400"]:before{width:.869em;padding:.698em 0 0;content:"A";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D401"]:before{width:.818em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D402"]:before{width:.831em;padding:.697em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D403"]:before{width:.882em;padding:.686em 0 0;content:"D";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D404"]:before{width:.756em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D405"]:before{width:.724em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D406"]:before{width:.904em;padding:.697em 0 .01em;content:"G";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D407"]:before{width:.9em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D408"]:before{width:.436em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D409"]:before{width:.594em;padding:.686em 0 .011em;content:"J";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40A"]:before{width:.901em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40B"]:before{width:.692em;padding:.686em 0 0;content:"L";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40C"]:before{width:1.092em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40D"]:before{width:.9em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40E"]:before{width:.864em;padding:.696em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40F"]:before{width:.786em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D410"]:before{width:.864em;padding:.696em 0 .193em;content:"Q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D411"]:before{width:.862em;padding:.686em 0 .011em;content:"R";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D412"]:before{width:.639em;padding:.697em 0 .011em;content:"S";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D413"]:before{width:.8em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D414"]:before{width:.885em;padding:.686em 0 .011em;content:"U";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D415"]:before{width:.869em;padding:.686em 0 .007em;content:"V";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D416"]:before{width:1.189em;padding:.686em 0 .007em;content:"W";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D417"]:before{width:.869em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D418"]:before{width:.869em;padding:.686em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D419"]:before{width:.703em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41A"]:before{width:.559em;padding:.453em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41B"]:before{width:.639em;padding:.694em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41C"]:before{width:.511em;padding:.453em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41D"]:before{width:.639em;padding:.694em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41E"]:before{width:.527em;padding:.452em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41F"]:before{width:.351em;padding:.7em 0 0;content:"f";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D41F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D41F"]:last-child:before{width:.452em}.MJX-TEX mjx-c[c="1D420"]:before{width:.575em;padding:.455em 0 .201em;content:"g";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D421"]:before{width:.639em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D422"]:before{width:.319em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D423"]:before{width:.351em;padding:.695em 0 .2em;content:"j";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D424"]:before{width:.607em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D425"]:before{width:.319em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D426"]:before{width:.958em;padding:.45em 0 0;content:"m";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D427"]:before{width:.639em;padding:.45em 0 0;content:"n";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D428"]:before{width:.575em;padding:.452em 0 .005em;content:"o";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D429"]:before{width:.639em;padding:.45em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42A"]:before{width:.607em;padding:.45em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42B"]:before{width:.474em;padding:.45em 0 0;content:"r";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42C"]:before{width:.454em;padding:.453em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42D"]:before{width:.447em;padding:.635em 0 .005em;content:"t";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42E"]:before{width:.639em;padding:.45em 0 .006em;content:"u";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42F"]:before{width:.607em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D430"]:before{width:.831em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D431"]:before{width:.607em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D432"]:before{width:.607em;padding:.444em 0 .2em;content:"y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D433"]:before{width:.511em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D434"]:before{width:.75em;padding:.716em 0 0;content:"A";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D435"]:before{width:.759em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D436"]:before{width:.715em;padding:.705em 0 .022em;content:"C";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D437"]:before{width:.828em;padding:.683em 0 0;content:"D";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D438"]:before{width:.738em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D439"]:before{width:.643em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D439"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D439"]:last-child:before{width:.749em}.MJX-TEX mjx-c[c="1D43A"]:before{width:.786em;padding:.705em 0 .022em;content:"G";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D43B"]:before{width:.831em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43B"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D43C"]:before{width:.44em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43C"]:last-child:before{width:.504em}.MJX-TEX mjx-c[c="1D43D"]:before{width:.555em;padding:.683em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43D"]:last-child:before{width:.633em}.MJX-TEX mjx-c[c="1D43E"]:before{width:.849em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D43F"]:before{width:.681em;padding:.683em 0 0;content:"L";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D440"]:before{width:.97em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D440"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D440"]:last-child:before{width:1.051em}.MJX-TEX mjx-c[c="1D441"]:before{width:.803em;padding:.683em 0 0;content:"N";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D441"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D441"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D442"]:before{width:.763em;padding:.704em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D443"]:before{width:.642em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D443"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D443"]:last-child:before{width:.751em}.MJX-TEX mjx-c[c="1D444"]:before{width:.791em;padding:.704em 0 .194em;content:"Q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D445"]:before{width:.759em;padding:.683em 0 .021em;content:"R";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D446"]:before{width:.613em;padding:.705em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D447"]:before{width:.584em;padding:.677em 0 0;content:"T";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D447"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D447"]:last-child:before{width:.704em}.MJX-TEX mjx-c[c="1D448"]:before{width:.683em;padding:.683em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D448"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D448"]:last-child:before{width:.767em}.MJX-TEX mjx-c[c="1D449"]:before{width:.583em;padding:.683em 0 .022em;content:"V";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D449"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D449"]:last-child:before{width:.769em}.MJX-TEX mjx-c[c="1D44A"]:before{width:.944em;padding:.683em 0 .022em;content:"W";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D44A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D44A"]:last-child:before{width:1.048em}.MJX-TEX mjx-c[c="1D44B"]:before{width:.828em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44C"]:before{width:.581em;padding:.683em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D44C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D44C"]:last-child:before{width:.763em}.MJX-TEX mjx-c[c="1D44D"]:before{width:.683em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44E"]:before{width:.529em;padding:.441em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44F"]:before{width:.429em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D450"]:before{width:.433em;padding:.442em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D451"]:before{width:.52em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D452"]:before{width:.466em;padding:.442em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D453"]:before{width:.49em;padding:.705em 0 .205em;content:"f";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D453"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D453"]:last-child:before{width:.55em}.MJX-TEX mjx-c[c="1D454"]:before{width:.477em;padding:.442em 0 .205em;content:"g";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D455"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D456"]:before{width:.345em;padding:.661em 0 .011em;content:"i";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D457"]:before{width:.412em;padding:.661em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D458"]:before{width:.521em;padding:.694em 0 .011em;content:"k";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D459"]:before{width:.298em;padding:.694em 0 .011em;content:"l";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45A"]:before{width:.878em;padding:.442em 0 .011em;content:"m";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45B"]:before{width:.6em;padding:.442em 0 .011em;content:"n";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45C"]:before{width:.485em;padding:.441em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45D"]:before{width:.503em;padding:.442em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45E"]:before{width:.446em;padding:.442em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45F"]:before{width:.451em;padding:.442em 0 .011em;content:"r";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D460"]:before{width:.469em;padding:.442em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D461"]:before{width:.361em;padding:.626em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D462"]:before{width:.572em;padding:.442em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D463"]:before{width:.485em;padding:.443em 0 .011em;content:"v";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D464"]:before{width:.716em;padding:.443em 0 .011em;content:"w";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D465"]:before{width:.572em;padding:.442em 0 .011em;content:"x";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D466"]:before{width:.49em;padding:.442em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D467"]:before{width:.465em;padding:.442em 0 .011em;content:"z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D468"]:before{width:.869em;padding:.711em 0 0;content:"A";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D469"]:before{width:.866em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46A"]:before{width:.817em;padding:.703em 0 .017em;content:"C";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46B"]:before{width:.938em;padding:.686em 0 0;content:"D";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46C"]:before{width:.81em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46D"]:before{width:.689em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D46D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D46D"]:last-child:before{width:.809em}.MJX-TEX mjx-c[c="1D46E"]:before{width:.887em;padding:.703em 0 .016em;content:"G";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46F"]:before{width:.982em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D470"]:before{width:.511em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D470"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D470"]:last-child:before{width:.573em}.MJX-TEX mjx-c[c="1D471"]:before{width:.631em;padding:.686em 0 .017em;content:"J";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D471"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D471"]:last-child:before{width:.694em}.MJX-TEX mjx-c[c="1D472"]:before{width:.971em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D473"]:before{width:.756em;padding:.686em 0 0;content:"L";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D474"]:before{width:1.142em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D474"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D474"]:last-child:before{width:1.219em}.MJX-TEX mjx-c[c="1D475"]:before{width:.95em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D475"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D475"]:last-child:before{width:1.027em}.MJX-TEX mjx-c[c="1D476"]:before{width:.837em;padding:.703em 0 .017em;content:"O";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D477"]:before{width:.723em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D477"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D477"]:last-child:before{width:.847em}.MJX-TEX mjx-c[c="1D478"]:before{width:.869em;padding:.703em 0 .194em;content:"Q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D479"]:before{width:.872em;padding:.686em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D47A"]:before{width:.693em;padding:.703em 0 .017em;content:"S";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D47B"]:before{width:.637em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47B"]:last-child:before{width:.772em}.MJX-TEX mjx-c[c="1D47C"]:before{width:.8em;padding:.686em 0 .016em;content:"U";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47C"]:last-child:before{width:.877em}.MJX-TEX mjx-c[c="1D47D"]:before{width:.678em;padding:.686em 0 .016em;content:"V";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47D"]:last-child:before{width:.886em}.MJX-TEX mjx-c[c="1D47E"]:before{width:1.093em;padding:.686em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47E"]:last-child:before{width:1.207em}.MJX-TEX mjx-c[c="1D47F"]:before{width:.947em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D480"]:before{width:.675em;padding:.686em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D480"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D480"]:last-child:before{width:.876em}.MJX-TEX mjx-c[c="1D481"]:before{width:.773em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D482"]:before{width:.633em;padding:.452em 0 .008em;content:"a";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D483"]:before{width:.521em;padding:.694em 0 .008em;content:"b";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D484"]:before{width:.513em;padding:.451em 0 .008em;content:"c";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D485"]:before{width:.61em;padding:.694em 0 .008em;content:"d";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D486"]:before{width:.554em;padding:.452em 0 .008em;content:"e";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D487"]:before{width:.568em;padding:.701em 0 .201em;content:"f";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D487"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D487"]:last-child:before{width:.624em}.MJX-TEX mjx-c[c="1D488"]:before{width:.545em;padding:.452em 0 .202em;content:"g";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D489"]:before{width:.668em;padding:.694em 0 .008em;content:"h";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48A"]:before{width:.405em;padding:.694em 0 .008em;content:"i";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48B"]:before{width:.471em;padding:.694em 0 .202em;content:"j";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48C"]:before{width:.604em;padding:.694em 0 .008em;content:"k";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48D"]:before{width:.348em;padding:.694em 0 .008em;content:"l";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48E"]:before{width:1.032em;padding:.452em 0 .008em;content:"m";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48F"]:before{width:.713em;padding:.452em 0 .008em;content:"n";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D490"]:before{width:.585em;padding:.452em 0 .008em;content:"o";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D491"]:before{width:.601em;padding:.452em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D492"]:before{width:.542em;padding:.452em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D493"]:before{width:.529em;padding:.452em 0 .008em;content:"r";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D494"]:before{width:.531em;padding:.451em 0 .008em;content:"s";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D495"]:before{width:.415em;padding:.643em 0 .007em;content:"t";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D496"]:before{width:.681em;padding:.452em 0 .008em;content:"u";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D497"]:before{width:.567em;padding:.453em 0 .008em;content:"v";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D498"]:before{width:.831em;padding:.453em 0 .008em;content:"w";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D499"]:before{width:.659em;padding:.452em 0 .008em;content:"x";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49A"]:before{width:.59em;padding:.452em 0 .202em;content:"y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49B"]:before{width:.555em;padding:.452em 0 .008em;content:"z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49C"]:before{width:.803em;padding:.717em 0 .008em;content:"A";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49C"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D49D"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D49E"]:before{width:.666em;padding:.728em 0 .026em;content:"C";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49E"]:last-child:before{width:.819em}.MJX-TEX mjx-c[c="1D49F"]:before{width:.774em;padding:.708em 0 .031em;content:"D";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49F"]:last-child:before{width:.855em}.MJX-TEX mjx-c[c="1D4A0"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A0"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="1D4A1"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A1"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="1D4A2"]:before{width:.61em;padding:.717em 0 .037em;content:"G";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A2"]:last-child:before{width:.738em}.MJX-TEX mjx-c[c="1D4A3"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A3"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="1D4A4"]:before{width:.809em;padding:.717em 0 .017em;content:"I";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A4"]:last-child:before{width:.946em}.MJX-TEX mjx-c[c="1D4A5"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A5"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="1D4A6"]:before{width:.914em;padding:.717em 0 .037em;content:"K";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A6"]:last-child:before{width:1.204em}.MJX-TEX mjx-c[c="1D4A7"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A7"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="1D4A8"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A8"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="1D4A9"]:before{width:.902em;padding:.726em 0 .036em;content:"N";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A9"]:last-child:before{width:1.208em}.MJX-TEX mjx-c[c="1D4AA"]:before{width:.738em;padding:.707em 0 .008em;content:"O";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AA"]:last-child:before{width:.805em}.MJX-TEX mjx-c[c="1D4AB"]:before{width:1.013em;padding:.716em 0 .037em;content:"P";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AC"]:before{width:.883em;padding:.717em 0 .017em;content:"Q";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AD"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AE"]:before{width:.868em;padding:.708em 0 .036em;content:"S";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AE"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4AF"]:before{width:.747em;padding:.735em 0 .037em;content:"T";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AF"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AF"]:last-child:before{width:.996em}.MJX-TEX mjx-c[c="1D4B0"]:before{width:.8em;padding:.717em 0 .017em;content:"U";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B0"]:last-child:before{width:.96em}.MJX-TEX mjx-c[c="1D4B1"]:before{width:.622em;padding:.717em 0 .017em;content:"V";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B1"]:last-child:before{width:.85em}.MJX-TEX mjx-c[c="1D4B2"]:before{width:.805em;padding:.717em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B2"]:last-child:before{width:1.026em}.MJX-TEX mjx-c[c="1D4B3"]:before{width:.944em;padding:.717em 0 .017em;content:"X";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B3"]:last-child:before{width:1.131em}.MJX-TEX mjx-c[c="1D4B4"]:before{width:.71em;padding:.716em 0 .017em;content:"Y";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B4"]:last-child:before{width:.959em}.MJX-TEX mjx-c[c="1D4B5"]:before{width:.821em;padding:.717em 0 .016em;content:"Z";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B5"]:last-child:before{width:1.032em}.MJX-TEX mjx-c[c="1D4B6"]:before{width:.529em;padding:.441em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B7"]:before{width:.429em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B8"]:before{width:.433em;padding:.442em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B9"]:before{width:.52em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BA"]:before{width:.466em;padding:.442em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BB"]:before{width:.49em;padding:.705em 0 .205em;content:"f";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4BB"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4BB"]:last-child:before{width:.55em}.MJX-TEX mjx-c[c="1D4BC"]:before{width:.477em;padding:.442em 0 .205em;content:"g";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BD"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BE"]:before{width:.345em;padding:.661em 0 .011em;content:"i";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BF"]:before{width:.412em;padding:.661em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C0"]:before{width:.521em;padding:.694em 0 .011em;content:"k";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C1"]:before{width:.298em;padding:.694em 0 .011em;content:"l";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C2"]:before{width:.878em;padding:.442em 0 .011em;content:"m";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C3"]:before{width:.6em;padding:.442em 0 .011em;content:"n";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C4"]:before{width:.485em;padding:.441em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C5"]:before{width:.503em;padding:.442em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C6"]:before{width:.446em;padding:.442em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C7"]:before{width:.451em;padding:.442em 0 .011em;content:"r";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C8"]:before{width:.469em;padding:.442em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C9"]:before{width:.361em;padding:.626em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CA"]:before{width:.572em;padding:.442em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CB"]:before{width:.485em;padding:.443em 0 .011em;content:"v";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CC"]:before{width:.716em;padding:.443em 0 .011em;content:"w";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CD"]:before{width:.572em;padding:.442em 0 .011em;content:"x";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CE"]:before{width:.49em;padding:.442em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CF"]:before{width:.465em;padding:.442em 0 .011em;content:"z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4D0"]:before{width:.803em;padding:.717em 0 .008em;content:"A";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D0"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4D1"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4D2"]:before{width:.666em;padding:.728em 0 .026em;content:"C";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D2"]:last-child:before{width:.819em}.MJX-TEX mjx-c[c="1D4D3"]:before{width:.774em;padding:.708em 0 .031em;content:"D";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D3"]:last-child:before{width:.855em}.MJX-TEX mjx-c[c="1D4D4"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D4"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="1D4D5"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D5"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="1D4D6"]:before{width:.61em;padding:.717em 0 .037em;content:"G";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D6"]:last-child:before{width:.738em}.MJX-TEX mjx-c[c="1D4D7"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D7"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="1D4D8"]:before{width:.809em;padding:.717em 0 .017em;content:"I";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D8"]:last-child:before{width:.946em}.MJX-TEX mjx-c[c="1D4D9"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D9"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="1D4DA"]:before{width:.914em;padding:.717em 0 .037em;content:"K";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DA"]:last-child:before{width:1.204em}.MJX-TEX mjx-c[c="1D4DB"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DB"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DB"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="1D4DC"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DC"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="1D4DD"]:before{width:.902em;padding:.726em 0 .036em;content:"N";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DD"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DD"]:last-child:before{width:1.208em}.MJX-TEX mjx-c[c="1D4DE"]:before{width:.738em;padding:.707em 0 .008em;content:"O";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DE"]:last-child:before{width:.805em}.MJX-TEX mjx-c[c="1D4DF"]:before{width:1.013em;padding:.716em 0 .037em;content:"P";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E0"]:before{width:.883em;padding:.717em 0 .017em;content:"Q";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E1"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E2"]:before{width:.868em;padding:.708em 0 .036em;content:"S";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E2"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4E3"]:before{width:.747em;padding:.735em 0 .037em;content:"T";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E3"]:last-child:before{width:.996em}.MJX-TEX mjx-c[c="1D4E4"]:before{width:.8em;padding:.717em 0 .017em;content:"U";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E4"]:last-child:before{width:.96em}.MJX-TEX mjx-c[c="1D4E5"]:before{width:.622em;padding:.717em 0 .017em;content:"V";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E5"]:last-child:before{width:.85em}.MJX-TEX mjx-c[c="1D4E6"]:before{width:.805em;padding:.717em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E6"]:last-child:before{width:1.026em}.MJX-TEX mjx-c[c="1D4E7"]:before{width:.944em;padding:.717em 0 .017em;content:"X";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E7"]:last-child:before{width:1.131em}.MJX-TEX mjx-c[c="1D4E8"]:before{width:.71em;padding:.716em 0 .017em;content:"Y";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E8"]:last-child:before{width:.959em}.MJX-TEX mjx-c[c="1D4E9"]:before{width:.821em;padding:.717em 0 .016em;content:"Z";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E9"]:last-child:before{width:1.032em}.MJX-TEX mjx-c[c="1D4EA"]:before{width:.633em;padding:.452em 0 .008em;content:"a";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EB"]:before{width:.521em;padding:.694em 0 .008em;content:"b";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EC"]:before{width:.513em;padding:.451em 0 .008em;content:"c";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4ED"]:before{width:.61em;padding:.694em 0 .008em;content:"d";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EE"]:before{width:.554em;padding:.452em 0 .008em;content:"e";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EF"]:before{width:.568em;padding:.701em 0 .201em;content:"f";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4EF"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4EF"]:last-child:before{width:.624em}.MJX-TEX mjx-c[c="1D4F0"]:before{width:.545em;padding:.452em 0 .202em;content:"g";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F1"]:before{width:.668em;padding:.694em 0 .008em;content:"h";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F2"]:before{width:.405em;padding:.694em 0 .008em;content:"i";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F3"]:before{width:.471em;padding:.694em 0 .202em;content:"j";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F4"]:before{width:.604em;padding:.694em 0 .008em;content:"k";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F5"]:before{width:.348em;padding:.694em 0 .008em;content:"l";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F6"]:before{width:1.032em;padding:.452em 0 .008em;content:"m";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F7"]:before{width:.713em;padding:.452em 0 .008em;content:"n";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F8"]:before{width:.585em;padding:.452em 0 .008em;content:"o";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F9"]:before{width:.601em;padding:.452em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FA"]:before{width:.542em;padding:.452em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FB"]:before{width:.529em;padding:.452em 0 .008em;content:"r";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FC"]:before{width:.531em;padding:.451em 0 .008em;content:"s";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FD"]:before{width:.415em;padding:.643em 0 .007em;content:"t";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FE"]:before{width:.681em;padding:.452em 0 .008em;content:"u";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FF"]:before{width:.567em;padding:.453em 0 .008em;content:"v";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D500"]:before{width:.831em;padding:.453em 0 .008em;content:"w";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D501"]:before{width:.659em;padding:.452em 0 .008em;content:"x";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D502"]:before{width:.59em;padding:.452em 0 .202em;content:"y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D503"]:before{width:.555em;padding:.452em 0 .008em;content:"z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D504"]:before{width:.718em;padding:.696em 0 .026em;content:"A";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D505"]:before{width:.884em;padding:.691em 0 .027em;content:"B";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D506"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D507"]:before{width:.832em;padding:.685em 0 .027em;content:"D";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D508"]:before{width:.663em;padding:.685em 0 .024em;content:"E";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D509"]:before{width:.611em;padding:.686em 0 .153em;content:"F";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50A"]:before{width:.785em;padding:.69em 0 .026em;content:"G";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50B"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50C"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50D"]:before{width:.552em;padding:.686em 0 .139em;content:"J";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50E"]:before{width:.668em;padding:.68em 0 .027em;content:"K";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50F"]:before{width:.666em;padding:.686em 0 .026em;content:"L";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D510"]:before{width:1.05em;padding:.692em 0 .027em;content:"M";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D511"]:before{width:.832em;padding:.686em 0 .025em;content:"N";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D512"]:before{width:.827em;padding:.729em 0 .027em;content:"O";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D513"]:before{width:.828em;padding:.692em 0 .218em;content:"P";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D514"]:before{width:.827em;padding:.729em 0 .069em;content:"Q";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D515"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D516"]:before{width:.829em;padding:.692em 0 .027em;content:"S";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D517"]:before{width:.669em;padding:.701em 0 .027em;content:"T";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D518"]:before{width:.646em;padding:.697em 0 .027em;content:"U";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D519"]:before{width:.831em;padding:.686em 0 .026em;content:"V";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51A"]:before{width:1.046em;padding:.686em 0 .027em;content:"W";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51B"]:before{width:.719em;padding:.688em 0 .027em;content:"X";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51C"]:before{width:.833em;padding:.686em 0 .218em;content:"Y";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51D"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51E"]:before{width:.5em;padding:.47em 0 .035em;content:"a";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51F"]:before{width:.513em;padding:.685em 0 .031em;content:"b";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D520"]:before{width:.389em;padding:.466em 0 .029em;content:"c";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D521"]:before{width:.499em;padding:.609em 0 .033em;content:"d";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D522"]:before{width:.401em;padding:.467em 0 .03em;content:"e";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D523"]:before{width:.326em;padding:.681em 0 .221em;content:"f";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D524"]:before{width:.504em;padding:.47em 0 .209em;content:"g";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D525"]:before{width:.521em;padding:.688em 0 .205em;content:"h";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D526"]:before{width:.279em;padding:.673em 0 .02em;content:"i";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D527"]:before{width:.281em;padding:.672em 0 .208em;content:"j";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D528"]:before{width:.389em;padding:.689em 0 .025em;content:"k";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D529"]:before{width:.28em;padding:.685em 0 .02em;content:"l";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52A"]:before{width:.767em;padding:.475em 0 .026em;content:"m";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52B"]:before{width:.527em;padding:.475em 0 .022em;content:"n";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52C"]:before{width:.489em;padding:.48em 0 .028em;content:"o";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52D"]:before{width:.5em;padding:.541em 0 .212em;content:"p";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52E"]:before{width:.489em;padding:.479em 0 .219em;content:"q";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52F"]:before{width:.389em;padding:.474em 0 .021em;content:"r";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D530"]:before{width:.443em;padding:.478em 0 .029em;content:"s";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D531"]:before{width:.333em;padding:.64em 0 .02em;content:"t";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D532"]:before{width:.517em;padding:.474em 0 .023em;content:"u";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D533"]:before{width:.512em;padding:.53em 0 .028em;content:"v";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D534"]:before{width:.774em;padding:.532em 0 .028em;content:"w";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D535"]:before{width:.389em;padding:.472em 0 .188em;content:"x";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D536"]:before{width:.499em;padding:.528em 0 .218em;content:"y";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D537"]:before{width:.391em;padding:.471em 0 .214em;content:"z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D538"]:before{width:.722em;padding:.701em 0 0;content:"A";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D539"]:before{width:.667em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53A"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53B"]:before{width:.722em;padding:.683em 0 0;content:"D";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53C"]:before{width:.667em;padding:.683em 0 0;content:"E";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53D"]:before{width:.611em;padding:.683em 0 0;content:"F";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53E"]:before{width:.778em;padding:.702em 0 .019em;content:"G";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53F"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D540"]:before{width:.389em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D541"]:before{width:.5em;padding:.683em 0 .077em;content:"J";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D542"]:before{width:.778em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D543"]:before{width:.667em;padding:.683em 0 0;content:"L";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D544"]:before{width:.944em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D545"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D546"]:before{width:.778em;padding:.701em 0 .019em;content:"O";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D547"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D548"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D549"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54A"]:before{width:.556em;padding:.702em 0 .012em;content:"S";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54B"]:before{width:.667em;padding:.683em 0 0;content:"T";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54C"]:before{width:.722em;padding:.683em 0 .019em;content:"U";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54D"]:before{width:.722em;padding:.683em 0 .02em;content:"V";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54E"]:before{width:1em;padding:.683em 0 .019em;content:"W";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54F"]:before{width:.722em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D550"]:before{width:.722em;padding:.683em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D551"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D552"]:before{width:.559em;padding:.453em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D553"]:before{width:.639em;padding:.694em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D554"]:before{width:.511em;padding:.453em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D555"]:before{width:.639em;padding:.694em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D556"]:before{width:.527em;padding:.452em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D557"]:before{width:.351em;padding:.7em 0 0;content:"f";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D557"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D557"]:last-child:before{width:.452em}.MJX-TEX mjx-c[c="1D558"]:before{width:.575em;padding:.455em 0 .201em;content:"g";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D559"]:before{width:.639em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55A"]:before{width:.319em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55B"]:before{width:.351em;padding:.695em 0 .2em;content:"j";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55C"]:before{width:.556em;padding:.683em 0 0;content:"k";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D55D"]:before{width:.319em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55E"]:before{width:.958em;padding:.45em 0 0;content:"m";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55F"]:before{width:.639em;padding:.45em 0 0;content:"n";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D560"]:before{width:.575em;padding:.452em 0 .005em;content:"o";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D561"]:before{width:.639em;padding:.45em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D562"]:before{width:.607em;padding:.45em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D563"]:before{width:.474em;padding:.45em 0 0;content:"r";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D564"]:before{width:.454em;padding:.453em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D565"]:before{width:.447em;padding:.635em 0 .005em;content:"t";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D566"]:before{width:.639em;padding:.45em 0 .006em;content:"u";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D567"]:before{width:.607em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D568"]:before{width:.831em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D569"]:before{width:.607em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56A"]:before{width:.607em;padding:.444em 0 .2em;content:"y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56B"]:before{width:.511em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56C"]:before{width:.847em;padding:.686em 0 .031em;content:"A";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56D"]:before{width:1.044em;padding:.684em 0 .031em;content:"B";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56E"]:before{width:.723em;padding:.676em 0 .032em;content:"C";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56F"]:before{width:.982em;padding:.683em 0 .029em;content:"D";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D570"]:before{width:.783em;padding:.686em 0 .029em;content:"E";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D571"]:before{width:.722em;padding:.684em 0 .146em;content:"F";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D572"]:before{width:.927em;padding:.687em 0 .029em;content:"G";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D573"]:before{width:.851em;padding:.683em 0 .126em;content:"H";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D574"]:before{width:.655em;padding:.681em 0 .025em;content:"I";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D575"]:before{width:.652em;padding:.68em 0 .141em;content:"J";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D576"]:before{width:.789em;padding:.681em 0 .026em;content:"K";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D577"]:before{width:.786em;padding:.683em 0 .028em;content:"L";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D578"]:before{width:1.239em;padding:.683em 0 .032em;content:"M";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D579"]:before{width:.983em;padding:.679em 0 .03em;content:"N";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57A"]:before{width:.976em;padding:.726em 0 .03em;content:"O";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57B"]:before{width:.977em;padding:.688em 0 .223em;content:"P";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57C"]:before{width:.976em;padding:.726em 0 .083em;content:"Q";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57D"]:before{width:.978em;padding:.688em 0 .028em;content:"R";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57E"]:before{width:.978em;padding:.685em 0 .031em;content:"S";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57F"]:before{width:.79em;padding:.686em 0 .03em;content:"T";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D580"]:before{width:.851em;padding:.688em 0 .039em;content:"U";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D581"]:before{width:.982em;padding:.685em 0 .029em;content:"V";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D582"]:before{width:1.235em;padding:.683em 0 .03em;content:"W";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D583"]:before{width:.849em;padding:.681em 0 .035em;content:"X";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D584"]:before{width:.984em;padding:.688em 0 .214em;content:"Y";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D585"]:before{width:.711em;padding:.677em 0 .148em;content:"Z";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D586"]:before{width:.603em;padding:.472em 0 .032em;content:"a";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D587"]:before{width:.59em;padding:.69em 0 .032em;content:"b";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D588"]:before{width:.464em;padding:.473em 0 .026em;content:"c";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D589"]:before{width:.589em;padding:.632em 0 .028em;content:"d";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58A"]:before{width:.472em;padding:.471em 0 .027em;content:"e";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58B"]:before{width:.388em;padding:.687em 0 .222em;content:"f";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58C"]:before{width:.595em;padding:.472em 0 .208em;content:"g";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58D"]:before{width:.615em;padding:.687em 0 .207em;content:"h";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58E"]:before{width:.331em;padding:.686em 0 .025em;content:"i";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58F"]:before{width:.332em;padding:.682em 0 .203em;content:"j";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D590"]:before{width:.464em;padding:.682em 0 .025em;content:"k";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D591"]:before{width:.337em;padding:.681em 0 .024em;content:"l";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D592"]:before{width:.921em;padding:.476em 0 .031em;content:"m";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D593"]:before{width:.654em;padding:.473em 0 .028em;content:"n";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D594"]:before{width:.609em;padding:.482em 0 .034em;content:"o";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D595"]:before{width:.604em;padding:.557em 0 .207em;content:"p";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D596"]:before{width:.596em;padding:.485em 0 .211em;content:"q";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D597"]:before{width:.46em;padding:.472em 0 .026em;content:"r";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D598"]:before{width:.523em;padding:.479em 0 .034em;content:"s";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D599"]:before{width:.393em;padding:.648em 0 .027em;content:"t";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59A"]:before{width:.589em;padding:.472em 0 .032em;content:"u";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59B"]:before{width:.604em;padding:.546em 0 .027em;content:"v";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59C"]:before{width:.918em;padding:.549em 0 .032em;content:"w";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59D"]:before{width:.459em;padding:.471em 0 .188em;content:"x";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59E"]:before{width:.589em;padding:.557em 0 .221em;content:"y";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59F"]:before{width:.461em;padding:.471em 0 .214em;content:"z";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D5A0"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A1"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A2"]:before{width:.639em;padding:.705em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A3"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A4"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A5"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A6"]:before{width:.667em;padding:.704em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A7"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A8"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A9"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AA"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AB"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AC"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AD"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AE"]:before{width:.736em;padding:.715em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AF"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B0"]:before{width:.736em;padding:.715em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B1"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B2"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B3"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B4"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B5"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B6"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B7"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B8"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B9"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BA"]:before{width:.481em;padding:.46em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BB"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BC"]:before{width:.444em;padding:.46em 0 .01em;content:"c";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BD"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BE"]:before{width:.444em;padding:.461em 0 .01em;content:"e";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BF"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C0"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C1"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C2"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C3"]:before{width:.267em;padding:.68em 0 .205em;content:"j";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C4"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C5"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C6"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C7"]:before{width:.517em;padding:.455em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C8"]:before{width:.5em;padding:.46em 0 .01em;content:"o";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C9"]:before{content:"p"}.MJX-TEX mjx-c[c="1D5C9"]:before,.MJX-TEX mjx-c[c="1D5CA"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CA"]:before{content:"q"}.MJX-TEX mjx-c[c="1D5CB"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CC"]:before{width:.383em;padding:.46em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CD"]:before{width:.361em;padding:.571em 0 .01em;content:"t";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CE"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CF"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D0"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D1"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D2"]:before{width:.461em;padding:.444em 0 .204em;content:"y";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D3"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D4"]:before{width:.733em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D5"]:before{width:.733em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D6"]:before{width:.703em;padding:.704em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D7"]:before{width:.794em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D8"]:before{width:.642em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D9"]:before{width:.611em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DA"]:before{width:.733em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DB"]:before{width:.794em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DC"]:before{width:.331em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DD"]:before{width:.519em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DE"]:before{width:.764em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DF"]:before{width:.581em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E0"]:before{width:.978em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E1"]:before{width:.794em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E2"]:before{width:.794em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E3"]:before{width:.703em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E4"]:before{width:.794em;padding:.716em 0 .106em;content:"Q";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E5"]:before{width:.703em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E6"]:before{width:.611em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E7"]:before{width:.733em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E8"]:before{width:.764em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E9"]:before{width:.733em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EA"]:before{width:1.039em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EB"]:before{width:.733em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EC"]:before{width:.733em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5ED"]:before{width:.672em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EE"]:before{width:.525em;padding:.475em 0 .011em;content:"a";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EF"]:before{width:.561em;padding:.694em 0 .01em;content:"b";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F0"]:before{width:.489em;padding:.475em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F1"]:before{width:.561em;padding:.694em 0 .011em;content:"d";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F2"]:before{width:.511em;padding:.474em 0 .01em;content:"e";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F3"]:before{width:.336em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F4"]:before{width:.55em;padding:.469em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F5"]:before{width:.561em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F6"]:before{width:.256em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F7"]:before{width:.286em;padding:.695em 0 .205em;content:"j";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F8"]:before{width:.531em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F9"]:before{width:.256em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FA"]:before{width:.867em;padding:.469em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FB"]:before{width:.561em;padding:.468em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FC"]:before{width:.55em;padding:.474em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FD"]:before{content:"p"}.MJX-TEX mjx-c[c="1D5FD"]:before,.MJX-TEX mjx-c[c="1D5FE"]:before{width:.561em;padding:.469em 0 .194em;font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FE"]:before{content:"q"}.MJX-TEX mjx-c[c="1D5FF"]:before{width:.372em;padding:.469em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D600"]:before{width:.422em;padding:.474em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D601"]:before{width:.404em;padding:.589em 0 .01em;content:"t";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D602"]:before{width:.561em;padding:.458em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D603"]:before{width:.5em;padding:.458em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D604"]:before{width:.744em;padding:.458em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D605"]:before{width:.5em;padding:.458em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D606"]:before{width:.5em;padding:.458em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D607"]:before{width:.476em;padding:.458em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D608"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D609"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D60A"]:before{width:.639em;padding:.705em 0 .01em;content:"C";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60A"]:last-child:before{width:.719em}.MJX-TEX mjx-c[c="1D60B"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D60C"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60C"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D60D"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60D"]:last-child:before{width:.673em}.MJX-TEX mjx-c[c="1D60E"]:before{width:.667em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60E"]:last-child:before{width:.73em}.MJX-TEX mjx-c[c="1D60F"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60F"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D610"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D610"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D610"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D611"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D611"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D611"]:last-child:before{width:.535em}.MJX-TEX mjx-c[c="1D612"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D612"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D612"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D613"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D614"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D614"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D614"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D615"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D615"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D615"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D616"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D617"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D617"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D617"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D618"]:before{width:.736em;padding:.716em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D619"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D619"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D619"]:last-child:before{width:.698em}.MJX-TEX mjx-c[c="1D61A"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61A"]:last-child:before{width:.609em}.MJX-TEX mjx-c[c="1D61B"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61B"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D61C"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61C"]:last-child:before{width:.747em}.MJX-TEX mjx-c[c="1D61D"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61D"]:last-child:before{width:.799em}.MJX-TEX mjx-c[c="1D61E"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61E"]:last-child:before{width:1.076em}.MJX-TEX mjx-c[c="1D61F"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61F"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D620"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D620"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D620"]:last-child:before{width:.81em}.MJX-TEX mjx-c[c="1D621"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D621"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D621"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D622"]:before{width:.481em;padding:.461em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D623"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D624"]:before{width:.444em;padding:.46em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D624"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D624"]:last-child:before{width:.499em}.MJX-TEX mjx-c[c="1D625"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D625"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D625"]:last-child:before{width:.588em}.MJX-TEX mjx-c[c="1D626"]:before{width:.444em;padding:.46em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D627"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D627"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D627"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D628"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D628"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D628"]:last-child:before{width:.568em}.MJX-TEX mjx-c[c="1D629"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D62A"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62A"]:last-child:before{width:.315em}.MJX-TEX mjx-c[c="1D62B"]:before{width:.267em;padding:.68em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62B"]:last-child:before{width:.336em}.MJX-TEX mjx-c[c="1D62C"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62C"]:last-child:before{width:.543em}.MJX-TEX mjx-c[c="1D62D"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62D"]:last-child:before{width:.311em}.MJX-TEX mjx-c[c="1D62E"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D62F"]:before{width:.517em;padding:.454em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D630"]:before{width:.5em;padding:.461em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D631"]:before{content:"p"}.MJX-TEX mjx-c[c="1D631"]:before,.MJX-TEX mjx-c[c="1D632"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D632"]:before{content:"q"}.MJX-TEX mjx-c[c="1D633"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D633"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D633"]:last-child:before{width:.424em}.MJX-TEX mjx-c[c="1D634"]:before{width:.383em;padding:.461em 0 .011em;content:"s";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D634"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D634"]:last-child:before{width:.436em}.MJX-TEX mjx-c[c="1D635"]:before{width:.361em;padding:.571em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D636"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D637"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D637"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D637"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D638"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D638"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D638"]:last-child:before{width:.762em}.MJX-TEX mjx-c[c="1D639"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D639"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D639"]:last-child:before{width:.537em}.MJX-TEX mjx-c[c="1D63A"]:before{width:.461em;padding:.444em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63A"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D63B"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63B"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D63C"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D63D"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D63E"]:before{width:.639em;padding:.705em 0 .01em;content:"C";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63E"]:last-child:before{width:.719em}.MJX-TEX mjx-c[c="1D63F"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D640"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D640"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D640"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D641"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D641"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D641"]:last-child:before{width:.673em}.MJX-TEX mjx-c[c="1D642"]:before{width:.667em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D642"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D642"]:last-child:before{width:.73em}.MJX-TEX mjx-c[c="1D643"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D643"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D643"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D644"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D644"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D644"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D645"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D645"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D645"]:last-child:before{width:.535em}.MJX-TEX mjx-c[c="1D646"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D646"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D646"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D647"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D648"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D648"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D648"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D649"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D649"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D649"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D64A"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D64B"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64B"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D64C"]:before{width:.736em;padding:.716em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D64D"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64D"]:last-child:before{width:.698em}.MJX-TEX mjx-c[c="1D64E"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64E"]:last-child:before{width:.609em}.MJX-TEX mjx-c[c="1D64F"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64F"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D650"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D650"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D650"]:last-child:before{width:.747em}.MJX-TEX mjx-c[c="1D651"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D651"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D651"]:last-child:before{width:.799em}.MJX-TEX mjx-c[c="1D652"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D652"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D652"]:last-child:before{width:1.076em}.MJX-TEX mjx-c[c="1D653"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D653"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D653"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D654"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D654"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D654"]:last-child:before{width:.81em}.MJX-TEX mjx-c[c="1D655"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D655"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D655"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D656"]:before{width:.481em;padding:.461em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D657"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D658"]:before{width:.444em;padding:.46em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D658"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D658"]:last-child:before{width:.499em}.MJX-TEX mjx-c[c="1D659"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D659"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D659"]:last-child:before{width:.588em}.MJX-TEX mjx-c[c="1D65A"]:before{width:.444em;padding:.46em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D65B"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65B"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D65C"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65C"]:last-child:before{width:.568em}.MJX-TEX mjx-c[c="1D65D"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D65E"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65E"]:last-child:before{width:.315em}.MJX-TEX mjx-c[c="1D65F"]:before{width:.267em;padding:.68em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65F"]:last-child:before{width:.336em}.MJX-TEX mjx-c[c="1D660"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D660"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D660"]:last-child:before{width:.543em}.MJX-TEX mjx-c[c="1D661"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D661"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D661"]:last-child:before{width:.311em}.MJX-TEX mjx-c[c="1D662"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D663"]:before{width:.517em;padding:.454em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D664"]:before{width:.5em;padding:.461em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D665"]:before{content:"p"}.MJX-TEX mjx-c[c="1D665"]:before,.MJX-TEX mjx-c[c="1D666"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D666"]:before{content:"q"}.MJX-TEX mjx-c[c="1D667"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D667"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D667"]:last-child:before{width:.424em}.MJX-TEX mjx-c[c="1D668"]:before{width:.383em;padding:.461em 0 .011em;content:"s";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D668"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D668"]:last-child:before{width:.436em}.MJX-TEX mjx-c[c="1D669"]:before{width:.361em;padding:.571em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D66A"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D66B"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66B"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D66C"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66C"]:last-child:before{width:.762em}.MJX-TEX mjx-c[c="1D66D"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66D"]:last-child:before{width:.537em}.MJX-TEX mjx-c[c="1D66E"]:before{width:.461em;padding:.444em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66E"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D66F"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66F"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D670"]:before{width:.525em;padding:.623em 0 0;content:"A";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D671"]:before{width:.525em;padding:.611em 0 0;content:"B";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D672"]:before{width:.525em;padding:.622em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D673"]:before{width:.525em;padding:.611em 0 0;content:"D";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D674"]:before{width:.525em;padding:.611em 0 0;content:"E";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D675"]:before{width:.525em;padding:.611em 0 0;content:"F";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D676"]:before{width:.525em;padding:.622em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D677"]:before{width:.525em;padding:.611em 0 0;content:"H";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D678"]:before{width:.525em;padding:.611em 0 0;content:"I";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D679"]:before{width:.525em;padding:.611em 0 .011em;content:"J";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67A"]:before{width:.525em;padding:.611em 0 0;content:"K";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67B"]:before{width:.525em;padding:.611em 0 0;content:"L";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67C"]:before{width:.525em;padding:.611em 0 0;content:"M";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67D"]:before{width:.525em;padding:.611em 0 0;content:"N";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67E"]:before{width:.525em;padding:.621em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67F"]:before{width:.525em;padding:.611em 0 0;content:"P";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D680"]:before{width:.525em;padding:.621em 0 .138em;content:"Q";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D681"]:before{width:.525em;padding:.611em 0 .011em;content:"R";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D682"]:before{width:.525em;padding:.622em 0 .011em;content:"S";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D683"]:before{width:.525em;padding:.611em 0 0;content:"T";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D684"]:before{width:.525em;padding:.611em 0 .011em;content:"U";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D685"]:before{width:.525em;padding:.611em 0 .007em;content:"V";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D686"]:before{width:.525em;padding:.611em 0 .007em;content:"W";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D687"]:before{width:.525em;padding:.611em 0 0;content:"X";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D688"]:before{width:.525em;padding:.611em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D689"]:before{width:.525em;padding:.611em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68A"]:before{width:.525em;padding:.439em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68B"]:before{width:.525em;padding:.611em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68C"]:before{width:.525em;padding:.44em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68D"]:before{width:.525em;padding:.611em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68E"]:before{width:.525em;padding:.44em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68F"]:before{width:.525em;padding:.617em 0 0;content:"f";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D690"]:before{width:.525em;padding:.442em 0 .229em;content:"g";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D691"]:before{width:.525em;padding:.611em 0 0;content:"h";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D692"]:before{width:.525em;padding:.612em 0 0;content:"i";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D693"]:before{width:.525em;padding:.612em 0 .228em;content:"j";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D694"]:before{width:.525em;padding:.611em 0 0;content:"k";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D695"]:before{width:.525em;padding:.611em 0 0;content:"l";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D696"]:before{width:.525em;padding:.436em 0 0;content:"m";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D697"]:before{width:.525em;padding:.436em 0 0;content:"n";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D698"]:before{width:.525em;padding:.44em 0 .006em;content:"o";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D699"]:before{width:.525em;padding:.437em 0 .221em;content:"p";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69A"]:before{width:.525em;padding:.437em 0 .221em;content:"q";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69B"]:before{width:.525em;padding:.437em 0 0;content:"r";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69C"]:before{width:.525em;padding:.44em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69D"]:before{width:.525em;padding:.554em 0 .006em;content:"t";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69E"]:before{width:.525em;padding:.431em 0 .005em;content:"u";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69F"]:before{width:.525em;padding:.431em 0 0;content:"v";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A0"]:before{width:.525em;padding:.431em 0 0;content:"w";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A1"]:before{width:.525em;padding:.431em 0 0;content:"x";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A2"]:before{width:.525em;padding:.431em 0 .228em;content:"y";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A3"]:before{width:.525em;padding:.431em 0 0;content:"z";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A4"]:before{width:.307em;padding:.441em 0 .01em;content:"\131";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c="1D6A5"]:before{width:.332em;padding:.442em 0 .204em;content:"\237";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c="1D6A8"]:before{width:.869em;padding:.698em 0 0;content:"A";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6A9"]:before{width:.818em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AA"]:before{width:.692em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AB"]:before{width:.958em;padding:.698em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AC"]:before{width:.756em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AD"]:before{width:.703em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AE"]:before{width:.9em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AF"]:before{width:.894em;padding:.696em 0 .01em;content:"\398";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B0"]:before{width:.436em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B1"]:before{width:.901em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B2"]:before{width:.806em;padding:.698em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B3"]:before{width:1.092em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B4"]:before{width:.9em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B5"]:before{width:.767em;padding:.675em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B6"]:before{width:.864em;padding:.696em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B7"]:before{width:.9em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B8"]:before{width:.786em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B9"]:before{width:.894em;padding:.696em 0 .01em;content:"\398";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BA"]:before{width:.831em;padding:.686em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BB"]:before{width:.8em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BC"]:before{width:.894em;padding:.697em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BD"]:before{width:.831em;padding:.686em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BE"]:before{width:.869em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BF"]:before{width:.894em;padding:.686em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C0"]:before{width:.831em;padding:.696em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C1"]:before{width:.958em;padding:.686em 0 .024em;content:"\2207";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C2"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C3"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C4"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C5"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C6"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C7"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C8"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C9"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CA"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CB"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CC"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CD"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CE"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CF"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D0"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D1"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D2"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D3"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D4"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D5"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6D5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6D5"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D6D6"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D7"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D8"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D9"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DA"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DB"]:before{width:.628em;padding:.71em 0 .017em;content:"\2202";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DC"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DD"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DE"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6DE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6DE"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D6DF"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E0"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E1"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E2"]:before{width:.75em;padding:.716em 0 0;content:"A";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E3"]:before{width:.759em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E4"]:before{width:.615em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6E4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6E4"]:last-child:before{width:.721em}.MJX-TEX mjx-c[c="1D6E5"]:before{width:.833em;padding:.716em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E6"]:before{width:.738em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E7"]:before{width:.683em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E8"]:before{width:.831em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6E8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6E8"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D6E9"]:before{width:.763em;padding:.704em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6EA"]:before{width:.44em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6EA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6EA"]:last-child:before{width:.504em}.MJX-TEX mjx-c[c="1D6EB"]:before{width:.849em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6EC"]:before{width:.694em;padding:.716em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6ED"]:before{width:.97em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6ED"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6ED"]:last-child:before{width:1.051em}.MJX-TEX mjx-c[c="1D6EE"]:before{width:.803em;padding:.683em 0 0;content:"N";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6EE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6EE"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D6EF"]:before{width:.742em;padding:.677em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F0"]:before{width:.763em;padding:.704em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F1"]:before{width:.831em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F1"]:last-child:before{width:.887em}.MJX-TEX mjx-c[c="1D6F2"]:before{width:.642em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F2"]:last-child:before{width:.751em}.MJX-TEX mjx-c[c="1D6F3"]:before{width:.763em;padding:.704em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F4"]:before{width:.78em;padding:.683em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F5"]:before{width:.584em;padding:.677em 0 0;content:"T";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F5"]:last-child:before{width:.704em}.MJX-TEX mjx-c[c="1D6F6"]:before{width:.583em;padding:.705em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F6"]:last-child:before{width:.7em}.MJX-TEX mjx-c[c="1D6F7"]:before{width:.667em;padding:.683em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F8"]:before{width:.828em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F9"]:before{width:.612em;padding:.683em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F9"]:last-child:before{width:.692em}.MJX-TEX mjx-c[c="1D6FA"]:before{width:.772em;padding:.704em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FB"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D6FC"]:before{width:.64em;padding:.442em 0 .011em;content:"\3B1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FD"]:before{width:.566em;padding:.705em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FE"]:before{width:.518em;padding:.441em 0 .216em;content:"\3B3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FF"]:before{width:.444em;padding:.717em 0 .01em;content:"\3B4";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D700"]:before{width:.466em;padding:.452em 0 .022em;content:"\3B5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D701"]:before{width:.438em;padding:.704em 0 .204em;content:"\3B6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D702"]:before{width:.497em;padding:.442em 0 .216em;content:"\3B7";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D703"]:before{width:.469em;padding:.705em 0 .01em;content:"\3B8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D704"]:before{width:.354em;padding:.442em 0 .01em;content:"\3B9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D705"]:before{width:.576em;padding:.442em 0 .011em;content:"\3BA";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D706"]:before{width:.583em;padding:.694em 0 .012em;content:"\3BB";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D707"]:before{width:.603em;padding:.442em 0 .216em;content:"\3BC";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D708"]:before{width:.494em;padding:.442em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D709"]:before{width:.438em;padding:.704em 0 .205em;content:"\3BE";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70A"]:before{width:.485em;padding:.441em 0 .011em;content:"\3BF";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70B"]:before{width:.57em;padding:.431em 0 .011em;content:"\3C0";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70C"]:before{width:.517em;padding:.442em 0 .216em;content:"\3C1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70D"]:before{width:.363em;padding:.442em 0 .107em;content:"\3C2";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70E"]:before{width:.571em;padding:.431em 0 .011em;content:"\3C3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70F"]:before{width:.437em;padding:.431em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D70F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D70F"]:last-child:before{width:.517em}.MJX-TEX mjx-c[c="1D710"]:before{width:.54em;padding:.443em 0 .01em;content:"\3C5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D711"]:before{width:.654em;padding:.442em 0 .218em;content:"\3C6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D712"]:before{width:.626em;padding:.442em 0 .204em;content:"\3C7";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D713"]:before{width:.651em;padding:.694em 0 .205em;content:"\3C8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D714"]:before{width:.622em;padding:.443em 0 .011em;content:"\3C9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D715"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D716"]:before{width:.406em;padding:.431em 0 .011em;content:"\3F5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D717"]:before{width:.591em;padding:.705em 0 .011em;content:"\3D1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D718"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D718"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D718"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D719"]:before{width:.596em;padding:.694em 0 .205em;content:"\3D5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71A"]:before{width:.517em;padding:.442em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71B"]:before{width:.828em;padding:.431em 0 .01em;content:"\3D6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71C"]:before{width:.869em;padding:.711em 0 0;content:"A";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D71D"]:before{width:.866em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D71E"]:before{width:.657em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D71E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D71E"]:last-child:before{width:.777em}.MJX-TEX mjx-c[c="1D71F"]:before{width:.958em;padding:.711em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D720"]:before{width:.81em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D721"]:before{width:.773em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D722"]:before{width:.982em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D723"]:before{width:.867em;padding:.702em 0 .017em;content:"\398";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D724"]:before{width:.511em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D724"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D724"]:last-child:before{width:.573em}.MJX-TEX mjx-c[c="1D725"]:before{width:.971em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D726"]:before{width:.806em;padding:.711em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D727"]:before{width:1.142em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D727"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D727"]:last-child:before{width:1.219em}.MJX-TEX mjx-c[c="1D728"]:before{width:.95em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D728"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D728"]:last-child:before{width:1.027em}.MJX-TEX mjx-c[c="1D729"]:before{width:.841em;padding:.675em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72A"]:before{width:.837em;padding:.703em 0 .017em;content:"O";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72B"]:before{width:.982em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72C"]:before{width:.723em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D72C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D72C"]:last-child:before{width:.847em}.MJX-TEX mjx-c[c="1D72D"]:before{width:.867em;padding:.702em 0 .017em;content:"\398";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72E"]:before{width:.885em;padding:.686em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72F"]:before{width:.637em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D72F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D72F"]:last-child:before{width:.772em}.MJX-TEX mjx-c[c="1D730"]:before{width:.671em;padding:.703em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D730"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D730"]:last-child:before{width:.802em}.MJX-TEX mjx-c[c="1D731"]:before{width:.767em;padding:.686em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D732"]:before{width:.947em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D733"]:before{width:.714em;padding:.686em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D733"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D733"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D734"]:before{width:.879em;padding:.703em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D735"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D736"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D737"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D738"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D739"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73A"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73B"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73C"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73D"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73E"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73F"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D740"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D741"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D742"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D743"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D744"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D745"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D746"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D747"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D748"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D749"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D749"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D749"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D74A"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74B"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74C"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74D"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74E"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74F"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D750"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D751"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D752"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D752"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D752"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D753"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D754"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D755"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D756"]:before{width:.733em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D757"]:before{width:.733em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D758"]:before{width:.581em;padding:.691em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D759"]:before{width:.917em;padding:.694em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75A"]:before{width:.642em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75B"]:before{width:.672em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75C"]:before{width:.794em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75D"]:before{width:.856em;padding:.716em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75E"]:before{width:.331em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75F"]:before{width:.764em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D760"]:before{width:.672em;padding:.694em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D761"]:before{width:.978em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D762"]:before{width:.794em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D763"]:before{width:.733em;padding:.688em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D764"]:before{width:.794em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D765"]:before{width:.794em;padding:.691em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D766"]:before{width:.703em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D767"]:before{width:.856em;padding:.716em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D768"]:before{width:.794em;padding:.694em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D769"]:before{width:.733em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76A"]:before{width:.856em;padding:.715em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76B"]:before{width:.794em;padding:.694em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76C"]:before{width:.733em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76D"]:before{width:.856em;padding:.694em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76E"]:before{width:.794em;padding:.716em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76F"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D770"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D771"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D772"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D773"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D774"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D775"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D776"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D777"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D778"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D779"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77A"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77B"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77C"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77D"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77E"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77F"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D780"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D781"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D782"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D783"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D783"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D783"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D784"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D785"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D786"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D787"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D788"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D789"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D78A"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78B"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78C"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D78C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D78C"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D78D"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78E"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78F"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D790"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D791"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D792"]:before{width:.542em;padding:.691em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D792"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D792"]:last-child:before{width:.646em}.MJX-TEX mjx-c[c="1D793"]:before{width:.833em;padding:.694em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D794"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D794"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D794"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D795"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D795"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D795"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D796"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D796"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D796"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D797"]:before{width:.778em;padding:.715em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D798"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D798"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D798"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D799"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D799"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D799"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D79A"]:before{width:.611em;padding:.694em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D79B"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79B"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D79C"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79C"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D79D"]:before{width:.667em;padding:.688em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79D"]:last-child:before{width:.765em}.MJX-TEX mjx-c[c="1D79E"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D79F"]:before{width:.708em;padding:.691em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79F"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D7A0"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A0"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D7A1"]:before{width:.778em;padding:.715em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A2"]:before{width:.722em;padding:.694em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A2"]:last-child:before{width:.813em}.MJX-TEX mjx-c[c="1D7A3"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A3"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D7A4"]:before{width:.778em;padding:.716em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A4"]:last-child:before{width:.843em}.MJX-TEX mjx-c[c="1D7A5"]:before{width:.722em;padding:.694em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A6"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A6"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D7A7"]:before{width:.778em;padding:.694em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A7"]:last-child:before{width:.854em}.MJX-TEX mjx-c[c="1D7A8"]:before{width:.722em;padding:.716em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A9"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D7AA"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AB"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AC"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AD"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AE"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AF"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B0"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B1"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B2"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B3"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B4"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B5"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B6"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B7"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B8"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B9"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BA"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BB"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BC"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BD"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7BD"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7BD"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D7BE"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BF"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C0"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C1"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C2"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C3"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D7C4"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C5"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C6"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7C6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7C6"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D7C7"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C8"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C9"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7CA"]:before{width:.643em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7CA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7CA"]:last-child:before{width:.749em}.MJX-TEX mjx-c[c="1D7CB"]:before{width:.778em;padding:.605em 0 .085em;content:"\3DD";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D7CE"]:before{width:.575em;padding:.654em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7CF"]:before{width:.575em;padding:.655em 0 0;content:"1";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D0"]:before{width:.575em;padding:.654em 0 0;content:"2";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D1"]:before{width:.575em;padding:.655em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D2"]:before{width:.575em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D3"]:before{width:.575em;padding:.655em 0 .011em;content:"5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D4"]:before{width:.575em;padding:.655em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D5"]:before{width:.575em;padding:.676em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D6"]:before{width:.575em;padding:.654em 0 .011em;content:"8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D7"]:before{width:.575em;padding:.654em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D8"]:before{width:.575em;padding:.654em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D9"]:before{width:.575em;padding:.655em 0 0;content:"1";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DA"]:before{width:.575em;padding:.654em 0 0;content:"2";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DB"]:before{width:.575em;padding:.655em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DC"]:before{width:.575em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DD"]:before{width:.575em;padding:.655em 0 .011em;content:"5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DE"]:before{width:.575em;padding:.655em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DF"]:before{width:.575em;padding:.676em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E0"]:before{width:.575em;padding:.654em 0 .011em;content:"8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E1"]:before{width:.575em;padding:.654em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E2"]:before{width:.5em;padding:.678em 0 .022em;content:"0";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E3"]:before{width:.5em;padding:.678em 0 0;content:"1";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E4"]:before{width:.5em;padding:.677em 0 0;content:"2";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E5"]:before{width:.5em;padding:.678em 0 .022em;content:"3";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E6"]:before{width:.5em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E7"]:before{width:.5em;padding:.656em 0 .021em;content:"5";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E8"]:before{width:.5em;padding:.677em 0 .022em;content:"6";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E9"]:before{width:.5em;padding:.656em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EA"]:before{width:.5em;padding:.678em 0 .022em;content:"8";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EB"]:before{width:.5em;padding:.677em 0 .022em;content:"9";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EC"]:before{width:.55em;padding:.715em 0 .022em;content:"0";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7ED"]:before{width:.55em;padding:.716em 0 0;content:"1";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7EE"]:before{width:.55em;padding:.716em 0 0;content:"2";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7EF"]:before{width:.55em;padding:.716em 0 .022em;content:"3";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F0"]:before{width:.55em;padding:.694em 0 0;content:"4";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F1"]:before{width:.55em;padding:.694em 0 .022em;content:"5";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F2"]:before{width:.55em;padding:.716em 0 .022em;content:"6";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F3"]:before{width:.55em;padding:.695em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F4"]:before{width:.55em;padding:.715em 0 .022em;content:"8";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F5"]:before{width:.55em;padding:.716em 0 .022em;content:"9";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F6"]:before{width:.525em;padding:.621em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F7"]:before{width:.525em;padding:.622em 0 0;content:"1";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F8"]:before{width:.525em;padding:.622em 0 0;content:"2";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F9"]:before{width:.525em;padding:.622em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FA"]:before{width:.525em;padding:.624em 0 0;content:"4";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FB"]:before{width:.525em;padding:.611em 0 .01em;content:"5";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FC"]:before{width:.525em;padding:.622em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FD"]:before{width:.525em;padding:.627em 0 .01em;content:"7";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FE"]:before{width:.525em;padding:.621em 0 .01em;content:"8";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FF"]:before{width:.525em;padding:.622em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-T}.MJX-TEX .mjx-b mjx-c[c="!"]:before{width:.35em;padding:.705em 0 0}.MJX-TEX .mjx-b mjx-c[c="22"]:before{width:.603em}.MJX-TEX .mjx-b mjx-c[c="#"]:before{width:.958em}.MJX-TEX .mjx-b mjx-c[c="$"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="%"]:before{width:.958em}.MJX-TEX .mjx-b mjx-c[c="&"]:before{width:.894em;padding:.705em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="27"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-b mjx-c[c=")"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="*"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="+"]:before{width:.894em;padding:.633em 0 .131em}.MJX-TEX .mjx-b mjx-c[c=","]:before{width:.319em;padding:.171em 0 .194em}.MJX-TEX .mjx-b mjx-c[c="-"]:before{width:.383em;padding:.278em 0 0}.MJX-TEX .mjx-b mjx-c[c="."]:before{width:.319em;padding:.171em 0 0}.MJX-TEX .mjx-b mjx-c[c="/"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="0"]:before{width:.575em;padding:.654em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="1"]:before{width:.575em;padding:.655em 0 0}.MJX-TEX .mjx-b mjx-c[c="2"]:before{width:.575em;padding:.654em 0 0}.MJX-TEX .mjx-b mjx-c[c="3"]:before{width:.575em;padding:.655em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="4"]:before{width:.575em;padding:.656em 0 0}.MJX-TEX .mjx-b mjx-c[c="5"]:before,.MJX-TEX .mjx-b mjx-c[c="6"]:before{width:.575em;padding:.655em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="7"]:before{width:.575em;padding:.676em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="8"]:before,.MJX-TEX .mjx-b mjx-c[c="9"]:before{width:.575em;padding:.654em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=":"]:before{width:.319em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=";"]:before{width:.319em;padding:.444em 0 .194em}.MJX-TEX .mjx-b mjx-c[c="<"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="="]:before{width:.894em;padding:.393em 0 0}.MJX-TEX .mjx-b mjx-c[c=">"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="?"]:before{width:.543em;padding:.7em 0 0}.MJX-TEX .mjx-b mjx-c[c="@"]:before{width:.894em;padding:.699em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=A]:before{width:.869em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c=B]:before{width:.818em}.MJX-TEX .mjx-b mjx-c[c=C]:before{width:.831em;padding:.697em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=D]:before{width:.882em}.MJX-TEX .mjx-b mjx-c[c=E]:before{width:.756em}.MJX-TEX .mjx-b mjx-c[c=F]:before{width:.724em}.MJX-TEX .mjx-b mjx-c[c=G]:before{width:.904em;padding:.697em 0 .01em}.MJX-TEX .mjx-b mjx-c[c=H]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c=I]:before{width:.436em}.MJX-TEX .mjx-b mjx-c[c=J]:before{width:.594em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=K]:before{width:.901em}.MJX-TEX .mjx-b mjx-c[c=L]:before{width:.692em}.MJX-TEX .mjx-b mjx-c[c=M]:before{width:1.092em}.MJX-TEX .mjx-b mjx-c[c=N]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c=O]:before{width:.864em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c=P]:before{width:.786em}.MJX-TEX .mjx-b mjx-c[c=Q]:before{width:.864em;padding:.696em 0 .193em}.MJX-TEX .mjx-b mjx-c[c=R]:before{width:.862em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=S]:before{width:.639em;padding:.697em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=T]:before{width:.8em}.MJX-TEX .mjx-b mjx-c[c=U]:before{width:.885em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=V]:before{width:.869em;padding:.686em 0 .007em}.MJX-TEX .mjx-b mjx-c[c=W]:before{width:1.189em;padding:.686em 0 .007em}.MJX-TEX .mjx-b mjx-c[c=X]:before,.MJX-TEX .mjx-b mjx-c[c=Y]:before{width:.869em}.MJX-TEX .mjx-b mjx-c[c=Z]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="["]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="5C"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="]"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="^"]:before,.MJX-TEX .mjx-b mjx-c[c=_]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="`"]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c=a]:before{width:.559em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=b]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=c]:before{width:.511em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=d]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=e]:before{width:.527em}.MJX-TEX .mjx-b mjx-c[c=f]:before{width:.351em;padding:.7em 0 0}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c=f]:last-child:before{width:.452em}.MJX-TEX .mjx-b mjx-c[c=g]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c=h]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=i]:before{width:.319em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c=j]:before{width:.351em;padding:.695em 0 .2em}.MJX-TEX .mjx-b mjx-c[c=k]:before{width:.607em}.MJX-TEX .mjx-b mjx-c[c=l]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c=m]:before{width:.958em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=n]:before{width:.639em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=o]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c=p]:before{width:.639em;padding:.45em 0 .194em}.MJX-TEX .mjx-b mjx-c[c=q]:before{width:.607em;padding:.45em 0 .194em}.MJX-TEX .mjx-b mjx-c[c=r]:before{width:.474em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=s]:before{width:.454em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=t]:before{width:.447em;padding:.635em 0 .005em}.MJX-TEX .mjx-b mjx-c[c=u]:before{width:.639em;padding:.45em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=v]:before{width:.607em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=w]:before{width:.831em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=x]:before{width:.607em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=y]:before{width:.607em;padding:.444em 0 .2em}.MJX-TEX .mjx-b mjx-c[c=z]:before{width:.511em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c="{"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="|"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="}"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="~"]:before{width:.575em;padding:.344em 0 0}.MJX-TEX .mjx-b mjx-c[c=A8]:before{width:.575em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c=AC]:before{width:.767em;padding:.371em 0 0}.MJX-TEX .mjx-b mjx-c[c=AF]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c=B0]:before{width:.575em;padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c=B1]:before{width:.894em;padding:.728em 0 .035em}.MJX-TEX .mjx-b mjx-c[c=B4]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c=B7]:before{width:.319em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c=D7]:before{width:.894em;padding:.53em 0 .028em}.MJX-TEX .mjx-b mjx-c[c=F7]:before{width:.894em;padding:.597em 0 .096em}.MJX-TEX .mjx-b mjx-c[c="131"]:before{width:.394em;padding:.452em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="237"]:before{width:.439em;padding:.451em 0 .201em}.MJX-TEX .mjx-b mjx-c[c="2B9"]:before{width:.344em}.MJX-TEX .mjx-b mjx-c[c="2C6"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2C7"]:before{width:.575em;padding:.66em 0 0}.MJX-TEX .mjx-b mjx-c[c="2C9"]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="2CA"]:before,.MJX-TEX .mjx-b mjx-c[c="2CB"]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c="2D8"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2D9"]:before{width:.575em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c="2DA"]:before{width:.575em;padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c="2DC"]:before{width:.575em;padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="300"]:before,.MJX-TEX .mjx-b mjx-c[c="301"]:before{padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c="303"]:before{padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="304"]:before{padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="307"]:before,.MJX-TEX .mjx-b mjx-c[c="308"]:before{padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c="30A"]:before{padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c="30B"]:before{padding:.714em 0 0}.MJX-TEX .mjx-b mjx-c[c="30C"]:before{padding:.66em 0 0}.MJX-TEX .mjx-b mjx-c[c="338"]:before{padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="391"]:before{width:.869em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="392"]:before{width:.818em}.MJX-TEX .mjx-b mjx-c[c="393"]:before{width:.692em}.MJX-TEX .mjx-b mjx-c[c="394"]:before{width:.958em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="395"]:before{width:.756em}.MJX-TEX .mjx-b mjx-c[c="396"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="397"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="398"]:before{width:.894em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="399"]:before{width:.436em}.MJX-TEX .mjx-b mjx-c[c="39A"]:before{width:.901em}.MJX-TEX .mjx-b mjx-c[c="39B"]:before{width:.806em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="39C"]:before{width:1.092em}.MJX-TEX .mjx-b mjx-c[c="39D"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="39E"]:before{width:.767em}.MJX-TEX .mjx-b mjx-c[c="39F"]:before{width:.864em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="3A0"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="3A1"]:before{width:.786em}.MJX-TEX .mjx-b mjx-c[c="3A2"]:before{width:.894em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="3A3"]:before{width:.831em}.MJX-TEX .mjx-b mjx-c[c="3A4"]:before{width:.8em}.MJX-TEX .mjx-b mjx-c[c="3A5"]:before{width:.894em;padding:.697em 0 0}.MJX-TEX .mjx-b mjx-c[c="3A6"]:before{width:.831em}.MJX-TEX .mjx-b mjx-c[c="3A7"]:before{width:.869em}.MJX-TEX .mjx-b mjx-c[c="3A8"]:before{width:.894em}.MJX-TEX .mjx-b mjx-c[c="3A9"]:before{width:.831em;padding:.696em 0 0}.MJX-TEX .mjx-b mjx-c[c="3B1"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1"}.MJX-TEX .mjx-b mjx-c[c="3B2"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2"}.MJX-TEX .mjx-b mjx-c[c="3B3"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3"}.MJX-TEX .mjx-b mjx-c[c="3B4"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4"}.MJX-TEX .mjx-b mjx-c[c="3B5"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5"}.MJX-TEX .mjx-b mjx-c[c="3B6"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6"}.MJX-TEX .mjx-b mjx-c[c="3B7"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7"}.MJX-TEX .mjx-b mjx-c[c="3B8"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8"}.MJX-TEX .mjx-b mjx-c[c="3B9"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9"}.MJX-TEX .mjx-b mjx-c[c="3BA"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA"}.MJX-TEX .mjx-b mjx-c[c="3BB"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB"}.MJX-TEX .mjx-b mjx-c[c="3BC"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC"}.MJX-TEX .mjx-b mjx-c[c="3BD"]:before{width:.577em;padding:.452em 0 0;content:"\3BD"}.MJX-TEX .mjx-b mjx-c[c="3BE"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE"}.MJX-TEX .mjx-b mjx-c[c="3BF"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF"}.MJX-TEX .mjx-b mjx-c[c="3C0"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0"}.MJX-TEX .mjx-b mjx-c[c="3C1"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1"}.MJX-TEX .mjx-b mjx-c[c="3C2"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2"}.MJX-TEX .mjx-b mjx-c[c="3C3"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3"}.MJX-TEX .mjx-b mjx-c[c="3C4"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-b mjx-c[c="3C5"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5"}.MJX-TEX .mjx-b mjx-c[c="3C6"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6"}.MJX-TEX .mjx-b mjx-c[c="3C7"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7"}.MJX-TEX .mjx-b mjx-c[c="3C8"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8"}.MJX-TEX .mjx-b mjx-c[c="3C9"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9"}.MJX-TEX .mjx-b mjx-c[c="3D1"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1"}.MJX-TEX .mjx-b mjx-c[c="3D2"]:before{width:.894em;padding:.697em 0 0}.MJX-TEX .mjx-b mjx-c[c="3D5"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5"}.MJX-TEX .mjx-b mjx-c[c="3D6"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6"}.MJX-TEX .mjx-b mjx-c[c="3DC"]:before{width:.724em}.MJX-TEX .mjx-b mjx-c[c="3F1"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1"}.MJX-TEX .mjx-b mjx-c[c="3F5"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5"}.MJX-TEX .mjx-b mjx-c[c="2003"]:before{width:.999em}.MJX-TEX .mjx-b mjx-c[c="200A"]:before{width:.083em}.MJX-TEX .mjx-b mjx-c[c="2013"]:before{width:.575em;padding:.3em 0 0}.MJX-TEX .mjx-b mjx-c[c="2014"]:before,.MJX-TEX .mjx-b mjx-c[c="2015"]:before{width:1.15em;padding:.3em 0 0}.MJX-TEX .mjx-b mjx-c[c="2016"]:before,.MJX-TEX .mjx-b mjx-c[c="2017"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-b mjx-c[c="2019"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="201C"]:before,.MJX-TEX .mjx-b mjx-c[c="201D"]:before{width:.603em}.MJX-TEX .mjx-b mjx-c[c="2020"]:before{width:.511em;padding:.702em 0 .211em}.MJX-TEX .mjx-b mjx-c[c="2021"]:before{width:.511em}.MJX-TEX .mjx-b mjx-c[c="2022"]:before{width:.575em;padding:.474em 0 0}.MJX-TEX .mjx-b mjx-c[c="2026"]:before{width:1.295em;padding:.171em 0 0}.MJX-TEX .mjx-b mjx-c[c="2032"]:before{width:.344em}.MJX-TEX .mjx-b mjx-c[c="2033"]:before{width:.688em}.MJX-TEX .mjx-b mjx-c[c="2034"]:before{width:1.032em}.MJX-TEX .mjx-b mjx-c[c="203E"]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="2044"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2057"]:before{width:1.376em}.MJX-TEX .mjx-b mjx-c[c="20D7"]:before{width:.575em;padding:.723em 0 0;font-family:MJXZERO,MJXTEX-VB}.MJX-TEX .mjx-b mjx-c[c="210F"]:before{width:.668em}.MJX-TEX .mjx-b mjx-c[c="2113"]:before{width:.474em}.MJX-TEX .mjx-b mjx-c[c="2118"]:before{width:.74em;padding:.461em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2135"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="2190"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2191"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2192"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2193"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2194"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2195"]:before{width:.575em;padding:.767em 0 .267em}.MJX-TEX .mjx-b mjx-c[c="2196"]:before,.MJX-TEX .mjx-b mjx-c[c="2197"]:before,.MJX-TEX .mjx-b mjx-c[c="2198"]:before,.MJX-TEX .mjx-b mjx-c[c="2199"]:before{width:1.15em}.MJX-TEX .mjx-b mjx-c[c="219A"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2190\338"}.MJX-TEX .mjx-b mjx-c[c="219B"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2192\338"}.MJX-TEX .mjx-b mjx-c[c="21A6"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21A9"]:before,.MJX-TEX .mjx-b mjx-c[c="21AA"]:before{width:1.282em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21AE"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2194\338"}.MJX-TEX .mjx-b mjx-c[c="21BC"]:before{width:1.15em;padding:.518em 0 0}.MJX-TEX .mjx-b mjx-c[c="21BD"]:before{width:1.15em;padding:.281em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21C0"]:before{width:1.15em;padding:.518em 0 0}.MJX-TEX .mjx-b mjx-c[c="21C1"]:before{width:1.15em;padding:.281em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21CC"]:before{width:1.15em;padding:.718em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21CD"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D0\338"}.MJX-TEX .mjx-b mjx-c[c="21CE"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D4\338"}.MJX-TEX .mjx-b mjx-c[c="21CF"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D2\338"}.MJX-TEX .mjx-b mjx-c[c="21D0"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D1"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="21D2"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D3"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="21D4"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D5"]:before{width:.703em;padding:.767em 0 .267em}.MJX-TEX .mjx-b mjx-c[c="2200"]:before{width:.639em;padding:.694em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2202"]:before{width:.628em;padding:.71em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2203"]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c="2204"]:before{width:.639em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2205"]:before{width:.575em;padding:.767em 0 .073em}.MJX-TEX .mjx-b mjx-c[c="2206"]:before{width:.958em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="2207"]:before{width:.958em;padding:.686em 0 .024em}.MJX-TEX .mjx-b mjx-c[c="2208"]:before{width:.767em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2209"]:before{width:.767em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="220B"]:before{width:.767em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="220C"]:before{width:.767em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2212"]:before{width:.894em;padding:.281em 0 0}.MJX-TEX .mjx-b mjx-c[c="2213"]:before{width:.894em;padding:.537em 0 .227em}.MJX-TEX .mjx-b mjx-c[c="2215"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2216"]:before{width:.575em;padding:.75em 0 .25em}.MJX-TEX .mjx-b mjx-c[c="2217"]:before{width:.575em;padding:.472em 0 0}.MJX-TEX .mjx-b mjx-c[c="2218"]:before,.MJX-TEX .mjx-b mjx-c[c="2219"]:before{width:.575em;padding:.474em 0 0}.MJX-TEX .mjx-b mjx-c[c="221A"]:before{width:.958em;padding:.82em 0 .18em}.MJX-TEX .mjx-b mjx-c[c="221D"]:before{width:.894em;padding:.451em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="221E"]:before{width:1.15em;padding:.452em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="2220"]:before{padding:.714em 0 0}.MJX-TEX .mjx-b mjx-c[c="2223"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="2224"]:before{width:.319em;content:"\2223\338"}.MJX-TEX .mjx-b mjx-c[c="2225"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2226"]:before{width:.575em;content:"\2225\338"}.MJX-TEX .mjx-b mjx-c[c="2227"]:before{width:.767em;padding:.604em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2228"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2229"]:before{width:.767em;padding:.603em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="222A"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="222B"]:before{width:.569em;padding:.711em 0 .211em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c="222B"]:last-child:before{width:.632em}.MJX-TEX .mjx-b mjx-c[c="223C"]:before{width:.894em;padding:.391em 0 0}.MJX-TEX .mjx-b mjx-c[c="2240"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="2241"]:before{width:.894em;padding:.711em 0 .21em;content:"\223C\338"}.MJX-TEX .mjx-b mjx-c[c="2243"]:before{width:.894em;padding:.502em 0 0}.MJX-TEX .mjx-b mjx-c[c="2244"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2245"]:before{width:.894em;padding:.638em 0 .027em}.MJX-TEX .mjx-b mjx-c[c="2247"]:before{width:.894em;padding:.711em 0 .21em;content:"\2245\338"}.MJX-TEX .mjx-b mjx-c[c="2248"]:before{width:.894em;padding:.524em 0 0}.MJX-TEX .mjx-b mjx-c[c="2249"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="224D"]:before{width:.894em;padding:.533em 0 .032em}.MJX-TEX .mjx-b mjx-c[c="2250"]:before{width:.894em;padding:.721em 0 0}.MJX-TEX .mjx-b mjx-c[c="2260"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2261"]:before{width:.894em;padding:.505em 0 0}.MJX-TEX .mjx-b mjx-c[c="2262"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2264"]:before,.MJX-TEX .mjx-b mjx-c[c="2265"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="226A"]:before{width:1.15em;padding:.617em 0 .116em}.MJX-TEX .mjx-b mjx-c[c="226B"]:before{width:1.15em;padding:.618em 0 .116em}.MJX-TEX .mjx-b mjx-c[c="226D"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="226E"]:before{width:.894em;content:"<\338"}.MJX-TEX .mjx-b mjx-c[c="226F"]:before{width:.894em;content:">\338"}.MJX-TEX .mjx-b mjx-c[c="2270"]:before{width:.894em;padding:.711em 0 .21em;content:"\2264\338"}.MJX-TEX .mjx-b mjx-c[c="2271"]:before{width:.894em;padding:.711em 0 .21em;content:"\2265\338"}.MJX-TEX .mjx-b mjx-c[c="227A"]:before{width:.894em;padding:.585em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="227B"]:before{width:.894em;padding:.586em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2280"]:before{width:.894em;padding:.711em 0 .21em;content:"\227A\338"}.MJX-TEX .mjx-b mjx-c[c="2281"]:before{width:.894em;padding:.711em 0 .21em;content:"\227B\338"}.MJX-TEX .mjx-b mjx-c[c="2282"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="2283"]:before{width:.894em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2284"]:before,.MJX-TEX .mjx-b mjx-c[c="2285"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2286"]:before,.MJX-TEX .mjx-b mjx-c[c="2287"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2288"]:before{width:.894em;padding:.711em 0 .21em;content:"\2286\338"}.MJX-TEX .mjx-b mjx-c[c="2289"]:before{width:.894em;padding:.711em 0 .21em;content:"\2287\338"}.MJX-TEX .mjx-b mjx-c[c="228E"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2291"]:before,.MJX-TEX .mjx-b mjx-c[c="2292"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2293"]:before,.MJX-TEX .mjx-b mjx-c[c="2294"]:before{width:.767em;padding:.604em 0 0}.MJX-TEX .mjx-b mjx-c[c="2295"]:before,.MJX-TEX .mjx-b mjx-c[c="2296"]:before,.MJX-TEX .mjx-b mjx-c[c="2297"]:before,.MJX-TEX .mjx-b mjx-c[c="2298"]:before,.MJX-TEX .mjx-b mjx-c[c="2299"]:before{width:.894em;padding:.632em 0 .132em}.MJX-TEX .mjx-b mjx-c[c="22A2"]:before,.MJX-TEX .mjx-b mjx-c[c="22A3"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="22A4"]:before{width:.894em;padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="22A5"]:before{width:.894em;padding:.693em 0 0}.MJX-TEX .mjx-b mjx-c[c="22A8"]:before{width:.974em}.MJX-TEX .mjx-b mjx-c[c="22AC"]:before{width:.703em;padding:.711em 0 .21em;content:"\22A2\338"}.MJX-TEX .mjx-b mjx-c[c="22AD"]:before{width:.974em;padding:.75em 0 .249em;content:"\22A8\338"}.MJX-TEX .mjx-b mjx-c[c="22C4"]:before{width:.575em;padding:.523em 0 .021em}.MJX-TEX .mjx-b mjx-c[c="22C5"]:before{width:.319em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c="22C6"]:before{width:.575em;padding:.502em 0 0}.MJX-TEX .mjx-b mjx-c[c="22C8"]:before{width:1em;padding:.54em 0 .039em}.MJX-TEX .mjx-b mjx-c[c="22E2"]:before,.MJX-TEX .mjx-b mjx-c[c="22E3"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="22EE"]:before{width:.319em;padding:.951em 0 .029em}.MJX-TEX .mjx-b mjx-c[c="22EF"]:before{width:1.295em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c="22F1"]:before{width:1.323em;padding:.871em 0 0}.MJX-TEX .mjx-b mjx-c[c="230A"]:before,.MJX-TEX .mjx-b mjx-c[c="230B"]:before,.MJX-TEX .mjx-b mjx-c[c="2308"]:before,.MJX-TEX .mjx-b mjx-c[c="2309"]:before{width:.511em}.MJX-TEX .mjx-b mjx-c[c="2322"]:before{width:1.15em;padding:.405em 0 0}.MJX-TEX .mjx-b mjx-c[c="2323"]:before{width:1.15em;padding:.392em 0 0}.MJX-TEX .mjx-b mjx-c[c="232A"]:before,.MJX-TEX .mjx-b mjx-c[c="2329"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="25B3"]:before,.MJX-TEX .mjx-b mjx-c[c="25B5"]:before{width:1.022em;padding:.711em 0 0}.MJX-TEX .mjx-b mjx-c[c="25B9"]:before{width:.575em;padding:.54em 0 .039em}.MJX-TEX .mjx-b mjx-c[c="25BD"]:before,.MJX-TEX .mjx-b mjx-c[c="25BF"]:before{width:1.022em;padding:.5em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="25C3"]:before{width:.575em;padding:.539em 0 .038em}.MJX-TEX .mjx-b mjx-c[c="25EF"]:before{width:1.15em}.MJX-TEX .mjx-b mjx-c[c="2660"]:before{width:.894em;padding:.719em 0 .129em}.MJX-TEX .mjx-b mjx-c[c="2661"]:before{width:.894em;padding:.711em 0 .024em}.MJX-TEX .mjx-b mjx-c[c="2662"]:before{width:.894em;padding:.719em 0 .154em}.MJX-TEX .mjx-b mjx-c[c="2663"]:before{width:.894em;padding:.719em 0 .129em}.MJX-TEX .mjx-b mjx-c[c="266D"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="266E"]:before{width:.447em;padding:.741em 0 .223em}.MJX-TEX .mjx-b mjx-c[c="266F"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="2758"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="27E8"]:before,.MJX-TEX .mjx-b mjx-c[c="27E9"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="27F5"]:before{width:1.805em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F6"]:before{width:1.833em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F7"]:before{width:2.126em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F8"]:before{width:1.868em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27F9"]:before{width:1.87em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27FA"]:before{width:2.126em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27FC"]:before{width:1.833em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="29F8"]:before{width:.894em;padding:.711em 0 .21em;font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-b mjx-c[c="2A2F"]:before{width:.894em;padding:.53em 0 .028em}.MJX-TEX .mjx-b mjx-c[c="2A3F"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="2AAF"]:before{width:.894em;padding:.696em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2AB0"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="3008"]:before,.MJX-TEX .mjx-b mjx-c[c="3009"]:before{width:.447em}.MJX-TEX .mjx-i mjx-c[c="!"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="!"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="!"]:last-child:before{width:.38em}.MJX-TEX .mjx-i mjx-c[c="22"]:before{width:.514em}.MJX-TEX .mjx-i mjx-c[c="#"]:before,.MJX-TEX .mjx-i mjx-c[c="%"]:before{width:.818em}.MJX-TEX .mjx-i mjx-c[c="&"]:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c="27"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="27"]:last-child:before{width:.377em}.MJX-TEX .mjx-i mjx-c[c="("]:before{width:.409em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="("]:last-child:before{width:.517em}.MJX-TEX .mjx-i mjx-c[c=")"]:before{width:.409em}.MJX-TEX .mjx-i mjx-c[c="*"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="*"]:last-child:before{width:.584em}.MJX-TEX .mjx-i mjx-c[c="+"]:before{width:.767em;padding:.557em 0 .057em}.MJX-TEX .mjx-i mjx-c[c=","]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="-"]:before{width:.358em}.MJX-TEX .mjx-i mjx-c[c="."]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="/"]:before{width:.778em;padding:.716em 0 .215em}.MJX-TEX .mjx-i mjx-c[c="0"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="0"]:last-child:before{width:.562em}.MJX-TEX .mjx-i mjx-c[c="1"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2"]:before{width:.511em;padding:.666em 0 .022em}.MJX-TEX .mjx-i mjx-c[c="3"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3"]:last-child:before{width:.562em}.MJX-TEX .mjx-i mjx-c[c="4"]:before{width:.511em;padding:.666em 0 .194em}.MJX-TEX .mjx-i mjx-c[c="5"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="5"]:last-child:before{width:.567em}.MJX-TEX .mjx-i mjx-c[c="6"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="6"]:last-child:before{width:.565em}.MJX-TEX .mjx-i mjx-c[c="7"]:before{width:.511em;padding:.666em 0 .022em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="7"]:last-child:before{width:.634em}.MJX-TEX .mjx-i mjx-c[c="8"]:before,.MJX-TEX .mjx-i mjx-c[c="9"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c=":"]:before,.MJX-TEX .mjx-i mjx-c[c=";"]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="="]:before{width:.767em;padding:.367em 0 0}.MJX-TEX .mjx-i mjx-c[c="?"]:before{width:.511em;padding:.716em 0 0}.MJX-TEX .mjx-i mjx-c[c="@"]:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c=B]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c=C]:before{width:.715em}.MJX-TEX .mjx-i mjx-c[c=D]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c=E]:before{width:.738em}.MJX-TEX .mjx-i mjx-c[c=F]:before{width:.643em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=F]:last-child:before{width:.749em}.MJX-TEX .mjx-i mjx-c[c=G]:before{width:.786em}.MJX-TEX .mjx-i mjx-c[c=H]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=H]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c=I]:before{width:.44em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=I]:last-child:before{width:.504em}.MJX-TEX .mjx-i mjx-c[c=J]:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=J]:last-child:before{width:.633em}.MJX-TEX .mjx-i mjx-c[c=K]:before{width:.849em}.MJX-TEX .mjx-i mjx-c[c=L]:before{width:.681em}.MJX-TEX .mjx-i mjx-c[c=M]:before{width:.97em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=M]:last-child:before{width:1.051em}.MJX-TEX .mjx-i mjx-c[c=N]:before{width:.803em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=N]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c=O]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c=P]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=P]:last-child:before{width:.751em}.MJX-TEX .mjx-i mjx-c[c=Q]:before{width:.791em}.MJX-TEX .mjx-i mjx-c[c=R]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c=S]:before{width:.613em}.MJX-TEX .mjx-i mjx-c[c=T]:before{width:.584em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=T]:last-child:before{width:.704em}.MJX-TEX .mjx-i mjx-c[c=U]:before{width:.683em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=U]:last-child:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c=V]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=V]:last-child:before{width:.769em}.MJX-TEX .mjx-i mjx-c[c=W]:before{width:.944em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=W]:last-child:before{width:1.048em}.MJX-TEX .mjx-i mjx-c[c=X]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c=Y]:before{width:.581em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=Y]:last-child:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c=Z]:before{width:.683em}.MJX-TEX .mjx-i mjx-c[c="["]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="["]:last-child:before{width:.446em}.MJX-TEX .mjx-i mjx-c[c="]"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="]"]:last-child:before{width:.359em}.MJX-TEX .mjx-i mjx-c[c="^"]:before,.MJX-TEX .mjx-i mjx-c[c=_]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c=a]:before{width:.529em;padding:.441em 0 .01em}.MJX-TEX .mjx-i mjx-c[c=b]:before{width:.429em}.MJX-TEX .mjx-i mjx-c[c=c]:before{width:.433em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=d]:before{width:.52em}.MJX-TEX .mjx-i mjx-c[c=e]:before{width:.466em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=f]:before{width:.49em;padding:.705em 0 .205em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=f]:last-child:before{width:.55em}.MJX-TEX .mjx-i mjx-c[c=g]:before{width:.477em;padding:.442em 0 .205em}.MJX-TEX .mjx-i mjx-c[c=h]:before{width:.576em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=i]:before{width:.345em;padding:.661em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=j]:before{width:.412em;padding:.661em 0 .204em}.MJX-TEX .mjx-i mjx-c[c=k]:before{width:.521em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=l]:before{width:.298em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=m]:before{width:.878em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=n]:before{width:.6em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=o]:before{width:.485em;padding:.441em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=p]:before{width:.503em}.MJX-TEX .mjx-i mjx-c[c=q]:before{width:.446em}.MJX-TEX .mjx-i mjx-c[c=r]:before{width:.451em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=s]:before{width:.469em;padding:.442em 0 .01em}.MJX-TEX .mjx-i mjx-c[c=t]:before{width:.361em;padding:.626em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=u]:before{width:.572em}.MJX-TEX .mjx-i mjx-c[c=v]:before{width:.485em;padding:.443em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=w]:before{width:.716em;padding:.443em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=x]:before{width:.572em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=y]:before{width:.49em;padding:.442em 0 .205em}.MJX-TEX .mjx-i mjx-c[c=z]:before{width:.465em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c="~"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="~"]:last-child:before{width:.571em}.MJX-TEX .mjx-i mjx-c[c="131"]:before{width:.307em;padding:.441em 0 .01em}.MJX-TEX .mjx-i mjx-c[c="237"]:before{width:.332em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="304"]:last-child:before{width:.054em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="306"]:last-child:before{width:.062em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="30B"]:last-child:before{width:.065em}.MJX-TEX .mjx-i mjx-c[c="30C"]:before{padding:.638em 0 0}.MJX-TEX .mjx-i mjx-c[c="392"]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c="393"]:before{width:.615em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="393"]:last-child:before{width:.721em}.MJX-TEX .mjx-i mjx-c[c="395"]:before{width:.738em}.MJX-TEX .mjx-i mjx-c[c="396"]:before{width:.683em}.MJX-TEX .mjx-i mjx-c[c="397"]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="397"]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c="398"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="399"]:before{width:.44em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="399"]:last-child:before{width:.504em}.MJX-TEX .mjx-i mjx-c[c="39A"]:before{width:.849em}.MJX-TEX .mjx-i mjx-c[c="39C"]:before{width:.97em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="39C"]:last-child:before{width:1.051em}.MJX-TEX .mjx-i mjx-c[c="39D"]:before{width:.803em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="39D"]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c="39E"]:before{width:.742em}.MJX-TEX .mjx-i mjx-c[c="39F"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="3A0"]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A0"]:last-child:before{width:.887em}.MJX-TEX .mjx-i mjx-c[c="3A1"]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A1"]:last-child:before{width:.751em}.MJX-TEX .mjx-i mjx-c[c="3A2"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="3A3"]:before{width:.78em}.MJX-TEX .mjx-i mjx-c[c="3A4"]:before{width:.584em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A4"]:last-child:before{width:.704em}.MJX-TEX .mjx-i mjx-c[c="3A5"]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A5"]:last-child:before{width:.7em}.MJX-TEX .mjx-i mjx-c[c="3A6"]:before{width:.667em}.MJX-TEX .mjx-i mjx-c[c="3A7"]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c="3A8"]:before{width:.612em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A8"]:last-child:before{width:.692em}.MJX-TEX .mjx-i mjx-c[c="3A9"]:before{width:.772em}.MJX-TEX .mjx-i mjx-c[c="3B1"]:before{width:.64em;padding:.442em 0 .011em;content:"\3B1"}.MJX-TEX .mjx-i mjx-c[c="3B2"]:before{width:.566em;padding:.705em 0 .194em;content:"\3B2"}.MJX-TEX .mjx-i mjx-c[c="3B3"]:before{width:.518em;padding:.441em 0 .216em;content:"\3B3"}.MJX-TEX .mjx-i mjx-c[c="3B4"]:before{width:.444em;padding:.717em 0 .01em;content:"\3B4"}.MJX-TEX .mjx-i mjx-c[c="3B5"]:before{width:.466em;padding:.452em 0 .022em;content:"\3B5"}.MJX-TEX .mjx-i mjx-c[c="3B6"]:before{width:.438em;padding:.704em 0 .204em;content:"\3B6"}.MJX-TEX .mjx-i mjx-c[c="3B7"]:before{width:.497em;padding:.442em 0 .216em;content:"\3B7"}.MJX-TEX .mjx-i mjx-c[c="3B8"]:before{width:.469em;padding:.705em 0 .01em;content:"\3B8"}.MJX-TEX .mjx-i mjx-c[c="3B9"]:before{width:.354em;padding:.442em 0 .01em;content:"\3B9"}.MJX-TEX .mjx-i mjx-c[c="3BA"]:before{width:.576em;padding:.442em 0 .011em;content:"\3BA"}.MJX-TEX .mjx-i mjx-c[c="3BB"]:before{width:.583em;padding:.694em 0 .012em;content:"\3BB"}.MJX-TEX .mjx-i mjx-c[c="3BC"]:before{width:.603em;padding:.442em 0 .216em;content:"\3BC"}.MJX-TEX .mjx-i mjx-c[c="3BD"]:before{width:.494em;padding:.442em 0 0;content:"\3BD"}.MJX-TEX .mjx-i mjx-c[c="3BE"]:before{width:.438em;padding:.704em 0 .205em;content:"\3BE"}.MJX-TEX .mjx-i mjx-c[c="3BF"]:before{width:.485em;padding:.441em 0 .011em;content:"\3BF"}.MJX-TEX .mjx-i mjx-c[c="3C0"]:before{width:.57em;padding:.431em 0 .011em;content:"\3C0"}.MJX-TEX .mjx-i mjx-c[c="3C1"]:before{width:.517em;padding:.442em 0 .216em;content:"\3C1"}.MJX-TEX .mjx-i mjx-c[c="3C2"]:before{width:.363em;padding:.442em 0 .107em;content:"\3C2"}.MJX-TEX .mjx-i mjx-c[c="3C3"]:before{width:.571em;padding:.431em 0 .011em;content:"\3C3"}.MJX-TEX .mjx-i mjx-c[c="3C4"]:before{width:.437em;padding:.431em 0 .013em;content:"\3C4"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3C4"]:last-child:before{width:.517em}.MJX-TEX .mjx-i mjx-c[c="3C5"]:before{width:.54em;padding:.443em 0 .01em;content:"\3C5"}.MJX-TEX .mjx-i mjx-c[c="3C6"]:before{width:.654em;padding:.442em 0 .218em;content:"\3C6"}.MJX-TEX .mjx-i mjx-c[c="3C7"]:before{width:.626em;padding:.442em 0 .204em;content:"\3C7"}.MJX-TEX .mjx-i mjx-c[c="3C8"]:before{width:.651em;padding:.694em 0 .205em;content:"\3C8"}.MJX-TEX .mjx-i mjx-c[c="3C9"]:before{width:.622em;padding:.443em 0 .011em;content:"\3C9"}.MJX-TEX .mjx-i mjx-c[c="3D1"]:before{width:.591em;padding:.705em 0 .011em;content:"\3D1"}.MJX-TEX .mjx-i mjx-c[c="3D2"]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3D2"]:last-child:before{width:.7em}.MJX-TEX .mjx-i mjx-c[c="3D5"]:before{width:.596em;padding:.694em 0 .205em;content:"\3D5"}.MJX-TEX .mjx-i mjx-c[c="3D6"]:before{width:.828em;padding:.431em 0 .01em;content:"\3D6"}.MJX-TEX .mjx-i mjx-c[c="3DC"]:before{width:.643em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3DC"]:last-child:before{width:.749em}.MJX-TEX .mjx-i mjx-c[c="3F1"]:before{width:.517em;padding:.442em 0 .194em;content:"\3F1"}.MJX-TEX .mjx-i mjx-c[c="3F5"]:before{width:.406em;padding:.431em 0 .011em;content:"\3F5"}.MJX-TEX .mjx-i mjx-c[c="2013"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2014"]:before,.MJX-TEX .mjx-i mjx-c[c="2015"]:before{width:1.022em}.MJX-TEX .mjx-i mjx-c[c="2017"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2018"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="2018"]:last-child:before{width:.362em}.MJX-TEX .mjx-i mjx-c[c="2019"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="2019"]:last-child:before{width:.377em}.MJX-TEX .mjx-i mjx-c[c="201C"]:before{width:.514em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="201C"]:last-child:before{width:.606em}.MJX-TEX .mjx-i mjx-c[c="201D"]:before{width:.514em}.MJX-TEX .mjx-i mjx-c[c="2044"]:before{width:.778em;padding:.716em 0 .215em}.MJX-TEX .mjx-i mjx-c[c="210E"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX .mjx-i mjx-c[c="29F8"]:before{width:.778em;padding:.716em 0 .215em;content:"/";font-family:MJXZERO,MJXTEX-I}.MJX-TEX .mjx-b.mjx-i mjx-c[c="/"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=A]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c=B]:before{width:.866em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=C]:before{width:.817em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=D]:before{width:.938em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=E]:before{width:.81em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=F]:before{width:.689em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=F]:last-child:before{width:.809em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=G]:before{width:.887em;padding:.703em 0 .016em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=H]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=I]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=I]:last-child:before{width:.573em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=J]:before{width:.631em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=J]:last-child:before{width:.694em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=K]:before{width:.971em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=L]:before{width:.756em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=M]:before{width:1.142em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=M]:last-child:before{width:1.219em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=N]:before{width:.95em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=N]:last-child:before{width:1.027em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=O]:before{width:.837em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=P]:before{width:.723em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=P]:last-child:before{width:.847em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Q]:before{width:.869em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=R]:before{width:.872em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=S]:before{width:.693em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=T]:before{width:.637em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=T]:last-child:before{width:.772em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=U]:before{width:.8em;padding:.686em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=U]:last-child:before{width:.877em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=V]:before{width:.678em;padding:.686em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=V]:last-child:before{width:.886em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=W]:before{width:1.093em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=W]:last-child:before{width:1.207em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=X]:before{width:.947em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Y]:before{width:.675em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=Y]:last-child:before{width:.876em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Z]:before{width:.773em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=a]:before{width:.633em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=b]:before{width:.521em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=c]:before{width:.513em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=d]:before{width:.61em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=e]:before{width:.554em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=f]:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=f]:last-child:before{width:.624em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=g]:before{width:.545em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=h]:before{width:.668em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=i]:before{width:.405em;padding:.694em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=j]:before{width:.471em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=k]:before{width:.604em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=l]:before{width:.348em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=m]:before{width:1.032em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=n]:before{width:.713em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=o]:before{width:.585em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=p]:before{width:.601em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=q]:before{width:.542em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=r]:before{width:.529em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=s]:before{width:.531em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=t]:before{width:.415em;padding:.643em 0 .007em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=u]:before{width:.681em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=v]:before{width:.567em;padding:.453em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=w]:before{padding:.453em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=x]:before{width:.659em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=y]:before{width:.59em;padding:.452em 0 .202em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=z]:before{width:.555em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="391"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="392"]:before{width:.866em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="393"]:before{width:.657em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="393"]:last-child:before{width:.777em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="394"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="395"]:before{width:.81em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="396"]:before{width:.773em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="397"]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="398"]:before{width:.867em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="399"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="399"]:last-child:before{width:.573em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39A"]:before{width:.971em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39B"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39C"]:before{width:1.142em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39C"]:last-child:before{width:1.219em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39D"]:before{width:.95em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39D"]:last-child:before{width:1.027em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39E"]:before{width:.841em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39F"]:before{width:.837em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A0"]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A1"]:before{width:.723em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before{width:.847em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A2"]:before{width:.867em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A3"]:before{width:.885em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A4"]:before{width:.637em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before{width:.772em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A5"]:before{width:.671em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before{width:.802em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A6"]:before{width:.767em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A7"]:before{width:.947em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A8"]:before{width:.714em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before{width:.79em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A9"]:before{width:.879em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3D2"]:before{width:.671em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before{width:.802em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3DC"]:before{width:.689em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before{width:.809em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="2044"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="2206"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="29F8"]:before{width:.894em;padding:.711em 0 .21em;font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-ds mjx-c[c=A]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=B]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=D]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=E]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-ds mjx-c[c=G]:before,.MJX-TEX .mjx-ds mjx-c[c=H]:before{width:.778em}.MJX-TEX .mjx-ds mjx-c[c=I]:before{width:.389em}.MJX-TEX .mjx-ds mjx-c[c=J]:before{width:.5em;padding:.683em 0 .077em}.MJX-TEX .mjx-ds mjx-c[c=L]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=M]:before{width:.944em}.MJX-TEX .mjx-ds mjx-c[c=N]:before{width:.722em;padding:.683em 0 .02em}.MJX-TEX .mjx-ds mjx-c[c=P]:before{width:.611em}.MJX-TEX .mjx-ds mjx-c[c=Q]:before{padding:.701em 0 .181em}.MJX-TEX .mjx-ds mjx-c[c=R]:before{width:.722em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c=S]:before{padding:.702em 0 .012em}.MJX-TEX .mjx-ds mjx-c[c=T]:before{width:.667em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c=U]:before,.MJX-TEX .mjx-ds mjx-c[c=V]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=W]:before{width:1em}.MJX-TEX .mjx-ds mjx-c[c=X]:before,.MJX-TEX .mjx-ds mjx-c[c=Y]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=Z]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=k]:before{width:.556em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c="3A1"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A2"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A4"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A7"]:before,.MJX-TEX .mjx-ds mjx-c[c="3D2"]:before,.MJX-TEX .mjx-ds mjx-c[c="3DC"]:before,.MJX-TEX .mjx-ds mjx-c[c="39A"]:before,.MJX-TEX .mjx-ds mjx-c[c="39C"]:before,.MJX-TEX .mjx-ds mjx-c[c="39D"]:before,.MJX-TEX .mjx-ds mjx-c[c="39F"]:before,.MJX-TEX .mjx-ds mjx-c[c="391"]:before,.MJX-TEX .mjx-ds mjx-c[c="392"]:before,.MJX-TEX .mjx-ds mjx-c[c="395"]:before,.MJX-TEX .mjx-ds mjx-c[c="396"]:before,.MJX-TEX .mjx-ds mjx-c[c="397"]:before,.MJX-TEX .mjx-ds mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-ds mjx-c[c="2102"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="210D"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2115"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2119"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="211A"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="211D"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2124"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-fr mjx-c[c="!"]:before{width:.296em;padding:.689em 0 .012em}.MJX-TEX .mjx-fr mjx-c[c="22"]:before{width:.215em}.MJX-TEX .mjx-fr mjx-c[c="&"]:before{width:.738em;padding:.698em 0 .011em}.MJX-TEX .mjx-fr mjx-c[c="27"]:before{width:.212em}.MJX-TEX .mjx-fr mjx-c[c="("]:before{padding:.737em 0 .186em}.MJX-TEX .mjx-fr mjx-c[c=")"]:before{padding:.735em 0 .187em}.MJX-TEX .mjx-fr mjx-c[c="*"]:before{width:.278em;padding:.692em 0 0}.MJX-TEX .mjx-fr mjx-c[c="+"]:before{width:.756em;padding:.598em 0 .082em}.MJX-TEX .mjx-fr mjx-c[c=","]:before{padding:.107em 0 .191em}.MJX-TEX .mjx-fr mjx-c[c="-"]:before{width:.756em;padding:.275em 0 0}.MJX-TEX .mjx-fr mjx-c[c="."]:before{padding:.102em 0 .015em}.MJX-TEX .mjx-fr mjx-c[c="/"]:before{width:.502em;padding:.721em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="0"]:before{width:.502em;padding:.492em 0 .013em}.MJX-TEX .mjx-fr mjx-c[c="1"]:before{width:.502em;padding:.468em 0 0}.MJX-TEX .mjx-fr mjx-c[c="2"]:before{width:.502em;padding:.474em 0 0}.MJX-TEX .mjx-fr mjx-c[c="3"]:before{width:.502em;padding:.473em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="4"]:before{width:.502em;padding:.476em 0 .191em}.MJX-TEX .mjx-fr mjx-c[c="5"]:before{width:.502em;padding:.458em 0 .184em}.MJX-TEX .mjx-fr mjx-c[c="6"]:before{width:.502em;padding:.7em 0 .013em}.MJX-TEX .mjx-fr mjx-c[c="7"]:before{width:.502em;padding:.468em 0 .181em}.MJX-TEX .mjx-fr mjx-c[c="8"]:before{width:.502em;padding:.705em 0 .01em}.MJX-TEX .mjx-fr mjx-c[c="9"]:before{width:.502em;padding:.469em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c=":"]:before{width:.216em;padding:.457em 0 .012em}.MJX-TEX .mjx-fr mjx-c[c=";"]:before{width:.216em;padding:.458em 0 .189em}.MJX-TEX .mjx-fr mjx-c[c="="]:before{width:.756em;padding:.368em 0 0}.MJX-TEX .mjx-fr mjx-c[c="?"]:before{width:.362em;padding:.693em 0 .011em}.MJX-TEX .mjx-fr mjx-c[c=A]:before{width:.718em;padding:.696em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=B]:before{width:.884em;padding:.691em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=C]:before{width:.613em;padding:.685em 0 .024em}.MJX-TEX .mjx-fr mjx-c[c=D]:before{width:.832em;padding:.685em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=E]:before{width:.663em;padding:.685em 0 .024em}.MJX-TEX .mjx-fr mjx-c[c=F]:before{width:.611em;padding:.686em 0 .153em}.MJX-TEX .mjx-fr mjx-c[c=G]:before{padding:.69em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=H]:before{width:.72em;padding:.666em 0 .133em}.MJX-TEX .mjx-fr mjx-c[c=I]:before{width:.554em;padding:.686em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=J]:before{width:.552em;padding:.686em 0 .139em}.MJX-TEX .mjx-fr mjx-c[c=K]:before{width:.668em;padding:.68em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=L]:before{width:.666em;padding:.686em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=M]:before{width:1.05em;padding:.692em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=N]:before{width:.832em;padding:.686em 0 .025em}.MJX-TEX .mjx-fr mjx-c[c=O]:before{width:.827em;padding:.729em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=P]:before{width:.828em;padding:.692em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=Q]:before{width:.827em;padding:.729em 0 .069em}.MJX-TEX .mjx-fr mjx-c[c=R]:before{width:.828em}.MJX-TEX .mjx-fr mjx-c[c=S]:before{width:.829em;padding:.692em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=T]:before{width:.669em;padding:.701em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=U]:before{width:.646em;padding:.697em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=V]:before{width:.831em}.MJX-TEX .mjx-fr mjx-c[c=W]:before{width:1.046em;padding:.686em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=X]:before{width:.719em;padding:.688em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=Y]:before{width:.833em;padding:.686em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=Z]:before{width:.602em;padding:.729em 0 .139em}.MJX-TEX .mjx-fr mjx-c[c="["]:before{padding:.74em 0 .13em}.MJX-TEX .mjx-fr mjx-c[c="]"]:before{padding:.738em 0 .131em}.MJX-TEX .mjx-fr mjx-c[c="^"]:before{padding:.734em 0 0}.MJX-TEX .mjx-fr mjx-c[c=a]:before{padding:.47em 0 .035em}.MJX-TEX .mjx-fr mjx-c[c=b]:before{width:.513em;padding:.685em 0 .031em}.MJX-TEX .mjx-fr mjx-c[c=c]:before{width:.389em;padding:.466em 0 .029em}.MJX-TEX .mjx-fr mjx-c[c=d]:before{width:.499em;padding:.609em 0 .033em}.MJX-TEX .mjx-fr mjx-c[c=e]:before{width:.401em;padding:.467em 0 .03em}.MJX-TEX .mjx-fr mjx-c[c=f]:before{width:.326em;padding:.681em 0 .221em}.MJX-TEX .mjx-fr mjx-c[c=g]:before{width:.504em;padding:.47em 0 .209em}.MJX-TEX .mjx-fr mjx-c[c=h]:before{width:.521em;padding:.688em 0 .205em}.MJX-TEX .mjx-fr mjx-c[c=i]:before{width:.279em;padding:.673em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=j]:before{width:.281em}.MJX-TEX .mjx-fr mjx-c[c=k]:before{width:.389em;padding:.689em 0 .025em}.MJX-TEX .mjx-fr mjx-c[c=l]:before{width:.28em;padding:.685em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=m]:before{width:.767em;padding:.475em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=n]:before{width:.527em;padding:.475em 0 .022em}.MJX-TEX .mjx-fr mjx-c[c=o]:before{width:.489em;padding:.48em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=p]:before{width:.5em;padding:.541em 0 .212em}.MJX-TEX .mjx-fr mjx-c[c=q]:before{width:.489em;padding:.479em 0 .219em}.MJX-TEX .mjx-fr mjx-c[c=r]:before{width:.389em;padding:.474em 0 .021em}.MJX-TEX .mjx-fr mjx-c[c=s]:before{width:.443em;padding:.478em 0 .029em}.MJX-TEX .mjx-fr mjx-c[c=t]:before{width:.333em;padding:.64em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=u]:before{width:.517em;padding:.474em 0 .023em}.MJX-TEX .mjx-fr mjx-c[c=v]:before{width:.512em;padding:.53em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=w]:before{width:.774em;padding:.532em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=x]:before{width:.389em;padding:.472em 0 .188em}.MJX-TEX .mjx-fr mjx-c[c=y]:before{width:.499em;padding:.528em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=z]:before{width:.391em;padding:.471em 0 .214em}.MJX-TEX .mjx-fr mjx-c[c="3A1"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A2"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A4"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A7"]:before,.MJX-TEX .mjx-fr mjx-c[c="3D2"]:before,.MJX-TEX .mjx-fr mjx-c[c="3DC"]:before,.MJX-TEX .mjx-fr mjx-c[c="39A"]:before,.MJX-TEX .mjx-fr mjx-c[c="39C"]:before,.MJX-TEX .mjx-fr mjx-c[c="39D"]:before,.MJX-TEX .mjx-fr mjx-c[c="39F"]:before,.MJX-TEX .mjx-fr mjx-c[c="391"]:before,.MJX-TEX .mjx-fr mjx-c[c="392"]:before,.MJX-TEX .mjx-fr mjx-c[c="395"]:before,.MJX-TEX .mjx-fr mjx-c[c="396"]:before,.MJX-TEX .mjx-fr mjx-c[c="397"]:before,.MJX-TEX .mjx-fr mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-fr mjx-c[c="2018"]:before{width:.215em;padding:.708em 0 0}.MJX-TEX .mjx-fr mjx-c[c="2019"]:before{width:.215em}.MJX-TEX .mjx-fr mjx-c[c="2044"]:before{width:.502em;padding:.721em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="210C"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="2111"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="211C"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="2128"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="212D"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c=E300]:before{width:.497em;padding:.683em 0 .032em;content:"\E300"}.MJX-TEX .mjx-fr mjx-c[c=E301]:before{width:.498em;padding:.616em 0 .03em;content:"\E301"}.MJX-TEX .mjx-fr mjx-c[c=E302]:before{width:.333em;padding:.68em 0 .215em;content:"\E302"}.MJX-TEX .mjx-fr mjx-c[c=E303]:before{width:.329em;padding:.679em 0 .224em;content:"\E303"}.MJX-TEX .mjx-fr mjx-c[c=E304]:before{width:.503em;padding:.471em 0 .214em;content:"\E304"}.MJX-TEX .mjx-fr mjx-c[c=E305]:before{width:.333em;padding:.686em 0 .02em;content:"\E305"}.MJX-TEX .mjx-fr mjx-c[c=E306]:before{width:.334em;padding:.577em 0 .021em;content:"\E306"}.MJX-TEX .mjx-fr mjx-c[c=E307]:before{width:.501em;padding:.475em 0 .022em;content:"\E307"}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="!"]:before{width:.349em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="22"]:before{width:.254em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="&"]:before{width:.871em;padding:.696em 0 .016em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="27"]:before{width:.25em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c=")"]:before{width:.459em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="*"]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="+"]:before{width:.893em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=","]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="-"]:before{width:.893em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="."]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="/"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="0"]:before{width:.593em;padding:.501em 0 .012em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="1"]:before{width:.593em;padding:.489em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2"]:before{width:.593em;padding:.491em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3"]:before{width:.593em;padding:.487em 0 .193em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="4"]:before{width:.593em;padding:.495em 0 .196em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="5"]:before{width:.593em;padding:.481em 0 .19em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="6"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="7"]:before{width:.593em;padding:.479em 0 .197em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="8"]:before{width:.593em;padding:.714em 0 .005em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="9"]:before{width:.593em;padding:.487em 0 .195em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=":"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c=";"]:before{width:.255em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="="]:before{width:.582em;padding:.343em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="?"]:before{width:.428em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=A]:before{width:.847em;padding:.686em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=B]:before{width:1.044em;padding:.684em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=C]:before{width:.723em;padding:.676em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=D]:before{width:.982em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E]:before{width:.783em;padding:.686em 0 .029em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=F]:before{width:.722em;padding:.684em 0 .146em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=G]:before{width:.927em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=H]:before{width:.851em;padding:.683em 0 .126em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=I]:before{width:.655em;padding:.681em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=J]:before{width:.652em;padding:.68em 0 .141em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=K]:before{width:.789em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=L]:before{width:.786em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=M]:before{width:1.239em;padding:.683em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=N]:before{width:.983em;padding:.679em 0 .03em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=O]:before{width:.976em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=P]:before{width:.977em;padding:.688em 0 .223em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Q]:before{width:.976em;padding:.726em 0 .083em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=R]:before{width:.978em;padding:.688em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=S]:before{width:.978em;padding:.685em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=T]:before{width:.79em;padding:.686em 0 .03em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=U]:before{width:.851em;padding:.688em 0 .039em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=V]:before{width:.982em;padding:.685em 0 .029em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=W]:before{width:1.235em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=X]:before{width:.849em;padding:.681em 0 .035em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Y]:before{width:.984em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Z]:before{width:.711em;padding:.677em 0 .148em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="["]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="]"]:before{width:.257em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="^"]:before{width:.59em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=a]:before{width:.603em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=b]:before{width:.59em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=c]:before{width:.464em;padding:.473em 0 .026em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=d]:before{width:.589em;padding:.632em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=e]:before{width:.472em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=f]:before{width:.388em;padding:.687em 0 .222em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=g]:before{width:.595em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=h]:before{width:.615em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=i]:before{width:.331em;padding:.686em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=j]:before{width:.332em;padding:.682em 0 .203em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=k]:before{width:.464em;padding:.682em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=l]:before{width:.337em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=m]:before{width:.921em;padding:.476em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=n]:before{width:.654em;padding:.473em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=o]:before{width:.609em;padding:.482em 0 .034em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=p]:before{width:.604em;padding:.557em 0 .207em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=q]:before{width:.596em;padding:.485em 0 .211em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=r]:before{width:.46em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=s]:before{width:.523em;padding:.479em 0 .034em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=t]:before{width:.393em;padding:.648em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=u]:before{width:.589em;padding:.472em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=v]:before{width:.604em;padding:.546em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=w]:before{width:.918em;padding:.549em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=x]:before{width:.459em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=y]:before{width:.589em;padding:.557em 0 .221em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=z]:before{width:.461em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2019"]:before{width:.254em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2044"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E301]:before{width:.587em;padding:.63em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E302]:before{width:.394em;padding:.693em 0 .212em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E303]:before{width:.387em;padding:.681em 0 .219em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E304]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E305]:before{width:.393em;padding:.684em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E308]:before{width:.981em;padding:.679em 0 .22em;content:"\E308"}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E309]:before{width:.727em;padding:.717em 0 .137em;content:"\E309"}.MJX-TEX .mjx-sc mjx-c[c=A]:before{width:.803em;padding:.717em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=A]:last-child:before{width:1.016em}.MJX-TEX .mjx-sc mjx-c[c=B]:before{width:.908em;padding:.708em 0 .028em}.MJX-TEX .mjx-sc mjx-c[c=C]:before{width:.666em;padding:.728em 0 .026em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=C]:last-child:before{width:.819em}.MJX-TEX .mjx-sc mjx-c[c=D]:before{width:.774em;padding:.708em 0 .031em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=D]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=D]:last-child:before{width:.855em}.MJX-TEX .mjx-sc mjx-c[c=E]:before{width:.562em;padding:.707em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=E]:last-child:before{width:.718em}.MJX-TEX .mjx-sc mjx-c[c=F]:before{width:.895em;padding:.735em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=F]:last-child:before{width:.99em}.MJX-TEX .mjx-sc mjx-c[c=G]:before{width:.61em;padding:.717em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=G]:last-child:before{width:.738em}.MJX-TEX .mjx-sc mjx-c[c=H]:before{width:.969em;padding:.717em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=H]:last-child:before{width:1.241em}.MJX-TEX .mjx-sc mjx-c[c=I]:before{width:.809em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=I]:last-child:before{width:.946em}.MJX-TEX .mjx-sc mjx-c[c=J]:before{width:1.052em;padding:.717em 0 .314em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=J]:last-child:before{width:1.133em}.MJX-TEX .mjx-sc mjx-c[c=K]:before{width:.914em;padding:.717em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=K]:last-child:before{width:1.204em}.MJX-TEX .mjx-sc mjx-c[c=L]:before{width:.874em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=L]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=L]:last-child:before{width:1.035em}.MJX-TEX .mjx-sc mjx-c[c=M]:before{width:1.08em;padding:.721em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=M]:last-child:before{width:1.216em}.MJX-TEX .mjx-sc mjx-c[c=N]:before{width:.902em;padding:.726em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=N]:last-child:before{width:1.208em}.MJX-TEX .mjx-sc mjx-c[c=O]:before{width:.738em;padding:.707em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=O]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=O]:last-child:before{width:.805em}.MJX-TEX .mjx-sc mjx-c[c=P]:before{width:1.013em;padding:.716em 0 .037em}.MJX-TEX .mjx-sc mjx-c[c=Q]:before{width:.883em;padding:.717em 0 .017em}.MJX-TEX .mjx-sc mjx-c[c=R]:before{width:.85em;padding:.717em 0 .017em}.MJX-TEX .mjx-sc mjx-c[c=S]:before{width:.868em;padding:.708em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=S]:last-child:before{width:1.016em}.MJX-TEX .mjx-sc mjx-c[c=T]:before{width:.747em;padding:.735em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=T]:last-child:before{width:.996em}.MJX-TEX .mjx-sc mjx-c[c=U]:before{width:.8em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=U]:last-child:before{width:.96em}.MJX-TEX .mjx-sc mjx-c[c=V]:before{width:.622em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=V]:last-child:before{width:.85em}.MJX-TEX .mjx-sc mjx-c[c=W]:before{width:.805em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=W]:last-child:before{width:1.026em}.MJX-TEX .mjx-sc mjx-c[c=X]:before{width:.944em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=X]:last-child:before{width:1.131em}.MJX-TEX .mjx-sc mjx-c[c=Y]:before{width:.71em;padding:.716em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=Y]:last-child:before{width:.959em}.MJX-TEX .mjx-sc mjx-c[c=Z]:before{width:.821em;padding:.717em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=Z]:last-child:before{width:1.032em}.MJX-TEX .mjx-sc mjx-c[c="3A1"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A2"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A4"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A7"]:before,.MJX-TEX .mjx-sc mjx-c[c="3D2"]:before,.MJX-TEX .mjx-sc mjx-c[c="3DC"]:before,.MJX-TEX .mjx-sc mjx-c[c="39A"]:before,.MJX-TEX .mjx-sc mjx-c[c="39C"]:before,.MJX-TEX .mjx-sc mjx-c[c="39D"]:before,.MJX-TEX .mjx-sc mjx-c[c="39F"]:before,.MJX-TEX .mjx-sc mjx-c[c="391"]:before,.MJX-TEX .mjx-sc mjx-c[c="392"]:before,.MJX-TEX .mjx-sc mjx-c[c="395"]:before,.MJX-TEX .mjx-sc mjx-c[c="396"]:before,.MJX-TEX .mjx-sc mjx-c[c="397"]:before,.MJX-TEX .mjx-sc mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-sc mjx-c[c="210B"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="210B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="210B"]:last-child:before{width:1.241em}.MJX-TEX .mjx-sc mjx-c[c="2110"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2110"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2110"]:last-child:before{width:1.133em}.MJX-TEX .mjx-sc mjx-c[c="2112"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2112"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2112"]:last-child:before{width:1.035em}.MJX-TEX .mjx-sc mjx-c[c="211B"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX .mjx-sc mjx-c[c="212C"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX .mjx-sc mjx-c[c="2130"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2130"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2130"]:last-child:before{width:.718em}.MJX-TEX .mjx-sc mjx-c[c="2131"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2131"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2131"]:last-child:before{width:.99em}.MJX-TEX .mjx-sc mjx-c[c="2133"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2133"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2133"]:last-child:before{width:1.216em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=A]:last-child:before{width:1.016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=C]:last-child:before{width:.819em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=D]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=D]:last-child:before{width:.855em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=E]:last-child:before{width:.718em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=F]:last-child:before{width:.99em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=G]:last-child:before{width:.738em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=H]:last-child:before{width:1.241em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=I]:last-child:before{width:.946em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=J]:last-child:before{width:1.133em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=K]:last-child:before{width:1.204em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=L]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=L]:last-child:before{width:1.035em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=M]:last-child:before{width:1.216em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=N]:last-child:before{width:1.208em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=O]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=O]:last-child:before{width:.805em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=S]:last-child:before{width:1.016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=T]:last-child:before{width:.996em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=U]:last-child:before{width:.96em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=V]:last-child:before{width:.85em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=W]:last-child:before{width:1.026em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=X]:last-child:before{width:1.131em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Y]:last-child:before{width:.959em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Z]:last-child:before{width:1.032em}.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-ss mjx-c[c="!"]:before{width:.319em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="&"]:before{width:.758em}.MJX-TEX .mjx-ss mjx-c[c=","]:before{padding:.098em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c="-"]:before{padding:.259em 0 0}.MJX-TEX .mjx-ss mjx-c[c="."]:before{padding:.098em 0 0}.MJX-TEX .mjx-ss mjx-c[c="0"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="1"]:before{padding:.678em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2"]:before{padding:.677em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="4"]:before{padding:.656em 0 0}.MJX-TEX .mjx-ss mjx-c[c="5"]:before{padding:.656em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="6"]:before{padding:.677em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="7"]:before{padding:.656em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c="8"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="9"]:before{padding:.677em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=":"]:before{padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=";"]:before{padding:.444em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c="="]:before{padding:.37em 0 0}.MJX-TEX .mjx-ss mjx-c[c="@"]:before{width:.667em}.MJX-TEX .mjx-ss mjx-c[c=A]:before,.MJX-TEX .mjx-ss mjx-c[c=B]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=C]:before{width:.639em;padding:.705em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c=D]:before{width:.722em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=E]:before{width:.597em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c=F]:before{width:.569em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c=G]:before{width:.667em;padding:.704em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c=H]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=I]:before{width:.278em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=J]:before{width:.472em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=K]:before{width:.694em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=L]:before{width:.542em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=M]:before{width:.875em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=N]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=O]:before{width:.736em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=P]:before{width:.639em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=Q]:before{width:.736em;padding:.715em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c=R]:before{width:.646em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=S]:before{padding:.716em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=T]:before{width:.681em;padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c=U]:before{width:.688em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=V]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=W]:before{width:.944em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=X]:before,.MJX-TEX .mjx-ss mjx-c[c=Y]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=Z]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="["]:before,.MJX-TEX .mjx-ss mjx-c[c="]"]:before{width:.289em}.MJX-TEX .mjx-ss mjx-c[c=_]:before{padding:0 0 .114em}.MJX-TEX .mjx-ss mjx-c[c=a]:before{width:.481em;padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=b]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=c]:before{padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=d]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=e]:before{padding:.461em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=h]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=i]:before{width:.239em;padding:.68em 0 0}.MJX-TEX .mjx-ss mjx-c[c=j]:before{width:.267em;padding:.68em 0 .205em}.MJX-TEX .mjx-ss mjx-c[c=k]:before{width:.489em}.MJX-TEX .mjx-ss mjx-c[c=l]:before{width:.239em}.MJX-TEX .mjx-ss mjx-c[c=m]:before{width:.794em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=n]:before{width:.517em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=o]:before{padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=p]:before,.MJX-TEX .mjx-ss mjx-c[c=q]:before{width:.517em;padding:.455em 0 .194em}.MJX-TEX .mjx-ss mjx-c[c=r]:before{width:.342em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=s]:before{width:.383em;padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=t]:before{width:.361em;padding:.571em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=u]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=v]:before{width:.461em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=w]:before{width:.683em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=x]:before{width:.461em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=y]:before{width:.461em;padding:.444em 0 .204em}.MJX-TEX .mjx-ss mjx-c[c=z]:before{width:.435em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c="~"]:before{padding:.327em 0 0}.MJX-TEX .mjx-ss mjx-c[c="131"]:before{width:.239em}.MJX-TEX .mjx-ss mjx-c[c="237"]:before{width:.267em}.MJX-TEX .mjx-ss mjx-c[c="300"]:before,.MJX-TEX .mjx-ss mjx-c[c="301"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="303"]:before{padding:.677em 0 0}.MJX-TEX .mjx-ss mjx-c[c="304"]:before{padding:.631em 0 0}.MJX-TEX .mjx-ss mjx-c[c="307"]:before,.MJX-TEX .mjx-ss mjx-c[c="308"]:before{padding:.68em 0 0}.MJX-TEX .mjx-ss mjx-c[c="30A"]:before,.MJX-TEX .mjx-ss mjx-c[c="30B"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="30C"]:before{padding:.654em 0 0}.MJX-TEX .mjx-ss mjx-c[c="391"]:before,.MJX-TEX .mjx-ss mjx-c[c="392"]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="393"]:before{width:.542em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="394"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="395"]:before{width:.597em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="396"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="397"]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="398"]:before{padding:.716em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="399"]:before{width:.278em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39A"]:before{width:.694em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39B"]:before{width:.611em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39C"]:before{width:.875em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39D"]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39E"]:before{padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39F"]:before{width:.736em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="3A0"]:before{width:.708em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A1"]:before{width:.639em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A2"]:before{padding:.716em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="3A3"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A4"]:before{width:.681em;padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A5"]:before{padding:.716em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A6"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A7"]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A8"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A9"]:before,.MJX-TEX .mjx-ss mjx-c[c="3D2"]:before{padding:.716em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3DC"]:before{width:.569em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2013"]:before,.MJX-TEX .mjx-ss mjx-c[c="2014"]:before,.MJX-TEX .mjx-ss mjx-c[c="2015"]:before{padding:.312em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2017"]:before{padding:0 0 .114em}.MJX-TEX .mjx-ss mjx-c[c="2206"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="!"]:before{width:.367em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="22"]:before{width:.558em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="#"]:before{width:.917em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="$"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="%"]:before{width:1.029em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="&"]:before{width:.831em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="27"]:before{width:.306em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=")"]:before{width:.428em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="*"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="+"]:before{width:.856em;padding:.617em 0 .116em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=","]:before{width:.306em;padding:.146em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="-"]:before{width:.367em;padding:.273em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="."]:before{width:.306em;padding:.146em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="/"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="0"]:before{width:.55em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="1"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2"]:before{width:.55em;padding:.716em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="4"]:before{width:.55em;padding:.694em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="5"]:before{width:.55em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="6"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="7"]:before{width:.55em;padding:.695em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="8"]:before{width:.55em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="9"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=":"]:before{width:.306em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=";"]:before{width:.306em;padding:.458em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="="]:before{width:.856em;padding:.407em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="?"]:before{width:.519em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="@"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=A]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=B]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=C]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=D]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=E]:before{width:.642em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=G]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=H]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=I]:before{width:.331em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=J]:before{width:.519em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=K]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=L]:before{width:.581em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=M]:before{width:.978em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=N]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=O]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=P]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Q]:before{width:.794em;padding:.716em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=R]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=S]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=T]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=U]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=V]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=W]:before{width:1.039em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=X]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Y]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Z]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="["]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="]"]:before{width:.343em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="^"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=_]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=a]:before{width:.525em;padding:.475em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=b]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=c]:before{width:.489em;padding:.475em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=d]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=e]:before{width:.511em;padding:.474em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=f]:before{width:.336em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=g]:before{width:.55em;padding:.469em 0 .206em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=h]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=i]:before{width:.256em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=j]:before{width:.286em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=k]:before{width:.531em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=l]:before{width:.256em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=m]:before{width:.867em;padding:.469em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=n]:before{width:.561em;padding:.468em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=o]:before{width:.55em;padding:.474em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=p]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=q]:before{width:.561em;padding:.469em 0 .194em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=r]:before{width:.372em;padding:.469em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=s]:before{width:.422em;padding:.474em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=t]:before{width:.404em;padding:.589em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=u]:before{width:.561em;padding:.458em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=v]:before{width:.5em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=w]:before{width:.744em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=x]:before{width:.5em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=y]:before{width:.5em;padding:.458em 0 .205em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=z]:before{width:.476em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="~"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="131"]:before{width:.256em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="237"]:before{width:.286em;padding:.458em 0 .205em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="304"]:before{padding:.66em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="392"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="393"]:before{width:.581em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="394"]:before{width:.917em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="395"]:before{width:.642em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="396"]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="397"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="398"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="399"]:before{width:.331em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39A"]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39B"]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39C"]:before{width:.978em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39D"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39E"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A0"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39F"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A1"]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A2"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A3"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A4"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A5"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A6"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A7"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A8"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A9"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3D2"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3DC"]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2013"]:before{width:.55em;padding:.327em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2014"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2015"]:before{width:1.1em;padding:.327em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2017"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2019"]:before{width:.306em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="201C"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="201D"]:before{width:.558em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2044"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2206"]:before{width:.917em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="$"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="$"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="27"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="("]:last-child:before{width:.491em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="*"]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="/"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2"]:last-child:before{width:.551em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="5"]:last-child:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="7"]:last-child:before{width:.596em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="8"]:last-child:before{width:.554em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="?"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="?"]:last-child:before{width:.536em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=C]:last-child:before{width:.719em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=E]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=F]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=G]:last-child:before{width:.73em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=H]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=I]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=J]:last-child:before{width:.535em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=K]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=M]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=N]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=P]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=R]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=R]:last-child:before{width:.698em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=S]:last-child:before{width:.609em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=T]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=U]:last-child:before{width:.747em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=V]:last-child:before{width:.799em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=W]:last-child:before{width:1.076em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=X]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Y]:last-child:before{width:.81em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Z]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="["]:last-child:before{width:.425em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="]"]:last-child:before{width:.353em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=_]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=_]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=c]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=c]:last-child:before{width:.499em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=d]:last-child:before{width:.588em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=f]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=g]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=g]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=i]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=i]:last-child:before{width:.315em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=j]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=k]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=k]:last-child:before{width:.543em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=l]:last-child:before{width:.311em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=r]:last-child:before{width:.424em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=s]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=s]:last-child:before{width:.436em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=v]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=v]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=w]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=w]:last-child:before{width:.762em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=x]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=x]:last-child:before{width:.537em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=y]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=z]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="~"]:last-child:before{width:.56em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="301"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="301"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="304"]:last-child:before{width:.064em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="306"]:last-child:before{width:.073em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30B"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30C"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="393"]:last-child:before{width:.646em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="395"]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="396"]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="397"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="399"]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39A"]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39C"]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39D"]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39E"]:last-child:before{width:.765em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A0"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A1"]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A3"]:last-child:before{width:.813em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A4"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A5"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A7"]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A8"]:last-child:before{width:.854em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3D2"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3DC"]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2013"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2013"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2014"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2014"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2015"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2015"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2017"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2017"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2018"]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2019"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="201C"]:last-child:before{width:.614em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2044"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="$"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="$"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="27"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="("]:last-child:before{width:.491em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="*"]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="/"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2"]:last-child:before{width:.551em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="5"]:last-child:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="7"]:last-child:before{width:.596em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="8"]:last-child:before{width:.554em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="?"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="?"]:last-child:before{width:.536em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=C]:last-child:before{width:.719em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=E]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=F]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=G]:last-child:before{width:.73em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=H]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=I]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=J]:last-child:before{width:.535em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=K]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=M]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=N]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=P]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=R]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=R]:last-child:before{width:.698em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=S]:last-child:before{width:.609em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=T]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=U]:last-child:before{width:.747em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=V]:last-child:before{width:.799em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=W]:last-child:before{width:1.076em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=X]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Y]:last-child:before{width:.81em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Z]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="["]:last-child:before{width:.425em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="]"]:last-child:before{width:.353em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=_]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=_]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=c]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=c]:last-child:before{width:.499em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=d]:last-child:before{width:.588em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=f]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=g]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=g]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=i]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=i]:last-child:before{width:.315em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=j]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=k]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=k]:last-child:before{width:.543em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=l]:last-child:before{width:.311em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=r]:last-child:before{width:.424em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=s]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=s]:last-child:before{width:.436em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=v]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=v]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=w]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=w]:last-child:before{width:.762em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=x]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=x]:last-child:before{width:.537em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=y]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=z]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="~"]:last-child:before{width:.56em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="301"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="301"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="304"]:last-child:before{width:.064em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="306"]:last-child:before{width:.073em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30B"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30C"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="393"]:last-child:before{width:.646em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="395"]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="396"]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="397"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="399"]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39A"]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39C"]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39D"]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39E"]:last-child:before{width:.765em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A0"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A3"]:last-child:before{width:.813em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A7"]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before{width:.854em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2013"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2013"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2014"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2014"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2015"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2015"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2017"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2017"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2018"]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2019"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="201C"]:last-child:before{width:.614em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2044"]:last-child:before{width:.6em}.MJX-TEX .mjx-ty mjx-c[c=" "]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="!"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="22"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="#"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="$"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="%"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="&"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="27"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="("]:before,.MJX-TEX .mjx-ty mjx-c[c=")"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="*"]:before{width:.525em;padding:.52em 0 0}.MJX-TEX .mjx-ty mjx-c[c="+"]:before{width:.525em;padding:.531em 0 0}.MJX-TEX .mjx-ty mjx-c[c=","]:before{width:.525em;padding:.14em 0 .139em}.MJX-TEX .mjx-ty mjx-c[c="-"]:before{width:.525em;padding:.341em 0 0}.MJX-TEX .mjx-ty mjx-c[c="."]:before{width:.525em;padding:.14em 0 0}.MJX-TEX .mjx-ty mjx-c[c="/"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="0"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="1"]:before,.MJX-TEX .mjx-ty mjx-c[c="2"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="4"]:before{width:.525em;padding:.624em 0 0}.MJX-TEX .mjx-ty mjx-c[c="5"]:before{width:.525em;padding:.611em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="6"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="7"]:before{width:.525em;padding:.627em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="8"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="9"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=":"]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c=";"]:before{width:.525em;padding:.431em 0 .139em}.MJX-TEX .mjx-ty mjx-c[c="<"]:before{width:.525em;padding:.557em 0 0}.MJX-TEX .mjx-ty mjx-c[c="="]:before{width:.525em;padding:.417em 0 0}.MJX-TEX .mjx-ty mjx-c[c=">"]:before{width:.525em;padding:.557em 0 0}.MJX-TEX .mjx-ty mjx-c[c="?"]:before{width:.525em;padding:.617em 0 0}.MJX-TEX .mjx-ty mjx-c[c="@"]:before{width:.525em;padding:.617em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=A]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c=B]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=C]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=D]:before,.MJX-TEX .mjx-ty mjx-c[c=E]:before,.MJX-TEX .mjx-ty mjx-c[c=F]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=G]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=H]:before,.MJX-TEX .mjx-ty mjx-c[c=I]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=J]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=K]:before,.MJX-TEX .mjx-ty mjx-c[c=L]:before,.MJX-TEX .mjx-ty mjx-c[c=M]:before,.MJX-TEX .mjx-ty mjx-c[c=N]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=O]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c=P]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=Q]:before{width:.525em;padding:.621em 0 .138em}.MJX-TEX .mjx-ty mjx-c[c=R]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=S]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=T]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=U]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=V]:before,.MJX-TEX .mjx-ty mjx-c[c=W]:before{width:.525em;padding:.611em 0 .007em}.MJX-TEX .mjx-ty mjx-c[c=X]:before,.MJX-TEX .mjx-ty mjx-c[c=Y]:before,.MJX-TEX .mjx-ty mjx-c[c=Z]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="["]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="5C"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="]"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="^"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=_]:before{width:.525em;padding:0 0 .095em}.MJX-TEX .mjx-ty mjx-c[c="`"]:before{width:.525em;padding:.681em 0 0}.MJX-TEX .mjx-ty mjx-c[c=a]:before{width:.525em;padding:.439em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=b]:before{width:.525em;padding:.611em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=c]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=d]:before{width:.525em;padding:.611em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=e]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=f]:before{width:.525em;padding:.617em 0 0}.MJX-TEX .mjx-ty mjx-c[c=g]:before{width:.525em;padding:.442em 0 .229em}.MJX-TEX .mjx-ty mjx-c[c=h]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=i]:before{width:.525em;padding:.612em 0 0}.MJX-TEX .mjx-ty mjx-c[c=j]:before{width:.525em;padding:.612em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c=k]:before,.MJX-TEX .mjx-ty mjx-c[c=l]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=m]:before,.MJX-TEX .mjx-ty mjx-c[c=n]:before{width:.525em;padding:.436em 0 0}.MJX-TEX .mjx-ty mjx-c[c=o]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=p]:before,.MJX-TEX .mjx-ty mjx-c[c=q]:before{width:.525em;padding:.437em 0 .221em}.MJX-TEX .mjx-ty mjx-c[c=r]:before{width:.525em;padding:.437em 0 0}.MJX-TEX .mjx-ty mjx-c[c=s]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=t]:before{width:.525em;padding:.554em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=u]:before{width:.525em;padding:.431em 0 .005em}.MJX-TEX .mjx-ty mjx-c[c=v]:before,.MJX-TEX .mjx-ty mjx-c[c=w]:before{width:.525em;padding:.431em 0 0}.MJX-TEX .mjx-ty mjx-c[c=x]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c=y]:before{width:.525em;padding:.431em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c=z]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="{"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="|"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="}"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="~"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="7F"]:before{width:.525em;padding:.612em 0 0;content:"\7F"}.MJX-TEX .mjx-ty mjx-c[c=A0]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="131"]:before{width:.525em;padding:.431em 0 0}.MJX-TEX .mjx-ty mjx-c[c="237"]:before{width:.525em;padding:.431em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c="2B9"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="300"]:before,.MJX-TEX .mjx-ty mjx-c[c="301"]:before,.MJX-TEX .mjx-ty mjx-c[c="302"]:before,.MJX-TEX .mjx-ty mjx-c[c="303"]:before{padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="304"]:before{padding:.577em 0 0}.MJX-TEX .mjx-ty mjx-c[c="306"]:before{padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="308"]:before{padding:.612em 0 0}.MJX-TEX .mjx-ty mjx-c[c="30A"]:before{padding:.619em 0 0}.MJX-TEX .mjx-ty mjx-c[c="30C"]:before{padding:.577em 0 0}.MJX-TEX .mjx-ty mjx-c[c="391"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="392"]:before,.MJX-TEX .mjx-ty mjx-c[c="393"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="394"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="395"]:before,.MJX-TEX .mjx-ty mjx-c[c="396"]:before,.MJX-TEX .mjx-ty mjx-c[c="397"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="398"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="39A"]:before,.MJX-TEX .mjx-ty mjx-c[c="399"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39B"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39C"]:before,.MJX-TEX .mjx-ty mjx-c[c="39D"]:before,.MJX-TEX .mjx-ty mjx-c[c="39E"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39F"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="3A0"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A1"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A2"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="3A3"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A4"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A5"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A6"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A7"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A8"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A9"]:before,.MJX-TEX .mjx-ty mjx-c[c="3D2"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3DC"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2017"]:before{width:.525em;padding:0 0 .095em}.MJX-TEX .mjx-ty mjx-c[c="2032"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2033"]:before{width:1.05em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2034"]:before{width:1.575em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2044"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="2057"]:before{width:2.1em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2206"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-sop mjx-c[c="("]:before,.MJX-TEX .mjx-sop mjx-c[c=")"]:before{width:.458em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="/"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="["]:before{width:.417em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="5C"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="]"]:before{width:.417em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="{"]:before,.MJX-TEX .mjx-sop mjx-c[c="}"]:before{width:.583em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="2C6"]:before{width:.556em;padding:.744em 0 0}.MJX-TEX .mjx-sop mjx-c[c="2DC"]:before{width:.556em;padding:.722em 0 0}.MJX-TEX .mjx-sop mjx-c[c="302"]:before{padding:.744em 0 0}.MJX-TEX .mjx-sop mjx-c[c="303"]:before{padding:.722em 0 0}.MJX-TEX .mjx-sop mjx-c[c="2016"]:before{width:.778em;padding:.602em 0 0;content:"\2016"}.MJX-TEX .mjx-sop mjx-c[c="2044"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="2191"]:before,.MJX-TEX .mjx-sop mjx-c[c="2193"]:before{width:.667em;padding:.6em 0 0}.MJX-TEX .mjx-sop mjx-c[c="21D1"]:before{width:.778em;padding:.599em 0 0}.MJX-TEX .mjx-sop mjx-c[c="21D3"]:before{width:.778em;padding:.6em 0 0}.MJX-TEX .mjx-sop mjx-c[c="221A"]:before{width:1em;padding:.85em 0 .35em}.MJX-TEX .mjx-sop mjx-c[c="2223"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="2225"]:before{width:.556em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="222B"]:before{width:.472em;padding:.805em 0 .306em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222B"]:last-child:before{width:.61em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222C"]:last-child:before{width:.957em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222D"]:last-child:before{width:1.304em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222E"]:last-child:before{width:.61em}.MJX-TEX .mjx-sop mjx-c[c="230A"]:before,.MJX-TEX .mjx-sop mjx-c[c="230B"]:before,.MJX-TEX .mjx-sop mjx-c[c="2308"]:before,.MJX-TEX .mjx-sop mjx-c[c="2309"]:before{width:.472em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="232A"]:before,.MJX-TEX .mjx-sop mjx-c[c="2329"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX .mjx-sop mjx-c[c="2758"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="27E8"]:before,.MJX-TEX .mjx-sop mjx-c[c="27E9"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="2A0C"]:last-child:before{width:1.776em}.MJX-TEX .mjx-sop mjx-c[c="3008"]:before,.MJX-TEX .mjx-sop mjx-c[c="3009"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX .mjx-lop mjx-c[c="("]:before,.MJX-TEX .mjx-lop mjx-c[c=")"]:before{width:.597em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="/"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="["]:before{width:.472em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="5C"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="]"]:before{width:.472em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="{"]:before,.MJX-TEX .mjx-lop mjx-c[c="}"]:before{width:.667em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2C6"]:before{width:1em;padding:.772em 0 0}.MJX-TEX .mjx-lop mjx-c[c="2DC"]:before{width:1em;padding:.75em 0 0}.MJX-TEX .mjx-lop mjx-c[c="302"]:before{padding:.772em 0 0}.MJX-TEX .mjx-lop mjx-c[c="303"]:before{padding:.75em 0 0}.MJX-TEX .mjx-lop mjx-c[c="2016"]:before{width:.778em;padding:.602em 0 0;content:"\2016"}.MJX-TEX .mjx-lop mjx-c[c="2044"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2191"]:before,.MJX-TEX .mjx-lop mjx-c[c="2193"]:before{width:.667em;padding:.6em 0 0}.MJX-TEX .mjx-lop mjx-c[c="21D1"]:before{width:.778em;padding:.599em 0 0}.MJX-TEX .mjx-lop mjx-c[c="21D3"]:before{width:.778em;padding:.6em 0 0}.MJX-TEX .mjx-lop mjx-c[c="220F"]:before,.MJX-TEX .mjx-lop mjx-c[c="2210"]:before{width:1.278em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="2211"]:before{width:1.444em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="221A"]:before{width:1em;padding:1.15em 0 .65em}.MJX-TEX .mjx-lop mjx-c[c="2223"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="2225"]:before{width:.556em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="222B"]:before{width:.556em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222B"]:last-child:before{width:.944em}.MJX-TEX .mjx-lop mjx-c[c="222C"]:before{width:1.084em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222C"]:last-child:before{width:1.472em}.MJX-TEX .mjx-lop mjx-c[c="222D"]:before{width:1.592em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222D"]:last-child:before{width:1.98em}.MJX-TEX .mjx-lop mjx-c[c="222E"]:before{width:.556em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222E"]:last-child:before{width:.944em}.MJX-TEX .mjx-lop mjx-c[c="22C0"]:before,.MJX-TEX .mjx-lop mjx-c[c="22C1"]:before{width:1.111em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="22C2"]:before{width:1.111em;padding:.949em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="22C3"]:before{width:1.111em;padding:.95em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="230A"]:before,.MJX-TEX .mjx-lop mjx-c[c="230B"]:before,.MJX-TEX .mjx-lop mjx-c[c="2308"]:before,.MJX-TEX .mjx-lop mjx-c[c="2309"]:before{width:.528em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="232A"]:before,.MJX-TEX .mjx-lop mjx-c[c="2329"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2758"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="27E8"]:before,.MJX-TEX .mjx-lop mjx-c[c="27E9"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2A00"]:before,.MJX-TEX .mjx-lop mjx-c[c="2A01"]:before,.MJX-TEX .mjx-lop mjx-c[c="2A02"]:before{width:1.511em;padding:.949em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="2A04"]:before{width:1.111em;padding:.95em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="2A06"]:before{width:1.111em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="2A0C"]:before{width:2.168em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="2A0C"]:last-child:before{width:2.556em}.MJX-TEX .mjx-lop mjx-c[c="3008"]:before,.MJX-TEX .mjx-lop mjx-c[c="3009"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-s3 mjx-c[c="("]:before,.MJX-TEX .mjx-s3 mjx-c[c=")"]:before{width:.736em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="/"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="["]:before{width:.528em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="5C"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="]"]:before{width:.528em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="{"]:before,.MJX-TEX .mjx-s3 mjx-c[c="}"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="2C6"]:before{width:1.444em;padding:.772em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="2DC"]:before{width:1.444em;padding:.749em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="302"]:before{padding:.772em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="303"]:before{padding:.749em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="2044"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="221A"]:before{width:1em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="230A"]:before,.MJX-TEX .mjx-s3 mjx-c[c="230B"]:before,.MJX-TEX .mjx-s3 mjx-c[c="2308"]:before,.MJX-TEX .mjx-s3 mjx-c[c="2309"]:before{width:.583em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="2329"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="232A"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="27E8"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="27E9"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="3008"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="3009"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s4 mjx-c[c="("]:before,.MJX-TEX .mjx-s4 mjx-c[c=")"]:before{width:.792em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="/"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="["]:before{width:.583em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="5C"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="]"]:before{width:.583em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="{"]:before,.MJX-TEX .mjx-s4 mjx-c[c="}"]:before{width:.806em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="2C6"]:before{width:1.889em;padding:.845em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="2DC"]:before{width:1.889em;padding:.823em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="302"]:before{padding:.845em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="303"]:before{padding:.823em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="2044"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="221A"]:before{width:1em;padding:1.75em 0 1.25em}.MJX-TEX .mjx-s4 mjx-c[c="230A"]:before,.MJX-TEX .mjx-s4 mjx-c[c="230B"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2308"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2309"]:before{width:.639em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="232A"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2329"]:before{width:.806em;padding:1.75em 0 1.248em}.MJX-TEX .mjx-s4 mjx-c[c="239B"]:before{width:.875em;padding:1.154em 0 .655em;content:"\239B"}.MJX-TEX .mjx-s4 mjx-c[c="239C"]:before{width:.875em;padding:.61em 0 .01em;content:"\239C"}.MJX-TEX .mjx-s4 mjx-c[c="239D"]:before{width:.875em;padding:1.165em 0 .644em;content:"\239D"}.MJX-TEX .mjx-s4 mjx-c[c="239E"]:before{width:.875em;padding:1.154em 0 .655em;content:"\239E"}.MJX-TEX .mjx-s4 mjx-c[c="239F"]:before{width:.875em;padding:.61em 0 .01em;content:"\239F"}.MJX-TEX .mjx-s4 mjx-c[c="23A0"]:before{width:.875em;padding:1.165em 0 .644em;content:"\23A0"}.MJX-TEX .mjx-s4 mjx-c[c="23A1"]:before{width:.667em;padding:1.154em 0 .645em;content:"\23A1"}.MJX-TEX .mjx-s4 mjx-c[c="23A2"]:before{width:.667em;padding:.602em 0 0;content:"\23A2"}.MJX-TEX .mjx-s4 mjx-c[c="23A3"]:before{width:.667em;padding:1.155em 0 .644em;content:"\23A3"}.MJX-TEX .mjx-s4 mjx-c[c="23A4"]:before{width:.667em;padding:1.154em 0 .645em;content:"\23A4"}.MJX-TEX .mjx-s4 mjx-c[c="23A5"]:before{width:.667em;padding:.602em 0 0;content:"\23A5"}.MJX-TEX .mjx-s4 mjx-c[c="23A6"]:before{width:.667em;padding:1.155em 0 .644em;content:"\23A6"}.MJX-TEX .mjx-s4 mjx-c[c="23A7"]:before{width:.889em;padding:.899em 0 .01em;content:"\23A7"}.MJX-TEX .mjx-s4 mjx-c[c="23A8"]:before{width:.889em;padding:1.16em 0 .66em;content:"\23A8"}.MJX-TEX .mjx-s4 mjx-c[c="23A9"]:before{width:.889em;padding:.01em 0 .899em;content:"\23A9"}.MJX-TEX .mjx-s4 mjx-c[c="23AA"]:before{width:.889em;padding:.29em 0 .015em;content:"\23AA"}.MJX-TEX .mjx-s4 mjx-c[c="23AB"]:before{width:.889em;padding:.899em 0 .01em;content:"\23AB"}.MJX-TEX .mjx-s4 mjx-c[c="23AC"]:before{width:.889em;padding:1.16em 0 .66em;content:"\23AC"}.MJX-TEX .mjx-s4 mjx-c[c="23AD"]:before{width:.889em;padding:.01em 0 .899em;content:"\23AD"}.MJX-TEX .mjx-s4 mjx-c[c="23B7"]:before{width:1.056em;padding:.935em 0 .885em;content:"\23B7"}.MJX-TEX .mjx-s4 mjx-c[c="27E8"]:before,.MJX-TEX .mjx-s4 mjx-c[c="27E9"]:before,.MJX-TEX .mjx-s4 mjx-c[c="3008"]:before,.MJX-TEX .mjx-s4 mjx-c[c="3009"]:before{width:.806em;padding:1.75em 0 1.248em}.MJX-TEX .mjx-s4 mjx-c[c=E000]:before{width:1.056em;padding:.625em 0 .014em;content:"\E000"}.MJX-TEX .mjx-s4 mjx-c[c=E001]:before{width:1.056em;padding:.605em 0 .014em;content:"\E001"}.MJX-TEX .mjx-s4 mjx-c[c=E150]:before{width:.45em;padding:.12em 0 .213em;content:"\E150"}.MJX-TEX .mjx-s4 mjx-c[c=E151]:before{width:.45em;padding:.12em 0 .213em;content:"\E151"}.MJX-TEX .mjx-s4 mjx-c[c=E152]:before{width:.45em;padding:.333em 0 0;content:"\E152"}.MJX-TEX .mjx-s4 mjx-c[c=E153]:before{width:.45em;padding:.333em 0 0;content:"\E153"}.MJX-TEX .mjx-s4 mjx-c[c=E154]:before{width:.4em;padding:.32em 0 .2em;content:"\E154"}.MJX-TEX .mjx-s4 mjx-c[c=E155]:before{width:.9em;padding:.333em 0 0;content:"\E153\E152"}.MJX-TEX .mjx-s4 mjx-c[c=E156]:before{width:.9em;padding:.12em 0 .213em;content:"\E151\E150"}.MJX-TEX .mjx-cal mjx-c[c="0"]:before{padding:.452em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c="1"]:before,.MJX-TEX .mjx-cal mjx-c[c="2"]:before{padding:.453em 0 0}.MJX-TEX .mjx-cal mjx-c[c="3"]:before{padding:.452em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="4"]:before{padding:.464em 0 .194em}.MJX-TEX .mjx-cal mjx-c[c="5"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="7"]:before{padding:.463em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="9"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c=A]:before{width:.798em;padding:.728em 0 .05em}.MJX-TEX .mjx-cal mjx-c[c=B]:before{width:.657em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=C]:before{width:.527em}.MJX-TEX .mjx-cal mjx-c[c=D]:before{width:.771em}.MJX-TEX .mjx-cal mjx-c[c=E]:before{width:.528em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=F]:before{width:.719em;padding:.683em 0 .032em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=F]:last-child:before{width:.829em}.MJX-TEX .mjx-cal mjx-c[c=G]:before{width:.595em;padding:.704em 0 .119em}.MJX-TEX .mjx-cal mjx-c[c=H]:before{width:.845em;padding:.683em 0 .048em}.MJX-TEX .mjx-cal mjx-c[c=I]:before{width:.545em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=I]:last-child:before{width:.642em}.MJX-TEX .mjx-cal mjx-c[c=J]:before{width:.678em;padding:.683em 0 .119em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=J]:last-child:before{width:.839em}.MJX-TEX .mjx-cal mjx-c[c=K]:before{width:.762em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=L]:before{width:.69em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=M]:before{width:1.201em;padding:.705em 0 .05em}.MJX-TEX .mjx-cal mjx-c[c=N]:before{width:.82em;padding:.789em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=N]:last-child:before{width:.979em}.MJX-TEX .mjx-cal mjx-c[c=O]:before{width:.796em}.MJX-TEX .mjx-cal mjx-c[c=P]:before{width:.696em;padding:.683em 0 .057em}.MJX-TEX .mjx-cal mjx-c[c=Q]:before{width:.817em;padding:.705em 0 .131em}.MJX-TEX .mjx-cal mjx-c[c=R]:before{width:.848em}.MJX-TEX .mjx-cal mjx-c[c=S]:before{width:.606em}.MJX-TEX .mjx-cal mjx-c[c=T]:before{width:.545em;padding:.717em 0 .068em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=T]:last-child:before{width:.833em}.MJX-TEX .mjx-cal mjx-c[c=U]:before{width:.626em;padding:.683em 0 .028em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=U]:last-child:before{width:.687em}.MJX-TEX .mjx-cal mjx-c[c=V]:before{width:.613em;padding:.683em 0 .052em}.MJX-TEX .mjx-cal mjx-c[c=W]:before{width:.988em;padding:.683em 0 .053em}.MJX-TEX .mjx-cal mjx-c[c=X]:before{width:.713em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=X]:last-child:before{width:.807em}.MJX-TEX .mjx-cal mjx-c[c=Y]:before{width:.668em;padding:.683em 0 .143em}.MJX-TEX .mjx-cal mjx-c[c=Z]:before{width:.725em}.MJX-TEX .mjx-cal mjx-c[c="391"]:before,.MJX-TEX .mjx-cal mjx-c[c="392"]:before,.MJX-TEX .mjx-cal mjx-c[c="395"]:before,.MJX-TEX .mjx-cal mjx-c[c="396"]:before,.MJX-TEX .mjx-cal mjx-c[c="397"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="397"]:last-child:before{width:.888em}.MJX-TEX .mjx-cal mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="399"]:last-child:before{width:.504em}.MJX-TEX .mjx-cal mjx-c[c="39A"]:before,.MJX-TEX .mjx-cal mjx-c[c="39C"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="39C"]:last-child:before{width:1.051em}.MJX-TEX .mjx-cal mjx-c[c="39D"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="39D"]:last-child:before{width:.888em}.MJX-TEX .mjx-cal mjx-c[c="3A1"]:before,.MJX-TEX .mjx-cal mjx-c[c="39F"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3A1"]:last-child:before{width:.751em}.MJX-TEX .mjx-cal mjx-c[c="3A2"]:before,.MJX-TEX .mjx-cal mjx-c[c="3A4"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3A4"]:last-child:before{width:.704em}.MJX-TEX .mjx-cal mjx-c[c="3A7"]:before,.MJX-TEX .mjx-cal mjx-c[c="3D2"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3D2"]:last-child:before{width:.7em}.MJX-TEX .mjx-cal mjx-c[c="3DC"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3DC"]:last-child:before{width:.749em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="0"]:before{padding:.46em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="1"]:before{padding:.461em 0 0}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="2"]:before{padding:.46em 0 0}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="5"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="6"]:before{padding:.66em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="7"]:before{padding:.476em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="8"]:before{padding:.661em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="9"]:before{padding:.461em 0 .21em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=A]:before{width:.921em;padding:.751em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=A]:last-child:before{width:.989em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=B]:before{width:.748em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=C]:before{width:.613em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=D]:before{width:.892em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=E]:before{width:.607em;padding:.703em 0 .016em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=F]:before{width:.814em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=F]:last-child:before{width:.93em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=G]:before{width:.682em;padding:.703em 0 .113em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=H]:before{width:.987em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=I]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=I]:last-child:before{width:.746em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=J]:before{width:.779em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=J]:last-child:before{width:.937em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=K]:before{width:.871em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=L]:before{width:.788em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=M]:before{width:1.378em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=N]:before{width:.937em;padding:.84em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=N]:last-child:before{width:1.105em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=O]:before{width:.906em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=P]:before{width:.81em;padding:.686em 0 .067em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Q]:before{width:.939em;padding:.703em 0 .146em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=R]:before{width:.99em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=S]:before{width:.696em;padding:.703em 0 .016em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=T]:before{width:.644em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=T]:last-child:before{width:.947em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=U]:before{width:.715em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=U]:last-child:before{width:.771em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=V]:before{width:.737em;padding:.686em 0 .077em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=W]:before{width:1.169em;padding:.686em 0 .077em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=X]:before{width:.817em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=X]:last-child:before{width:.906em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Y]:before{width:.759em;padding:.686em 0 .164em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Z]:before{width:.818em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=f]:before{padding:.701em 0 .201em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=f]:last-child:before{width:.624em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=h]:before{padding:.694em 0 .008em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=k]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c=l]:before{padding:.694em 0 .008em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="392"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="393"]:last-child:before{width:.777em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="397"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="399"]:last-child:before{width:.573em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39A"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39C"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39C"]:last-child:before{width:1.219em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39D"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39D"]:last-child:before{width:1.027em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39F"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A1"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A1"]:last-child:before{width:.847em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A2"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A4"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A4"]:last-child:before{width:.772em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A5"]:last-child:before{width:.802em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A7"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A8"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3D2"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3D2"]:last-child:before{width:.802em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3DC"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3DC"]:last-child:before{width:.809em}.MJX-TEX .mjx-os mjx-c[c="0"]:before{padding:.452em 0 .022em}.MJX-TEX .mjx-os mjx-c[c="1"]:before,.MJX-TEX .mjx-os mjx-c[c="2"]:before{padding:.453em 0 0}.MJX-TEX .mjx-os mjx-c[c="3"]:before{padding:.452em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="4"]:before{padding:.464em 0 .194em}.MJX-TEX .mjx-os mjx-c[c="5"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="7"]:before{padding:.463em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="9"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-os mjx-c[c=A]:before{width:.798em;padding:.728em 0 .05em}.MJX-TEX .mjx-os mjx-c[c=B]:before{width:.657em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=C]:before{width:.527em}.MJX-TEX .mjx-os mjx-c[c=D]:before{width:.771em}.MJX-TEX .mjx-os mjx-c[c=E]:before{width:.528em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=F]:before{width:.719em;padding:.683em 0 .032em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=F]:last-child:before{width:.829em}.MJX-TEX .mjx-os mjx-c[c=G]:before{width:.595em;padding:.704em 0 .119em}.MJX-TEX .mjx-os mjx-c[c=H]:before{width:.845em;padding:.683em 0 .048em}.MJX-TEX .mjx-os mjx-c[c=I]:before{width:.545em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=I]:last-child:before{width:.642em}.MJX-TEX .mjx-os mjx-c[c=J]:before{width:.678em;padding:.683em 0 .119em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=J]:last-child:before{width:.839em}.MJX-TEX .mjx-os mjx-c[c=K]:before{width:.762em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=L]:before{width:.69em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=M]:before{width:1.201em;padding:.705em 0 .05em}.MJX-TEX .mjx-os mjx-c[c=N]:before{width:.82em;padding:.789em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=N]:last-child:before{width:.979em}.MJX-TEX .mjx-os mjx-c[c=O]:before{width:.796em}.MJX-TEX .mjx-os mjx-c[c=P]:before{width:.696em;padding:.683em 0 .057em}.MJX-TEX .mjx-os mjx-c[c=Q]:before{width:.817em;padding:.705em 0 .131em}.MJX-TEX .mjx-os mjx-c[c=R]:before{width:.848em}.MJX-TEX .mjx-os mjx-c[c=S]:before{width:.606em}.MJX-TEX .mjx-os mjx-c[c=T]:before{width:.545em;padding:.717em 0 .068em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=T]:last-child:before{width:.833em}.MJX-TEX .mjx-os mjx-c[c=U]:before{width:.626em;padding:.683em 0 .028em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=U]:last-child:before{width:.687em}.MJX-TEX .mjx-os mjx-c[c=V]:before{width:.613em;padding:.683em 0 .052em}.MJX-TEX .mjx-os mjx-c[c=W]:before{width:.988em;padding:.683em 0 .053em}.MJX-TEX .mjx-os mjx-c[c=X]:before{width:.713em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=X]:last-child:before{width:.807em}.MJX-TEX .mjx-os mjx-c[c=Y]:before{width:.668em;padding:.683em 0 .143em}.MJX-TEX .mjx-os mjx-c[c=Z]:before{width:.725em}.MJX-TEX .mjx-os mjx-c[c="3A1"]:before,.MJX-TEX .mjx-os mjx-c[c="3A2"]:before,.MJX-TEX .mjx-os mjx-c[c="3A4"]:before,.MJX-TEX .mjx-os mjx-c[c="3A7"]:before,.MJX-TEX .mjx-os mjx-c[c="3D2"]:before,.MJX-TEX .mjx-os mjx-c[c="3DC"]:before,.MJX-TEX .mjx-os mjx-c[c="39A"]:before,.MJX-TEX .mjx-os mjx-c[c="39C"]:before,.MJX-TEX .mjx-os mjx-c[c="39D"]:before,.MJX-TEX .mjx-os mjx-c[c="39F"]:before,.MJX-TEX .mjx-os mjx-c[c="391"]:before,.MJX-TEX .mjx-os mjx-c[c="392"]:before,.MJX-TEX .mjx-os mjx-c[c="395"]:before,.MJX-TEX .mjx-os mjx-c[c="396"]:before,.MJX-TEX .mjx-os mjx-c[c="397"]:before,.MJX-TEX .mjx-os mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-os.mjx-b mjx-c[c="0"]:before{padding:.46em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="1"]:before{padding:.461em 0 0}.MJX-TEX .mjx-os.mjx-b mjx-c[c="2"]:before{padding:.46em 0 0}.MJX-TEX .mjx-os.mjx-b mjx-c[c="3"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="5"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="6"]:before{padding:.66em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="7"]:before{padding:.476em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="8"]:before{padding:.661em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="9"]:before{padding:.461em 0 .21em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=A]:before{width:.921em;padding:.751em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=A]:last-child:before{width:.989em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=B]:before{width:.748em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=C]:before{width:.613em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=D]:before{width:.892em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=E]:before{width:.607em;padding:.703em 0 .016em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=F]:before{width:.814em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=F]:last-child:before{width:.93em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=G]:before{width:.682em;padding:.703em 0 .113em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=H]:before{width:.987em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=I]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=I]:last-child:before{width:.746em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=J]:before{width:.779em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=J]:last-child:before{width:.937em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=K]:before{width:.871em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=L]:before{width:.788em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=M]:before{width:1.378em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=N]:before{width:.937em;padding:.84em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=N]:last-child:before{width:1.105em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=O]:before{width:.906em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=P]:before{width:.81em;padding:.686em 0 .067em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Q]:before{width:.939em;padding:.703em 0 .146em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=R]:before{width:.99em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=S]:before{width:.696em;padding:.703em 0 .016em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=T]:before{width:.644em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=T]:last-child:before{width:.947em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=U]:before{width:.715em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=U]:last-child:before{width:.771em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=V]:before{width:.737em;padding:.686em 0 .077em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=W]:before{width:1.169em;padding:.686em 0 .077em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=X]:before{width:.817em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=X]:last-child:before{width:.906em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Y]:before{width:.759em;padding:.686em 0 .164em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Z]:before{width:.818em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="!"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="!"]:last-child:before{width:.38em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="27"]:last-child:before{width:.377em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="("]:last-child:before{width:.517em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="*"]:last-child:before{width:.584em}.MJX-TEX .mjx-mit mjx-c[c="/"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="/"]:last-child:before{width:.617em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="0"]:last-child:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3"]:last-child:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="5"]:last-child:before{width:.567em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="6"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="7"]:last-child:before{width:.634em}.MJX-TEX .mjx-mit mjx-c[c=A]:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c=B]:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c=C]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=C]:last-child:before{width:.812em}.MJX-TEX .mjx-mit mjx-c[c=D]:before{width:.755em}.MJX-TEX .mjx-mit mjx-c[c=E]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=E]:last-child:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=F]:last-child:before{width:.731em}.MJX-TEX .mjx-mit mjx-c[c=G]:before{width:.774em}.MJX-TEX .mjx-mit mjx-c[c=H]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=H]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=I]:before{width:.386em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=I]:last-child:before{width:.508em}.MJX-TEX .mjx-mit mjx-c[c=J]:before{width:.525em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=J]:last-child:before{width:.622em}.MJX-TEX .mjx-mit mjx-c[c=K]:before{width:.769em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=K]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c=L]:before{width:.627em}.MJX-TEX .mjx-mit mjx-c[c=M]:before{width:.897em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=M]:last-child:before{width:1.01em}.MJX-TEX .mjx-mit mjx-c[c=N]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=N]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=O]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c=P]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=P]:last-child:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c=Q]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c=R]:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c=S]:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=S]:last-child:before{width:.633em}.MJX-TEX .mjx-mit mjx-c[c=T]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=T]:last-child:before{width:.806em}.MJX-TEX .mjx-mit mjx-c[c=U]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=U]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=V]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=V]:last-child:before{width:.868em}.MJX-TEX .mjx-mit mjx-c[c=W]:before{width:.999em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=W]:last-child:before{width:1.124em}.MJX-TEX .mjx-mit mjx-c[c=X]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=X]:last-child:before{width:.825em}.MJX-TEX .mjx-mit mjx-c[c=Y]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=Y]:last-child:before{width:.875em}.MJX-TEX .mjx-mit mjx-c[c=Z]:before{width:.613em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=Z]:last-child:before{width:.704em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="["]:last-child:before{width:.446em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="]"]:last-child:before{width:.359em}.MJX-TEX .mjx-mit mjx-c[c=a]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=b]:before,.MJX-TEX .mjx-mit mjx-c[c=c]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=d]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=d]:last-child:before{width:.567em}.MJX-TEX .mjx-mit mjx-c[c=e]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=f]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=f]:last-child:before{width:.45em}.MJX-TEX .mjx-mit mjx-c[c=g]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=h]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=i]:before{width:.307em;padding:.656em 0 .01em}.MJX-TEX .mjx-mit mjx-c[c=j]:before{width:.307em;padding:.656em 0 .204em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=j]:last-child:before{width:.364em}.MJX-TEX .mjx-mit mjx-c[c=k]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=l]:before{width:.256em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=l]:last-child:before{width:.312em}.MJX-TEX .mjx-mit mjx-c[c=m]:before{width:.818em}.MJX-TEX .mjx-mit mjx-c[c=n]:before{width:.562em}.MJX-TEX .mjx-mit mjx-c[c=o]:before,.MJX-TEX .mjx-mit mjx-c[c=p]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=q]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=r]:before{width:.422em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=r]:last-child:before{width:.484em}.MJX-TEX .mjx-mit mjx-c[c=s]:before{width:.409em}.MJX-TEX .mjx-mit mjx-c[c=t]:before{width:.332em}.MJX-TEX .mjx-mit mjx-c[c=u]:before{width:.537em}.MJX-TEX .mjx-mit mjx-c[c=v]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=w]:before{width:.664em}.MJX-TEX .mjx-mit mjx-c[c=x]:before{width:.464em}.MJX-TEX .mjx-mit mjx-c[c=y]:before{width:.486em}.MJX-TEX .mjx-mit mjx-c[c=z]:before{width:.409em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=z]:last-child:before{width:.466em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="~"]:last-child:before{width:.571em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="304"]:last-child:before{width:.054em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="306"]:last-child:before{width:.062em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="30B"]:last-child:before{width:.065em}.MJX-TEX .mjx-mit mjx-c[c="391"]:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c="392"]:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c="393"]:before{width:.627em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="393"]:last-child:before{width:.705em}.MJX-TEX .mjx-mit mjx-c[c="394"]:before{width:.818em}.MJX-TEX .mjx-mit mjx-c[c="395"]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="395"]:last-child:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c="396"]:before{width:.613em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="396"]:last-child:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c="397"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="397"]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c="398"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="399"]:before{width:.386em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="399"]:last-child:before{width:.508em}.MJX-TEX .mjx-mit mjx-c[c="39A"]:before{width:.769em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39A"]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c="39B"]:before{width:.692em}.MJX-TEX .mjx-mit mjx-c[c="39C"]:before{width:.897em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39C"]:last-child:before{width:1.01em}.MJX-TEX .mjx-mit mjx-c[c="39D"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39D"]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c="39E"]:before{width:.664em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39E"]:last-child:before{width:.754em}.MJX-TEX .mjx-mit mjx-c[c="39F"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="3A0"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A0"]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c="3A1"]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A1"]:last-child:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c="3A2"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="3A3"]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A3"]:last-child:before{width:.782em}.MJX-TEX .mjx-mit mjx-c[c="3A4"]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A4"]:last-child:before{width:.806em}.MJX-TEX .mjx-mit mjx-c[c="3A5"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A5"]:last-child:before{width:.832em}.MJX-TEX .mjx-mit mjx-c[c="3A6"]:before{width:.716em}.MJX-TEX .mjx-mit mjx-c[c="3A7"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A7"]:last-child:before{width:.825em}.MJX-TEX .mjx-mit mjx-c[c="3A8"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A8"]:last-child:before{width:.824em}.MJX-TEX .mjx-mit mjx-c[c="3A9"]:before{width:.716em}.MJX-TEX .mjx-mit mjx-c[c="3D2"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3D2"]:last-child:before{width:.832em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3DC"]:last-child:before{width:.731em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2018"]:last-child:before{width:.362em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2019"]:last-child:before{width:.377em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="201C"]:last-child:before{width:.606em}.MJX-TEX .mjx-mit mjx-c[c="2044"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2044"]:last-child:before{width:.617em}.MJX-TEX .mjx-mit mjx-c[c="2206"]:before{width:.818em}.MJX-TEX .mjx-v mjx-c[c=A]:before{width:.722em;padding:.701em 0 0}.MJX-TEX .mjx-v mjx-c[c=B]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=D]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=E]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-v mjx-c[c=G]:before,.MJX-TEX .mjx-v mjx-c[c=H]:before{width:.778em}.MJX-TEX .mjx-v mjx-c[c=I]:before{width:.389em}.MJX-TEX .mjx-v mjx-c[c=J]:before{width:.5em;padding:.683em 0 .077em}.MJX-TEX .mjx-v mjx-c[c=L]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=M]:before{width:.944em}.MJX-TEX .mjx-v mjx-c[c=N]:before{width:.722em;padding:.683em 0 .02em}.MJX-TEX .mjx-v mjx-c[c=P]:before{width:.611em}.MJX-TEX .mjx-v mjx-c[c=Q]:before{padding:.701em 0 .181em}.MJX-TEX .mjx-v mjx-c[c=R]:before{width:.722em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c=S]:before{padding:.702em 0 .012em}.MJX-TEX .mjx-v mjx-c[c=T]:before{width:.667em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c=U]:before,.MJX-TEX .mjx-v mjx-c[c=V]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=W]:before{width:1em}.MJX-TEX .mjx-v mjx-c[c=X]:before,.MJX-TEX .mjx-v mjx-c[c=Y]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=Z]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=k]:before{width:.556em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c="2C6"]:before{width:2.333em;padding:.845em 0 0}.MJX-TEX .mjx-v mjx-c[c="2DC"]:before{width:2.333em;padding:.899em 0 0}.MJX-TEX .mjx-v mjx-c[c="302"]:before{padding:.845em 0 0}.MJX-TEX .mjx-v mjx-c[c="303"]:before{padding:.899em 0 0}.MJX-TEX .mjx-v mjx-c[c="3DC"]:before{width:.778em;padding:.605em 0 .085em;content:"\E008"}.MJX-TEX .mjx-v mjx-c[c="3F0"]:before{content:"\E009"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-v mjx-c[c="3F0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-v mjx-c[c="3F0"]:last-child:before{width:.734em}.MJX-TEX .mjx-v mjx-c[c="2190"]:before,.MJX-TEX .mjx-v mjx-c[c="2192"]:before{width:.5em;padding:.437em 0 0}.MJX-TEX .mjx-v mjx-c[c="21CC"]:before{padding:.514em 0 .014em}.MJX-TEX .mjx-v mjx-c[c="2204"]:before{padding:.86em 0 .166em;content:"\2204"}.MJX-TEX .mjx-v mjx-c[c="2205"]:before{width:.778em;padding:.587em 0 0}.MJX-TEX .mjx-v mjx-c[c="2212"]:before{width:.5em;padding:.27em 0 0}.MJX-TEX .mjx-v mjx-c[c="221D"]:before{padding:.472em 0 0}.MJX-TEX .mjx-v mjx-c[c="2223"]:before{width:.222em;padding:.43em 0 .023em}.MJX-TEX .mjx-v mjx-c[c="2224"]:before{width:.222em;padding:.43em 0 .023em;content:"\E006"}.MJX-TEX .mjx-v mjx-c[c="2225"]:before{width:.389em;padding:.431em 0 .023em}.MJX-TEX .mjx-v mjx-c[c="2226"]:before{width:.389em;padding:.431em 0 .024em;content:"\E007"}.MJX-TEX .mjx-v mjx-c[c="2268"]:before{content:"\E00C"}.MJX-TEX .mjx-v mjx-c[c="2269"]:before{content:"\E00D"}.MJX-TEX .mjx-v mjx-c[c="2270"]:before{padding:.919em 0 .421em;content:"\E011"}.MJX-TEX .mjx-v mjx-c[c="2271"]:before{padding:.919em 0 .421em;content:"\E00E"}.MJX-TEX .mjx-v mjx-c[c="2288"]:before{padding:.828em 0 .33em;content:"\E016"}.MJX-TEX .mjx-v mjx-c[c="2289"]:before{padding:.828em 0 .33em;content:"\E018"}.MJX-TEX .mjx-v mjx-c[c="228A"]:before{padding:.634em 0 .255em;content:"\E01A"}.MJX-TEX .mjx-v mjx-c[c="228B"]:before{padding:.634em 0 .254em;content:"\E01B"}.MJX-TEX .mjx-v mjx-c[c="22A8"]:before{width:.611em;padding:.694em 0 0}.MJX-TEX .mjx-v mjx-c[c="22C5"]:before{padding:.189em 0 0}.MJX-TEX .mjx-v mjx-c[c="2322"]:before{width:.778em;padding:.378em 0 0}.MJX-TEX .mjx-v mjx-c[c="2323"]:before{width:.778em}.MJX-TEX .mjx-v mjx-c[c="25B3"]:before{width:.722em;padding:.575em 0 .02em}.MJX-TEX .mjx-v mjx-c[c="25BD"]:before{width:.722em;padding:.576em 0 .019em}.MJX-TEX .mjx-v mjx-c[c="2A87"]:before{padding:.801em 0 .303em;content:"\E010"}.MJX-TEX .mjx-v mjx-c[c="2A88"]:before{padding:.801em 0 .303em;content:"\E00F"}.MJX-TEX .mjx-v mjx-c[c="2ACB"]:before{padding:.752em 0 .332em;content:"\E017"}.MJX-TEX .mjx-v mjx-c[c="2ACC"]:before{padding:.752em 0 .333em;content:"\E019"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-v mjx-c[c=E009]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-v mjx-c[c=E009]:last-child:before{width:.734em}mjx-container[display=true]{overflow-x:auto;overflow-y:hidden}.spinner[data-v-1bbcb91a]{width:40px;height:40px;margin:auto;-webkit-animation:sk-rotateplane-data-v-1bbcb91a 1.2s ease-in-out infinite;animation:sk-rotateplane-data-v-1bbcb91a 1.2s ease-in-out infinite}@-webkit-keyframes sk-rotateplane-data-v-1bbcb91a{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}to{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes sk-rotateplane-data-v-1bbcb91a{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format("woff")}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.markdown-body .anchor:focus{outline:none}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{background-color:#b31d28;color:#fafbfc}.markdown-body .pl-c2{background-color:#d73a49;color:#fafbfc}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{color:#22863a;font-weight:700}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#005cc5;font-weight:700}.markdown-body .pl-mi{color:#24292e;font-style:italic}.markdown-body .pl-mb{color:#24292e;font-weight:700}.markdown-body .pl-md{background-color:#ffeef0;color:#b31d28}.markdown-body .pl-mi1{background-color:#f0fff4;color:#22863a}.markdown-body .pl-mc{background-color:#ffebda;color:#e36209}.markdown-body .pl-mi2{background-color:#005cc5;color:#f6f8fa}.markdown-body .pl-mdr{color:#6f42c1;font-weight:700}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{color:#032f62;text-decoration:underline}.markdown-body details{display:block}.markdown-body summary{display:list-item}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{background:transparent;border-bottom:1px solid #dfe2e5;height:0;margin:15px 0;overflow:hidden}.markdown-body hr:after,.markdown-body hr:before{content:"";display:table}.markdown-body hr:after{clear:both}.markdown-body table{border-collapse:collapse;border-spacing:0}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-bottom:0;margin-top:0}.markdown-body h1{font-size:32px}.markdown-body h1,.markdown-body h2{font-weight:600}.markdown-body h2{font-size:24px}.markdown-body h3{font-size:20px}.markdown-body h3,.markdown-body h4{font-weight:600}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:14px}.markdown-body h5,.markdown-body h6{font-weight:600}.markdown-body h6{font-size:12px}.markdown-body p{margin-bottom:10px;margin-top:0}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-bottom:0;margin-top:0}.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.markdown-body .border{border:1px solid #e1e4e8!important}.markdown-body .border-0{border:0!important}.markdown-body .border-bottom{border-bottom:1px solid #e1e4e8!important}.markdown-body .rounded-1{border-radius:3px!important}.markdown-body .bg-white{background-color:#fff!important}.markdown-body .bg-gray-light{background-color:#fafbfc!important}.markdown-body .text-gray-light{color:#6a737d!important}.markdown-body .mb-0{margin-bottom:0!important}.markdown-body .my-2{margin-bottom:8px!important;margin-top:8px!important}.markdown-body .py-0{padding-bottom:0!important;padding-top:0!important}.markdown-body .py-2{padding-bottom:8px!important;padding-top:8px!important}.markdown-body .pl-3,.markdown-body .px-3{padding-left:16px!important}.markdown-body .px-3{padding-right:16px!important}.markdown-body .f6{font-size:12px!important}.markdown-body .lh-condensed{line-height:1.25!important}.markdown-body .text-bold{font-weight:600!important}.markdown-body:after,.markdown-body:before{content:"";display:table}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:16px;margin-top:0}.markdown-body hr{background-color:#e1e4e8;border:0;height:.25em;margin:24px 0;padding:0}.markdown-body blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1em}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5;font-size:11px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{border-bottom:1px solid #eaecef;padding-bottom:.3em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:#6a737d;font-size:.85em}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.markdown-body dl dd{margin-bottom:16px;padding:0 16px}.markdown-body table{display:block;overflow:auto;width:100%}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{border:1px solid #dfe2e5;padding:6px 13px}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{background-color:#fff;box-sizing:content-box;max-width:100%}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{background-color:rgba(27,31,35,.05);border-radius:3px;font-size:85%;margin:0;padding:.2em .4em}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:transparent;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{background-color:#f6f8fa;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}.markdown-body pre code{background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}.markdown-body .commit-tease-sha{color:#444d56;display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:90%}.markdown-body .blob-wrapper{border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow-x:auto;overflow-y:hidden}.markdown-body .blob-wrapper-embedded{max-height:240px;overflow-y:auto}.markdown-body .blob-num{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(27,31,35,.3);cursor:pointer;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;line-height:20px;min-width:50px;padding-left:10px;padding-right:10px;text-align:right;user-select:none;vertical-align:top;white-space:nowrap;width:1%}.markdown-body .blob-num:hover{color:rgba(27,31,35,.6)}.markdown-body .blob-num:before{content:attr(data-line-number)}.markdown-body .blob-code{line-height:20px;padding-left:10px;padding-right:10px;position:relative;vertical-align:top}.markdown-body .blob-code-inner{color:#24292e;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;overflow:visible;white-space:pre;word-wrap:normal}.markdown-body .pl-token.active,.markdown-body .pl-token:hover{background:#ffea7f;cursor:pointer}.markdown-body kbd{background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1;color:#444d56;display:inline-block;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body :checked+.radio-label{border-color:#0366d6;position:relative;z-index:1}.markdown-body .tab-size[data-tab-size="1"]{-moz-tab-size:1;-o-tab-size:1;tab-size:1}.markdown-body .tab-size[data-tab-size="2"]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}.markdown-body .tab-size[data-tab-size="3"]{-moz-tab-size:3;-o-tab-size:3;tab-size:3}.markdown-body .tab-size[data-tab-size="4"]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.markdown-body .tab-size[data-tab-size="5"]{-moz-tab-size:5;-o-tab-size:5;tab-size:5}.markdown-body .tab-size[data-tab-size="6"]{-moz-tab-size:6;-o-tab-size:6;tab-size:6}.markdown-body .tab-size[data-tab-size="7"]{-moz-tab-size:7;-o-tab-size:7;tab-size:7}.markdown-body .tab-size[data-tab-size="8"]{-moz-tab-size:8;-o-tab-size:8;tab-size:8}.markdown-body .tab-size[data-tab-size="9"]{-moz-tab-size:9;-o-tab-size:9;tab-size:9}.markdown-body .tab-size[data-tab-size="10"]{-moz-tab-size:10;-o-tab-size:10;tab-size:10}.markdown-body .tab-size[data-tab-size="11"]{-moz-tab-size:11;-o-tab-size:11;tab-size:11}.markdown-body .tab-size[data-tab-size="12"]{-moz-tab-size:12;-o-tab-size:12;tab-size:12}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body .pl-7{padding-left:48px!important}.markdown-body .pl-8{padding-left:64px!important}.markdown-body .pl-9{padding-left:80px!important}.markdown-body .pl-10{padding-left:96px!important}.markdown-body .pl-11{padding-left:112px!important}.markdown-body .pl-12{padding-left:128px!important}.clearfix:after,.vssue .vssue-new-comment .vssue-new-comment-footer:after{display:block;clear:both;content:""}.vssue{width:100%;color:#e6e6e6;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:10px}.vssue .vssue-button{outline:none;cursor:pointer;padding:10px 20px;font-size:1.05;font-weight:700;color:#eb7132;background-color:transparent;border:2px solid #eb7132;border-radius:10px}.vssue .vssue-button:disabled{cursor:not-allowed;color:#754d34;border-color:#754d34}.vssue .vssue-button:disabled .vssue-icon{fill:#754d34}.vssue .vssue-button:not(:disabled).vssue-button-default{color:#a3aab1;border-color:#a3aab1}.vssue .vssue-button:not(:disabled).vssue-button-primary{color:#eb7132;border-color:#eb7132}.vssue .vssue-icon{width:1em;height:1em;vertical-align:-.15em;fill:#eb7132;overflow:hidden}.vssue .vssue-icon-loading{-webkit-animation:vssue-keyframe-rotation 1s linear infinite;animation:vssue-keyframe-rotation 1s linear infinite}@-webkit-keyframes vssue-keyframe-rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes vssue-keyframe-rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.vssue .fade-appear-active,.vssue .fade-enter-active{transition:all .3s ease}.vssue .fade-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.vssue .fade-appear,.vssue .fade-enter,.vssue .fade-leave-to{opacity:0}.vssue .vssue-notice{position:relative;z-index:100;transform:translateY(-11px)}.vssue .vssue-notice .vssue-alert{position:absolute;z-index:101;cursor:pointer;top:0;padding:10px 20px;width:100%;color:#eb7132;border:2px solid #f9d4c2;border-radius:5px;background-color:#fef8f5}.vssue .vssue-notice .vssue-progress{position:absolute;top:0;left:0;height:2px;background-color:#eb7132}.vssue .vssue-status{text-align:center;padding-top:20px;padding-bottom:10px;color:#eb7132}.vssue .vssue-status .vssue-icon{font-size:1.4em}.vssue .vssue-status .vssue-status-info{margin-top:10px;margin-bottom:10px}.vssue .vssue-header{padding-bottom:10px;border-bottom:1px solid #754d34;margin-bottom:10px;overflow:hidden}.vssue .vssue-header .vssue-header-powered-by{float:right}.vssue .vssue-new-comment{border-bottom:1px solid #754d34;margin-top:10px;margin-bottom:10px}.vssue .vssue-new-comment .vssue-comment-avatar{float:left;width:50px;height:50px}.vssue .vssue-new-comment .vssue-comment-avatar img{width:50px;height:50px}.vssue .vssue-new-comment .vssue-comment-avatar .vssue-icon{cursor:pointer;padding:5px;font-size:50px;fill:#757f8a}.vssue .vssue-new-comment .vssue-new-comment-body{position:relative}@media screen and (max-width:850px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:60px}}@media screen and (min-width:851px){.vssue .vssue-new-comment .vssue-new-comment-body{margin-left:70px}}.vssue .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.vssue .vssue-new-comment .vssue-new-comment-footer{margin-top:10px;margin-bottom:10px}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user .vssue-logout{cursor:pointer;text-decoration:underline;color:#a3aab1;font-weight:400}@media screen and (max-width:850px){.vssue .vssue-new-comment .vssue-new-comment-footer{text-align:center}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations{margin-top:10px}}@media screen and (min-width:851px){.vssue .vssue-new-comment .vssue-new-comment-footer{margin-left:70px;text-align:right}.vssue .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{float:left}}.vssue .vssue-new-comment .vssue-new-comment-input{resize:none;outline:none;width:100%;padding:15px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;background-color:#fef8f5;border:1px solid #754d34;border-radius:5px}.vssue .vssue-new-comment .vssue-new-comment-input:disabled{cursor:not-allowed;background-color:#b67d5a}.vssue .vssue-new-comment .vssue-new-comment-input:focus{background-color:#fff;border-color:#f5b898;box-shadow:0 0 1px 1px #f5b898}.vssue .vssue-new-comment .vssue-new-comment-input::-moz-placeholder{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-input:-ms-input-placeholder{color:#a3aab1}.vssue .vssue-new-comment .vssue-new-comment-input::placeholder{color:#a3aab1}.vssue .vssue-comments .vssue-comment{margin:15px 0}.vssue .vssue-comments .vssue-comment.vssue-comment-edit-mode .vssue-comment-main{border-color:#f5b898;box-shadow:0 0 1px 1px #f5b898}.vssue .vssue-comments .vssue-comment.vssue-comment-disabled{pointer-events:none}.vssue .vssue-comments .vssue-comment.vssue-comment-disabled .vssue-comment-body{background-color:#e0c7b8}.vssue .vssue-comments .vssue-comment .vssue-comment-avatar{float:left;width:50px;height:50px}.vssue .vssue-comments .vssue-comment .vssue-comment-avatar img{width:50px;height:50px}@media screen and (max-width:850px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:60px}}@media screen and (min-width:851px){.vssue .vssue-comments .vssue-comment .vssue-comment-body{margin-left:70px}}.vssue .vssue-comments .vssue-comment .vssue-comment-header{padding:10px 15px;overflow:hidden;border-top-left-radius:5px;border-top-right-radius:5px;border:1px solid #754d34;border-bottom:none}.vssue .vssue-comments .vssue-comment .vssue-comment-header .vssue-comment-created-at{float:right;cursor:default;color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-main{padding:15px;border:1px solid #754d34}.vssue .vssue-comments .vssue-comment .vssue-comment-main .vssue-edit-comment-input{resize:none;outline:none;border:none;width:100%;background:transparent}.vssue .vssue-comments .vssue-comment .vssue-comment-footer{padding:10px 15px;overflow:hidden;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border:1px solid #754d34;border-top:none}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-hint{cursor:default;color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-reactions .vssue-comment-reaction{cursor:pointer;display:inline-block;margin-right:8px;color:#eb7132}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations{float:right;color:#eb7132}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation{cursor:pointer;margin-left:8px}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation.vssue-comment-operation-muted{color:#a3aab1}.vssue .vssue-comments .vssue-comment .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation.vssue-comment-operation-muted .vssue-icon{fill:#a3aab1}.vssue .vssue-pagination{cursor:default;display:flex;padding:5px;color:#a3aab1}@media screen and (max-width:850px){.vssue .vssue-pagination{flex-direction:column;justify-content:center;text-align:center}}.vssue .vssue-pagination .vssue-pagination-loading,.vssue .vssue-pagination .vssue-pagination-page,.vssue .vssue-pagination .vssue-pagination-per-page{flex:1}@media screen and (max-width:850px){.vssue .vssue-pagination .vssue-pagination-page{margin-top:10px}}@media screen and (min-width:851px){.vssue .vssue-pagination .vssue-pagination-page{text-align:right}}.vssue .vssue-pagination .vssue-pagination-select{outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #f5b898;padding-left:.2rem;padding-right:1rem;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M676.395 432.896a21.333 21.333 0 0 0-30.166 0L511.061 568.021 377.728 434.645a21.333 21.333 0 0 0-30.165 30.166l148.394 148.48a21.419 21.419 0 0 0 30.208 0l150.23-150.187a21.333 21.333 0 0 0 0-30.208'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100%}.vssue .vssue-pagination .vssue-pagination-select:disabled{cursor:not-allowed}.vssue .vssue-pagination .vssue-pagination-select:focus{background-color:#fff;box-shadow:0 0 .2px .2px #f5b898}.vssue .vssue-pagination .vssue-pagination-link{display:inline-block;min-width:1em;text-align:center}.vssue .vssue-pagination .vssue-pagination-link.disabled{pointer-events:none}.vssue .vssue-pagination .vssue-pagination-link:not(.disabled){color:#eb7132;font-weight:500;cursor:pointer}.vssue,.vssue *{box-sizing:border-box}.vssue :not(.vssue-comment-content) a{cursor:pointer;font-weight:500;color:#eb7132;text-decoration:none}.vssue :not(.vssue-comment-content) hr{display:block;height:1px;border:0;border-top:1px solid #754d34;margin:1.2rem 0;padding:0}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.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}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center;cursor:pointer}.home .hero .logo-wrapper{margin:3rem auto 1.5rem}.home .hero .logo-wrapper .v-lazy-image{filter:blur(.625rem);will-change:filter;width:100%}.home .hero .logo-wrapper .v-lazy-image-loaded{filter:blur(0)}.home .hero .logo-wrapper img{display:block}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;line-height:1.3;color:#f0f0f0}.home .hero .action-button{display:inline-block;color:#fff;background-color:#eb7132;padding:.8rem 1.6rem;border-radius:.25rem;transition:background-color .1s ease;box-sizing:border-box;border-bottom:.063rem solid #e85f18;font-weight:500}.home .hero .action-button:hover{background-color:#ed7f47}.home .features{border-top:.063rem solid #754d34;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-weight:500;border-bottom:none;padding-bottom:0;color:#e9e9e9}.home .feature p{color:#ececec}@media (max-width:44.9375rem){.home .hero .logo-wrapper{margin-top:1.8rem}.home .features{flex-direction:column;align-items:center}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:32.5rem){.home .hero .logo-wrapper{margin-top:1.5rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.5rem auto}}@media (max-width:26.1875rem){.home .hero .logo-wrapper{margin-top:1.2rem;margin-bottom:1.2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .action-button{max-width:14.0625rem;padding:.5rem}}@media (max-width:19.375rem){.home .hero .logo-wrapper{width:95%;min-width:9.375rem}}@media (min-width:19.4375rem){.home .hero .logo-wrapper{width:10.625rem}}@media (min-width:32.5625rem){.home .hero .logo-wrapper{width:44.2%}}@media (min-width:45rem){.home .hero .logo-wrapper{width:16.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#ececec;display:inline-block;border:1px solid #69452f;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#eb7132}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #69452f;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#efefef}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#eb7132}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:850px){.search-box .suggestions{left:0}}@media (max-width:850px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem;text-align:center}.sidebar-button .icon{display:block;width:1.5rem;height:1.5rem}@media (max-width:61.25rem){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#e6e6e6}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#eb7132}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#eb7132}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #eb7132;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:61.25rem){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:61.3125rem){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;padding:.6rem 0;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#eb7132}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:61.25rem){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:61.3125rem){.nav-links a.router-link-active,.nav-links a:hover{color:#e6e6e6}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #ed7c42}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .v-lazy-image{filter:blur(.084375rem);will-change:filter}.navbar .v-lazy-image-loaded{transition:filter .7s;filter:blur(0)}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#e6e6e6;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:61.25rem){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #754d34;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#e6e6e6;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#eb7132;border-left-color:#eb7132}.sidebar-heading.clickable:hover{color:#eb7132}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#e6e6e6;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#eb7132}a.sidebar-link.active{font-weight:600;color:#eb7132;border-left-color:#eb7132}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #754d34;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:850px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.post-details[data-v-652ba438]{display:flex;flex-wrap:wrap;font-style:italic;color:#748e54;margin-top:.625rem}.post-details .author[data-v-652ba438]{font-size:calc(1.0125rem + .15vw);text-align:center;margin-top:.25rem;margin-right:.375rem;line-height:1.5}@media (min-width:75rem){.post-details .author[data-v-652ba438]{font-size:1.125rem}}.post-details .posted-updated-wrapper[data-v-652ba438]{display:flex;flex-wrap:wrap;text-align:center}.post-details .posted-updated-wrapper .posted-wrapper[data-v-652ba438],.post-details .posted-updated-wrapper .updated-wrapper[data-v-652ba438]{margin-top:.25rem}.post-details .posted-updated-wrapper .bullet[data-v-652ba438],.post-details .posted-updated-wrapper .posted[data-v-652ba438],.post-details .posted-updated-wrapper .updated[data-v-652ba438]{font-size:calc(1.0125rem + .15vw);line-height:1.5}@media (min-width:75rem){.post-details .posted-updated-wrapper .bullet[data-v-652ba438],.post-details .posted-updated-wrapper .posted[data-v-652ba438],.post-details .posted-updated-wrapper .updated[data-v-652ba438]{font-size:1.125rem}}.post-details .posted-updated-wrapper .bullet[data-v-652ba438],.post-details .posted-updated-wrapper .posted[data-v-652ba438]{margin-right:.375rem}@media (max-width:61.25rem){.post-details .posted-updated-wrapper[data-v-652ba438],.post-details[data-v-652ba438]{justify-content:center}}@media (max-width:39.9375rem){.video-wrapper[data-v-aeeee8d2]{position:relative;padding-bottom:56.25%;height:0}.video-wrapper iframe[data-v-aeeee8d2]{position:absolute;top:0;left:0;width:100%;height:100%}}@media (min-width:40rem){iframe[data-v-aeeee8d2]{width:35rem;height:19.6875rem}}@media (max-width:61.25rem){.video-wrapper[data-v-aeeee8d2]{text-align:center}}@media (min-width:61.3125rem){.video-wrapper[data-v-aeeee8d2]{position:relative;padding-bottom:19.6875rem;text-align:left}.video-wrapper iframe[data-v-aeeee8d2]{position:absolute;width:100%;height:100%;max-width:35rem;max-height:19.6875rem}}.left-arrow[data-v-547f8e12]{padding-right:.25rem}.right-arrow[data-v-547f8e12]{padding-left:.25rem}.theme-default-content[data-v-2e2f5dca]{padding-bottom:0}.theme-default-content .post-card[data-v-2e2f5dca]{display:flex;align-items:center;margin-top:3.5rem;padding:0 2rem;border:.125rem solid #16181d;border-radius:1.875rem;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;background-image:radial-gradient(circle at center center,#2c303a,#1f2229);cursor:pointer}.theme-default-content .post-card .post-title-and-summary[data-v-2e2f5dca]{flex:8.5}.theme-default-content .post-card .post-title-and-summary .title-wrapper[data-v-2e2f5dca]{display:flex;color:#eb7132;border-bottom:.125rem solid #754d34;margin:1.875rem 0 1.5rem}.theme-default-content .post-card .post-title-and-summary .title-wrapper .title[data-v-2e2f5dca]{border-bottom:0;margin:0}.theme-default-content .post-card .post-title-and-summary .title-wrapper .title[data-v-2e2f5dca]:hover{text-decoration:underline}.theme-default-content .post-card .post-title-and-summary .preview[data-v-2e2f5dca]{margin-top:1rem}.theme-default-content .post-card .post-pic[data-v-2e2f5dca]{flex:1.5;padding-top:1.125rem;padding-left:1.125rem;padding-bottom:1.125rem;transition:transform .2s}.theme-default-content .post-card .post-pic .v-lazy-image[data-v-2e2f5dca]{filter:blur(.375rem);will-change:filter;width:100%}.theme-default-content .post-card .post-pic .v-lazy-image-loaded[data-v-2e2f5dca]{transition:filter .7s;filter:blur(0)}.theme-default-content .post-card[data-v-2e2f5dca]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}.theme-default-content .post-card:hover .post-pic[data-v-2e2f5dca]{transform:scale(1.1)}@media (max-width:61.25rem){.theme-default-content .post-card[data-v-2e2f5dca]{flex-direction:column-reverse}.theme-default-content .post-card .post-title-and-summary .title-wrapper[data-v-2e2f5dca]{justify-content:center;margin:0}.theme-default-content .post-card .post-title-and-summary .preview[data-v-2e2f5dca]{text-align:center;margin-top:.875rem;margin-bottom:1.25rem}.theme-default-content .post-card .post-pic[data-v-2e2f5dca]{padding:1.25rem 0 .875rem;width:9.6875rem}}.pagination[data-v-22f8aaae]{max-width:69.53125rem;margin:0 auto;padding-left:2.5rem;padding-right:2.5rem}.pagination a[data-v-22f8aaae]:hover{text-decoration:underline}@media (max-width:959px){.pagination[data-v-22f8aaae]{padding-left:2rem;padding-right:2rem}}@media (max-width:419px){.pagination[data-v-22f8aaae]{padding-left:1.5rem;padding-right:1.5rem}}.wrapper{max-width:69.53125rem;padding-left:2.5rem;padding-right:2.5rem}@media (max-width:959px){.wrapper{padding-left:2rem;padding-right:2rem}}@media (max-width:419px){.wrapper{padding-left:1.5rem;padding-right:1.5rem}}.post-details-in-post{margin:1.625rem auto 0}.embedded-video{margin:2rem auto 0}@media (max-width:419px){.embedded-video{margin-top:1.5rem}}.comments-wrapper{padding:2rem 2.5rem 0;margin:0 auto;max-width:69.53125rem}.comments-wrapper div.vssue{padding:0}.comments-wrapper div.vssue .vssue-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:.625rem;line-height:1.5;border-bottom-width:.125rem;margin-bottom:0}.comments-wrapper div.vssue .vssue-body .vssue-new-comment{margin:1rem 0;border-bottom-width:.125rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar{display:flex;width:4.375rem;height:4.375rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar img{width:4.375rem;height:4.375rem;border-radius:50%}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar svg{font-size:4.375rem;fill:#424857}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body{display:flex;margin-left:4.375rem;margin-bottom:.375rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input{margin-left:.75rem;border:.125rem solid #16181d;background-image:radial-gradient(circle at center center,#2c303a,#21242c);font-size:calc(1.025rem + .3vw);color:#e6e6e6}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input{font-size:1.25rem}}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:disabled{color:#aaa}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:enabled::-moz-placeholder{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:enabled:-ms-input-placeholder{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:enabled::placeholder{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:enabled:hover,.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input:focus{box-shadow:0 .25rem .25rem 0 #16181d}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer{display:flex;justify-content:center;align-items:center;margin:0 0 1rem 5.125rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{flex-grow:1;line-height:1.5;color:#e6e6e6;margin-top:.5rem;text-align:left;float:none}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-current-user .vssue-logout{color:#aaa;text-decoration:none;font-weight:500}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-current-user .vssue-logout:hover{text-decoration:underline}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations{margin-top:.5rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations .vssue-button{transition:.3s ease;border:.125rem solid #16181d;color:#e6e6e6;font-weight:500;background-color:#21242c}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations .vssue-button:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations .vssue-button:disabled{color:#aaa}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-new-comment-operations .vssue-button:disabled:hover{background-image:none}.comments-wrapper div.vssue .vssue-body .vssue-status{padding:0}.comments-wrapper div.vssue .vssue-body .vssue-status .vssue-icon{font-size:calc(1.075rem + .9vw)}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-status .vssue-icon{font-size:1.75rem}}.comments-wrapper div.vssue .vssue-body .vssue-status .vssue-status-info{margin-top:.625rem;margin-bottom:0;line-height:1.5}.comments-wrapper div.vssue .vssue-body .vssue-notice .vssue-alert{font-size:calc(1.025rem + .3vw);text-align:center;border-color:#16181d;background-image:radial-gradient(circle at center center,#2c303a,#21242c);box-shadow:0 .25rem .25rem 0 #16181d}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-notice .vssue-alert{font-size:1.25rem}}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination{color:#e6e6e6;padding:0;margin-top:1rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select{font-size:calc(1.00625rem + .075vw);font-family:apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:#e6e6e6;padding:.3125rem 1.5rem 0 .3125rem;width:auto;margin:0;border:.125rem solid #16181d;border-radius:.3125rem;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#21242c;background-image:url(/assets/img/arrowDown.6e5eef13.svg),linear-gradient(180deg,#373c49,#21242c);background-repeat:no-repeat;background-position:right .35em top 60%,0 0;background-size:.7em auto,100%}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select{font-size:1.0625rem}}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select::-ms-expand{display:none}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select:hover{box-shadow:0 0 .125rem .125rem #16181d}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select:focus{box-shadow:0 0 .125rem .125rem #16181d;outline:none}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-select:disabled{box-shadow:none}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-per-page{flex:2}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-per-page span{padding-left:.25rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-per-page .vssue-pagination-link{font-size:calc(1.0375rem + .45vw)}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-pagination .vssue-pagination-per-page .vssue-pagination-link{font-size:1.375rem}}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment:not(:last-child){margin:1rem 0 2rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment:last-child{margin:1rem 0 0}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-avatar img{border-radius:50%}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-header{border-width:.125rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-header .vssue-comment-created-at{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-main{border-width:.125rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-main .markdown-body{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-main .markdown-body blockquote{border-color:#586074;color:#8b93a7}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment .vssue-comment-body .vssue-comment-footer{border-width:.125rem}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-main{border-color:#754d34;box-shadow:none}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-main .vssue-edit-comment-input{font-family:apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:calc(1.025rem + .3vw);color:#e6e6e6;padding:0}@media (min-width:75rem){.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-main .vssue-edit-comment-input{font-size:1.25rem}}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-footer .vssue-comment-hint,.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-footer .vssue-comment-operations span[title=Cancel]{color:#e6e6e6}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-edit-mode .vssue-comment-body .vssue-comment-footer .vssue-comment-operations .vssue-comment-operation-muted .vssue-icon{fill:#eb7132}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-disabled .vssue-comment-body{background-color:transparent}.comments-wrapper div.vssue .vssue-body .vssue-comments .vssue-comment-disabled .vssue-comment-body .vssue-comment-main{background-color:rgba(235,113,50,.1)}@media (max-width:1113px){.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer{flex-direction:column}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer .vssue-current-user{text-align:center}}@media (max-width:980px){.vssue .vssue-pagination{flex-direction:row;justify-content:space-between}.vssue .vssue-pagination .vssue-pagination-per-page{text-align:left}.vssue .vssue-pagination .vssue-pagination-page{text-align:right;margin-top:0}}@media (max-width:959px){.comments-wrapper{padding-left:2rem;padding-right:2rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar,.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar img{width:4.0625rem;height:4.0625rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar svg{font-size:4.0625rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body{margin-left:4.0625rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer{margin-left:4.8125rem}}@media (max-width:980px){.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar,.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar img{width:3.75rem;height:3.75rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar svg{font-size:3.75rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body{margin-left:3.75rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer{margin-left:4.5rem}}@media (max-width:575px){.vssue .vssue-pagination{flex-direction:column;justify-content:center;text-align:center}.vssue .vssue-pagination .vssue-pagination-per-page{text-align:center}.vssue .vssue-pagination .vssue-pagination-page{text-align:center;margin-top:.625rem}}@media (max-width:569px){.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar,.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar img{width:3.4375rem;height:3.4375rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-comment-avatar svg{font-size:3.4375rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body{margin-left:3.4375rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-body .vssue-new-comment-input{margin-left:.625rem}.comments-wrapper div.vssue .vssue-body .vssue-new-comment .vssue-new-comment-footer{margin-left:4.0625rem}}@media (max-width:419px){.comments-wrapper{padding-left:1.5rem;padding-right:1.5rem}.comments-wrapper .vssue-comment-header{display:flex;flex-direction:column;align-items:center}.comments-wrapper .vssue-comment-header .vssue-comment-created-at{margin-top:.125rem;text-align:center}}@media (max-width:385px){.comments-wrapper div.vssue .vssue-header{flex-direction:column}}@media (max-width:349px){.comments-wrapper{padding-left:1.5rem;padding-right:1.5rem}.comments-wrapper .vssue-comment .vssue-comment-body .vssue-comment-footer{display:flex;flex-direction:column;text-align:center}.comments-wrapper .vssue-comment .vssue-comment-body .vssue-comment-footer .vssue-comment-reactions>:last-child{margin-right:0}.comments-wrapper .vssue-comment .vssue-comment-body .vssue-comment-footer .vssue-comment-operations{margin-top:.25rem}.comments-wrapper .vssue-comment .vssue-comment-body .vssue-comment-footer .vssue-comment-operations>:first-child{margin-left:0}}.theme-default-content[data-v-9415d188]{padding-bottom:0}.theme-default-content .topic-card[data-v-9415d188]{display:flex;align-items:center;border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;margin-top:3.5rem;padding:0 2rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229);cursor:pointer}.theme-default-content .topic-card .title-and-summary[data-v-9415d188]{flex:8.5}.theme-default-content .topic-card .title-and-summary .title-wrapper[data-v-9415d188]{display:flex;color:#eb7132;border-bottom:.125rem solid #754d34;margin:1.875rem 0 1.5rem}.theme-default-content .topic-card .title-and-summary .title-wrapper .title[data-v-9415d188]{border-bottom:0;margin:0 .5rem 0 0}.theme-default-content .topic-card .title-and-summary .title-wrapper .title[data-v-9415d188]:hover{text-decoration:underline}.theme-default-content .topic-card .title-and-summary .title-wrapper .number-of-posts[data-v-9415d188]{border-bottom:0;margin:0}.theme-default-content .topic-card .logo[data-v-9415d188]{flex:1.5;padding-top:1.125rem;padding-left:1.125rem;padding-bottom:1.125rem;transition:transform .2s}.theme-default-content .topic-card .logo .v-lazy-image[data-v-9415d188]{filter:blur(.375rem);will-change:filter;width:100%}.theme-default-content .topic-card .logo .v-lazy-image-loaded[data-v-9415d188]{transition:filter .7s;filter:blur(0)}.theme-default-content .topic-card[data-v-9415d188]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}.theme-default-content .topic-card:hover .logo[data-v-9415d188]{transform:scale(1.1)}@media (max-width:61.25rem){.theme-default-content .topic-card[data-v-9415d188]{flex-direction:column-reverse}.theme-default-content .topic-card .title-and-summary .title-wrapper[data-v-9415d188]{justify-content:center;margin:0}.theme-default-content .topic-card .title-and-summary p[data-v-9415d188]{text-align:center;margin-top:.875rem;margin-bottom:1.25rem}.theme-default-content .topic-card .logo[data-v-9415d188]{padding:1.25rem 0 .875rem;width:9.6875rem}}.website-diagrams[data-v-4cb35906]{width:9.6875rem;margin:0 auto}.website-diagrams .v-lazy-image[data-v-4cb35906]{filter:blur(.375rem);will-change:filter;width:100%}.website-diagrams .v-lazy-image-loaded[data-v-4cb35906]{transition:filter .7s;filter:blur(0)}.website-diagrams[data-v-dd2f6eae]{width:9.6875rem;margin:0 auto}.website-diagrams .v-lazy-image[data-v-dd2f6eae]{filter:blur(.375rem);will-change:filter;width:100%}.website-diagrams .v-lazy-image-loaded[data-v-dd2f6eae]{transition:filter .7s;filter:blur(0)}.website-diagrams .v-lazy-image[data-v-1f31566c]{filter:blur(.9375rem);will-change:filter;width:100%}.website-diagrams .v-lazy-image-loaded[data-v-1f31566c]{transition:filter .7s;filter:blur(0)}.website-diagrams[data-v-758d161d]{max-width:16.25rem;margin:0 auto}.website-diagrams .v-lazy-image[data-v-758d161d]{filter:blur(.625rem);will-change:filter;width:100%}.website-diagrams .v-lazy-image-loaded[data-v-758d161d]{transition:filter .7s;filter:blur(0)}.website-diagrams[data-v-061a911e]{max-width:12.5rem;margin:0 auto}.website-diagrams .v-lazy-image[data-v-061a911e]{filter:blur(.5rem);will-change:filter;width:100%}.website-diagrams .v-lazy-image-loaded[data-v-061a911e]{transition:filter .7s;filter:blur(0)}h1[data-v-d9746e5a]{padding-bottom:5rem}h2[data-v-d9746e5a]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.custom-block.details[data-v-d9746e5a]{margin-bottom:1.25rem}.contact-card[data-v-d9746e5a]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.contact-card .copy-btn-wrapper[data-v-d9746e5a]{display:flex;justify-content:flex-end}.contact-card .copy-btn-wrapper .copy[data-v-d9746e5a]{font-size:calc(1.0125rem + .15vw);margin-top:.85rem;height:2.125rem;padding:0 .375rem;color:#e6e6e6;background-color:inherit;cursor:pointer;transition:.3s ease;border:.125rem solid #16181d;border-radius:.5rem}@media (min-width:75rem){.contact-card .copy-btn-wrapper .copy[data-v-d9746e5a]{font-size:1.125rem}}.contact-card .copy-btn-wrapper .copy[data-v-d9746e5a]:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}.contact-card[data-v-d9746e5a]:nth-child(n+2){margin-top:3.5rem}.contact-card[data-v-d9746e5a]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-d9746e5a],h2[data-v-d9746e5a],h3[data-v-d9746e5a],p[data-v-d9746e5a]{text-align:center}}@media (max-width:26.3125rem){.contact-card[data-v-d9746e5a]{padding:0 1rem}}@media (min-width:26.375rem){.contact-card[data-v-d9746e5a]{padding:0 2rem}}.modal-overlay[data-v-c98ceaec]{display:flex;justify-content:center;align-items:center;position:fixed;top:0;bottom:0;left:0;right:0;z-index:10;background-color:rgba(11,12,15,.549)}.modal-overlay .modal[data-v-c98ceaec]{display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:1.875rem;background-color:#1f2229}.modal-overlay .modal .close[data-v-c98ceaec]{align-self:flex-end;cursor:pointer}.modal-overlay .modal .close .icon[data-v-c98ceaec]{width:1.125rem;height:1.125rem;transition:.3s ease}.modal-overlay .modal .close .icon[data-v-c98ceaec]:hover{color:#eb7132}.modal-overlay .modal .name[data-v-c98ceaec]{margin-top:0;margin-bottom:1.25rem}@media (max-width:21.8125rem){.modal-overlay .modal[data-v-c98ceaec]{width:12.5rem;height:12.5rem;padding:1rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:8.375rem}}@media (min-width:21.875rem){.modal-overlay .modal[data-v-c98ceaec]{width:14.0625rem;height:14.0625rem;padding:1rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:9.875rem}}@media (min-width:23.4375rem){.modal-overlay .modal[data-v-c98ceaec]{width:15.625rem;height:15.625rem;padding:1.125rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:11.375rem}}@media (min-width:40.625rem){.modal-overlay .modal[data-v-c98ceaec]{width:18.75rem;height:18.75rem;padding:1.25rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:14.375rem}}@media (min-width:53.125rem){.modal-overlay .modal[data-v-c98ceaec]{width:21.875rem;height:21.875rem;padding:1.375rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:17.375rem}}@media (min-width:59.9375rem){.modal-overlay .modal[data-v-c98ceaec]{width:25rem;height:25rem;padding:1.5rem}.modal-overlay .modal .qr-code[data-v-c98ceaec]{width:20.25rem}}.payment-codes-wrapper[data-v-74cd145a]{border-top:.0625rem solid #424857;border-bottom:.0625rem solid #424857;padding-top:1.25rem}.payment-codes-wrapper .paynym-bot-and-name[data-v-74cd145a]{display:flex;flex-direction:column;align-items:center}.payment-codes-wrapper .paynym-bot-and-name .bot[data-v-74cd145a]{width:9.375rem;height:9.375rem;margin-bottom:1.25rem}.payment-codes-wrapper .paynym-bot-and-name .bot .v-lazy-image[data-v-74cd145a]{filter:blur(.35625rem);will-change:filter;width:100%}.payment-codes-wrapper .paynym-bot-and-name .bot .v-lazy-image-loaded[data-v-74cd145a]{transition:filter .7s;filter:blur(0)}.payment-codes-wrapper .paynym-bot-and-name .bot img[data-v-74cd145a]{border-radius:50%}.payment-codes-wrapper .paynym-bot-and-name .name[data-v-74cd145a]{font-size:calc(1.05rem + .6vw);margin-bottom:1.25rem}@media (min-width:75rem){.payment-codes-wrapper .paynym-bot-and-name .name[data-v-74cd145a]{font-size:1.5rem}}.payment-codes-wrapper .paynym-bot-and-name svg[data-v-74cd145a]{font-size:calc(1.025rem + .3vw)}@media (min-width:75rem){.payment-codes-wrapper .paynym-bot-and-name svg[data-v-74cd145a]{font-size:1.25rem}}.payment-codes-wrapper .payment-code-wrapper[data-v-74cd145a]{display:flex;flex-wrap:wrap;align-items:center;padding-bottom:1.25rem}.payment-codes-wrapper .payment-code-wrapper .payment-code-text[data-v-74cd145a]{display:flex;align-items:center;min-height:3.125rem;width:8.125rem;margin-right:4.1875rem}.payment-codes-wrapper .payment-code-wrapper .payment-code-break[data-v-74cd145a]{flex-basis:100%}.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{display:flex;flex:7.75;margin-top:1.25rem;min-height:2.875rem;min-width:9.5rem;padding:0 1.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:.125rem solid #16181d;border-radius:.625rem}.payment-codes-wrapper .payment-code-wrapper .payment-code .left-payment-code[data-v-74cd145a]{align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.payment-codes-wrapper .payment-code-wrapper .payment-code .right-payment-code[data-v-74cd145a]{align-self:center;flex-shrink:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:100%}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper[data-v-74cd145a]{display:flex;flex:2.25}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{flex-basis:6.25rem;margin-top:1.25rem;height:3.125rem;padding:0 .75rem;color:#e6e6e6;background-color:inherit;cursor:pointer;transition:.3s ease;border:.125rem solid #16181d;border-radius:.625rem 0 0 .625rem}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]{flex-basis:5rem;margin-top:1.25rem;display:flex;align-items:center;height:3.125rem;padding:0 .125rem;color:#e6e6e6;background-color:inherit;cursor:pointer;transition:.3s ease;border:.125rem solid #16181d;border-left-width:0;border-radius:0 .625rem .625rem 0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code svg[data-v-74cd145a]{width:100%;height:67%}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}@media (min-width:39.25rem){.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{border-top-right-radius:0;border-bottom-right-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{min-width:6.25rem;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]{min-width:5rem}}@media (min-width:40.375rem){.payment-codes-wrapper .payment-code-wrapper .payment-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{margin-top:0;border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:100%}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper[data-v-74cd145a]{justify-content:flex-end}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{border-left-width:.125rem;border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}}@media (min-width:52.125rem){.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{border-top-right-radius:0;border-bottom-right-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{margin-top:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]{margin-top:0;border-left-width:0}}@media (min-width:53.1875rem){.payment-codes-wrapper .payment-code-wrapper .payment-code-break[data-v-74cd145a]{flex-basis:100%}.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{margin-top:1.25rem;border-top-right-radius:0;border-bottom-right-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{margin-top:1.25rem;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]{margin-top:1.25rem}}@media (min-width:63rem){.payment-codes-wrapper .payment-code-wrapper .payment-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{margin-top:0;border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:100%}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper[data-v-74cd145a]{justify-content:flex-end}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{border-left-width:.125rem;border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}}@media (min-width:74.25rem){.payment-codes-wrapper .payment-code-wrapper .payment-code[data-v-74cd145a]{border-top-right-radius:0;border-bottom-right-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-break[data-v-74cd145a]{flex-basis:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .copy[data-v-74cd145a]{margin-top:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.payment-codes-wrapper .payment-code-wrapper .copy-and-qr-code-wrapper .qr-code[data-v-74cd145a]{margin-top:0}}.crypto-donations-wrapper[data-v-40044d4a]{padding-top:1.25rem}.crypto-donations-wrapper .donation[data-v-40044d4a]{display:flex;flex-wrap:wrap;align-items:center;padding-bottom:1.25rem}.crypto-donations-wrapper .donation .logo-name-and-abbreviation-wrapper[data-v-40044d4a]{display:flex;align-items:center;width:8.125rem;margin-right:4.1875rem}.crypto-donations-wrapper .donation .logo-name-and-abbreviation-wrapper .logo[data-v-40044d4a]{min-width:3.125rem;width:3.125rem}.crypto-donations-wrapper .donation .logo-name-and-abbreviation-wrapper .logo .v-lazy-image[data-v-40044d4a]{filter:blur(.1125rem);will-change:filter;width:100%}.crypto-donations-wrapper .donation .logo-name-and-abbreviation-wrapper .logo .v-lazy-image-loaded[data-v-40044d4a]{transition:filter .7s;filter:blur(0)}.crypto-donations-wrapper .donation .logo-name-and-abbreviation-wrapper .name-and-abbreviation[data-v-40044d4a]{margin-left:1.25rem}.crypto-donations-wrapper .donation .address-break[data-v-40044d4a]{flex-basis:100%}.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{display:flex;flex:7.75;margin-top:1.25rem;min-height:2.875rem;min-width:9.5rem;padding:0 1.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:.125rem solid #16181d;border-radius:.625rem}.crypto-donations-wrapper .donation .address-wrapper .left-address[data-v-40044d4a]{align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.crypto-donations-wrapper .donation .address-wrapper .right-address[data-v-40044d4a]{align-self:center;flex-shrink:0}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:100%}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper[data-v-40044d4a]{display:flex;flex:2.25}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{flex-basis:6.25rem;margin-top:1.25rem;height:3.125rem;padding:0 .75rem;color:#e6e6e6;background-color:inherit;cursor:pointer;transition:.3s ease;border:.125rem solid #16181d;border-radius:.625rem 0 0 .625rem}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]{flex-basis:5rem;margin-top:1.25rem;display:flex;align-items:center;height:3.125rem;padding:0 .125rem;color:#e6e6e6;background-color:inherit;cursor:pointer;transition:.3s ease;border:.125rem solid #16181d;border-left-width:0;border-radius:0 .625rem .625rem 0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code svg[data-v-40044d4a]{width:100%;height:67%}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]:hover{background-image:radial-gradient(circle at center center,#2c303a,#21242c);color:#eb7132}.crypto-donations-wrapper .donation[data-v-40044d4a]:nth-child(n+2){padding-top:1.25rem}.crypto-donations-wrapper .donation[data-v-40044d4a]:not(:last-child){border-bottom:.0625rem solid #424857}@media (min-width:39.25rem){.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{border-top-right-radius:0;border-bottom-right-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{min-width:6.25rem;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]{min-width:5rem}}@media (min-width:40.375rem){.crypto-donations-wrapper .donation .address-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{margin-top:0;border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:100%}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper[data-v-40044d4a]{justify-content:flex-end}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{border-left-width:.125rem;border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}}@media (min-width:52.125rem){.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{border-top-right-radius:0;border-bottom-right-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{margin-top:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]{margin-top:0;border-left-width:0}}@media (min-width:53.1875rem){.crypto-donations-wrapper .donation .address-break[data-v-40044d4a]{flex-basis:100%}.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{margin-top:1.25rem;border-top-right-radius:0;border-bottom-right-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{margin-top:1.25rem;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]{margin-top:1.25rem}}@media (min-width:63rem){.crypto-donations-wrapper .donation .address-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{margin-top:0;border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:100%}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper[data-v-40044d4a]{justify-content:flex-end}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{border-left-width:.125rem;border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}}@media (min-width:74.25rem){.crypto-donations-wrapper .donation .address-wrapper[data-v-40044d4a]{border-top-right-radius:0;border-bottom-right-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-break[data-v-40044d4a]{flex-basis:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .copy[data-v-40044d4a]{margin-top:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}.crypto-donations-wrapper .donation .copy-and-qr-code-wrapper .qr-code[data-v-40044d4a]{margin-top:0}}h1[data-v-7ed46e05]{padding-bottom:5rem}h2[data-v-7ed46e05]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.topic-card[data-v-7ed46e05]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.topic-card[data-v-7ed46e05]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}.fiat-card[data-v-7ed46e05]{margin-top:3.5rem}@media (max-width:61.25rem){h1[data-v-7ed46e05],h2[data-v-7ed46e05],p[data-v-7ed46e05]{text-align:center}}@media (max-width:26.3125rem){.topic-card[data-v-7ed46e05]{padding:0 1rem}}@media (min-width:26.375rem){.topic-card[data-v-7ed46e05]{padding:0 2rem}}h1[data-v-1098e494]{padding-bottom:5rem}h2[data-v-1098e494]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-1098e494]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.resource-card[data-v-1098e494]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-1098e494]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-1098e494],h2[data-v-1098e494],h3[data-v-1098e494],p[data-v-1098e494]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-1098e494]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-1098e494]{padding:0 2rem}}h1[data-v-2db560b2]{padding-bottom:5rem}h2[data-v-2db560b2]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-2db560b2]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229);cursor:pointer}.resource-card .title[data-v-2db560b2]:hover{color:#eb7132;text-decoration:underline}.resource-card[data-v-2db560b2]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-2db560b2]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-2db560b2],h2[data-v-2db560b2],h3[data-v-2db560b2],p[data-v-2db560b2]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-2db560b2]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-2db560b2]{padding:0 2rem}}h1[data-v-5c5a75c5]{padding-bottom:5rem}h2[data-v-5c5a75c5]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}h3[data-v-5c5a75c5]{margin:-4.6rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-5c5a75c5]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.resource-card[data-v-5c5a75c5]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-5c5a75c5]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-5c5a75c5],h2[data-v-5c5a75c5],h3[data-v-5c5a75c5],p[data-v-5c5a75c5]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-5c5a75c5]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-5c5a75c5]{padding:0 2rem}}h1[data-v-a03e2bca]{padding-bottom:5rem}h2[data-v-a03e2bca]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-a03e2bca]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.resource-card[data-v-a03e2bca]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-a03e2bca]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-a03e2bca],h2[data-v-a03e2bca],h3[data-v-a03e2bca],p[data-v-a03e2bca]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-a03e2bca]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-a03e2bca]{padding:0 2rem}}h1[data-v-f5c3f5ac]{padding-bottom:5rem}h2[data-v-f5c3f5ac]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}h3[data-v-f5c3f5ac]{margin:-4.6rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-f5c3f5ac]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.resource-card[data-v-f5c3f5ac]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-f5c3f5ac]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-f5c3f5ac],h2[data-v-f5c3f5ac],h3[data-v-f5c3f5ac],p[data-v-f5c3f5ac]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-f5c3f5ac]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-f5c3f5ac]{padding:0 2rem}}h1[data-v-28ea88ae]{padding-bottom:5rem}h2[data-v-28ea88ae]{color:#eb7132;margin:-2.125rem 0 1.875rem;padding-top:4.6rem}.resource-card[data-v-28ea88ae]{border:.125rem solid #16181d;box-shadow:0 .5rem 1rem 0 #16181d;transition:.2s;border-radius:1.875rem;background-image:radial-gradient(circle at center center,#2c303a,#1f2229)}.resource-card[data-v-28ea88ae]:nth-child(n+2){margin-top:3.5rem}.resource-card[data-v-28ea88ae]:hover{box-shadow:.125rem .5rem 1rem .125rem #0b0c0f}@media (max-width:61.25rem){h1[data-v-28ea88ae],h2[data-v-28ea88ae],h3[data-v-28ea88ae],p[data-v-28ea88ae]{text-align:center}}@media (max-width:26.3125rem){.resource-card[data-v-28ea88ae]{padding:0 1rem}}@media (min-width:26.375rem){.resource-card[data-v-28ea88ae]{padding:0 2rem}}.footer[data-v-17ddc652]{display:flex;flex-direction:column;align-items:center;padding:2.5rem 2.5rem 2rem}.footer .icons[data-v-17ddc652]{display:flex;margin-bottom:1.75rem;min-width:12.5rem}.footer .icons .no-wrap-icons[data-v-17ddc652],.footer .icons .wrap-icons[data-v-17ddc652]{display:inline-flex}.footer .icons svg[data-v-17ddc652]{fill:#e6e6e6}.footer .icons svg[data-v-17ddc652]:hover{fill:#eb7132}.footer .made-by[data-v-17ddc652]{text-align:center;margin:0}.is-sidebar-active[data-v-17ddc652]{padding-left:22.5rem}@media (max-width:959px){.is-sidebar-active[data-v-17ddc652]{padding-left:18.9rem}}@media (max-width:61.25rem){.is-sidebar-active[data-v-17ddc652]{padding-left:2.5rem}}@media (min-width:61.3125rem) and (max-width:72.9375rem){.is-sidebar-active .icons[data-v-17ddc652]{flex-wrap:wrap}.is-sidebar-active .icons .no-wrap-icons[data-v-17ddc652]{width:100%;justify-content:space-between}.is-sidebar-active .icons .wrap-icons[data-v-17ddc652]{padding-top:1.75rem;width:100%;justify-content:space-evenly}.is-sidebar-active .icons .wrap-icons a[data-v-17ddc652]:first-child{margin-left:0;margin-right:calc(1.36875rem + 4.425vw)}.is-sidebar-active .icons .wrap-icons a[data-v-17ddc652]:nth-child(2){margin-left:0}}@media (min-width:61.3125rem) and (max-width:72.9375rem) and (min-width:75rem){a[data-v-17ddc652]:first-child{margin-right:4.6875rem}}@media (max-width:39.0625rem){.icons[data-v-17ddc652]{flex-wrap:wrap}.icons .no-wrap-icons[data-v-17ddc652]{width:100%;justify-content:space-between}.icons .wrap-icons[data-v-17ddc652]{padding-top:1.75rem;width:100%;justify-content:space-evenly}.icons .wrap-icons a[data-v-17ddc652]:first-child{margin-left:0;margin-right:calc(1.36875rem + 4.425vw)}.icons .wrap-icons a[data-v-17ddc652]:nth-child(2){margin-left:0}}@media (max-width:39.0625rem) and (min-width:75rem){a[data-v-17ddc652]:first-child{margin-right:4.6875rem}}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff;background-color:#42b983}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770]{background-color:rgba(93,239,93,.2)}.badge.error[data-v-15b7b770]{background-color:rgba(239,93,93,.2)}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:rgba(235,235,51,.2)}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983} \ No newline at end of file diff --git a/assets/fonts/MathJax_AMS-Regular.07173fb7.woff b/assets/fonts/MathJax_AMS-Regular.07173fb7.woff new file mode 100644 index 00000000..1bf198f8 Binary files /dev/null and b/assets/fonts/MathJax_AMS-Regular.07173fb7.woff differ diff --git a/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff b/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff new file mode 100644 index 00000000..f5df0234 Binary files /dev/null and b/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff differ diff --git a/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff b/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff new file mode 100644 index 00000000..175301ef Binary files /dev/null and b/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff differ diff --git a/assets/fonts/MathJax_Main-Bold.c9423d5d.woff b/assets/fonts/MathJax_Main-Bold.c9423d5d.woff new file mode 100644 index 00000000..2805af50 Binary files /dev/null and b/assets/fonts/MathJax_Main-Bold.c9423d5d.woff differ diff --git a/assets/fonts/MathJax_Main-Italic.7e83626b.woff b/assets/fonts/MathJax_Main-Italic.7e83626b.woff new file mode 100644 index 00000000..36cb2b68 Binary files /dev/null and b/assets/fonts/MathJax_Main-Italic.7e83626b.woff differ diff --git a/assets/fonts/MathJax_Main-Regular.9995de47.woff b/assets/fonts/MathJax_Main-Regular.9995de47.woff new file mode 100644 index 00000000..c28398e4 Binary files /dev/null and b/assets/fonts/MathJax_Main-Regular.9995de47.woff differ diff --git a/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff b/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff new file mode 100644 index 00000000..6496d17f Binary files /dev/null and b/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff differ diff --git a/assets/fonts/MathJax_Math-Italic.5589d1a8.woff b/assets/fonts/MathJax_Math-Italic.5589d1a8.woff new file mode 100644 index 00000000..e62ff5fd Binary files /dev/null and b/assets/fonts/MathJax_Math-Italic.5589d1a8.woff differ diff --git a/assets/fonts/MathJax_SansSerif-Bold.07281897.woff b/assets/fonts/MathJax_SansSerif-Bold.07281897.woff new file mode 100644 index 00000000..bd277264 Binary files /dev/null and b/assets/fonts/MathJax_SansSerif-Bold.07281897.woff differ diff --git a/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff b/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff new file mode 100644 index 00000000..22e5eff7 Binary files /dev/null and b/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff differ diff --git a/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff b/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff new file mode 100644 index 00000000..d1ff7c6b Binary files /dev/null and b/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff differ diff --git a/assets/fonts/MathJax_Script-Regular.4c74e33b.woff b/assets/fonts/MathJax_Script-Regular.4c74e33b.woff new file mode 100644 index 00000000..a9d1f345 Binary files /dev/null and b/assets/fonts/MathJax_Script-Regular.4c74e33b.woff differ diff --git a/assets/fonts/MathJax_Typewriter-Regular.72815766.woff b/assets/fonts/MathJax_Typewriter-Regular.72815766.woff new file mode 100644 index 00000000..510a8dac Binary files /dev/null and b/assets/fonts/MathJax_Typewriter-Regular.72815766.woff differ diff --git a/assets/img/arrowDown.6e5eef13.svg b/assets/img/arrowDown.6e5eef13.svg new file mode 100644 index 00000000..f56deb6c --- /dev/null +++ b/assets/img/arrowDown.6e5eef13.svg @@ -0,0 +1 @@ + diff --git a/assets/img/search.83621669.svg b/assets/img/search.83621669.svg new file mode 100644 index 00000000..03d83913 --- /dev/null +++ b/assets/img/search.83621669.svg @@ -0,0 +1 @@ + diff --git a/assets/js/1.330fc088.js b/assets/js/1.330fc088.js new file mode 100644 index 00000000..74f7f3ad --- /dev/null +++ b/assets/js/1.330fc088.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{406:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let e=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,e]:[e]):e},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},410:function(t,e,n){"use strict";var r=n(210),i=n(8),s=n(19),o=n(15),a=n(28),u=n(211),c=n(212);r("match",(function(t,e,n){return[function(e){var n=a(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,n):new RegExp(e)[t](o(n))},function(t){var r=i(this),a=o(t),l=n(e,r,a);if(l.done)return l.value;if(!r.global)return c(r,a);var h=r.unicode;r.lastIndex=0;for(var p,f=[],d=0;null!==(p=c(r,a));){var g=o(p[0]);f[d]=g,""===g&&(r.lastIndex=u(a,s(r.lastIndex),h)),d++}return 0===d?null:f}]}))},411:function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return h})),n.d(e,"a",(function(){return p}));n(37),n(64),n(410),n(412),n(207),n(62),n(46),n(47),n(27),n(48),n(206);var r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return o.test(t)}function c(t){if(u(t))return t;var e=t.match(r),n=e?e[0]:"",i=a(t);return s.test(i)?t:i+".html"+n}function l(t,e){var n=decodeURIComponent(t.hash),i=function(t){var e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&a(t.path)===a(e)}function h(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var i=e.split("/");n&&i[i.length-1]||i.pop();for(var s=t.replace(/^\//,"").split("/"),o=0;o1||"".split(/.?/).length?function(t,n){var r=l(o(this)),s=void 0===n?4294967295:n>>>0;if(0===s)return[];if(void 0===t)return[r];if(!i(t))return e.call(r,t,s);for(var a,u,c,h=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),d=0,g=new RegExp(t.source,f+"g");(a=p.call(g,r))&&!((u=g.lastIndex)>d&&(h.push(r.slice(d,a.index)),a.length>1&&a.index=s));)g.lastIndex===a.index&&g.lastIndex++;return d===r.length?!c&&g.test("")||h.push(""):h.push(r.slice(d)),h.length>s?h.slice(0,s):h}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var i=o(this),s=null==e?void 0:e[t];return void 0!==s?s.call(e,i,n):r.call(l(i),e,n)},function(t,i){var o=s(this),p=l(t),f=n(r,o,p,i,r!==e);if(f.done)return f.value;var d=a(o,RegExp),v=o.unicode,b=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(g?"g":"y"),x=new d(g?"^(?:"+o.source+")":o,b),y=void 0===i?4294967295:i>>>0;if(0===y)return[];if(0===p.length)return null===h(x,p)?[p]:[];for(var k=0,_=0,w=[];_@^][^\s!#%&*+<=>@^]*>/,$=/a/g,O=/a/g,L=new w($)!==$,S=f.UNSUPPORTED_Y,E=r&&(!L||S||y||k||g((function(){return O[_]=!1,w($)!=$||w(O)==O||"/a/i"!=w($,"i")})));if(s("RegExp",E)){for(var P=function(t,e){var n,r,i,s,u,c,f=this instanceof P,d=l(t),g=void 0===e,b=[],x=t;if(!f&&d&&g&&t.constructor===P)return t;if((d||t instanceof P)&&(t=t.source,g&&(e="flags"in x?x.flags:p.call(x))),t=void 0===t?"":h(t),e=void 0===e?"":h(e),x=t,y&&"dotAll"in $&&(r=!!e&&e.indexOf("s")>-1)&&(e=e.replace(/s/g,"")),n=e,S&&"sticky"in $&&(i=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,"")),k&&(t=(s=function(t){for(var e,n=t.length,r=0,i="",s=[],o={},a=!1,u=!1,c=0,l="";r<=n;r++){if("\\"===(e=t.charAt(r)))e+=t.charAt(++r);else if("]"===e)a=!1;else if(!a)switch(!0){case"["===e:a=!0;break;case"("===e:C.test(t.slice(r+1))&&(r+=2,u=!0),i+=e,c++;continue;case">"===e&&u:if(""===l||v(o,l))throw new SyntaxError("Invalid capture group name");o[l]=!0,s.push([l,c]),u=!1,l="";continue}u?l+=e:i+=e}return[i,s]}(t))[0],b=s[1]),u=o(w(t,e),f?this:I,P),(r||i||b.length)&&(c=m(u),r&&(c.dotAll=!0,c.raw=P(function(t){for(var e,n=t.length,r=0,i="",s=!1;r<=n;r++)"\\"!==(e=t.charAt(r))?s||"."!==e?("["===e?s=!0:"]"===e&&(s=!1),i+=e):i+="[\\s\\S]":i+=e+t.charAt(++r);return i}(t),n)),i&&(c.sticky=!0),b.length&&(c.groups=b)),t!==x)try{a(u,"source",""===x?"(?:)":x)}catch(t){}return u},j=function(t){t in P||u(P,t,{configurable:!0,get:function(){return w[t]},set:function(e){w[t]=e}})},A=c(w),R=0;A.length>R;)j(A[R++]);I.constructor=P,P.prototype=I,d(i,"RegExp",P)}b("RegExp")},422:function(t,e,n){},424:function(t,e,n){},428:function(t,e,n){},430:function(t,e,n){},431:function(t,e,n){},432:function(t,e,n){},458:function(t,e,n){"use strict";n.r(e);n(63);var r=n(411),i={name:"SidebarGroup",components:{DropdownTransition:n(460).a},props:["item","open","collapsable","depth"],beforeCreate:function(){this.$options.components.SidebarLinks=n(458).default},methods:{isActive:r.c}},s=(n(478),n(18)),o=Object(s.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;n(479),n(62);function a(t,e,n,r,i){var s={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(s.style={"padding-left":i+"rem"}),t("RouterLink",s,n)}function u(t,e,n,i,s){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||o>s?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var c=Object(r.c)(i,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[a(t,n+"#"+e.slug,e.title,c,e.level-1),u(t,e.children,n,i,s,o+1)])})))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,i=n.$page,s=(n.$site,n.$route),o=n.$themeConfig,c=n.$themeLocaleConfig,l=e.props,h=l.item,p=l.sidebarDepth,f=Object(r.c)(s,h.path),d="auto"===h.type?f||h.children.some((function(t){return Object(r.c)(s,h.basePath+"#"+t.slug)})):f,g="external"===h.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,h.path,h.title||h.path):a(t,h.path,h.title||h.path,d),v=[i.frontmatter.sidebarDepth,p,c.sidebarDepth,o.sidebarDepth,1].find((function(t){return void 0!==t})),m=c.displayAllHeaders||o.displayAllHeaders;return"auto"===h.type?[g,u(t,h.children,h.basePath,s,v)]:(d||m)&&h.headers&&!r.b.test(h.path)?[g,u(t,Object(r.a)(h.headers),h.path,s,v)]:g}};n(480);function l(t,e){if("group"===e.type){var n=e.path&&Object(r.c)(t,e.path),i=e.children.some((function(e){return"group"===e.type?l(t,e):"page"===e.type&&Object(r.c)(t,e.path)}));return n||i}return!1}var h={name:"SidebarLinks",components:{SidebarGroup:o,SidebarLink:Object(s.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data:function(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route:function(){this.refreshIndex()}},created:function(){this.refreshIndex()},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.c)(this.$route,t.regularPath)}}},p=Object(s.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,r){return n("li",{key:r},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:r===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):n("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=p.exports},460:function(t,e,n){"use strict";var r={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},i=(n(470),n(18)),s=Object(i.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=s.exports},461:function(t,e,n){"use strict";var r=n(2),i=n(462);r({target:"String",proto:!0,forced:n(463)("link")},{link:function(t){return i(this,"a","href",t)}})},462:function(t,e,n){var r=n(28),i=n(15),s=/"/g;t.exports=function(t,e,n,o){var a=i(r(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+i(o).replace(s,""")+'"'),u+">"+a+""}},463:function(t,e,n){var r=n(3);t.exports=function(t){return r((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},465:function(t,e,n){"use strict";e.a={}},466:function(t,e,n){var r=n(3),i=n(127);t.exports=function(t){return r((function(){return!!i[t]()||"​…᠎"!="​…᠎"[t]()||i[t].name!==t}))}},467:function(t,e,n){"use strict";var r,i=n(2),s=n(25).f,o=n(19),a=n(15),u=n(116),c=n(28),l=n(117),h=n(29),p="".endsWith,f=Math.min,d=l("endsWith");i({target:"String",proto:!0,forced:!!(h||d||(r=s(String.prototype,"endsWith"),!r||r.writable))&&!d},{endsWith:function(t){var e=a(c(this));u(t);var n=arguments.length>1?arguments[1]:void 0,r=o(e.length),i=void 0===n?r:f(o(n),r),s=a(t);return p?p.call(e,s,i):e.slice(i-s.length,i)===s}})},468:function(t,e,n){"use strict";n(422)},470:function(t,e,n){"use strict";n(424)},474:function(t,e,n){var r=n(51),i=n(20),s=n(41);t.exports=function(t){return"string"==typeof t||!i(t)&&s(t)&&"[object String]"==r(t)}},475:function(t,e){t.exports=function(t){return null==t}},476:function(t,e,n){"use strict";n(428)},478:function(t,e,n){"use strict";n(430)},479:function(t,e,n){"use strict";var r=n(2),i=n(40).find,s=n(114),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),r({target:"Array",proto:!0,forced:o},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),s("find")},480:function(t,e,n){"use strict";n(431)},481:function(t,e,n){"use strict";n(432)},517:function(t,e,n){"use strict";n(420),n(206),n(48),n(27),n(37),n(410),n(204),n(205),n(207),n(64),n(421),n(214),n(62),n(412),n(467),n(63);var r=n(224),i=n.n(r),s=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=i()(e,"title","");return i()(e,"frontmatter.tags")&&(r+=" ".concat(e.frontmatter.tags.join(" "))),n&&(r+=" ".concat(n)),o(t,r)},o=function(t,e){var n=function(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},r=new RegExp("[^\0-]"),i=t.split(/\s+/g).map((function(t){return t.trim()})).filter((function(t){return!!t}));if(r.test(t))return i.some((function(t){return e.toLowerCase().indexOf(t)>-1}));var s=t.endsWith(" ");return new RegExp(i.map((function(t,e){return i.length!==e+1||s?"(?=.*\\b".concat(n(t),"\\b)"):"(?=.*\\b".concat(n(t),")")})).join("")+".+","gi").test(e)},a={name:"SearchBox",data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var t=this.query.trim().toLowerCase();if(t){for(var e=this.$site.pages,n=this.$site.themeConfig.searchMaxSuggestions||5,r=this.$localePath,i=[],o=0;o=n);o++){var a=e[o];if(this.getPageLocalePath(a)===r&&this.isSearchable(a))if(s(t,a))i.push(a);else if(a.headers)for(var u=0;u=n);u++){var c=a.headers[u];c.title&&s(t,a,c.title)&&i.push(Object.assign({},a,{path:a.path+"#"+c.slug,header:c}))}}return i}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy:function(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable:function(t){var e=null;return null===e||(e=Array.isArray(e)?e:new Array(e)).filter((function(e){return t.path.match(e)})).length>0},onHotkey:function(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null);e.a=c.exports},518:function(t,e,n){"use strict";var r=n(458),i=n(459),s={name:"Sidebar",components:{SidebarLinks:r.default,NavLinks:i.a},props:["items"]},o=(n(481),n(18)),a=Object(o.a)(s,(function(){var t=this.$createElement,e=this._self._c||t;return e("aside",{staticClass:"sidebar"},[e("NavLinks"),this._v(" "),this._t("top"),this._v(" "),e("SidebarLinks",{attrs:{depth:0,items:this.items}}),this._v(" "),this._t("bottom")],2)}),[],!1,null,null,null);e.a=a.exports},519:function(t,e,n){"use strict";var r=n(411),i=n(474),s=n.n(i),o=n(475),a=n.n(o),u={name:"PageNav",props:["sidebarItems"],computed:{prev:function(){return l(c.PREV,this)},next:function(){return l(c.NEXT,this)}}};var c={NEXT:{resolveLink:function(t,e){return h(t,e,1)},getThemeLinkConfig:function(t){return t.nextLinks},getPageLinkConfig:function(t){return t.frontmatter.next}},PREV:{resolveLink:function(t,e){return h(t,e,-1)},getThemeLinkConfig:function(t){return t.prevLinks},getPageLinkConfig:function(t){return t.frontmatter.prev}}};function l(t,e){var n=e.$themeConfig,i=e.$page,o=e.$route,u=e.$site,c=e.sidebarItems,l=t.resolveLink,h=t.getThemeLinkConfig,p=t.getPageLinkConfig,f=h(n),d=p(i),g=a()(d)?f:d;return!1===g?void 0:s()(g)?Object(r.d)(u.pages,g,o.path):l(i,c)}function h(t,e,n){var r=[];!function t(e,n){for(var r=0,i=e.length;r({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let a=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,a]:[a]):a},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},441:function(t,a,s){},500:function(t,a,s){"use strict";s(441)},532:function(t,a,s){"use strict";s.r(a);var e={components:{VLazyImage:s(406).a}},n=(s(500),s(18)),r=Object(n.a)(e,(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"vuepress-tutorial-6-homepage-layout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-6-homepage-layout"}},[t._v("#")]),t._v(" VuePress Tutorial 6 - Homepage Layout")])]},proxy:!0}])},[s("h2",{attrs:{id:"what-is-a-vuepress-theme"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-vuepress-theme"}},[t._v("#")]),t._v(" What is a VuePress Theme?")]),t._v(" "),s("p",[t._v("In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(" which comes with the installation of "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" and is designed for technical documentation. Along with the homepage the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(" also allows customization for the navbar, sidebar, search box, etc. We'll discuss those customizations in more detail in future tutorials.")]),t._v(" "),s("p",[t._v("Before moving on to the homepage layout, we're going to first describe what a theme is. If you remember from the "),s("a",{attrs:{href:"/vuepress-tutorial-2"}},[t._v("VuePress Tutorial 2 - Why Use VuePress?")]),t._v(" post, a "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" theme allows you to control how your project is structured. Within a theme you are able to create directories that handle "),s("span",{staticClass:"post-term-one"},[t._v("global components")]),t._v(", "),s("span",{staticClass:"post-term-one"},[t._v("components")]),t._v(", "),s("span",{staticClass:"post-term-one"},[t._v("layouts")]),t._v(", "),s("span",{staticClass:"post-term-one"},[t._v("styles")]),t._v(", and "),s("span",{staticClass:"post-term-one"},[t._v("templates")]),t._v(". You can also create files for "),s("span",{staticClass:"post-term-one"},[t._v("theme configuration")]),t._v(" and "),s("span",{staticClass:"post-term-one"},[t._v("app level enhancements")]),t._v(". So, a theme handles all of the layout and interactivity details for your site.")]),t._v(" "),s("p",[t._v("Now that we have a good understanding of what a theme is, let's move on to configuring the homepage layout.")]),t._v(" "),s("h2",{attrs:{id:"homepage-layout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#homepage-layout"}},[t._v("#")]),t._v(" Homepage Layout")]),t._v(" "),s("p",[t._v("To see the homepage layout in action you can take a look at the homepages of the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" site and the "),s("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(".")],1),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Using a Custom Theme")]),t._v(" "),s("p",[t._v("Since the options being used for the homepage are provided by the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(", they may be different if you're "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/using-a-theme.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("using a custom theme"),s("OutboundLink")],1),t._v(".")])]),t._v(" "),s("p",[t._v("Make sure you start the local development server which should be running at "),s("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),s("OutboundLink")],1),t._v(" to see the changes to your site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),s("h3",{attrs:{id:"using-the-homepage-layout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-the-homepage-layout"}},[t._v("#")]),t._v(" Using the Homepage Layout")]),t._v(" "),s("p",[t._v("To use the homepage layout open the "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file in the "),s("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory of your project then you need to add "),s("code",{staticClass:"inline-code-block"},[t._v("home: true")]),t._v(" to a "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" frontmatter block at the top of the page.")]),t._v(" "),s("p",[t._v("We're also going to remove the "),s("code",{staticClass:"inline-code-block"},[t._v("# Hello VuePress")]),t._v(" line from the file since we're going to start customizing the homepage.")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file now looks like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Specifying the Homepage Layout"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Before discussing the changes to the site, let's first describe what "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" and frontmatter are.")]),t._v(" "),s("h3",{attrs:{id:"yaml-frontmatter-blocks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#yaml-frontmatter-blocks"}},[t._v("#")]),t._v(" YAML Frontmatter Blocks")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" is a recursive acroynym for "),s("span",{staticClass:"post-term-one"},[t._v('"YAML Ain\'t Markup Language"')]),t._v(", and it's a human-readable data serialization language that can be used with a wide variety of programming languages. Frontmatter is structured metadata that allows you to add variables to your pages.")]),t._v(" "),s("p",[t._v("The "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" frontmatter block support comes with the installation of "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" and is processed using the frontmatter parser "),s("a",{attrs:{href:"https://github.com/jonschlinkert/gray-matter",target:"_blank",rel:"noopener noreferrer"}},[t._v("gray-matter"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("When you add a "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" frontmatter block to a page you need to declare it at the top of a Markdown file, and the content must adhere to proper "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" formatting between a set of triple-dashed lines, i.e., "),s("code",{staticClass:"inline-code-block"},[t._v("---")]),t._v(" like the example above.")]),t._v(" "),s("p",[t._v("Within the triple-dashed lines you are able to set "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html#predefined-variables",target:"_blank",rel:"noopener noreferrer"}},[t._v("predefined variables"),s("OutboundLink")],1),t._v(", "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html#predefined-variables-powered-by-default-theme",target:"_blank",rel:"noopener noreferrer"}},[t._v("predefined variables powered by the default theme"),s("OutboundLink")],1),t._v(", and you can define your own custom variables. These variables can then be accessed within the current page by using the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/global-computed.html#frontmatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("$frontmatter"),s("OutboundLink")],1),t._v(" variable. We'll be discussing and adding predefined and custom variables and using the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/global-computed.html#frontmatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("$frontmatter"),s("OutboundLink")],1),t._v(" variable as we continue to develop the site.")]),t._v(" "),s("p",[t._v("If you have any questions, then check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Frontmatter"),s("OutboundLink")],1),t._v(" documentation.")]),t._v(" "),s("h3",{attrs:{id:"alternative-frontmatter-formats"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#alternative-frontmatter-formats"}},[t._v("#")]),t._v(" Alternative Frontmatter Formats")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" also supports "),s("a",{attrs:{href:"https://www.json.org/json-en.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("JSON"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://toml.io/en/",target:"_blank",rel:"noopener noreferrer"}},[t._v("TOML"),s("OutboundLink")],1),t._v(" frontmatter syntax.")]),t._v(" "),s("p",[t._v("We'll be using the "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" syntax throughout the tutorials, but if you're interested here's how to set the homepage layout using the other supported syntaxes.")]),t._v(" "),s("p",[t._v("For "),s("a",{attrs:{href:"https://www.json.org/json-en.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("JSON"),s("OutboundLink")],1),t._v(" the frontmatter needs to start and end with curly brackets:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Specifying the Homepage Layout Using JSON"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v('"home"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"true"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("For "),s("a",{attrs:{href:"https://toml.io/en/",target:"_blank",rel:"noopener noreferrer"}},[t._v("TOML"),s("OutboundLink")],1),t._v(" the frontmatter needs to be explicitly marked as "),s("code",{staticClass:"inline-code-block"},[t._v("toml")]),t._v(":")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Specifying the Homepage Layout Using TOML"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("---toml\n"),s("span",{pre:!0,attrs:{class:"token title important"}},[t._v('home = "true"\n'),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Now that we have a better understanding of "),s("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),s("OutboundLink")],1),t._v(" frontmatter blocks, let's discuss the changes to the site after specifying the homepage layout.")]),t._v(" "),s("h3",{attrs:{id:"homepage-layout-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#homepage-layout-changes"}},[t._v("#")]),t._v(" Homepage Layout Changes")]),t._v(" "),s("p",[t._v("Before specifying the homepage layout, the HTML for the homepage consists of the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML Before Specifying the Homepage Layout"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Hello VuePress | Code Monkeys"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("author"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("J the Code Monkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hello-vuepress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("#hello-vuepress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("header-anchor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("#"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v('\n " Hello VuePress"\n '),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page-edit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br"),s("span",{staticClass:"line-number"},[t._v("31")]),s("br"),s("span",{staticClass:"line-number"},[t._v("32")]),s("br"),s("span",{staticClass:"line-number"},[t._v("33")]),s("br")])])])],1),t._v(" "),s("p",[t._v("The highlighted lines refer to what gets changed after specifying the homepage layout.")]),t._v(" "),s("p",[t._v("After specifying the homepage layout, the HTML for the homepage consists of the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Specifying the Homepage Layout"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Code Monkeys"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("author"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("J the Code Monkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('\n " Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"\n '),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br"),s("span",{staticClass:"line-number"},[t._v("27")]),s("br"),s("span",{staticClass:"line-number"},[t._v("28")]),s("br"),s("span",{staticClass:"line-number"},[t._v("29")]),s("br"),s("span",{staticClass:"line-number"},[t._v("30")]),s("br"),s("span",{staticClass:"line-number"},[t._v("31")]),s("br"),s("span",{staticClass:"line-number"},[t._v("32")]),s("br"),s("span",{staticClass:"line-number"},[t._v("33")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Here are the changes in the HTML after specifying the homepage layout:")]),t._v(" "),s("ul",[s("li",[t._v("Line 3: The initial "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" tag that was set to "),s("code",{staticClass:"inline-code-block"},[t._v("Hello VuePress | Code Monkeys")]),t._v(" is now set to "),s("code",{staticClass:"inline-code-block"},[t._v("Code Monkeys")]),t._v(".")]),t._v(" "),s("li",[t._v("Line 15: The initial "),s("code",{staticClass:"inline-code-block"},[t._v("main")]),t._v(" tag had a class of "),s("code",{staticClass:"inline-code-block"},[t._v('"page"')]),t._v(", and it now has a class of "),s("code",{staticClass:"inline-code-block"},[t._v('"home"')]),t._v(" and an attribute of "),s("code",{staticClass:"inline-code-block"},[t._v('aria-labelledby="main-title"')]),t._v(".")]),t._v(" "),s("li",[t._v("Line 16: The initial child elements of the "),s("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag are removed since the "),s("code",{staticClass:"inline-code-block"},[t._v("# Hello VuePress")]),t._v(" line was removed from the "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file, and the "),s("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag is moved to line 25 with an added class of "),s("code",{staticClass:"inline-code-block"},[t._v('"custom"')]),t._v(". Line 16 now consists of a "),s("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),s("code",{staticClass:"inline-code-block"},[t._v('"hero"')]),t._v(", and the child tags of "),s("code",{staticClass:"inline-code-block"},[t._v('

Code Monkeys

')]),t._v(" and "),s("code",{staticClass:"inline-code-block"},[t._v('

" Learn to Code like a Monkey... "

')]),t._v(".")]),t._v(" "),s("li",[t._v("Line 22: The initial "),s("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag is removed from the page.")])]),t._v(" "),s("h3",{attrs:{id:"adding-an-image"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-an-image"}},[t._v("#")]),t._v(" Adding an Image")]),t._v(" "),s("p",[t._v("Before adding a homepage image, we're going to first create a "),s("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory inside of the "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress")]),t._v(" directory.")]),t._v(" "),s("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[t._v(".\n├── "),s("code",[t._v(".yarn")]),t._v(" "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n│ ├── "),s("code",[t._v("releases")]),t._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),s("code",[t._v("docs")]),t._v("\n│ ├── "),s("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),s("code",[t._v("public")]),t._v("\n│ │ └── config.js\n│ └── README.md\n├── "),s("code",[t._v("node_modules")]),t._v("\n├── .gitattributes "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── .gitignore\n├── .yarnrc "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),t._v("\n")])]),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory is a static resource directory which is useful in the following cases:")]),t._v(" "),s("ul",[s("li",[t._v("You need to provide static assests that aren't directly referenced in any of your Markdown or component files, e.g., "),s("span",{staticClass:"post-term-one"},[t._v("favicons")]),t._v(" and "),s("span",{staticClass:"post-term-one"},[t._v("PWA icons")]),t._v(" which we'll discuss in more detail in future tutorials.")]),t._v(" "),s("li",[t._v("You need to serve shared static assets that are referenced outside of your site, e.g., logo images.")]),t._v(" "),s("li",[t._v("You want to reference images using "),s("span",{staticClass:"post-term-one"},[t._v("absolute URLs")]),t._v(" in your Markdown and component files.")])]),t._v(" "),s("p",[t._v("In a future tutorial we'll discuss what "),s("span",{staticClass:"post-term-one"},[t._v("absolute URLs")]),t._v(" are in more detail as well as "),s("span",{staticClass:"post-term-one"},[t._v("relative URLs")]),t._v(", the "),s("span",{staticClass:"post-term-one"},[t._v("base URL")]),t._v(", and how to use "),s("span",{staticClass:"post-term-one"},[t._v("aliases")]),t._v(". If you're interested in learning more now, then check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/assets.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Assest Handling"),s("OutboundLink")],1),t._v(" documentation.")]),t._v(" "),s("p",[t._v("The image we're going to be adding to the homepage is the Code Monkeys full logo. We're going to create an "),s("code",{staticClass:"inline-code-block"},[t._v("images")]),t._v(" directory in the "),s("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory. Then we're going to create a "),s("code",{staticClass:"inline-code-block"},[t._v("code-monkeys-logos")]),t._v(" directory inside of the "),s("code",{staticClass:"inline-code-block"},[t._v("images")]),t._v(" directory. These directories are optional, but will be helpful for organizational purposes when we add more images in the future. Now inside of the "),s("code",{staticClass:"inline-code-block"},[t._v("code-monkeys-logos")]),t._v(" directory, we're going to add the full Code Monkeys logo which is named "),s("code",{staticClass:"inline-code-block"},[t._v("code-monkeys-full-logo.png")]),t._v(".")]),t._v(" "),s("p",[t._v("After adding those directories and the image, the directory structure for your site should now look something like this:")]),t._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[t._v(".\n├── "),s("code",[t._v(".yarn")]),t._v(" "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n│ ├── "),s("code",[t._v("releases")]),t._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),s("code",[t._v("docs")]),t._v("\n│ ├── "),s("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),s("code",[t._v("public")]),t._v("\n│ │ │ ├── "),s("code",[t._v("images")]),t._v("\n│ │ │ │ ├── "),s("code",[t._v("code-monkeys-logos")]),t._v("\n│ │ │ │ │ └── code-monkeys-full-logo.png\n│ │ └── config.js\n│ └── README.md\n├── "),s("code",[t._v("node_modules")]),t._v("\n├── .gitattributes "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── .gitignore\n├── .yarnrc "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),t._v("\n")])]),s("p",[t._v("Here's the full Code Monkeys logo:")]),t._v(" "),s("div",{staticClass:"website-diagrams"},[s("v-lazy-image",{attrs:{src:t.$withBase("/images/code-monkeys-logos/code-monkeys-full-logo-260w.png"),"src-placeholder":t.$withBase("/images/code-monkeys-logos/code-monkeys-full-logo-150w.png"),alt:"Code Monkeys Full Logo"}})],1),t._v(" "),s("p",[t._v("You can download the logo right here from your browser, and it will also be in the "),s("code",{staticClass:"inline-code-block"},[t._v("tutorial-6")]),t._v(" branch of the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-6",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),t._v(" repository.")]),t._v(" "),s("p",[t._v("The logo was created using "),s("a",{attrs:{href:"https://www.canva.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Canva"),s("OutboundLink")],1),t._v(". The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is "),s("a",{attrs:{href:"https://www.gimp.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GIMP"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Here are some other useful online image tools:")]),t._v(" "),s("ul",[s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www5.lunapic.com/editor/",target:"_blank",rel:"noopener noreferrer"}},[t._v("LunaPic"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://htmlcsstoimage.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("HCTI API"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://photoscissors.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhotoScissors"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.iloveimg.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("iLoveIMG"),s("OutboundLink")],1)])])]),t._v(" "),s("p",[t._v("Here are some useful resources for coming up with color schemes and palettes for your site:")]),t._v(" "),s("ul",[s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://coolors.co/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Coolors"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.canva.com/colors/color-palettes/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Canva Color Palettes"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.w3schools.com/colors/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Colors Tutorial"),s("OutboundLink")],1)])])]),t._v(" "),s("p",[t._v("It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. "),s("a",{attrs:{href:"https://www.canva.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Canva"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://www.gimp.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GIMP"),s("OutboundLink")],1),t._v(", and some of the other image tools mentioned above offer the ability to compress your images.")]),t._v(" "),s("p",[t._v("Here are some other useful online tools for image compression:")]),t._v(" "),s("ul",[s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://tinypng.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("TinyPNG"),s("OutboundLink")],1)])]),t._v(" "),s("li",[s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://imagecompressor.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Image Compressor"),s("OutboundLink")],1)])])]),t._v(" "),s("p",[t._v("After adding the logo to the site, we can reference the logo in our homepage by adding "),s("code",{staticClass:"inline-code-block"},[t._v("heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png")]),t._v(" to the frontmatter.")]),t._v(" "),s("p",[t._v("Notice you don't need to include "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress/public")]),t._v(" in the path to the logo because whenever you reference assets stored in the "),s("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory it's added automatically.")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file now looks like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Homepage Image"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])])])],1),t._v(" "),s("p",[t._v("The homepage image is added as a child element of the "),s("code",{staticClass:"inline-code-block"},[t._v("
")]),t._v(" tag that has a class of "),s("code",{staticClass:"inline-code-block"},[t._v('"hero"')]),t._v(".")]),t._v(" "),s("p",[t._v("Here's what the HTML looks like after adding the homepage image:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding a Homepage Image"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-full-logo.png"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("h3",{attrs:{id:"adding-a-title"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-title"}},[t._v("#")]),t._v(" Adding a Title")]),t._v(" "),s("p",[t._v("Since we already added a site "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property in the "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file, we already have a title on the homepage which has the same value as the site "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property.")]),t._v(" "),s("p",[t._v("If you prefer to have the site "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property and the title on the homepage to be different, then you can add "),s("code",{staticClass:"inline-code-block"},[t._v("heroText: Homepage Title")]),t._v(" to the frontmatter.")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file would look like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Homepage Title"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroText")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Homepage Title")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("For the "),s("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(" we'll be using the value of the site "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property for the homepage title, so the "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file will look the same as before:")],1),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Using the Site Title for the Homepage Title"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Here's the HTML with the homepage title highlighted:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding a Homepage Title"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-full-logo.png"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("h3",{attrs:{id:"adding-a-tagline"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-tagline"}},[t._v("#")]),t._v(" Adding a Tagline")]),t._v(" "),s("p",[t._v("Since we already added a site "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" property in the "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file, we already have a tagline on the homepage which has the same value as the site "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" property.")]),t._v(" "),s("p",[t._v("If you prefer to have the site "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" property and the tagline on the homepage to be different, then you can add "),s("code",{staticClass:"inline-code-block"},[t._v("tagline: Your tagline")]),t._v(" to the frontmatter.")]),t._v(" "),s("p",[t._v("We're going to update the tagline on the homepage from the value of the site "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" to be "),s("code",{staticClass:"inline-code-block"},[t._v("tagline: Let's get down to Monkey Business")]),t._v(".")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file now looks like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Homepage Tagline"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("tagline")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Let's get down to Monkey Business")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Here's the HTML with the homepage tagline highlighted:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding a Homepage Tagline"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-full-logo.png"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Let's get down to Monkey Business "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("h3",{attrs:{id:"adding-an-action-button"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-an-action-button"}},[t._v("#")]),t._v(" Adding an Action Button")]),t._v(" "),s("p",[t._v("An action button provides a link to a preferred page on your site, and it's placed directly below the tagline.")]),t._v(" "),s("p",[t._v("To add an action button you need to add "),s("code",{staticClass:"inline-code-block"},[t._v("actionText: Text on Action Button")]),t._v(" and "),s("code",{staticClass:"inline-code-block"},[t._v("actionLink: /preferred-page/")]),t._v(" to the frontmatter.")]),t._v(" "),s("p",[t._v("We're going to add the "),s("code",{staticClass:"inline-code-block"},[t._v("actionText: Learn to Code like a Monkey →")]),t._v(" and the "),s("code",{staticClass:"inline-code-block"},[t._v("actionLink: /topics/")]),t._v(" to the homepage of the site.")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file now looks like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding an Action Button"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("tagline")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Let's get down to Monkey Business\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionText")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Learn to Code like a Monkey →\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionLink")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /topics/")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Here's the HTML with the action button highlighted:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding an Action Button"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-full-logo.png"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Let's get down to Monkey Business "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link action-button"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Learn to Code like a Monkey → "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br")])])])],1),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("404 When Clicking the Action Button")]),t._v(" "),s("p",[t._v("If you click the action button, it will show the 404 layout because we haven't set up the route to "),s("code",{staticClass:"inline-code-block"},[t._v("/topics/")]),t._v(". In a future tutorial we'll create the "),s("code",{staticClass:"inline-code-block"},[t._v("Topics")]),t._v(" page which will fix this issue.")])]),t._v(" "),s("h3",{attrs:{id:"adding-features"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-features"}},[t._v("#")]),t._v(" Adding Features")]),t._v(" "),s("p",[t._v("Features are text that get displayed under the action button that are used to provide a summary of what your site is about.")]),t._v(" "),s("p",[t._v("You can add as many features as you like, but the recommended number is three. Using three features looks the best with the default styling, and it gives a user a quick introduction to your site.")]),t._v(" "),s("p",[t._v("Here's the format for adding features with titles and details to the frontmatter of your page:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding Features with Titles and Details"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("features")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 1\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("details")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 1 details\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 2\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("details")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 2 details\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 3\n "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("details")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Feature 3 details")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])])])],1),t._v(" "),s("p",[t._v("We're going to be adding only the feature titles to the homepage of the site.")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file now looks like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding Feature Titles"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("tagline")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Let's get down to Monkey Business\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionText")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Learn to Code like a Monkey →\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionLink")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /topics/\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("features")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Learn\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Code\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Crush")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Here's the HTML with the features highlighted:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding Feature Titles"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-full-logo.png"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Code Monkeys "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Let's get down to Monkey Business "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link action-button"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Learn to Code like a Monkey → "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("features"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("feature"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Learn"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("feature"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Code"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("feature"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Crush"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br")])])])],1),t._v(" "),s("h3",{attrs:{id:"adding-a-footer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-footer"}},[t._v("#")]),t._v(" Adding a Footer")]),t._v(" "),s("p",[t._v("A footer typically contains:")]),t._v(" "),s("ul",[s("li",[t._v("Authorship Information")]),t._v(" "),s("li",[t._v("Copyright Information")]),t._v(" "),s("li",[t._v("Contact Information")]),t._v(" "),s("li",[t._v("Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)")])]),t._v(" "),s("p",[t._v("Here's how to add a footer to the frontmatter of your page:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Footer"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("footer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Your Site's License "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("|")]),t._v(" Copyright © 2022"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("present Your Name")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])])])],1),t._v(" "),s("p",[t._v("We're not going to be adding a footer using the frontmatter in the homepage for the site. Instead we're going to be creating a Footer component in a future tutorial that sticks to the bottom of the page.")]),t._v(" "),s("p",[t._v("If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"HTML After Adding a Footer"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("features"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Your Site's License | Copyright © 2022-present Your Name "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br")])])])],1),t._v(" "),s("h3",{attrs:{id:"final-homepage-layout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#final-homepage-layout"}},[t._v("#")]),t._v(" Final Homepage Layout")]),t._v(" "),s("p",[t._v("Here's the contents of the "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file for the homepage after adding all of the desired frontmatter:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Final Homepage Layout"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[s("span",{pre:!0,attrs:{class:"token front-matter-block"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("home")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("heroImage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /images/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logos/code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("monkeys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("full"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("logo.png\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("tagline")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Let's get down to Monkey Business\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionText")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Learn to Code like a Monkey →\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("actionLink")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /topics/\n"),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("features")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Learn\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Code\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Crush")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("p",[t._v("The contents of your "),s("code",{staticClass:"inline-code-block"},[t._v("README.md")]),t._v(" file may be different depending on what metadata you decide to use in the frontmatter of your homepage.")]),t._v(" "),s("h3",{attrs:{id:"homepage-layout-notes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#homepage-layout-notes"}},[t._v("#")]),t._v(" Homepage Layout Notes")]),t._v(" "),s("p",[t._v("Here are some general notes about the homepage layout:")]),t._v(" "),s("ul",[s("li",[t._v("You can disable any frontmatter by setting any of the options to "),s("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(".")]),t._v(" "),s("li",[t._v("Any content after the frontmatter block gets parsed as normal Markdown and will be rendered after the features section.")]),t._v(" "),s("li",[t._v("You can also use a fully custom homepage layout. We'll discuss how to use a "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#custom-layout-for-specific-pages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Custom Layout for Specific Pages"),s("OutboundLink")],1),t._v(" in a future tutorial.")])]),t._v(" "),s("h3",{attrs:{id:"next-steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),s("p",[t._v("In the next tutorial we'll discuss how to configure the navbar that comes with the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(".")])],1)}),[],!1,null,"758d161d",null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/11.d5c0a96b.js b/assets/js/11.d5c0a96b.js new file mode 100644 index 00000000..2d3c13ce --- /dev/null +++ b/assets/js/11.d5c0a96b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{406:function(t,s,a){"use strict";a.d(s,"a",(function(){return n}));const n={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let s=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,s]:[s]):s},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},442:function(t,s,a){},501:function(t,s,a){"use strict";a(442)},533:function(t,s,a){"use strict";a.r(s);var n={components:{VLazyImage:a(406).a}},e=(a(501),a(18)),r=Object(e.a)(n,(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-7-navbar-logo-and-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-7-navbar-logo-and-links"}},[t._v("#")]),t._v(" VuePress Tutorial 7 - Navbar Logo and Links")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-is-a-navbar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-navbar"}},[t._v("#")]),t._v(" What is a Navbar?")]),t._v(" "),a("p",[t._v("In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(". A navbar is used to provide users with a quick and easy way to navigate to the main pages of a site. Most sites display the navbar on most or all of the pages, so it's generally designed to be a global component which allows it to be easily shown on all pages.")]),t._v(" "),a("p",[t._v("The navbar for a site made with "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" can consist of a "),a("span",{staticClass:"post-term-one"},[t._v("logo")]),t._v(", a "),a("span",{staticClass:"post-term-one"},[t._v("site title")]),t._v(", a "),a("span",{staticClass:"post-term-one"},[t._v("search box")]),t._v(", "),a("span",{staticClass:"post-term-one"},[t._v("internal links")]),t._v(", "),a("span",{staticClass:"post-term-one"},[t._v("languages the site can be translated to")]),t._v(", and "),a("span",{staticClass:"post-term-one"},[t._v("external links")]),t._v(". Depending on how you want to configure your navbar your site can have all or some of these options. We'll be discussing how to configure the "),a("span",{staticClass:"post-term-one"},[t._v("logo")]),t._v(", "),a("span",{staticClass:"post-term-one"},[t._v("site title")]),t._v(", "),a("span",{staticClass:"post-term-one"},[t._v("internal links")]),t._v(", and "),a("span",{staticClass:"post-term-one"},[t._v("external links")]),t._v(". We'll also discuss how to disable the navbar globally as well as locally for specific pages.")]),t._v(" "),a("p",[t._v("Take a look at the navbar on this page to see what we'll be designing for the "),a("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(". To see another example you can check out the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" site navbar as well.")],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Using a Custom Theme")]),t._v(" "),a("p",[t._v("Since the options being used for the navbar are provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(", they may be different if you're "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/using-a-theme.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("using a custom theme"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("h2",{attrs:{id:"navbar-logo-and-site-title"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#navbar-logo-and-site-title"}},[t._v("#")]),t._v(" Navbar Logo and Site Title")]),t._v(" "),a("p",[t._v("The navbar logo is used to brand your site, and it provides a link to the homepage. The image we're going to be using for the navbar is the Code Monkeys head and shoulders logo. We're going to be adding the image which is named "),a("code",{staticClass:"inline-code-block"},[t._v("code-monkeys-head-and-shoulders-logo.png")]),t._v(" to the "),a("code",{staticClass:"inline-code-block"},[t._v("code-monkeys-logos")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The site title in the navbar also provides a link to the homepage, and it's being set by the value of the "),a("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file which we set up in a previous tutorial.")]),t._v(" "),a("p",[t._v("After adding the image, the directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v(".yarn")]),t._v(" "),a("em",[t._v("("),a("strong",[t._v("Optional")]),t._v(")")]),t._v("\n│ ├── "),a("code",[t._v("releases")]),t._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),a("code",[t._v("docs")]),t._v("\n│ ├── "),a("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),a("code",[t._v("public")]),t._v("\n│ │ │ ├── "),a("code",[t._v("images")]),t._v("\n│ │ │ │ ├── "),a("code",[t._v("code-monkeys-logos")]),t._v("\n│ │ │ │ │ ├── code-monkeys-full-logo.png\n│ │ │ │ │ └── code-monkeys-head-and-shoulders-logo.png\n│ │ └── config.js\n│ └── README.md\n├── "),a("code",[t._v("node_modules")]),t._v("\n├── .gitattributes "),a("em",[t._v("("),a("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── .gitignore\n├── .yarnrc "),a("em",[t._v("("),a("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),t._v("\n")])]),a("p",[t._v("If the directory structure is confusing you, then be sure to take a look at the "),a("RouterLink",{attrs:{to:"/vuepress-tutorial-6/#adding-an-image"}},[t._v("Adding an Image")]),t._v(" section from the previous tutorial where it's described in more detail. That section also contains links to resources for creating, editing, and compressing images and for coming up with color schemes and palettes for your site.")],1),t._v(" "),a("p",[t._v("Here's the Code Monkeys head and shoulders logo:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-200w.png"),"src-placeholder":t.$withBase("/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-115w.png"),alt:"Code Monkeys Head and Shoulders Logo"}})],1),t._v(" "),a("p",[t._v("You can download the logo right here from your browser, and it will also be in the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-7")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-7",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("p",[t._v("After adding the image to the site, we can reference it in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file as follows:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the Navbar Logo"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Notice you don't need to include "),a("code",{staticClass:"inline-code-block"},[t._v(".vuepress/public")]),t._v(" in the path to the navbar logo because whenever you reference assets stored in the "),a("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory it's added automatically.")]),t._v(" "),a("p",[t._v("Also, notice the value of the site title is being set here by using the "),a("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property.")]),t._v(" "),a("p",[t._v("Here's what the HTML looks like after adding the navbar logo:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding the Navbar Logo"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Code Monkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("logo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("site-name can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Code Monkeys"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1093px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])])],1),t._v(" "),a("p",[t._v("You should now see the navbar logo in the upper left of the page.")]),t._v(" "),a("h2",{attrs:{id:"navbar-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#navbar-links"}},[t._v("#")]),t._v(" Navbar Links")]),t._v(" "),a("p",[t._v("To add links to the navbar other than to the homepage we need to add a "),a("code",{staticClass:"inline-code-block"},[t._v("nav")]),t._v(" property to the "),a("code",{staticClass:"inline-code-block"},[t._v("themeConfig")]),t._v(" object. The "),a("code",{staticClass:"inline-code-block"},[t._v("nav")]),t._v(" property expects an array of navbar link objects. We're going to start by adding internal links.")]),t._v(" "),a("h3",{attrs:{id:"internal-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#internal-links"}},[t._v("#")]),t._v(" Internal Links")]),t._v(" "),a("p",[t._v("An internal link is a link that points to another section of the same page or to another page on the same site or domain.")]),t._v(" "),a("p",[t._v("To add an internal link you need to add "),a("code",{staticClass:"inline-code-block"},[t._v("{ text: 'Link Name', link: '/path-to-page/' }")]),t._v(" to the "),a("code",{staticClass:"inline-code-block"},[t._v("nav")]),t._v(" property where the "),a("code",{staticClass:"inline-code-block"},[t._v("text")]),t._v(" defines the name of the link in the navbar and "),a("code",{staticClass:"inline-code-block"},[t._v("link")]),t._v(" defines the path to the preferred page.")]),t._v(" "),a("p",[t._v("For our site we're going to add the following internal links: "),a("code",{staticClass:"inline-code-block"},[t._v("Topics")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Resources")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("Donate")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file looks like after adding the internal links:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding Internal Links"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Here's what the HTML looks like after adding the internal links:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding the Internal Links"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1093px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Topics "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Posts "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/resources/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Resources "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/donate/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Donate "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Your navbar should now have "),a("code",{staticClass:"inline-code-block"},[t._v("Topics")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Resources")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("Donate")]),t._v(" links to the right of the search box.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("404 When Clicking the Links")]),t._v(" "),a("p",[t._v("If you click the links they will show the 404 layout because we haven't set up the pages for "),a("code",{staticClass:"inline-code-block"},[t._v("Topics")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Resources")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("Donate")]),t._v(" yet. In future tutorials we'll create these pages which will fix these issues.")])]),t._v(" "),a("h3",{attrs:{id:"external-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#external-links"}},[t._v("#")]),t._v(" External Links")]),t._v(" "),a("p",[t._v("An external link is a link that points to a page outside of the same site or domain.")]),t._v(" "),a("p",[t._v("Adding an external link is the same as adding an internal link except the value provided to the "),a("code",{staticClass:"inline-code-block"},[t._v("link")]),t._v(" property is a URL to an external site.")]),t._v(" "),a("p",[t._v("External links automatically get "),a("code",{staticClass:"inline-code-block"},[t._v('target="_blank" rel="noopener noreferrer"')]),t._v(" attributes added to the "),a("code",{staticClass:"inline-code-block"},[t._v("")]),t._v(" tag. The "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" attribute specifies where to open the linked document, and the "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" attribute specifies the relationship between the current document and the linked document.")]),t._v(" "),a("p",[t._v("These attributes are used to prevent a vulnerability known as "),a("a",{attrs:{href:"https://owasp.org/www-community/attacks/Reverse_Tabnabbing",target:"_blank",rel:"noopener noreferrer"}},[t._v("reverse tabnabbing"),a("OutboundLink")],1),t._v(" which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.")]),t._v(" "),a("p",[t._v("You can also customize the values for the "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" attributes by specifying them as properties in the external link. You can disable the "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" attribute for a link by setting it like this "),a("code",{staticClass:"inline-code-block"},[t._v("rel: false")]),t._v(".")]),t._v(" "),a("p",[t._v("For example, we could add an external link to the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog"),a("OutboundLink")],1),t._v(" repository on our site with custom values for "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file looks like after adding the external link:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the External Link"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'GitHub'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://github.com/codemonkeysio/code-monkeys-blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n target"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_self'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n rel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Here's what the HTML looks like after adding the external link:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding the External Link"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1093px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://github.com/codemonkeysio/code-monkeys-blog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link external"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(' \n " GitHub "\n '),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("No External Link in Navbar")]),t._v(" "),a("p",[t._v("Currently, the "),a("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(" doesn't include an external link in the navbar, but in the future one may be added for the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog"),a("OutboundLink")],1),t._v(" repository using the default values for external links mentioned above.")],1)]),t._v(" "),a("h3",{attrs:{id:"dropdown-menus"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dropdown-menus"}},[t._v("#")]),t._v(" Dropdown Menus")]),t._v(" "),a("p",[t._v("The links in the navbar can also be dropdown menus if an "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" property which expects an array of navbar link objects is used instead of just a "),a("code",{staticClass:"inline-code-block"},[t._v("link")]),t._v(" property.")]),t._v(" "),a("p",[t._v("For example, the "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(" link we made earlier can be turned into a dropdown menu containing links to pages for "),a("code",{staticClass:"inline-code-block"},[t._v("All Posts")]),t._v(" and for posts "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file looks like after turning the "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(" link into a dropdown menu:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding a Dropdown Menu"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Here's what the HTML looks like after adding a dropdown menu:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding a Dropdown Menu"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1093px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("arrow down"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("mobile-dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("arrow right"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" All Posts "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" By Topic "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Your navbar should now have a "),a("code",{staticClass:"inline-code-block"},[t._v("Posts")]),t._v(" dropdown menu containing "),a("code",{staticClass:"inline-code-block"},[t._v("All Posts")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" links.")]),t._v(" "),a("h3",{attrs:{id:"dropdown-menu-subgroups"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dropdown-menu-subgroups"}},[t._v("#")]),t._v(" Dropdown Menu Subgroups")]),t._v(" "),a("p",[t._v("It's also possible to make a dropdown menu with subgroups where a label is used to group a list of links. This is done by using the "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" property which expects an array of navbar link objects instead of using just a "),a("code",{staticClass:"inline-code-block"},[t._v("link")]),t._v(" property for a dropdown menu entry.")]),t._v(" "),a("p",[t._v("For example, the "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" link we made earlier can be turned into a subgroup containing links to posts filtered by main topics. Currently, the blog consists of three main topics "),a("code",{staticClass:"inline-code-block"},[t._v("LeetCode")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Node.js")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("VuePress")]),t._v(", so we'll add each of these as an entry to the "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" subgroup in our dropdown menu.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file looks like after turning the "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" link in the dropdown menu into a subgroup:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding a Subgroup to the Dropdown Menu"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Final config.js File")]),t._v(" "),a("p",[t._v("This is how the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file should look at the end of this tutorial if you're following along with the building of the blog.")])]),t._v(" "),a("p",[t._v("Here's what the HTML looks like after adding a subgroup to the dropdown menu:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding a Subgroup to the Dropdown Menu"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("arrow down"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("mobile-dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("arrow right"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" All Posts "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" By Topic "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-subitem-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-subitem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/LeetCode/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" LeetCode "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-subitem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/Node.js/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Node.js "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-subitem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/topics/VuePress/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" VuePress "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Your navbar should now have a "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" subgroup in the dropdown menu containing these links "),a("code",{staticClass:"inline-code-block"},[t._v("LeetCode")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("Node.js")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("VuePress")]),t._v(".")]),t._v(" "),a("p",[t._v("To add more links to the "),a("code",{staticClass:"inline-code-block"},[t._v("By Topic")]),t._v(" subgroup all you need to do is add another element into its "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" array.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("404 Reminder When Clicking the Links")]),t._v(" "),a("p",[t._v("Clicking the links will show the 404 layout because we haven't set up the pages for the navbar links except for the homepage. In future tutorials we'll create these pages which will fix these issues.")])]),t._v(" "),a("h2",{attrs:{id:"disabling-the-navbar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#disabling-the-navbar"}},[t._v("#")]),t._v(" Disabling the Navbar")]),t._v(" "),a("p",[t._v("You can disable the navbar globally if you prefer to not have a navbar for your site. You also have the option to disable the navbar locally for specific pages. We'll demonstrate how to do each of these below.")]),t._v(" "),a("h3",{attrs:{id:"globally"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#globally"}},[t._v("#")]),t._v(" Globally")]),t._v(" "),a("p",[t._v("To disable the navbar globally add the following to your "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Disabling the Navbar Globally"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n navbar"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])])])],1),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" property is a predefined variable provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(". Check out "),a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html#predefined-variables-powered-by-default-theme",target:"_blank",rel:"noopener noreferrer"}},[t._v("Predefined Variables Powered By Default Theme"),a("OutboundLink")],1),t._v(" for a list of the predefined variables.")]),t._v(" "),a("h3",{attrs:{id:"locally"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#locally"}},[t._v("#")]),t._v(" Locally")]),t._v(" "),a("p",[t._v("To disable the navbar locally for a specific page you can add the following to the page's frontmatter:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Disabling the Navbar Locally"}},[a("div",{staticClass:"language-yaml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yaml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("navbar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("false")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll begin the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component which will stick to the bottom of the page and consist of social media icons and a made by message.")])],1)}),[],!1,null,"061a911e",null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/12.d6a93675.js b/assets/js/12.d6a93675.js new file mode 100644 index 00000000..4549dc76 --- /dev/null +++ b/assets/js/12.d6a93675.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{454:function(e,t,r){},513:function(e,t,r){"use strict";r(454)},535:function(e,t,r){"use strict";r.r(t);r(204),r(205);var a={name:"Footer",computed:{checkSidebarAuto:function(){return{"is-sidebar-active":this.$route.path.includes("/donate/")||this.$route.path.includes("/contact/")||this.$route.path.includes("/resources/")||this.$page.regularPath.includes("_posts")}}}},n=(r(513),r(18)),o=Object(n.a)(a,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return e.$page.path?r("footer",{staticClass:"footer",class:e.checkSidebarAuto},[r("div",{staticClass:"icons"},[r("div",{staticClass:"no-wrap-icons"},[r("a",{attrs:{href:"https://github.com/codemonkeysio",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"GitHub"}})],1),e._v(" "),r("a",{attrs:{href:"https://www.youtube.com/channel/UCteut5f1PHW8vP29o66z-kg",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"YouTube"}})],1),e._v(" "),r("a",{attrs:{href:"https://keybase.io/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"Keybase"}})],1),e._v(" "),r("a",{attrs:{href:"https://t.me/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"Telegram"}})],1)]),e._v(" "),r("div",{staticClass:"wrap-icons"},[r("a",{attrs:{href:"https://twitter.com/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"Twitter"}})],1),e._v(" "),r("a",{attrs:{href:"https://gab.com/codemonkeys",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"Gab"}})],1),e._v(" "),r("a",{attrs:{href:"https://codemonkeys.tech/contact/#primary-pgp-key-%F0%9F%94%90",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"PGP"}})],1),e._v(" "),r("a",{attrs:{href:"https://codemonkeys.tech/rss.xml",target:"_blank",rel:"noopener noreferrer"}},[r("vp-icon",{attrs:{name:"RSS"}})],1)])]),e._v(" "),e._m(0)]):e._e()}),[function(){var e=this.$createElement,t=this._self._c||e;return t("p",{staticClass:"made-by"},[this._v("\n Made by & for Code "),t("span",{staticClass:"emoji-wrap"},[this._v("Monkeys 🐵")])])}],!1,null,"17ddc652",null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/13.3b595a15.js b/assets/js/13.3b595a15.js new file mode 100644 index 00000000..f67214ab --- /dev/null +++ b/assets/js/13.3b595a15.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{437:function(t,i,a){},496:function(t,i,a){"use strict";a(437)},526:function(t,i,a){"use strict";a.r(i);a(215),a(65),a(27),a(204),a(205);var e=a(406),s=a(415),n={components:{VLazyImage:e.a,Layout:s.default},data:function(){return{topicsList:[]}},created:function(){this.topicsList=this.$topics.list,this.topicsList.sort((function(t,i){return t.name>i.name?1:-1}))},computed:{topicDetails:function(){return this.$site.pages.filter((function(t){return"/topics/"===t.path}))[0].frontmatter.topicDetails}},methods:{handleNavigation:function(t){this.$router.push("".concat(t.path)).catch((function(t){"NavigationDuplicated"===t.name||t.message.includes("Avoided redundant navigation to current location")||console.log(t)}))}}},o=(a(496),a(18)),c=Object(o.a)(n,(function(){var t=this,i=t.$createElement,a=t._self._c||i;return a("Layout",{scopedSlots:t._u([{key:"page-top",fn:function(){return[a("div",{staticClass:"theme-default-content content__default"},[a("h1",[t._v("👋 Hey Start Monkeying Around!!!")]),t._v(" "),t._l(t.topicsList,(function(i,e){return a("div",{key:i.name,staticClass:"topic-card",on:{click:function(a){return t.handleNavigation(i)}}},[a("div",{staticClass:"title-and-summary"},[a("div",{staticClass:"title-wrapper"},[a("h2",{staticClass:"title"},[t._v(t._s(t.topicDetails[e].title))]),t._v(" "),a("h2",{staticClass:"number-of-posts"},[t._v("("+t._s(i.pages.length)+")")])]),t._v(" "),a("p",[t._v("\n "+t._s(t.topicDetails[e].summary)+"\n ")])]),t._v(" "),a("div",{staticClass:"logo"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/"+t.topicDetails[e].logo),"src-placeholder":t.$withBase("/images/"+t.topicDetails[e].placeholder),alt:t.topicDetails[e].alt}})],1)])}))],2)]},proxy:!0}])})}),[],!1,null,"9415d188",null);i.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/14.1ee24bfc.js b/assets/js/14.1ee24bfc.js new file mode 100644 index 00000000..6d2cfc18 --- /dev/null +++ b/assets/js/14.1ee24bfc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{456:function(t,e,n){},515:function(t,e,n){"use strict";n(456)},568:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(515),n(18)),p=Object(r.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/15.96580589.js b/assets/js/15.96580589.js new file mode 100644 index 00000000..d780f647 --- /dev/null +++ b/assets/js/15.96580589.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{455:function(t,e,a){},514:function(t,e,a){"use strict";a(455)},536:function(t,e,a){"use strict";a.r(e);var n={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted:function(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(514),a(18)),s=Object(i.a)(n,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/16.f48555d6.js b/assets/js/16.f48555d6.js new file mode 100644 index 00000000..06657121 --- /dev/null +++ b/assets/js/16.f48555d6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{457:function(e,t,a){},516:function(e,t,a){"use strict";a(457)},537:function(e,t,a){"use strict";a.r(t);a(62),a(27),a(46),a(47);var o={name:"CodeGroup",data:function(){return{codeTabs:[],activeCodeTabIndex:-1}},watch:{activeCodeTabIndex:function(e){this.activateCodeTab(e)}},mounted:function(){this.loadTabs()},methods:{changeCodeTab:function(e){this.activeCodeTabIndex=e},loadTabs:function(){var e=this;this.codeTabs=(this.$slots.default||[]).filter((function(e){return Boolean(e.componentOptions)})).map((function(t,a){return""===t.componentOptions.propsData.active&&(e.activeCodeTabIndex=a),{title:t.componentOptions.propsData.title,elm:t.elm}})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab:function(e){this.codeTabs.forEach((function(e){e.elm&&e.elm.classList.remove("theme-code-block__active")})),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},n=(a(516),a(18)),c=Object(n.a)(o,(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ClientOnly",[a("div",{staticClass:"theme-code-group"},[a("div",{staticClass:"theme-code-group__nav"},[a("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,o){return a("li",{key:t.title,staticClass:"theme-code-group__li"},[a("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?a("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/17.cc4d42f1.js b/assets/js/17.cc4d42f1.js new file mode 100644 index 00000000..08613c13 --- /dev/null +++ b/assets/js/17.cc4d42f1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{443:function(A,n,s){},502:function(A,n,s){"use strict";s(443)},524:function(A,n,s){"use strict";s.r(n);var a=[{fingerprint:"B7E6 FB94 A589 876C CFC2 1E4B 1E07 E75C 19F1 AE0E",publicKey:"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBGRC03cBEADDn1vVti8bek91JwLh65YNRvF5WRFEAzi8jQaAk55a2JKXvkfW\nS1QnP9jZBg/fVCYyi5fopjZqckDAiSjWaIkgZLyEJ4dVeUhw2AoTt8WVgjjC9BI3\n6neDCcpz2dHERflBOsR6M0QNUcR/8jzRS7zPUeXWY9VqZIEPanqjbgbU5HwoJvvi\nc/zikG3GLGXv3Hm2E2pO03IdOq3Q4y2vDpIptltB5FpTQi/iZzs+Wz2iHQkE3sMK\nJ8MxubwYkmFoRjbtUHDnoegVHcoFJprdxMnzJYm2TYauneyAKIuSXdBe7pOCxEjO\nikY9gTZ0ldufcfgnO3Harmie4hhuSIYCdLEJc86Yfz6MJVqducf/qjfOfvvJRBja\nWQR8eoTGatryQOaRWVqXuSfZb9qRRBbMtPhC4m5FajUBc0l1+YztkQ2UoNKlyTQW\nmZ0fshNqhuRb1mxSmUBEMvFxRLuXzyqrAj6dAyEug1vch7PweSMaG4WnY4OZwJcL\nDGgBg6p9cFrP9oyp5p+WBepOAHMxLSRgRXYusZH1/IKV1PZXWBqJV1W0Csv5cl6b\n/aSnrIU48G0YVYJSUds1LL6atbsuCYtcYMDS4vpCeNxsgpsIDnh22WKtSak8+5Po\nMPjx+Ttt5J35D8UGTd668CUtmzp5KEQ48lbTsl3OAq2I8xzJmC8b0Xy9mQARAQAB\ntCdKYXkgdGhlIENvZGUgTW9ua2V5IDxjMGRlbTBua2V5c0BwbS5tZT6JAlQEEwEK\nAD4WIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELTdwIbAQUJBaOagAULCQgHAwUV\nCgkICwUWAgMBAAIeAQIXgAAKCRAeB+dcGfGuDjW3D/9YjeFXfJLtoPrwdJpW8Y70\nFrJwkdu81bt7ilSy9w09aoa5IYyUit7UqS8EyjQPwUXtPLdKX7rswbab96SXjhqY\n52N+D2r3JqP3IUq6qRLFnI0MukHms0/BUqHvq5sgPJbEsCmmAJOtTQIoE6GT3xC3\nNcEvqiaztgTDsHaX02JZ9tjcGjyUdwKOy462cy/R2ATVhqWZcBSFaEH6u7unfkji\nWxZMPJHkCTKAiFBC9/3MRqoDrHO0t5VawHS3uZcjkF+7JpVPSJEjIN0Sq1st/uUA\nm88AptHpDrA+Q4c6+S+uli4PLhJ0HbRV/T3YwU9i6VdfDsK15cmGcqKk93EwJbo8\nJqw+OFguoEqGVbZEqhiDOYdEZkfeCFiIvhy3TapqtLB6mmAbxRV5T+zVwY9qnYie\nqG2zMsPMGk8cGccYsqmoKHDlVu3YBpUBNCjxaxQGXTybCrF/rpx1gBL7bW9EdeUK\nJG05UrW+pJJ76Se5bGZLRtwR0/B8DUzXWCmzpz2lmaO/ll35AbFNQXlTIBsCak87\nXDkNgIUUl7r4lVqcYBGFI0LsOq3Dq2X3t8FYQAEO6yEg6V0ZxddHyjUIpJf9dsjP\nZUMcYGLb0TIZFgQTBQ6LojfvsmmSYEY2pr8+EwJJTnk45xu8ZCx1Hsb99W7VKdcO\nrJT9uX4VF/rFrFl3aKYAzNHOyc7HARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklG\nAAEBAgAlACUAAP/+ACx4cjpkOkRBRmd3Qml2eDZrOjQsajozMTc5MTE2Njk3LHQ6\nMjMwNDIxMTb/4gKwSUNDX1BST0ZJTEUAAQEAAAKgbGNtcwRAAABtbnRyUkdCIFhZ\nWiAH5wAEABUAEAA4AAhhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAA\nABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAA\nABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAA\nACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAA\nACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAA\nAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBu\nAABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA\n/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAA\nJJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA\n8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAA\nD1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAA\nAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEL/2wBDADknKzIrJDkyLjJAPTlEVo9d\nVk9PVq99hGiPz7ba1su2yMTk////5PP/9sTI////////////3f//////////////\n2wBDAT1AQFZLVqhdXaj/7Mjs////////////////////////////////////////\n////////////////////////////wgARCAEgAPADASIAAhEBAxEB/8QAFwABAQEB\nAAAAAAAAAAAAAAAAAAECA//EABcBAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEA\nAhADEAAAAeIAAAAAAAAAAAAAAAAAABSKJQASiKIsAAAAAAAFAAAAAAABKIAAAAUA\nAFI3rN561nN05w6ZaObrNzms3AAIsAAFAaM63JpcZN5jZDcAAtyb0vK5us61m8nT\nnUpRALKNrNY1qmMazsi6aqaw6Dm03Mt0w1c3k1mpBnXnuz0w1WcpZU0p057zNXUu\nbjNlw21lTBsrBq4ZthuLB0561NcllT0SzeOkjMzeKlvHXNzcdM3G86bzs6bLnYF2\nZzvAGys02TpM3GstzfPpJpLS8+nM6cuvMblOdSp3rn0mue+dqdZ6ZzYjcBha3IYs\nNWdM1zuTWs6zcTWtyNZzc6wqes52a1RvOy1zdOdyk6YJY3OiWLzmy4Giy4mksqL0\n57m2ctwNwADVJrFlqAN53ibgqLrOpvAqHTnvKzLNxLGXpy65XIbgAAG03Ncms1NS\nnTn05zQVN1nU1gVLeNZsmsMF1OudTXIVIEsoAsHWc+s1zdIXn0HPeZs9GGVvmbjT\nWbnG6Z3eRrBUgJYAVKDRbeU1d82z1md5aJjLo3M6kKuW6xls7vPpm828VIgAAspe\njnNIVIAG9crm6mrmxnJYVIAHTOes1yms1IACwWBUoAAAAAAAILBYAAAAACwVBUoA\nIVBYAAAAAAAAAAAAAAAAAAAH/8QAHhAAAwEBAQADAQEAAAAAAAAAAAERECAwMUBB\ncCH/2gAIAQEAAQUC/oEJsJ9ebdpchPowmUvhS5PVZS+1yeMIIfM7hO4NcouvhF2E\nJlx8LKPr9mPUPilL4Ig8eoYteL0XCP1iHqGIermeKHiH8n6+p0svc1DETHjEPbqH\n53lD1DEPwfU7eIZCY3lyEH5vhD1ZS9UTHwvJD5fx4IfKHqH9ND5XCHwh+yH4ofCH\n7LJ4IfCHxPO5Ol0h5MvvNm3ZnyTH6pDy8TZl2iY/Rc3JxdvCGvJeFyH+kL2hryfj\ncvk/C/zD/8QAHxEAAgICAgMBAAAAAAAAAAAAAAEQESAxIUECMFBx/9oACAEDAQE/\nAfpUcFnBXposvGzgawoocUUUUUsKlykNxc7nsYhCEhsSHNQzoYxahCY1kkNi0UdF\nlnUJjUuHCLw6l6hajxlY9T5QtQhwstlDVmixuxIqzReWizcVH6WLLWFxeG/of//E\nAB0RAAICAwEBAQAAAAAAAAAAAAABEBEgMUEhUDD/2gAIAQIBAT8B+lZ6Uel/jZRW\nNHuViiyyyy81LFFTqeCGOGJFim4R0QjsOFk2JD2XFFS0JyoUMrDsrcPcOXj2VD3D\nFDy0WLw2VDZo3nsqbmh5bwqKw19D/8QAFBABAAAAAAAAAAAAAAAAAAAAoP/aAAgB\nAQAGPwIHH//EACAQAAICAgMBAQEBAAAAAAAAAAABETEQICEwUUFAYXD/2gAIAQEA\nAT8h/wAlj9aZiMJHA0G/5okRSSJSH5JnCYR4Yy2/CmEhQy2fQmEhCY/I012JJQ0G\n3bIvZKY06EpeMkV34e0hw1VEMRg1UcGSni+iRhKIWSBRAtCRpQlLHktVwi8K4RbK\nDRmXkllOC0NRmpYSBco4PPJnBFxuMWwg3HWw1Oak0K6640LCodiSUhueglI1GW+C\nTpLQuByWVwh8vDx+i4G5wklD1JwWPJpQpcciiwuUcGWOCxLQg6w0ifcJwTPRLCUl\nIbkuNA23muKSQ1hWOspyJqlI9iUDTixUmJCjgE4F7JTIFimU4LQ1Gi4wmiQN8zbD\nQbbJiQro0FlZTnDc5T6NGivqLldaFs2KaKh3q67+g7zYppQtr86t9VWlimlS+qrp\ncakcNPmlinTr0Nx1KAnIw1ArHWaEZeL5oUPz2qucfwSNSOGJZLK9FD8ChiU89v0G\ngkQiTlCcjkNRheij+CPSYGPgJPYkjcIvKgJyMS1ZMlDEN2UPxo0n06kkpDc7L0WP\nwchQHAbnZpPt0JSxcIaehOBBuB9BOBcoSN04JflTgl/41//aAAwDAQACAAMAAAAQ\nCCGe+++++++uKCCCO++6yiCSy2++OCe++iCCCOCCCS++u+6CCCQymyhMCC2++iAq\n2/8A/wD9ykIlL6qbF/o6Io27b8iNYB293CkI7ILLYyEEF1wXJ7b/AJJR6W9CVERJ\nhO/9/wDivciiQVsK9urvffel9iogktqw8v8A7+UBcmoIIKvQroL6IafquoKoJAno\nEPXI76VEJb4oTY+B6ZUxxqkb767UJLJnXbKJLtz7b7woIIJIIIIb7zoLL7644oIY\n5777IIIJLb7777777qIIL//EAB4RAQACAwADAQEAAAAAAAAAAAEAERAhMSBBYVFQ\n/9oACAEDAQE/EP6Q2UOz5m0X6iV5hepU7KnIp8BSH7lLko8AVbADZOsADc+ZeH7l\nmiJWEELlE1g3NkIAOo9lG2WOLxVg1HS8FUXDVIKYdzZWBFWWMs1LNynrBV7j+YNM\nFlkC49WfuCo2RKblDPYS8Uu8CkslmjBZiVRgiVezVqxRplGD5KXqBbFRRh6Yt8/D\nHTHUe45fELoRKx6Y6Y7nWBW3xGoPDGvJ6ENpXAQ2xsjRinxC4tKIIgkP2fMKNEdQ\ntivTEp8efAr2UOyJNEu8jSmJX8//xAAeEQEAAgIDAQEBAAAAAAAAAAABABEhMRAg\nQVFhUP/aAAgBAgEBPxD+kmWtccIfcu+61LOpZ3AHRBj8yxuDfRW6IqqZpwpcT9yk\nfmW2wb4GmWjnhmixWsw1F4QVxSAES4ZVw3bUcwrI8TAqKViKiURpLe8N1iH3EuKm\nmLUfE+YtxuAuJcXjK4s1wgyiejwUIZbiGY6mbzxZmWcP7LVmLUF5eDmAO7Zxo41h\nrjz1WrQb6dHGs04V4OqXE8Q+4vUcJeBU8CDSZgA6rUC1sQxEh+T9xt3DOoAgrJBv\nrt0fmWkLZejlcG/5/wD/xAAkEAEAAgICAgICAwEAAAAAAAABABEhMRBBIGEwUUBx\ncIGRof/aAAgBAQABPxD+JKuKNn5fQQO2GgVLWLGK9QGsxE2fii0InbNIR3GfQitn\ngHdwHeJg6YDrEB1f4ALoit4gvcUGcQOi52HmKagt5ivUdgn2JtD5DTfUoHRBazFa\nxLvfyCNMTpDuRg4p+DER+rHoTdHkPAFaIqtxLZ4guiDeowvZ45n9S5wRO2VbNeOJ\nYVCQ1HjV4Us7iBqDdxbZE9MH2wD3MfQiXuCQtevDXHYZSwILTxNJH/aIrDC0Ph15\nZSo3yBpg+yJ6Ip6i3vi96iEEVPgpUrLeNR0sFpyaYrYbTMeDYM28X5dSpFtt+Klp\n1CESmnjdxBf6x4SHTziWPIQ0fcd/rNH6myWvUUgit4BdQdZYlNeCwu3PelKzfHeY\nhn/SOQtOTSRZerhrEBbGaJv+0AKIy9cWIAPqfRNvhrdQQYgOTHKZIBmbIStgAold\nY6WC0hsxW8GgxbpJs4pU7nW4RWRWz53WpgrhlUx6CXPXCpxNo8PCTUw4WOMR3DjV\nN/A02SpKWzXiixECzPiFtEAS1RrjXAoqCbxBbzMDohNDMXSfQhqMU6hUI4m/lFcE\nhc9chbUAMQR1KMnhSzudbnTFDcFrMVrEVdviDuWKTxbXqICJangxK3uYCXPXPelK\njfhom74d01eOmbedPj65v8Dczfw7s6+Omb+dPl+/xc/1+HVmrxwEdvOnx9nkZH9R\n+ATDAGY3scm448Gvx+02OQVohmYAZjv4W9iDBuTDE2Jqm7ln7Sl3WYg7mA6JS2tc\nmhw7lwQA/U6v9RVc/GXeJf2TDGjf+IFw4YP7RPY4C7i3qKu2Arg4WB9ETgMfcD2e\nEqfK7kpUbghsYbhwxAzP7SDAaYYu0BdcIAfUbNG2DW3cQMx3BgnclLG44+O9bqFJ\nVW8t7EHSA5MM0RZ9wAxANCoJgywyVRAB9TrhVbea1O5dhv4rfqKegjK3xGp1wIPs\nlGXUpaYHswvZi7eI02QT7lGGvgaggKpaxr4EWGG4cMAWsdwYPgRWREr+NeaaNRQp\nfxU0aixS/wANf//ZiQJUBBMBCgA+FiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC\n1WcCGwEFCQWjmoAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQHgfnXBnxrg4V\nJg/7BvWZDlJgHzX2TymItJtEP7JHMpa5Yy4VWY+SdDb1Jz9s2YV/lxbSq7LBTSkP\n/9N6h8KMhwHmv0aenHFLLivUATGqmcJ6fpwkgDOPGde8VoH7IcoXxU0IXOI09POt\n7jCrq6cA2xgvEHoUEqHNysILHGPyK/ltMmIMprlR5y2VBpy41+zq3gHfQT+wsT8p\ncUAF0mNSYIlEDvvtvstWnbRdM+6NqL4DsCtCWdr6Tyb1kaIjjDVXiWDtGtbx5c2c\nEss9cj8W4IvTyebDXuEWGiRjq6JjQNQZKFiG23y9QE1TAcSvpdL4f4/9caxCjEh/\nuLrDQx6MCo9NO/93at6ul6ZBS6saR8o3vn6gLv6u0Vc2/t46FGjReS7suFOU1M7o\nkYQEeaeRCKGESX6Chal7KdSU0t5kOgRsxPoMwFQhBa69MjNgLomDeOYDegnDdeqS\nhuN8+vyBkBxkXtE6aG1nJ1C54MVtH7slH5ciaZ5vDNgh2XH4xmO3d+zG2Wwv/Gl+\niI+HSJmuFtmw+99sTZpXVGINXr7dwAYWrdhSl0ts0Z/TzwN2PN38cDr6bnNgM2/v\nLb7wfb9IUbJIr8vJj8qvcNOjML8LqeMTugwFyHx/EtSxBiH6f9z+mu2k1qMCY+wS\nzVrYjukls6Z707l1u/de6JBGFqYY796mv7po3Se+Qjd2Y9a0NkpheSB0aGUgQ29k\nZSBNb25rZXkgPGpheXRoZWNvZGVtb25rZXkuN3ZrN2lAc2xtYWlsLm1lPokCVAQT\nAQoAPhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJkSSNcAhsBBQkFo5qABQsJCAcD\nBRUKCQgLBRYCAwEAAh4BAheAAAoJEB4H51wZ8a4OUN4P/0bbFhsQ9qbXIdcNelA5\nrurWVMmxK2BWjfYgfSmI1x/RlD/8rWqtPU/Wx0hx8pmoYMwmAiKG3epy2SJHorAf\n9C2WljX4d+OCA1Y7tmqiXY3Yh9nSbOwe3sytw3/b2YPotYr/b7R2v6l/3xaGdmxX\nR5bQUcWXmHV10ZU2mH+JvDvtyYXUHJHiC0hr1rXOcTpShYc/rV1ORRHA6rn820db\n3pSCnRJA/kL3WGgkLaM0mUfZQWqZr600AskutJTlDd1/aXJBn2GNougWorCI59Jz\nnb67Afnme8eBiz4wSXiyCQeE4Y1k7LZrat9toqS/oUs4f9cWwvmHP26//A02U0WA\nHw4DRmqQXRyxxOsr+IJ4Nhp15mKhED5a4x20T2gy52TEtdamnYSBssLD9xeHYnLs\nSg8q8FfojUlQdBtHqJjg51D8lqOm1cdeVg7W8qLYYIXmdFP8VEUDkG7vJ3fDeUd2\nBGvcV6DsRtynH3u5GwFY829CtCHeYICxiyfWQT4fEKJPB5y91lPFSCxQr9Fg4Ng/\nlelKQPCL7HoH5yNrvhoFVlOwmlXcuKxRdmQLgFw5eTfHLUx/fxX+JVW5uz3DG01d\ntrfZ3MDhIenOmdg2DNmubpu7Gqb+qDrRJFpcg/7xS0NRxzQvl73Ts4RskhdREHG0\n/s1cPAk3FTLqvhLfwXoNW142uQINBGRC1DsBEACh+SSUsnokhUazmzj0L7CqKDHv\nrfDyoWnlSEGkiTiXhPjtzBMTYM7HKx9b79TV5U0EB+XdW3aCbSuV5gucuoibiKXe\nlBdFy0k2tnDnzAM0qUplKaPSvDC3BbNrCfw99hnoaUuFF4xzwiKfMKAVHtai7SK8\nsVyTWjyex45NPyySHHkLs0B9Lg/hzl01E4EugIzYO3BlGqhD2RbR9033gB8acD8o\nXWvn+3epus1diJKAQqDN0W1GLCaDR+1LKnQjHf5ECKvtvkWEQOylDVoMs/eTxKSv\ndsFcawjjuO7vPVPYlOpucG+zG+Oui5UnztgIQV6XaHvYxLTA6coDPkKpvcKOa+JV\n/qSNns+9ft3N9dybFvqIIoiIA62UVreDQ7P6R2RLdgdQzj4aba5raD3XZiA2FfY3\nCxQUZQkpDJcNE8+6ix09g9wRsdsAsycWPeIlHe3XTR4wrTUA3tasUqc0faIC+LN+\nndc/OkuWciflgD6IspFelVtEHM6nyDu2iTd4ShJrt2rGPdNDTSpeGb1SYr9ArURw\n65/rWlaUk/OERO+MkfE3qijCMo10FpilEFCDlABVRHMsQTpJdOqjakIX4BfmBxN4\njpNK5pjoteQtQ91wgclyfg/xr4o0Si78IZBujHtDCTI1V67wLn75e4ltL8eoJGI+\nUf8eQlHNOaWEOyba6QARAQABiQRyBBgBCgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnx\nrg4FAmRC1DsCGwIFCQHhM4ACQAkQHgfnXBnxrg7BdCAEGQEKAB0WIQT8/9d3HMqd\nw6detRrXDCh3fL4EpQUCZELUOwAKCRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1\nZX+du0LzBefalbuNCjkBUHFrvBFKa1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsV\nF98lYl9QdUnKMVoRnkfQ/U0zzAaNk/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlX\npZv+aLhIo8jva2c/ZpMUcS6gZoScdtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q\n/9luPe0I2DUTqgJgCUp20egDTJwbwtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQH\nwHonktFhiOh0sOdINyQhm9qQt7mK/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMx\ndnq3uq11B18a4gGjBe6q5oyw0pI3QcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQE\nazCswwYkNmMmw/7Q5XPYrqkljecVgP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwD\nJYh5tpcqSRTz6ADLQAZCR/epM9+OS9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/\n9AOtpKvQyZEQSk8oQlcn/w/n2DhwPEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv\n0aB5Mpr/WbhKXqWkSSLawvHK/+qAXIA1dRzyVs87alvupmEGecoLroy//VT4qWlS\nOR1rB8opyEgg+4E2hCUCN9gBDJJ3EACQTCPWIB6+k1wzFaiyn7KoAcdnd3MJWgMe\nWmO41xcVvS2C8l5yytRwpqHzsodMMXneWqzRCWyZGNXldRwTu4nblRHKthX9tP+O\n0xIdnhWerZ2KzWevHPD+jlPrOncd7GnXAKpI523gyTTjR5oqXhswPL4vZgTD6+J/\nI5ubEiNnK6lgUTSOoDJ+MLPtXuviCgLyJJQIX8bpd4IwYSeS6l69shG9uDl7hC5s\nnND8Mf3CWyR+PQrC/XYqPimsRTweozO3ZaCIESpqGqA5RiNGduH/nmWXogVzoBvE\nUGhRSyxQHvlD9CtGE59JQAADoZ/dq/kz5p6J74Z6d0anp6exR9otV0xH/YTHLAyR\n0ug9RytaOdrEboI6PPvRrNy6ZQM7yx0lABGPqksa67neRoIpZP1S1+h9XyEvRgDn\nu9jigKIfJzjHDtZbAJrVuyjSEdE6SBqGQ9zEvlU/7iY53ZlnAqhIudKzwL8rEkGR\nMReWPdYsFNZSJNayj+0YxLIg1RAjmN7+1FDeoisyLrp9E35QfVYckmTuouJxJ/ab\nJyiM/yJaXrctYHeFxBIvnoAISk8DzFsw8iQ9/KT0pse+4udbAcqTzrgOzF+pJ946\nqun9jdeip49IFAEnN6pGH/883JHBAGNkm08pP0t5CZ/EoUKL9aCMlbmQVwCo5IgI\nRQR9fSMksIkEcgQYAQoAJgIbAhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3\nBQkD22U8AkDBdCAEGQEKAB0WIQT8/9d3HMqdw6detRrXDCh3fL4EpQUCZELUOwAK\nCRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1ZX+du0LzBefalbuNCjkBUHFrvBFK\na1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsVF98lYl9QdUnKMVoRnkfQ/U0zzAaN\nk/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlXpZv+aLhIo8jva2c/ZpMUcS6gZoSc\ndtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q/9luPe0I2DUTqgJgCUp20egDTJwb\nwtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQHwHonktFhiOh0sOdINyQhm9qQt7mK\n/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMxdnq3uq11B18a4gGjBe6q5oyw0pI3\nQcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQEazCswwYkNmMmw/7Q5XPYrqkljecV\ngP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwDJYh5tpcqSRTz6ADLQAZCR/epM9+O\nS9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/9AOtpKvQyZEQSk8oQlcn/w/n2Dhw\nPEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv0aB5Mpr/WbhKXqWkSSLawvHK/+qA\nXIA1dRzyVs87alvupmEGecoLroy//VT4qWlSOR1rB8opyEgg+4E2hCUCN9gBDAkQ\nHgfnXBnxrg4vYBAAl5cPhObEBiUicl2/L4rNFBGhwj+s+zPyrRi3sVWgKp+Zkkwl\nbPhTnaDu3KodRI7O1Ipq7EVoTMJeIqJp4Tf/Pkjxyb588A5dy+ccWILtr+lvUHE1\n0aFUaH8JS9+LdFq/zI7gFyeoxpF4f+8Rt2BsGl4SVPYCLB15mlV14yfSzTFchzjz\nrUicJWnjjR1EOlcUKl/aKsMt50wEtTpRpp06RR2CLzk9J164bCybqe9h1QjyLezh\ndMHkwFYKbmGRh5FGfjNUfLZD1lWjaDgUi1K5jROBmCcMxUw2M6Z47F2xBzmRPa5v\n4OWKWmAOvxYTVeUjckrLn/mbQ9yzi+uRWxBfYnstHpTPV+fr3GNY2shOcOS04nNQ\njeG/vNvldi5To8EHtsZkf6ldzlE285dLin4p9Drr35rKR1Lx23OTdt44EYWp2Slw\nHMUOHSWFyXav+CLZW+mrYeHZon0hqA5XsCQeUAhLiDWTj73qjgPneRct/SftQgkj\nUsGaEjag+/iWarLhEPBdBomUfxbmhUuWjav3rlbd+EWJukBuIfdNW60A/YK9i+TN\nLaJ5piY21TY+L+cp2i42aIYUHTPiyKc/rzsIgDOzjKei4Mm/jXWRSIbMj8TImWGB\nfdjrXtJXpiNZAkLrRF9Oum+JuGE/6QRbAupjbBkGqV1RobrwyElVAefmvYG5Ag0E\nZELUfQEQALI7Wlu2cra6plQz9UsmOUNMsA98FVx6lbYVCc12TVcZydbDIM5jitrB\n1x0k5rPDOoSKm/+VvaXcS1YKhNp8SjLoZsLVCMtdRmKDXo4s80v+jHYmXie8YoHB\njLIc59Th+k931OhEMWgEI47O5Wr9YwELPXBnlVGgRyFKokUKk7w1+DToKCN5TPIT\nHxJaIU4tkZ5CM4Aa4Fpg9jSlSENpES/dHzajYpTju5yd1GKl2Ugl6OyKjUMAVYaE\nZF4luO8QcRhZw8mgVOtYg0X1Y1VNDuDw3foQTvNaODPWF3CMd3FGD+UMT+eyKNCp\ntrg61WKusoV4fLRIUcYM5ZFKcwa2p+LE1M0vEhroCSVnaimcII74gxKdra7695H+\nA2g9Gdzh7NV4KSZ/TZAmv7U0sv0cGJmUmid0vzJTepg+Hz4yJEsMIR+OdOgiagqB\nHmrQcNSBgcMe87t/dZM6nb7+IzRtnYNW2cqVpCWNh2YMMRAtrqS0Rkcf9nOtn4Rq\nXk5E6R31qablD7gE3TikeKjCmHmmcq7ibq0znygUegEGgSVUzifdw+CTgPVGa9Fq\nX1ep/r2jJ9GQ5kS57sTSevE3/iKSBpp2DOzewZVxIWumqH0fw0pHIUsKNEuDZ7Qw\n4Oj92hYxfPLfz/e2ToUMKayfAN4/DVwjmZ1xmsLPOOvkuqiTRShpABEBAAGJAjwE\nGAEKACYWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELUfQIbDAUJAeEzgAAKCRAe\nB+dcGfGuDuCzD/9gFnu/n1sm5fQ1F88xoHmLss0Cm3be7sueX4nDrG76B2lBn/Ca\nfSe5wj1iMHcoYeQJvq6oN6D1u3KyQKzFKQKOwCmaR6zNH77BZ8I3CDniBd4uukJD\nlFpTf49b7NM1akzuOGcL9f4767QiqFuRwL5RoXg6oqcRuiG1mRMrkOXW1t44z6LG\nL7Z8F3XyCfMH5LnPYBYbpgyZ1XpGVbPwebyJWnTlYQVx82neu3JW7xER0o2Gtsyn\nEyD220cLpXRkfc+bLL6GODDJNQ+E8nbIy9deyp9UoFD0C6tFTuNxDPZiiZv0PQ5d\nhc//DHXjeQh3svXU6nFseQmHrvs7SsUICNzeVO+iahhLHwhRAWT9u+8L1B4bnw87\nDhXXXA7hqHI3K/q2JP+OhvT2b07wTJNJGJGO3EUDS+0A/2+vNZQjAjU03VIKNo9r\naKmKhSrk1uFZIF3+SGj9Als100MtfwcVREKtg+N6Myt1Zg4RQtIftc/r/3thDooH\nijn44hOb4H+CgHAlATikU9IIUh2GDjIwETRks1AUcJa3Xny4xq6PzvxxIcI+PvND\nT8mDbJ3o/8mtWislOcq1u92Q1RY6tFt41f2d4zm22yl/66PIGDfPxWS3S9OZQEPA\nAuZtvKbQeLWCnQ1hD/nZt4ky3GiMd1bmazP/5oamoBqnmOPiHiAtVD4g2YkCPAQY\nAQoAJgIbDBYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3BQkD22T6AAoJEB4H\n51wZ8a4OUEkQAIUKljL4/4d2wst7g/sANzosJiK65AygXXf/REEPkAj5gEraUe8O\nzfk7tkN6iJAwhev4rjdy+aidpeKPWS5+7YRvnzR74WqnuFqnYE8Sra88Aib0X2Ox\no7MN3i47jwHv/Ftyu7fQv3bZgDZVra7A8UfdxRaXQzYLq6VqLvPh7CWkHCv6DFwi\nitYhs+eBjOD8LykwrDrKpY/SusN5yA5GMiW7gcAEw1QCaezGcaqvgNMjqV9WO4Tn\nZFOl1noLGsdweTDX/WQpCIqeKNkkaNW3zdYwqNLQT9jHPYXYFukGPJbGhiKfiWGL\nUgF62dc5V/+66VKjZl8i8QnNr9Vh/mV2GfphurkNEmyjtvGG3ODRLfm4BfYRxaGe\nPcs888Atp4qZZ6oIIDz+ZK0IXWCPm5KsdLGtROAhS/YDedySHmGml2xpt7vCFRli\n3J0wvF1wyHMYENmka4sGzn099yOV4BylWFibNxCURGKpESWCpoiWyxrTkDdppCg2\niM8uQhmJR5R5xCKFpeLWCVd1QTOZWDcggbOgd5Wm09CuyJrgC80YmKtRXhso9QYJ\nzF8csN7EgsU3ZCZCJXnJezl51ALM9rYqh+T9SkJmJBLyDHeBuesR32qWxYflkPQ8\n/QeO0wayiisTDZLQjLQk9nqXgIwujQmfa2ZWKILmZZwaHt4iFkPGlIH4uQINBGRC\n1LgBEADfGtrGYFhs45BPXUFM1pcfHXR9nI+fSOCNIeGdHf6RNRqdsnz18Y1c/QRl\npmHY2yFqEIZhxGSbu8PbbvAKHDWc/XKE4LOLinznKv6Z4imfK1g32UO4t4tLVL0k\nYpl2IpBPOPP6Ka6BfW8/xBXG1m2vuDSywGIYrx97maXjGFLd+ANeZTimLy3YF6T+\nVtNet4lZ1OlhC6qTAJwwXBJaXF/bolxvh+b/Nw2EO8xNxVJbF/Gg940Ca+MTaIFM\niZIQRqjRlfPrdg1TWlMhriWYMaLxq3QtqDt7jPrhMnwkcyZEvEWMtjntoG6iaSYF\nIppk/LMgPpXclOmbiNqqMiRLy5NpZkV7h5kb6YR0ueQAX3JpKgr2b6SXR+/NrqkV\nf+nifCk91X9JkNLgU22VJ2P6Zxfyhgb67hVWgOE2qLq8Of2mmaWIJZXG7fBgG8it\nEQ7VDUBmN7rMlJMFHYT4wRLDu9ordraaXhMcxwmsbWkJsMAzWwRXnlBceNZvPUJu\n7lvYKfIF4RWozeOv4aMTAvnUmVzKP9R0kio56qccmq454IQdEtV1viynHECSVCZK\nVVvDjjSo7fPta/Bxlodlbpog6LWlZR1838qUwfe/IYU1W/FYmiEjufAd4Xi1LaZQ\nS9mP0Oj0tbD2ax7CGhXeWVwutr7iBvsll+RATZxholYjWMEZMQARAQABiQI8BBgB\nCgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC1LgCGyAFCQHhM4AACgkQHgfn\nXBnxrg5E+BAAu3ktgguJ45wMBnDhmPfiACIZY69GirOQlbQrJSxmBElU9pKi94bL\nlglmegej51pm4GUe/Nm+64oVPXpsTWZb3uwEqmLBMKAmpKtABECDuVew040iycYl\n4Awfit4gdyCiKyfhdmrA/4698PD1GEfc9x0br244Y+MzBB8u4ytWf8O9ytaJAY8B\nEYQv9CIcmSXi6TH3X+Rsk9pDjFetnXFAAykOducBv9A769AiAMjOPd5hICjfLqhU\nsQtBXAppcAuIjR4SpdDX2R/dQIVAdmA8zV73d9GvJVNcPuxsRWIN2ERyEVdSOa5h\nVijljKA86i5WpvPeKscROesWSbp9h5P07PxwK1bjMTkhEKnBijSmRFLomGr0x2BI\nscN0bijR4KPlLIlnsv2a2xW5H6swu7psZcxGoTihLAOg+vFm5gtUh80VAwiEIEc6\nysqmKYyPpZt3im0VlIMvgFu2eIaXgtVZ+tgYgG1Ytxj1ftOyXWIzQOuw9DdLoC/e\nqMtAt7o8OSQAUVzl72T8cWIm0Hn8Ur7nRTM4aPQt5mQ5V01EgRdhTQtx9BuZ9iKF\nBYRpVsBAxHU8vmPwfoudjIFPou84xCzAtJ4z6VQ8W2HJzXxr3Us48OG7bHRaP4DE\nMOk1MwW+CmRg/Wqp5HQGlpAahUKc1RyV4hHs/TDH+5IfP+ITHKDVQcOJAjwEGAEK\nACYCGyAWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZj0F9wUJA9tkvwAKCRAeB+dc\nGfGuDqOZEACm9ciK29vqx5Pa5mIdTqZ81pCqf6G9RwSlGmUnYM6VFxHRhZYsShIQ\nMbW2mZ/bKTUIU7NsRlRW/4LWUFzvCy9ZZqROdM3FP6+ULq/2r1hena7CKlZSf7qX\nxROsFBELtAAfo/anwSpq0fubngYG/4iyXvfKLcgHstbhWU4LRCx8gFJdY2QdeJIb\nQT2uhhi/Q27TU507U9YPZ7otMfqT5+bqg77pXS6WciGXk9gfEIt/zs0Uwsre8EVH\n/TwdEeLwXpKERGxhV02VwfFDP+9rIGy8l1O2uAJEMSs+rgGfuO80vU/8j6nIexqB\n1mq0Uq3SG8GhzrTNqPwMKuHWld8GpDTPZ+MAV3OTxTUd//1yk6qMd+f0/upznhB2\neLxRBLSLZ6R/79kutKWItaDPncwWOmoA134tz5oMlo1JLXNztDneKLZ0Qejms8PP\nC1l9stHhpmaT5k4/331ZdPBmPc2LJo6X5I1G9GTtYI4NVV9hviAr95OhTqOEKWcF\npWky8V+dgZkQY6sIPBZjxUG8zhMJCQfwL6xpOfVqtTxYgYfJdjQZDxJZ3Foe33Gp\npco6XGCLaoPNxLUfgkSejsLynMgBJ6i2QUust3VDuiZViqjI3eU/OQ23bL3IHhzy\nRgASIlKD81FGqPYHtfO6qxN3B5CN18dRy2obvzpE1z7U62mj8JK3/w==\n=pysx\n-----END PGP PUBLIC KEY BLOCK-----"}],e={data:function(){return{fingerprint:a[0].fingerprint,publicKey:a[0].publicKey}},methods:{onCopy:function(A){alert("PGP public key:\n\n".concat(A.text,"\n\ncopied to clipboard!"))},onError:function(A){alert("Failed copying PGP public key to clipboard: ",A)}}},t=(s(502),s(18)),i=Object(t.a)(e,(function(){var A=this,n=A.$createElement,s=A._self._c||n;return s("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey},scopedSlots:A._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"contact-your-fellow-code-monkeys-📞-🐒"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contact-your-fellow-code-monkeys-📞-🐒"}},[A._v("#")]),A._v(" Contact Your Fellow Code "),s("div",{staticClass:"emoji-wrap"},[A._v("Monkeys !!! 📞 🐒")])])]},proxy:!0}])},[[s("div",[s("div",{staticClass:"contact-card"},[s("h2",{attrs:{id:"socials-🐵"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#socials-🐵"}},[A._v("#")]),A._v(" Socials 🐵")]),A._v(" "),s("p",[A._v("🔑 Securely message with "),s("a",{attrs:{href:"https://keybase.io/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[A._v("Keybase"),s("OutboundLink")],1),A._v(" - "),s("code",{staticClass:"inline-code-block"},[A._v("codemonkeystech")])]),A._v(" "),s("p",[A._v("📨 Join our "),s("a",{attrs:{href:"https://t.me/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[A._v("Telegram"),s("OutboundLink")],1),A._v(" - "),s("code",{staticClass:"inline-code-block"},[A._v("@codemonkeystech")])]),A._v(" "),s("p",[A._v("🐸 Let's "),s("a",{attrs:{href:"https://gab.com/codemonkeys",target:"_blank",rel:"noopener noreferrer"}},[A._v("Gab"),s("OutboundLink")],1),A._v(" - "),s("code",{staticClass:"inline-code-block"},[A._v("@codemonkeys")])]),A._v(" "),s("p",[A._v("💡 Speak your mind on "),s("a",{attrs:{href:"https://www.minds.com/codemonkeys/",target:"_blank",rel:"noopener noreferrer"}},[A._v("Minds"),s("OutboundLink")],1),A._v(" - "),s("code",{staticClass:"inline-code-block"},[A._v("@codemonkeys")])]),A._v(" "),s("p",[A._v("🐦 Send a "),s("a",{attrs:{href:"https://twitter.com/codemonkeystech",target:"_blank",rel:"noopener noreferrer"}},[A._v("Tweet"),s("OutboundLink")],1),A._v(" - "),s("code",{staticClass:"inline-code-block"},[A._v("@codemonkeystech")])]),A._v(" "),s("p",[s("span",[s("vp-icon",{attrs:{name:"RSS"}})],1),A._v("  Subscribe to the "),s("a",{attrs:{href:"https://codemonkeys.tech/rss.xml",target:"_blank",rel:"noopener noreferrer"}},[A._v("RSS feed"),s("OutboundLink")],1)])]),A._v(" "),s("div",{staticClass:"contact-card"},[s("h2",{attrs:{id:"primary-pgp-key-🔐"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#primary-pgp-key-🔐"}},[A._v("#")]),A._v(" Primary PGP Key 🔐")]),A._v(" "),s("p",[A._v("If you know how to use Pretty Good Privacy (PGP), then you can securely communicate with your fellow Code Monkey by using the PGP public key below to send an encrypted message that only I can decrypt.")]),A._v(" "),s("code-group",[s("code-block",{attrs:{title:"Fingerprint"}},[s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[A._v("B7E6 FB94 A589 876C CFC2 1E4B 1E07 E75C 19F1 AE0E\n")])]),A._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[A._v("1")]),s("br")])])])],1),A._v(" "),s("div",{staticClass:"pgp-public-key"},[s("details",{staticClass:"custom-block details"},[s("summary",[A._v("PGP Public Key")]),A._v(" "),s("div",{staticClass:"copy-btn-wrapper"},[s("button",{directives:[{name:"clipboard",rawName:"v-clipboard:copy",value:A.publicKey,expression:"publicKey",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:A.onCopy,expression:"onCopy",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:A.onError,expression:"onError",arg:"error"}],staticClass:"copy",attrs:{type:"button"}},[A._v("\n Copy\n ")])]),A._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[A._v("-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBGRC03cBEADDn1vVti8bek91JwLh65YNRvF5WRFEAzi8jQaAk55a2JKXvkfW\nS1QnP9jZBg/fVCYyi5fopjZqckDAiSjWaIkgZLyEJ4dVeUhw2AoTt8WVgjjC9BI3\n6neDCcpz2dHERflBOsR6M0QNUcR/8jzRS7zPUeXWY9VqZIEPanqjbgbU5HwoJvvi\nc/zikG3GLGXv3Hm2E2pO03IdOq3Q4y2vDpIptltB5FpTQi/iZzs+Wz2iHQkE3sMK\nJ8MxubwYkmFoRjbtUHDnoegVHcoFJprdxMnzJYm2TYauneyAKIuSXdBe7pOCxEjO\nikY9gTZ0ldufcfgnO3Harmie4hhuSIYCdLEJc86Yfz6MJVqducf/qjfOfvvJRBja\nWQR8eoTGatryQOaRWVqXuSfZb9qRRBbMtPhC4m5FajUBc0l1+YztkQ2UoNKlyTQW\nmZ0fshNqhuRb1mxSmUBEMvFxRLuXzyqrAj6dAyEug1vch7PweSMaG4WnY4OZwJcL\nDGgBg6p9cFrP9oyp5p+WBepOAHMxLSRgRXYusZH1/IKV1PZXWBqJV1W0Csv5cl6b\n/aSnrIU48G0YVYJSUds1LL6atbsuCYtcYMDS4vpCeNxsgpsIDnh22WKtSak8+5Po\nMPjx+Ttt5J35D8UGTd668CUtmzp5KEQ48lbTsl3OAq2I8xzJmC8b0Xy9mQARAQAB\ntCdKYXkgdGhlIENvZGUgTW9ua2V5IDxjMGRlbTBua2V5c0BwbS5tZT6JAlQEEwEK\nAD4WIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELTdwIbAQUJBaOagAULCQgHAwUV\nCgkICwUWAgMBAAIeAQIXgAAKCRAeB+dcGfGuDjW3D/9YjeFXfJLtoPrwdJpW8Y70\nFrJwkdu81bt7ilSy9w09aoa5IYyUit7UqS8EyjQPwUXtPLdKX7rswbab96SXjhqY\n52N+D2r3JqP3IUq6qRLFnI0MukHms0/BUqHvq5sgPJbEsCmmAJOtTQIoE6GT3xC3\nNcEvqiaztgTDsHaX02JZ9tjcGjyUdwKOy462cy/R2ATVhqWZcBSFaEH6u7unfkji\nWxZMPJHkCTKAiFBC9/3MRqoDrHO0t5VawHS3uZcjkF+7JpVPSJEjIN0Sq1st/uUA\nm88AptHpDrA+Q4c6+S+uli4PLhJ0HbRV/T3YwU9i6VdfDsK15cmGcqKk93EwJbo8\nJqw+OFguoEqGVbZEqhiDOYdEZkfeCFiIvhy3TapqtLB6mmAbxRV5T+zVwY9qnYie\nqG2zMsPMGk8cGccYsqmoKHDlVu3YBpUBNCjxaxQGXTybCrF/rpx1gBL7bW9EdeUK\nJG05UrW+pJJ76Se5bGZLRtwR0/B8DUzXWCmzpz2lmaO/ll35AbFNQXlTIBsCak87\nXDkNgIUUl7r4lVqcYBGFI0LsOq3Dq2X3t8FYQAEO6yEg6V0ZxddHyjUIpJf9dsjP\nZUMcYGLb0TIZFgQTBQ6LojfvsmmSYEY2pr8+EwJJTnk45xu8ZCx1Hsb99W7VKdcO\nrJT9uX4VF/rFrFl3aKYAzNHOyc7HARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklG\nAAEBAgAlACUAAP/+ACx4cjpkOkRBRmd3Qml2eDZrOjQsajozMTc5MTE2Njk3LHQ6\nMjMwNDIxMTb/4gKwSUNDX1BST0ZJTEUAAQEAAAKgbGNtcwRAAABtbnRyUkdCIFhZ\nWiAH5wAEABUAEAA4AAhhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAA\nABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAA\nABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAA\nACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAA\nACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAA\nAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBu\nAABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA\n/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAA\nJJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA\n8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAA\nD1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAA\nAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEL/2wBDADknKzIrJDkyLjJAPTlEVo9d\nVk9PVq99hGiPz7ba1su2yMTk////5PP/9sTI////////////3f//////////////\n2wBDAT1AQFZLVqhdXaj/7Mjs////////////////////////////////////////\n////////////////////////////wgARCAEgAPADASIAAhEBAxEB/8QAFwABAQEB\nAAAAAAAAAAAAAAAAAAECA//EABcBAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEA\nAhADEAAAAeIAAAAAAAAAAAAAAAAAABSKJQASiKIsAAAAAAAFAAAAAAABKIAAAAUA\nAFI3rN561nN05w6ZaObrNzms3AAIsAAFAaM63JpcZN5jZDcAAtyb0vK5us61m8nT\nnUpRALKNrNY1qmMazsi6aqaw6Dm03Mt0w1c3k1mpBnXnuz0w1WcpZU0p057zNXUu\nbjNlw21lTBsrBq4ZthuLB0561NcllT0SzeOkjMzeKlvHXNzcdM3G86bzs6bLnYF2\nZzvAGys02TpM3GstzfPpJpLS8+nM6cuvMblOdSp3rn0mue+dqdZ6ZzYjcBha3IYs\nNWdM1zuTWs6zcTWtyNZzc6wqes52a1RvOy1zdOdyk6YJY3OiWLzmy4Giy4mksqL0\n57m2ctwNwADVJrFlqAN53ibgqLrOpvAqHTnvKzLNxLGXpy65XIbgAAG03Ncms1NS\nnTn05zQVN1nU1gVLeNZsmsMF1OudTXIVIEsoAsHWc+s1zdIXn0HPeZs9GGVvmbjT\nWbnG6Z3eRrBUgJYAVKDRbeU1d82z1md5aJjLo3M6kKuW6xls7vPpm828VIgAAspe\njnNIVIAG9crm6mrmxnJYVIAHTOes1yms1IACwWBUoAAAAAAAILBYAAAAACwVBUoA\nIVBYAAAAAAAAAAAAAAAAAAAH/8QAHhAAAwEBAQADAQEAAAAAAAAAAAERECAwMUBB\ncCH/2gAIAQEAAQUC/oEJsJ9ebdpchPowmUvhS5PVZS+1yeMIIfM7hO4NcouvhF2E\nJlx8LKPr9mPUPilL4Ig8eoYteL0XCP1iHqGIermeKHiH8n6+p0svc1DETHjEPbqH\n53lD1DEPwfU7eIZCY3lyEH5vhD1ZS9UTHwvJD5fx4IfKHqH9ND5XCHwh+yH4ofCH\n7LJ4IfCHxPO5Ol0h5MvvNm3ZnyTH6pDy8TZl2iY/Rc3JxdvCGvJeFyH+kL2hryfj\ncvk/C/zD/8QAHxEAAgICAgMBAAAAAAAAAAAAAAEQESAxIUECMFBx/9oACAEDAQE/\nAfpUcFnBXposvGzgawoocUUUUUsKlykNxc7nsYhCEhsSHNQzoYxahCY1kkNi0UdF\nlnUJjUuHCLw6l6hajxlY9T5QtQhwstlDVmixuxIqzReWizcVH6WLLWFxeG/of//E\nAB0RAAICAwEBAQAAAAAAAAAAAAABEBEgMUEhUDD/2gAIAQIBAT8B+lZ6Uel/jZRW\nNHuViiyyyy81LFFTqeCGOGJFim4R0QjsOFk2JD2XFFS0JyoUMrDsrcPcOXj2VD3D\nFDy0WLw2VDZo3nsqbmh5bwqKw19D/8QAFBABAAAAAAAAAAAAAAAAAAAAoP/aAAgB\nAQAGPwIHH//EACAQAAICAgMBAQEBAAAAAAAAAAABETEQICEwUUFAYXD/2gAIAQEA\nAT8h/wAlj9aZiMJHA0G/5okRSSJSH5JnCYR4Yy2/CmEhQy2fQmEhCY/I012JJQ0G\n3bIvZKY06EpeMkV34e0hw1VEMRg1UcGSni+iRhKIWSBRAtCRpQlLHktVwi8K4RbK\nDRmXkllOC0NRmpYSBco4PPJnBFxuMWwg3HWw1Oak0K6640LCodiSUhueglI1GW+C\nTpLQuByWVwh8vDx+i4G5wklD1JwWPJpQpcciiwuUcGWOCxLQg6w0ifcJwTPRLCUl\nIbkuNA23muKSQ1hWOspyJqlI9iUDTixUmJCjgE4F7JTIFimU4LQ1Gi4wmiQN8zbD\nQbbJiQro0FlZTnDc5T6NGivqLldaFs2KaKh3q67+g7zYppQtr86t9VWlimlS+qrp\ncakcNPmlinTr0Nx1KAnIw1ArHWaEZeL5oUPz2qucfwSNSOGJZLK9FD8ChiU89v0G\ngkQiTlCcjkNRheij+CPSYGPgJPYkjcIvKgJyMS1ZMlDEN2UPxo0n06kkpDc7L0WP\nwchQHAbnZpPt0JSxcIaehOBBuB9BOBcoSN04JflTgl/41//aAAwDAQACAAMAAAAQ\nCCGe+++++++uKCCCO++6yiCSy2++OCe++iCCCOCCCS++u+6CCCQymyhMCC2++iAq\n2/8A/wD9ykIlL6qbF/o6Io27b8iNYB293CkI7ILLYyEEF1wXJ7b/AJJR6W9CVERJ\nhO/9/wDivciiQVsK9urvffel9iogktqw8v8A7+UBcmoIIKvQroL6IafquoKoJAno\nEPXI76VEJb4oTY+B6ZUxxqkb767UJLJnXbKJLtz7b7woIIJIIIIb7zoLL7644oIY\n5777IIIJLb7777777qIIL//EAB4RAQACAwADAQEAAAAAAAAAAAEAERAhMSBBYVFQ\n/9oACAEDAQE/EP6Q2UOz5m0X6iV5hepU7KnIp8BSH7lLko8AVbADZOsADc+ZeH7l\nmiJWEELlE1g3NkIAOo9lG2WOLxVg1HS8FUXDVIKYdzZWBFWWMs1LNynrBV7j+YNM\nFlkC49WfuCo2RKblDPYS8Uu8CkslmjBZiVRgiVezVqxRplGD5KXqBbFRRh6Yt8/D\nHTHUe45fELoRKx6Y6Y7nWBW3xGoPDGvJ6ENpXAQ2xsjRinxC4tKIIgkP2fMKNEdQ\ntivTEp8efAr2UOyJNEu8jSmJX8//xAAeEQEAAgIDAQEBAAAAAAAAAAABABEhMRAg\nQVFhUP/aAAgBAgEBPxD+kmWtccIfcu+61LOpZ3AHRBj8yxuDfRW6IqqZpwpcT9yk\nfmW2wb4GmWjnhmixWsw1F4QVxSAES4ZVw3bUcwrI8TAqKViKiURpLe8N1iH3EuKm\nmLUfE+YtxuAuJcXjK4s1wgyiejwUIZbiGY6mbzxZmWcP7LVmLUF5eDmAO7Zxo41h\nrjz1WrQb6dHGs04V4OqXE8Q+4vUcJeBU8CDSZgA6rUC1sQxEh+T9xt3DOoAgrJBv\nrt0fmWkLZejlcG/5/wD/xAAkEAEAAgICAgICAwEAAAAAAAABABEhMRBBIGEwUUBx\ncIGRof/aAAgBAQABPxD+JKuKNn5fQQO2GgVLWLGK9QGsxE2fii0InbNIR3GfQitn\ngHdwHeJg6YDrEB1f4ALoit4gvcUGcQOi52HmKagt5ivUdgn2JtD5DTfUoHRBazFa\nxLvfyCNMTpDuRg4p+DER+rHoTdHkPAFaIqtxLZ4guiDeowvZ45n9S5wRO2VbNeOJ\nYVCQ1HjV4Us7iBqDdxbZE9MH2wD3MfQiXuCQtevDXHYZSwILTxNJH/aIrDC0Ph15\nZSo3yBpg+yJ6Ip6i3vi96iEEVPgpUrLeNR0sFpyaYrYbTMeDYM28X5dSpFtt+Klp\n1CESmnjdxBf6x4SHTziWPIQ0fcd/rNH6myWvUUgit4BdQdZYlNeCwu3PelKzfHeY\nhn/SOQtOTSRZerhrEBbGaJv+0AKIy9cWIAPqfRNvhrdQQYgOTHKZIBmbIStgAold\nY6WC0hsxW8GgxbpJs4pU7nW4RWRWz53WpgrhlUx6CXPXCpxNo8PCTUw4WOMR3DjV\nN/A02SpKWzXiixECzPiFtEAS1RrjXAoqCbxBbzMDohNDMXSfQhqMU6hUI4m/lFcE\nhc9chbUAMQR1KMnhSzudbnTFDcFrMVrEVdviDuWKTxbXqICJangxK3uYCXPXPelK\njfhom74d01eOmbedPj65v8Dczfw7s6+Omb+dPl+/xc/1+HVmrxwEdvOnx9nkZH9R\n+ATDAGY3scm448Gvx+02OQVohmYAZjv4W9iDBuTDE2Jqm7ln7Sl3WYg7mA6JS2tc\nmhw7lwQA/U6v9RVc/GXeJf2TDGjf+IFw4YP7RPY4C7i3qKu2Arg4WB9ETgMfcD2e\nEqfK7kpUbghsYbhwxAzP7SDAaYYu0BdcIAfUbNG2DW3cQMx3BgnclLG44+O9bqFJ\nVW8t7EHSA5MM0RZ9wAxANCoJgywyVRAB9TrhVbea1O5dhv4rfqKegjK3xGp1wIPs\nlGXUpaYHswvZi7eI02QT7lGGvgaggKpaxr4EWGG4cMAWsdwYPgRWREr+NeaaNRQp\nfxU0aixS/wANf//ZiQJUBBMBCgA+FiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC\n1WcCGwEFCQWjmoAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQHgfnXBnxrg4V\nJg/7BvWZDlJgHzX2TymItJtEP7JHMpa5Yy4VWY+SdDb1Jz9s2YV/lxbSq7LBTSkP\n/9N6h8KMhwHmv0aenHFLLivUATGqmcJ6fpwkgDOPGde8VoH7IcoXxU0IXOI09POt\n7jCrq6cA2xgvEHoUEqHNysILHGPyK/ltMmIMprlR5y2VBpy41+zq3gHfQT+wsT8p\ncUAF0mNSYIlEDvvtvstWnbRdM+6NqL4DsCtCWdr6Tyb1kaIjjDVXiWDtGtbx5c2c\nEss9cj8W4IvTyebDXuEWGiRjq6JjQNQZKFiG23y9QE1TAcSvpdL4f4/9caxCjEh/\nuLrDQx6MCo9NO/93at6ul6ZBS6saR8o3vn6gLv6u0Vc2/t46FGjReS7suFOU1M7o\nkYQEeaeRCKGESX6Chal7KdSU0t5kOgRsxPoMwFQhBa69MjNgLomDeOYDegnDdeqS\nhuN8+vyBkBxkXtE6aG1nJ1C54MVtH7slH5ciaZ5vDNgh2XH4xmO3d+zG2Wwv/Gl+\niI+HSJmuFtmw+99sTZpXVGINXr7dwAYWrdhSl0ts0Z/TzwN2PN38cDr6bnNgM2/v\nLb7wfb9IUbJIr8vJj8qvcNOjML8LqeMTugwFyHx/EtSxBiH6f9z+mu2k1qMCY+wS\nzVrYjukls6Z707l1u/de6JBGFqYY796mv7po3Se+Qjd2Y9a0NkpheSB0aGUgQ29k\nZSBNb25rZXkgPGpheXRoZWNvZGVtb25rZXkuN3ZrN2lAc2xtYWlsLm1lPokCVAQT\nAQoAPhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJkSSNcAhsBBQkFo5qABQsJCAcD\nBRUKCQgLBRYCAwEAAh4BAheAAAoJEB4H51wZ8a4OUN4P/0bbFhsQ9qbXIdcNelA5\nrurWVMmxK2BWjfYgfSmI1x/RlD/8rWqtPU/Wx0hx8pmoYMwmAiKG3epy2SJHorAf\n9C2WljX4d+OCA1Y7tmqiXY3Yh9nSbOwe3sytw3/b2YPotYr/b7R2v6l/3xaGdmxX\nR5bQUcWXmHV10ZU2mH+JvDvtyYXUHJHiC0hr1rXOcTpShYc/rV1ORRHA6rn820db\n3pSCnRJA/kL3WGgkLaM0mUfZQWqZr600AskutJTlDd1/aXJBn2GNougWorCI59Jz\nnb67Afnme8eBiz4wSXiyCQeE4Y1k7LZrat9toqS/oUs4f9cWwvmHP26//A02U0WA\nHw4DRmqQXRyxxOsr+IJ4Nhp15mKhED5a4x20T2gy52TEtdamnYSBssLD9xeHYnLs\nSg8q8FfojUlQdBtHqJjg51D8lqOm1cdeVg7W8qLYYIXmdFP8VEUDkG7vJ3fDeUd2\nBGvcV6DsRtynH3u5GwFY829CtCHeYICxiyfWQT4fEKJPB5y91lPFSCxQr9Fg4Ng/\nlelKQPCL7HoH5yNrvhoFVlOwmlXcuKxRdmQLgFw5eTfHLUx/fxX+JVW5uz3DG01d\ntrfZ3MDhIenOmdg2DNmubpu7Gqb+qDrRJFpcg/7xS0NRxzQvl73Ts4RskhdREHG0\n/s1cPAk3FTLqvhLfwXoNW142uQINBGRC1DsBEACh+SSUsnokhUazmzj0L7CqKDHv\nrfDyoWnlSEGkiTiXhPjtzBMTYM7HKx9b79TV5U0EB+XdW3aCbSuV5gucuoibiKXe\nlBdFy0k2tnDnzAM0qUplKaPSvDC3BbNrCfw99hnoaUuFF4xzwiKfMKAVHtai7SK8\nsVyTWjyex45NPyySHHkLs0B9Lg/hzl01E4EugIzYO3BlGqhD2RbR9033gB8acD8o\nXWvn+3epus1diJKAQqDN0W1GLCaDR+1LKnQjHf5ECKvtvkWEQOylDVoMs/eTxKSv\ndsFcawjjuO7vPVPYlOpucG+zG+Oui5UnztgIQV6XaHvYxLTA6coDPkKpvcKOa+JV\n/qSNns+9ft3N9dybFvqIIoiIA62UVreDQ7P6R2RLdgdQzj4aba5raD3XZiA2FfY3\nCxQUZQkpDJcNE8+6ix09g9wRsdsAsycWPeIlHe3XTR4wrTUA3tasUqc0faIC+LN+\nndc/OkuWciflgD6IspFelVtEHM6nyDu2iTd4ShJrt2rGPdNDTSpeGb1SYr9ArURw\n65/rWlaUk/OERO+MkfE3qijCMo10FpilEFCDlABVRHMsQTpJdOqjakIX4BfmBxN4\njpNK5pjoteQtQ91wgclyfg/xr4o0Si78IZBujHtDCTI1V67wLn75e4ltL8eoJGI+\nUf8eQlHNOaWEOyba6QARAQABiQRyBBgBCgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnx\nrg4FAmRC1DsCGwIFCQHhM4ACQAkQHgfnXBnxrg7BdCAEGQEKAB0WIQT8/9d3HMqd\nw6detRrXDCh3fL4EpQUCZELUOwAKCRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1\nZX+du0LzBefalbuNCjkBUHFrvBFKa1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsV\nF98lYl9QdUnKMVoRnkfQ/U0zzAaNk/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlX\npZv+aLhIo8jva2c/ZpMUcS6gZoScdtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q\n/9luPe0I2DUTqgJgCUp20egDTJwbwtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQH\nwHonktFhiOh0sOdINyQhm9qQt7mK/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMx\ndnq3uq11B18a4gGjBe6q5oyw0pI3QcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQE\nazCswwYkNmMmw/7Q5XPYrqkljecVgP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwD\nJYh5tpcqSRTz6ADLQAZCR/epM9+OS9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/\n9AOtpKvQyZEQSk8oQlcn/w/n2DhwPEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv\n0aB5Mpr/WbhKXqWkSSLawvHK/+qAXIA1dRzyVs87alvupmEGecoLroy//VT4qWlS\nOR1rB8opyEgg+4E2hCUCN9gBDJJ3EACQTCPWIB6+k1wzFaiyn7KoAcdnd3MJWgMe\nWmO41xcVvS2C8l5yytRwpqHzsodMMXneWqzRCWyZGNXldRwTu4nblRHKthX9tP+O\n0xIdnhWerZ2KzWevHPD+jlPrOncd7GnXAKpI523gyTTjR5oqXhswPL4vZgTD6+J/\nI5ubEiNnK6lgUTSOoDJ+MLPtXuviCgLyJJQIX8bpd4IwYSeS6l69shG9uDl7hC5s\nnND8Mf3CWyR+PQrC/XYqPimsRTweozO3ZaCIESpqGqA5RiNGduH/nmWXogVzoBvE\nUGhRSyxQHvlD9CtGE59JQAADoZ/dq/kz5p6J74Z6d0anp6exR9otV0xH/YTHLAyR\n0ug9RytaOdrEboI6PPvRrNy6ZQM7yx0lABGPqksa67neRoIpZP1S1+h9XyEvRgDn\nu9jigKIfJzjHDtZbAJrVuyjSEdE6SBqGQ9zEvlU/7iY53ZlnAqhIudKzwL8rEkGR\nMReWPdYsFNZSJNayj+0YxLIg1RAjmN7+1FDeoisyLrp9E35QfVYckmTuouJxJ/ab\nJyiM/yJaXrctYHeFxBIvnoAISk8DzFsw8iQ9/KT0pse+4udbAcqTzrgOzF+pJ946\nqun9jdeip49IFAEnN6pGH/883JHBAGNkm08pP0t5CZ/EoUKL9aCMlbmQVwCo5IgI\nRQR9fSMksIkEcgQYAQoAJgIbAhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3\nBQkD22U8AkDBdCAEGQEKAB0WIQT8/9d3HMqdw6detRrXDCh3fL4EpQUCZELUOwAK\nCRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1ZX+du0LzBefalbuNCjkBUHFrvBFK\na1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsVF98lYl9QdUnKMVoRnkfQ/U0zzAaN\nk/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlXpZv+aLhIo8jva2c/ZpMUcS6gZoSc\ndtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q/9luPe0I2DUTqgJgCUp20egDTJwb\nwtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQHwHonktFhiOh0sOdINyQhm9qQt7mK\n/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMxdnq3uq11B18a4gGjBe6q5oyw0pI3\nQcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQEazCswwYkNmMmw/7Q5XPYrqkljecV\ngP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwDJYh5tpcqSRTz6ADLQAZCR/epM9+O\nS9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/9AOtpKvQyZEQSk8oQlcn/w/n2Dhw\nPEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv0aB5Mpr/WbhKXqWkSSLawvHK/+qA\nXIA1dRzyVs87alvupmEGecoLroy//VT4qWlSOR1rB8opyEgg+4E2hCUCN9gBDAkQ\nHgfnXBnxrg4vYBAAl5cPhObEBiUicl2/L4rNFBGhwj+s+zPyrRi3sVWgKp+Zkkwl\nbPhTnaDu3KodRI7O1Ipq7EVoTMJeIqJp4Tf/Pkjxyb588A5dy+ccWILtr+lvUHE1\n0aFUaH8JS9+LdFq/zI7gFyeoxpF4f+8Rt2BsGl4SVPYCLB15mlV14yfSzTFchzjz\nrUicJWnjjR1EOlcUKl/aKsMt50wEtTpRpp06RR2CLzk9J164bCybqe9h1QjyLezh\ndMHkwFYKbmGRh5FGfjNUfLZD1lWjaDgUi1K5jROBmCcMxUw2M6Z47F2xBzmRPa5v\n4OWKWmAOvxYTVeUjckrLn/mbQ9yzi+uRWxBfYnstHpTPV+fr3GNY2shOcOS04nNQ\njeG/vNvldi5To8EHtsZkf6ldzlE285dLin4p9Drr35rKR1Lx23OTdt44EYWp2Slw\nHMUOHSWFyXav+CLZW+mrYeHZon0hqA5XsCQeUAhLiDWTj73qjgPneRct/SftQgkj\nUsGaEjag+/iWarLhEPBdBomUfxbmhUuWjav3rlbd+EWJukBuIfdNW60A/YK9i+TN\nLaJ5piY21TY+L+cp2i42aIYUHTPiyKc/rzsIgDOzjKei4Mm/jXWRSIbMj8TImWGB\nfdjrXtJXpiNZAkLrRF9Oum+JuGE/6QRbAupjbBkGqV1RobrwyElVAefmvYG5Ag0E\nZELUfQEQALI7Wlu2cra6plQz9UsmOUNMsA98FVx6lbYVCc12TVcZydbDIM5jitrB\n1x0k5rPDOoSKm/+VvaXcS1YKhNp8SjLoZsLVCMtdRmKDXo4s80v+jHYmXie8YoHB\njLIc59Th+k931OhEMWgEI47O5Wr9YwELPXBnlVGgRyFKokUKk7w1+DToKCN5TPIT\nHxJaIU4tkZ5CM4Aa4Fpg9jSlSENpES/dHzajYpTju5yd1GKl2Ugl6OyKjUMAVYaE\nZF4luO8QcRhZw8mgVOtYg0X1Y1VNDuDw3foQTvNaODPWF3CMd3FGD+UMT+eyKNCp\ntrg61WKusoV4fLRIUcYM5ZFKcwa2p+LE1M0vEhroCSVnaimcII74gxKdra7695H+\nA2g9Gdzh7NV4KSZ/TZAmv7U0sv0cGJmUmid0vzJTepg+Hz4yJEsMIR+OdOgiagqB\nHmrQcNSBgcMe87t/dZM6nb7+IzRtnYNW2cqVpCWNh2YMMRAtrqS0Rkcf9nOtn4Rq\nXk5E6R31qablD7gE3TikeKjCmHmmcq7ibq0znygUegEGgSVUzifdw+CTgPVGa9Fq\nX1ep/r2jJ9GQ5kS57sTSevE3/iKSBpp2DOzewZVxIWumqH0fw0pHIUsKNEuDZ7Qw\n4Oj92hYxfPLfz/e2ToUMKayfAN4/DVwjmZ1xmsLPOOvkuqiTRShpABEBAAGJAjwE\nGAEKACYWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELUfQIbDAUJAeEzgAAKCRAe\nB+dcGfGuDuCzD/9gFnu/n1sm5fQ1F88xoHmLss0Cm3be7sueX4nDrG76B2lBn/Ca\nfSe5wj1iMHcoYeQJvq6oN6D1u3KyQKzFKQKOwCmaR6zNH77BZ8I3CDniBd4uukJD\nlFpTf49b7NM1akzuOGcL9f4767QiqFuRwL5RoXg6oqcRuiG1mRMrkOXW1t44z6LG\nL7Z8F3XyCfMH5LnPYBYbpgyZ1XpGVbPwebyJWnTlYQVx82neu3JW7xER0o2Gtsyn\nEyD220cLpXRkfc+bLL6GODDJNQ+E8nbIy9deyp9UoFD0C6tFTuNxDPZiiZv0PQ5d\nhc//DHXjeQh3svXU6nFseQmHrvs7SsUICNzeVO+iahhLHwhRAWT9u+8L1B4bnw87\nDhXXXA7hqHI3K/q2JP+OhvT2b07wTJNJGJGO3EUDS+0A/2+vNZQjAjU03VIKNo9r\naKmKhSrk1uFZIF3+SGj9Als100MtfwcVREKtg+N6Myt1Zg4RQtIftc/r/3thDooH\nijn44hOb4H+CgHAlATikU9IIUh2GDjIwETRks1AUcJa3Xny4xq6PzvxxIcI+PvND\nT8mDbJ3o/8mtWislOcq1u92Q1RY6tFt41f2d4zm22yl/66PIGDfPxWS3S9OZQEPA\nAuZtvKbQeLWCnQ1hD/nZt4ky3GiMd1bmazP/5oamoBqnmOPiHiAtVD4g2YkCPAQY\nAQoAJgIbDBYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3BQkD22T6AAoJEB4H\n51wZ8a4OUEkQAIUKljL4/4d2wst7g/sANzosJiK65AygXXf/REEPkAj5gEraUe8O\nzfk7tkN6iJAwhev4rjdy+aidpeKPWS5+7YRvnzR74WqnuFqnYE8Sra88Aib0X2Ox\no7MN3i47jwHv/Ftyu7fQv3bZgDZVra7A8UfdxRaXQzYLq6VqLvPh7CWkHCv6DFwi\nitYhs+eBjOD8LykwrDrKpY/SusN5yA5GMiW7gcAEw1QCaezGcaqvgNMjqV9WO4Tn\nZFOl1noLGsdweTDX/WQpCIqeKNkkaNW3zdYwqNLQT9jHPYXYFukGPJbGhiKfiWGL\nUgF62dc5V/+66VKjZl8i8QnNr9Vh/mV2GfphurkNEmyjtvGG3ODRLfm4BfYRxaGe\nPcs888Atp4qZZ6oIIDz+ZK0IXWCPm5KsdLGtROAhS/YDedySHmGml2xpt7vCFRli\n3J0wvF1wyHMYENmka4sGzn099yOV4BylWFibNxCURGKpESWCpoiWyxrTkDdppCg2\niM8uQhmJR5R5xCKFpeLWCVd1QTOZWDcggbOgd5Wm09CuyJrgC80YmKtRXhso9QYJ\nzF8csN7EgsU3ZCZCJXnJezl51ALM9rYqh+T9SkJmJBLyDHeBuesR32qWxYflkPQ8\n/QeO0wayiisTDZLQjLQk9nqXgIwujQmfa2ZWKILmZZwaHt4iFkPGlIH4uQINBGRC\n1LgBEADfGtrGYFhs45BPXUFM1pcfHXR9nI+fSOCNIeGdHf6RNRqdsnz18Y1c/QRl\npmHY2yFqEIZhxGSbu8PbbvAKHDWc/XKE4LOLinznKv6Z4imfK1g32UO4t4tLVL0k\nYpl2IpBPOPP6Ka6BfW8/xBXG1m2vuDSywGIYrx97maXjGFLd+ANeZTimLy3YF6T+\nVtNet4lZ1OlhC6qTAJwwXBJaXF/bolxvh+b/Nw2EO8xNxVJbF/Gg940Ca+MTaIFM\niZIQRqjRlfPrdg1TWlMhriWYMaLxq3QtqDt7jPrhMnwkcyZEvEWMtjntoG6iaSYF\nIppk/LMgPpXclOmbiNqqMiRLy5NpZkV7h5kb6YR0ueQAX3JpKgr2b6SXR+/NrqkV\nf+nifCk91X9JkNLgU22VJ2P6Zxfyhgb67hVWgOE2qLq8Of2mmaWIJZXG7fBgG8it\nEQ7VDUBmN7rMlJMFHYT4wRLDu9ordraaXhMcxwmsbWkJsMAzWwRXnlBceNZvPUJu\n7lvYKfIF4RWozeOv4aMTAvnUmVzKP9R0kio56qccmq454IQdEtV1viynHECSVCZK\nVVvDjjSo7fPta/Bxlodlbpog6LWlZR1838qUwfe/IYU1W/FYmiEjufAd4Xi1LaZQ\nS9mP0Oj0tbD2ax7CGhXeWVwutr7iBvsll+RATZxholYjWMEZMQARAQABiQI8BBgB\nCgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC1LgCGyAFCQHhM4AACgkQHgfn\nXBnxrg5E+BAAu3ktgguJ45wMBnDhmPfiACIZY69GirOQlbQrJSxmBElU9pKi94bL\nlglmegej51pm4GUe/Nm+64oVPXpsTWZb3uwEqmLBMKAmpKtABECDuVew040iycYl\n4Awfit4gdyCiKyfhdmrA/4698PD1GEfc9x0br244Y+MzBB8u4ytWf8O9ytaJAY8B\nEYQv9CIcmSXi6TH3X+Rsk9pDjFetnXFAAykOducBv9A769AiAMjOPd5hICjfLqhU\nsQtBXAppcAuIjR4SpdDX2R/dQIVAdmA8zV73d9GvJVNcPuxsRWIN2ERyEVdSOa5h\nVijljKA86i5WpvPeKscROesWSbp9h5P07PxwK1bjMTkhEKnBijSmRFLomGr0x2BI\nscN0bijR4KPlLIlnsv2a2xW5H6swu7psZcxGoTihLAOg+vFm5gtUh80VAwiEIEc6\nysqmKYyPpZt3im0VlIMvgFu2eIaXgtVZ+tgYgG1Ytxj1ftOyXWIzQOuw9DdLoC/e\nqMtAt7o8OSQAUVzl72T8cWIm0Hn8Ur7nRTM4aPQt5mQ5V01EgRdhTQtx9BuZ9iKF\nBYRpVsBAxHU8vmPwfoudjIFPou84xCzAtJ4z6VQ8W2HJzXxr3Us48OG7bHRaP4DE\nMOk1MwW+CmRg/Wqp5HQGlpAahUKc1RyV4hHs/TDH+5IfP+ITHKDVQcOJAjwEGAEK\nACYCGyAWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZj0F9wUJA9tkvwAKCRAeB+dc\nGfGuDqOZEACm9ciK29vqx5Pa5mIdTqZ81pCqf6G9RwSlGmUnYM6VFxHRhZYsShIQ\nMbW2mZ/bKTUIU7NsRlRW/4LWUFzvCy9ZZqROdM3FP6+ULq/2r1hena7CKlZSf7qX\nxROsFBELtAAfo/anwSpq0fubngYG/4iyXvfKLcgHstbhWU4LRCx8gFJdY2QdeJIb\nQT2uhhi/Q27TU507U9YPZ7otMfqT5+bqg77pXS6WciGXk9gfEIt/zs0Uwsre8EVH\n/TwdEeLwXpKERGxhV02VwfFDP+9rIGy8l1O2uAJEMSs+rgGfuO80vU/8j6nIexqB\n1mq0Uq3SG8GhzrTNqPwMKuHWld8GpDTPZ+MAV3OTxTUd//1yk6qMd+f0/upznhB2\neLxRBLSLZ6R/79kutKWItaDPncwWOmoA134tz5oMlo1JLXNztDneKLZ0Qejms8PP\nC1l9stHhpmaT5k4/331ZdPBmPc2LJo6X5I1G9GTtYI4NVV9hviAr95OhTqOEKWcF\npWky8V+dgZkQY6sIPBZjxUG8zhMJCQfwL6xpOfVqtTxYgYfJdjQZDxJZ3Foe33Gp\npco6XGCLaoPNxLUfgkSejsLynMgBJ6i2QUust3VDuiZViqjI3eU/OQ23bL3IHhzy\nRgASIlKD81FGqPYHtfO6qxN3B5CN18dRy2obvzpE1z7U62mj8JK3/w==\n=pysx\n-----END PGP PUBLIC KEY BLOCK-----\n")])]),A._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[A._v("1")]),s("br"),s("span",{staticClass:"line-number"},[A._v("2")]),s("br"),s("span",{staticClass:"line-number"},[A._v("3")]),s("br"),s("span",{staticClass:"line-number"},[A._v("4")]),s("br"),s("span",{staticClass:"line-number"},[A._v("5")]),s("br"),s("span",{staticClass:"line-number"},[A._v("6")]),s("br"),s("span",{staticClass:"line-number"},[A._v("7")]),s("br"),s("span",{staticClass:"line-number"},[A._v("8")]),s("br"),s("span",{staticClass:"line-number"},[A._v("9")]),s("br"),s("span",{staticClass:"line-number"},[A._v("10")]),s("br"),s("span",{staticClass:"line-number"},[A._v("11")]),s("br"),s("span",{staticClass:"line-number"},[A._v("12")]),s("br"),s("span",{staticClass:"line-number"},[A._v("13")]),s("br"),s("span",{staticClass:"line-number"},[A._v("14")]),s("br"),s("span",{staticClass:"line-number"},[A._v("15")]),s("br"),s("span",{staticClass:"line-number"},[A._v("16")]),s("br"),s("span",{staticClass:"line-number"},[A._v("17")]),s("br"),s("span",{staticClass:"line-number"},[A._v("18")]),s("br"),s("span",{staticClass:"line-number"},[A._v("19")]),s("br"),s("span",{staticClass:"line-number"},[A._v("20")]),s("br"),s("span",{staticClass:"line-number"},[A._v("21")]),s("br"),s("span",{staticClass:"line-number"},[A._v("22")]),s("br"),s("span",{staticClass:"line-number"},[A._v("23")]),s("br"),s("span",{staticClass:"line-number"},[A._v("24")]),s("br"),s("span",{staticClass:"line-number"},[A._v("25")]),s("br"),s("span",{staticClass:"line-number"},[A._v("26")]),s("br"),s("span",{staticClass:"line-number"},[A._v("27")]),s("br"),s("span",{staticClass:"line-number"},[A._v("28")]),s("br"),s("span",{staticClass:"line-number"},[A._v("29")]),s("br"),s("span",{staticClass:"line-number"},[A._v("30")]),s("br"),s("span",{staticClass:"line-number"},[A._v("31")]),s("br"),s("span",{staticClass:"line-number"},[A._v("32")]),s("br"),s("span",{staticClass:"line-number"},[A._v("33")]),s("br"),s("span",{staticClass:"line-number"},[A._v("34")]),s("br"),s("span",{staticClass:"line-number"},[A._v("35")]),s("br"),s("span",{staticClass:"line-number"},[A._v("36")]),s("br"),s("span",{staticClass:"line-number"},[A._v("37")]),s("br"),s("span",{staticClass:"line-number"},[A._v("38")]),s("br"),s("span",{staticClass:"line-number"},[A._v("39")]),s("br"),s("span",{staticClass:"line-number"},[A._v("40")]),s("br"),s("span",{staticClass:"line-number"},[A._v("41")]),s("br"),s("span",{staticClass:"line-number"},[A._v("42")]),s("br"),s("span",{staticClass:"line-number"},[A._v("43")]),s("br"),s("span",{staticClass:"line-number"},[A._v("44")]),s("br"),s("span",{staticClass:"line-number"},[A._v("45")]),s("br"),s("span",{staticClass:"line-number"},[A._v("46")]),s("br"),s("span",{staticClass:"line-number"},[A._v("47")]),s("br"),s("span",{staticClass:"line-number"},[A._v("48")]),s("br"),s("span",{staticClass:"line-number"},[A._v("49")]),s("br"),s("span",{staticClass:"line-number"},[A._v("50")]),s("br"),s("span",{staticClass:"line-number"},[A._v("51")]),s("br"),s("span",{staticClass:"line-number"},[A._v("52")]),s("br"),s("span",{staticClass:"line-number"},[A._v("53")]),s("br"),s("span",{staticClass:"line-number"},[A._v("54")]),s("br"),s("span",{staticClass:"line-number"},[A._v("55")]),s("br"),s("span",{staticClass:"line-number"},[A._v("56")]),s("br"),s("span",{staticClass:"line-number"},[A._v("57")]),s("br"),s("span",{staticClass:"line-number"},[A._v("58")]),s("br"),s("span",{staticClass:"line-number"},[A._v("59")]),s("br"),s("span",{staticClass:"line-number"},[A._v("60")]),s("br"),s("span",{staticClass:"line-number"},[A._v("61")]),s("br"),s("span",{staticClass:"line-number"},[A._v("62")]),s("br"),s("span",{staticClass:"line-number"},[A._v("63")]),s("br"),s("span",{staticClass:"line-number"},[A._v("64")]),s("br"),s("span",{staticClass:"line-number"},[A._v("65")]),s("br"),s("span",{staticClass:"line-number"},[A._v("66")]),s("br"),s("span",{staticClass:"line-number"},[A._v("67")]),s("br"),s("span",{staticClass:"line-number"},[A._v("68")]),s("br"),s("span",{staticClass:"line-number"},[A._v("69")]),s("br"),s("span",{staticClass:"line-number"},[A._v("70")]),s("br"),s("span",{staticClass:"line-number"},[A._v("71")]),s("br"),s("span",{staticClass:"line-number"},[A._v("72")]),s("br"),s("span",{staticClass:"line-number"},[A._v("73")]),s("br"),s("span",{staticClass:"line-number"},[A._v("74")]),s("br"),s("span",{staticClass:"line-number"},[A._v("75")]),s("br"),s("span",{staticClass:"line-number"},[A._v("76")]),s("br"),s("span",{staticClass:"line-number"},[A._v("77")]),s("br"),s("span",{staticClass:"line-number"},[A._v("78")]),s("br"),s("span",{staticClass:"line-number"},[A._v("79")]),s("br"),s("span",{staticClass:"line-number"},[A._v("80")]),s("br"),s("span",{staticClass:"line-number"},[A._v("81")]),s("br"),s("span",{staticClass:"line-number"},[A._v("82")]),s("br"),s("span",{staticClass:"line-number"},[A._v("83")]),s("br"),s("span",{staticClass:"line-number"},[A._v("84")]),s("br"),s("span",{staticClass:"line-number"},[A._v("85")]),s("br"),s("span",{staticClass:"line-number"},[A._v("86")]),s("br"),s("span",{staticClass:"line-number"},[A._v("87")]),s("br"),s("span",{staticClass:"line-number"},[A._v("88")]),s("br"),s("span",{staticClass:"line-number"},[A._v("89")]),s("br"),s("span",{staticClass:"line-number"},[A._v("90")]),s("br"),s("span",{staticClass:"line-number"},[A._v("91")]),s("br"),s("span",{staticClass:"line-number"},[A._v("92")]),s("br"),s("span",{staticClass:"line-number"},[A._v("93")]),s("br"),s("span",{staticClass:"line-number"},[A._v("94")]),s("br"),s("span",{staticClass:"line-number"},[A._v("95")]),s("br"),s("span",{staticClass:"line-number"},[A._v("96")]),s("br"),s("span",{staticClass:"line-number"},[A._v("97")]),s("br"),s("span",{staticClass:"line-number"},[A._v("98")]),s("br"),s("span",{staticClass:"line-number"},[A._v("99")]),s("br"),s("span",{staticClass:"line-number"},[A._v("100")]),s("br"),s("span",{staticClass:"line-number"},[A._v("101")]),s("br"),s("span",{staticClass:"line-number"},[A._v("102")]),s("br"),s("span",{staticClass:"line-number"},[A._v("103")]),s("br"),s("span",{staticClass:"line-number"},[A._v("104")]),s("br"),s("span",{staticClass:"line-number"},[A._v("105")]),s("br"),s("span",{staticClass:"line-number"},[A._v("106")]),s("br"),s("span",{staticClass:"line-number"},[A._v("107")]),s("br"),s("span",{staticClass:"line-number"},[A._v("108")]),s("br"),s("span",{staticClass:"line-number"},[A._v("109")]),s("br"),s("span",{staticClass:"line-number"},[A._v("110")]),s("br"),s("span",{staticClass:"line-number"},[A._v("111")]),s("br"),s("span",{staticClass:"line-number"},[A._v("112")]),s("br"),s("span",{staticClass:"line-number"},[A._v("113")]),s("br"),s("span",{staticClass:"line-number"},[A._v("114")]),s("br"),s("span",{staticClass:"line-number"},[A._v("115")]),s("br"),s("span",{staticClass:"line-number"},[A._v("116")]),s("br"),s("span",{staticClass:"line-number"},[A._v("117")]),s("br"),s("span",{staticClass:"line-number"},[A._v("118")]),s("br"),s("span",{staticClass:"line-number"},[A._v("119")]),s("br"),s("span",{staticClass:"line-number"},[A._v("120")]),s("br"),s("span",{staticClass:"line-number"},[A._v("121")]),s("br"),s("span",{staticClass:"line-number"},[A._v("122")]),s("br"),s("span",{staticClass:"line-number"},[A._v("123")]),s("br"),s("span",{staticClass:"line-number"},[A._v("124")]),s("br"),s("span",{staticClass:"line-number"},[A._v("125")]),s("br"),s("span",{staticClass:"line-number"},[A._v("126")]),s("br"),s("span",{staticClass:"line-number"},[A._v("127")]),s("br"),s("span",{staticClass:"line-number"},[A._v("128")]),s("br"),s("span",{staticClass:"line-number"},[A._v("129")]),s("br"),s("span",{staticClass:"line-number"},[A._v("130")]),s("br"),s("span",{staticClass:"line-number"},[A._v("131")]),s("br"),s("span",{staticClass:"line-number"},[A._v("132")]),s("br"),s("span",{staticClass:"line-number"},[A._v("133")]),s("br"),s("span",{staticClass:"line-number"},[A._v("134")]),s("br"),s("span",{staticClass:"line-number"},[A._v("135")]),s("br"),s("span",{staticClass:"line-number"},[A._v("136")]),s("br"),s("span",{staticClass:"line-number"},[A._v("137")]),s("br"),s("span",{staticClass:"line-number"},[A._v("138")]),s("br"),s("span",{staticClass:"line-number"},[A._v("139")]),s("br"),s("span",{staticClass:"line-number"},[A._v("140")]),s("br"),s("span",{staticClass:"line-number"},[A._v("141")]),s("br"),s("span",{staticClass:"line-number"},[A._v("142")]),s("br"),s("span",{staticClass:"line-number"},[A._v("143")]),s("br"),s("span",{staticClass:"line-number"},[A._v("144")]),s("br"),s("span",{staticClass:"line-number"},[A._v("145")]),s("br"),s("span",{staticClass:"line-number"},[A._v("146")]),s("br"),s("span",{staticClass:"line-number"},[A._v("147")]),s("br"),s("span",{staticClass:"line-number"},[A._v("148")]),s("br"),s("span",{staticClass:"line-number"},[A._v("149")]),s("br"),s("span",{staticClass:"line-number"},[A._v("150")]),s("br"),s("span",{staticClass:"line-number"},[A._v("151")]),s("br"),s("span",{staticClass:"line-number"},[A._v("152")]),s("br"),s("span",{staticClass:"line-number"},[A._v("153")]),s("br"),s("span",{staticClass:"line-number"},[A._v("154")]),s("br"),s("span",{staticClass:"line-number"},[A._v("155")]),s("br"),s("span",{staticClass:"line-number"},[A._v("156")]),s("br"),s("span",{staticClass:"line-number"},[A._v("157")]),s("br"),s("span",{staticClass:"line-number"},[A._v("158")]),s("br"),s("span",{staticClass:"line-number"},[A._v("159")]),s("br"),s("span",{staticClass:"line-number"},[A._v("160")]),s("br"),s("span",{staticClass:"line-number"},[A._v("161")]),s("br"),s("span",{staticClass:"line-number"},[A._v("162")]),s("br"),s("span",{staticClass:"line-number"},[A._v("163")]),s("br"),s("span",{staticClass:"line-number"},[A._v("164")]),s("br"),s("span",{staticClass:"line-number"},[A._v("165")]),s("br"),s("span",{staticClass:"line-number"},[A._v("166")]),s("br"),s("span",{staticClass:"line-number"},[A._v("167")]),s("br"),s("span",{staticClass:"line-number"},[A._v("168")]),s("br"),s("span",{staticClass:"line-number"},[A._v("169")]),s("br"),s("span",{staticClass:"line-number"},[A._v("170")]),s("br"),s("span",{staticClass:"line-number"},[A._v("171")]),s("br"),s("span",{staticClass:"line-number"},[A._v("172")]),s("br"),s("span",{staticClass:"line-number"},[A._v("173")]),s("br"),s("span",{staticClass:"line-number"},[A._v("174")]),s("br"),s("span",{staticClass:"line-number"},[A._v("175")]),s("br"),s("span",{staticClass:"line-number"},[A._v("176")]),s("br"),s("span",{staticClass:"line-number"},[A._v("177")]),s("br"),s("span",{staticClass:"line-number"},[A._v("178")]),s("br"),s("span",{staticClass:"line-number"},[A._v("179")]),s("br"),s("span",{staticClass:"line-number"},[A._v("180")]),s("br"),s("span",{staticClass:"line-number"},[A._v("181")]),s("br"),s("span",{staticClass:"line-number"},[A._v("182")]),s("br"),s("span",{staticClass:"line-number"},[A._v("183")]),s("br"),s("span",{staticClass:"line-number"},[A._v("184")]),s("br"),s("span",{staticClass:"line-number"},[A._v("185")]),s("br"),s("span",{staticClass:"line-number"},[A._v("186")]),s("br"),s("span",{staticClass:"line-number"},[A._v("187")]),s("br"),s("span",{staticClass:"line-number"},[A._v("188")]),s("br"),s("span",{staticClass:"line-number"},[A._v("189")]),s("br"),s("span",{staticClass:"line-number"},[A._v("190")]),s("br"),s("span",{staticClass:"line-number"},[A._v("191")]),s("br"),s("span",{staticClass:"line-number"},[A._v("192")]),s("br"),s("span",{staticClass:"line-number"},[A._v("193")]),s("br"),s("span",{staticClass:"line-number"},[A._v("194")]),s("br"),s("span",{staticClass:"line-number"},[A._v("195")]),s("br"),s("span",{staticClass:"line-number"},[A._v("196")]),s("br"),s("span",{staticClass:"line-number"},[A._v("197")]),s("br"),s("span",{staticClass:"line-number"},[A._v("198")]),s("br"),s("span",{staticClass:"line-number"},[A._v("199")]),s("br"),s("span",{staticClass:"line-number"},[A._v("200")]),s("br"),s("span",{staticClass:"line-number"},[A._v("201")]),s("br"),s("span",{staticClass:"line-number"},[A._v("202")]),s("br"),s("span",{staticClass:"line-number"},[A._v("203")]),s("br"),s("span",{staticClass:"line-number"},[A._v("204")]),s("br"),s("span",{staticClass:"line-number"},[A._v("205")]),s("br"),s("span",{staticClass:"line-number"},[A._v("206")]),s("br"),s("span",{staticClass:"line-number"},[A._v("207")]),s("br"),s("span",{staticClass:"line-number"},[A._v("208")]),s("br"),s("span",{staticClass:"line-number"},[A._v("209")]),s("br"),s("span",{staticClass:"line-number"},[A._v("210")]),s("br"),s("span",{staticClass:"line-number"},[A._v("211")]),s("br"),s("span",{staticClass:"line-number"},[A._v("212")]),s("br"),s("span",{staticClass:"line-number"},[A._v("213")]),s("br"),s("span",{staticClass:"line-number"},[A._v("214")]),s("br"),s("span",{staticClass:"line-number"},[A._v("215")]),s("br"),s("span",{staticClass:"line-number"},[A._v("216")]),s("br"),s("span",{staticClass:"line-number"},[A._v("217")]),s("br"),s("span",{staticClass:"line-number"},[A._v("218")]),s("br"),s("span",{staticClass:"line-number"},[A._v("219")]),s("br"),s("span",{staticClass:"line-number"},[A._v("220")]),s("br"),s("span",{staticClass:"line-number"},[A._v("221")]),s("br"),s("span",{staticClass:"line-number"},[A._v("222")]),s("br"),s("span",{staticClass:"line-number"},[A._v("223")]),s("br"),s("span",{staticClass:"line-number"},[A._v("224")]),s("br"),s("span",{staticClass:"line-number"},[A._v("225")]),s("br"),s("span",{staticClass:"line-number"},[A._v("226")]),s("br"),s("span",{staticClass:"line-number"},[A._v("227")]),s("br"),s("span",{staticClass:"line-number"},[A._v("228")]),s("br"),s("span",{staticClass:"line-number"},[A._v("229")]),s("br"),s("span",{staticClass:"line-number"},[A._v("230")]),s("br"),s("span",{staticClass:"line-number"},[A._v("231")]),s("br"),s("span",{staticClass:"line-number"},[A._v("232")]),s("br"),s("span",{staticClass:"line-number"},[A._v("233")]),s("br"),s("span",{staticClass:"line-number"},[A._v("234")]),s("br"),s("span",{staticClass:"line-number"},[A._v("235")]),s("br"),s("span",{staticClass:"line-number"},[A._v("236")]),s("br"),s("span",{staticClass:"line-number"},[A._v("237")]),s("br"),s("span",{staticClass:"line-number"},[A._v("238")]),s("br"),s("span",{staticClass:"line-number"},[A._v("239")]),s("br"),s("span",{staticClass:"line-number"},[A._v("240")]),s("br"),s("span",{staticClass:"line-number"},[A._v("241")]),s("br"),s("span",{staticClass:"line-number"},[A._v("242")]),s("br"),s("span",{staticClass:"line-number"},[A._v("243")]),s("br"),s("span",{staticClass:"line-number"},[A._v("244")]),s("br"),s("span",{staticClass:"line-number"},[A._v("245")]),s("br"),s("span",{staticClass:"line-number"},[A._v("246")]),s("br"),s("span",{staticClass:"line-number"},[A._v("247")]),s("br"),s("span",{staticClass:"line-number"},[A._v("248")]),s("br"),s("span",{staticClass:"line-number"},[A._v("249")]),s("br"),s("span",{staticClass:"line-number"},[A._v("250")]),s("br"),s("span",{staticClass:"line-number"},[A._v("251")]),s("br"),s("span",{staticClass:"line-number"},[A._v("252")]),s("br"),s("span",{staticClass:"line-number"},[A._v("253")]),s("br"),s("span",{staticClass:"line-number"},[A._v("254")]),s("br"),s("span",{staticClass:"line-number"},[A._v("255")]),s("br"),s("span",{staticClass:"line-number"},[A._v("256")]),s("br"),s("span",{staticClass:"line-number"},[A._v("257")]),s("br"),s("span",{staticClass:"line-number"},[A._v("258")]),s("br"),s("span",{staticClass:"line-number"},[A._v("259")]),s("br"),s("span",{staticClass:"line-number"},[A._v("260")]),s("br"),s("span",{staticClass:"line-number"},[A._v("261")]),s("br"),s("span",{staticClass:"line-number"},[A._v("262")]),s("br"),s("span",{staticClass:"line-number"},[A._v("263")]),s("br"),s("span",{staticClass:"line-number"},[A._v("264")]),s("br"),s("span",{staticClass:"line-number"},[A._v("265")]),s("br"),s("span",{staticClass:"line-number"},[A._v("266")]),s("br")])])])])],1)])]],2)}),[],!1,null,"d9746e5a",null);n.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/18.d11eb049.js b/assets/js/18.d11eb049.js new file mode 100644 index 00000000..ae53b6e5 --- /dev/null +++ b/assets/js/18.d11eb049.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{450:function(e,t,r){},509:function(e,t,r){"use strict";r(450)},564:function(e,t,r){"use strict";r.r(t);r(509);var n=r(18),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[r("h1",{attrs:{id:"bitcoin-₿-🐒"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-₿-🐒"}},[e._v("#")]),e._v(" Bitcoin "),r("div",{staticClass:"emoji-wrap"},[e._v("₿ 🐒")])])]},proxy:!0}])},[r("p",[e._v("Here you'll find a list of resources related to Bitcoin presented in alphabetical order. While I believe these links are to resources that will help you gain a better conceptual and practical understanding of Bitcoin, I haven't personally used and verified all of them. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.")]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"blockchain-explorers"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#blockchain-explorers"}},[e._v("#")]),e._v(" Blockchain Explorers")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://blockstream.info/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Blockstream Explorer"),r("OutboundLink")],1),e._v(" - Open source blockchain explorer that supports Bitcoin mainnet, Bitcoin testnet, Liquid mainnet, and Liquid testnet that can be used with Tor to conceal your IP address")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://mempool.space/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mempool.space"),r("OutboundLink")],1),e._v(" - Open source self-hostable mempool explorer and blockchain explorer for Bitcoin that can be used with Tor to conceal your IP address")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://oxt.me/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Other eXploration Tool (OXT)"),r("OutboundLink")],1),e._v(" - Blockchain explorer, visualization tool, and analysis platform for the Bitcoin ledger. Be sure to check out the "),r("a",{attrs:{href:"https://oxt.me/faq",target:"_blank",rel:"noopener noreferrer"}},[e._v("FAQ"),r("OutboundLink")],1),e._v(" page to see how they handle your personal information when using the site")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"books"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#books"}},[e._v("#")]),e._v(" Books")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://21lessons.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("21 Lessons"),r("OutboundLink")],1),e._v(" - Distillation of the lessons learned after falling down the Bitcoin rabbit hole written by Gigi")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.btcwip.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin: A Work in Progress"),r("OutboundLink")],1),e._v(" - Focused on guiding the reader through the latest developments in Bitcoin through the eyes of Sjors Provoost one of the many Bitcoin core developers")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mastering Bitcoin"),r("OutboundLink")],1),e._v(" - Focused on providing developers with a technical understanding of Bitcoin written by Andreas M. Antonopoulos")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/lnbook/lnbook",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mastering the Lightning Network"),r("OutboundLink")],1),e._v(" - Focused on providing developers with a technical understanding of the Lightning Network written by Andreas M. Antonopoulos, Olaoluwa Osuntokun, and Rene Pickhardt")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://programmingbitcoin.com/programming-bitcoin-book/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Programming Bitcoin"),r("OutboundLink")],1),e._v(" - Learn how to program a Bitcoin library with this hands-on guide that goes over the math, blocks, network, transactions, proof-of-work, and more written by Jimmy Song a Bitcoin core developer and educator")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://programmingbitcoin.com/thank-god-for-bitcoin/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Thank God for Bitcoin"),r("OutboundLink")],1),e._v(" - Explores the creation of money, its corruption, and its potential redemption by examining the effects Bitcoin is having on transitioning the world to a sound monetary standard")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://saifedean.com/tbs",target:"_blank",rel:"noopener noreferrer"}},[e._v("The Bitcoin Standard"),r("OutboundLink")],1),e._v(" - Analyzes the historical context of the rise of Bitcoin, the economic properties that have allowed it to grow quickly, and its likely economic, political, and social implications written by Saifedean Ammous")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://saifedean.com/tfs",target:"_blank",rel:"noopener noreferrer"}},[e._v("The Fiat Standard"),r("OutboundLink")],1),e._v(" - Provides an examination of twentieth century monetary technology and explains its benefits, drawbacks, and its many modes of failure written by Saifedean Ammous")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://programmingbitcoin.com/the-little-bitcoin-book/",target:"_blank",rel:"noopener noreferrer"}},[e._v("The Little Bitcoin Book"),r("OutboundLink")],1),e._v(" - Focused on describing in simple terms what Bitcoin is, how it works, why it's valuable, and how it affects individual freedom and opportunities of people everywhere written by the Bitcoin Collective")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"collaborative-custody"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#collaborative-custody"}},[e._v("#")]),e._v(" Collaborative Custody")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://unchained.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unchained Capital"),r("OutboundLink")],1),e._v(" - Trusted multisig storage solution where you are making the decision to trust Unchained Capital with your privacy but not with your funds in exchange for better security, redundancy, and support when storing your Bitcoin")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"dashboard"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#dashboard"}},[e._v("#")]),e._v(" Dashboard")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin.clarkmoody.com/dashboard/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Clark Moody's Dashboard"),r("OutboundLink")],1),e._v(" - A single page view into the metrics of the Bitcoin ecosystem which includes market data, network data, mining data, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"education"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#education"}},[e._v("#")]),e._v(" Education")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://6102bitcoin.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("6102bitcoin"),r("OutboundLink")],1),e._v(" - Pseudonymous bitcoin user and educator with the goal of accelerating bitcoin understanding")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoiner.guide/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoiner.Guide"),r("OutboundLink")],1),e._v(" - A collection of resources from BitcoinQnA focused on providing Bitcoin education with an emphasis on how to use Bitcoin in a sovereign and private way")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin-only.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Only"),r("OutboundLink")],1),e._v(" - A collection of high quality Bitcoin resources including meetups, books, wallets, hardware, podcasts, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoinops.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Optech"),r("OutboundLink")],1),e._v(" - Helping Bitcoin users and businesses integrate scaling technologies by providing workshops, documentation, weekly newsletters, original research, case studies and announcements, analysis of Bitcoin software and services, and a podcast")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin-resources.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Resources"),r("OutboundLink")],1),e._v(" - Provides numerous Bitcoin related resources including videos, books, articles, podcasts, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin.stackexchange.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Stack Exchange"),r("OutboundLink")],1),e._v(" - Question and answer site for Bitcoin cryptocurrency enthusiasts")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.youtube.com/@Bitcoin_University",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin University"),r("OutboundLink")],1),e._v(" - Educational content devoted to Bitcoin, financial freedom, self-sovereignty, and relevant macro and financial news")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://en.bitcoin.it/wiki/Main_Page",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Wiki"),r("OutboundLink")],1),e._v(" - Wiki dedicated to providing all of your Bitcoin information needs including how to get started, software, mining, exchanges, technical content, economics, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.btcsessions.ca/",target:"_blank",rel:"noopener noreferrer"}},[e._v("BTC Sessions"),r("OutboundLink")],1),e._v(" - Bitcoin educator focused on helping people gain an understanding of Bitcoin by providing tutorials on wallets, hardware, security, exchanges, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://diverter.hostyourown.tools/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Diverter"),r("OutboundLink")],1),e._v(" - Focused on Bitcoin, privacy, and censorship-resistance by learning how to use the related tools")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.econoalchemist.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Econoalchemist"),r("OutboundLink")],1),e._v(" - Blog focused on bringing you articles about interacting with Bitcoin in a self-custodial, censorship-resistant, and private way")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://k3tan.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("k3tan"),r("OutboundLink")],1),e._v(" - Focused on providing educational content on how to transition to a Bitcoin standard by showing people how to hold their own keys, use their own node, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.keepitsimplebitcoin.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Keep it Simple"),r("OutboundLink")],1),e._v(" - Focused on teaching people how to interact with Bitcoin")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://odell.xyz/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Odell"),r("OutboundLink")],1),e._v(" - A Bitcoin entrepreneur attempting to stay humble and stack sats with a focus on using Bitcoin and free and open source software as sovereignly and privately as possible")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://werunbtc.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("We Run BTC"),r("OutboundLink")],1),e._v(" - Focused on providing guides and resources about Bitcoin with an emphasis on how to interact with Bitcoin in a sovereign and private way")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"entertainment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#entertainment"}},[e._v("#")]),e._v(" Entertainment")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.youtube.com/@bitcoinyoda8321",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Yoda"),r("OutboundLink")],1),e._v(" - An entertaining YouTube channel that makes funny videos about Bitcoin like The Bitcoin HODL Dance, Money Printer Goes Brrr! (Central Bank's Favorite Song), Michael Saylor's Investment Advice, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"hardware-wallets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#hardware-wallets"}},[e._v("#")]),e._v(" Hardware Wallets")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://coldcard.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Coldcard Mk4"),r("OutboundLink")],1),e._v(" - Viewable, editable, and verifiable source code, Bitcoin-only, and has numerous security features including dual secure elements to store your private key, air-gapped, i.e., can be used without ever connecting it directly to a computer, duress PIN, comes in a tamper-evident numbered bag with the bag number recorded into the device, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://seedsigner.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("SeedSigner"),r("OutboundLink")],1),e._v(" - Build your own air-gapped and stateless hardware wallet using publicly available hardware components. The benefits of creating your own hardware wallet are you're not relying on centralized companies, and you can buy the pieces privately from multiple vendors spaced out over time. Note that there are no secure elements used to store your private key and you're relying on closed source hardware since it uses a Raspberry Pi")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://trezor.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Trezor Model T"),r("OutboundLink")],1),e._v(" - Open source hardware and software that has numerous security features including PIN and passphrase entry directly into the device, shamir backup, FIDO2 and U2F authentication standards, transaction anonymization using CoinJoin, and more. Note that there are no secure elements used to store your private key")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"jobs"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#jobs"}},[e._v("#")]),e._v(" Jobs")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoinerjobs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoiner Jobs"),r("OutboundLink")],1),e._v(" - Leading career site with the goal of helping to build the emerging Bitcoin industry and the careers of Bitcoiners within it")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.pleblab.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PlebLab"),r("OutboundLink")],1),e._v(" - Bitcoin hackerspace and community accelerator based in Austin, Texas focused on supporting early stage Bitcoin start-ups and developers building the future of Bitcoin")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"media"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#media"}},[e._v("#")]),e._v(" Media")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoinmagazine.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Magazine"),r("OutboundLink")],1),e._v(" - Source of news, information and expert commentary on Bitcoin, its underlying blockchain technology and the industry that has been built up around it")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcointv.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("BitcoinTV"),r("OutboundLink")],1),e._v(" - A repository of educational video content for the Bitcoin community, without distractions like advertising, altcoins, or third-party trackers")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.nobsbitcoin.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("No BS Bitcoin"),r("OutboundLink")],1),e._v(" - A news desk for Bitcoiners by Bitcoiners without ads, paywalls, or clickbait includes Bitcoin related news, updates, research, guides, weekly digest, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://tftc.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("TFTC"),r("OutboundLink")],1),e._v(" - A media company focused on Bitcoin, Beauty, and Freedom in the Digital Age")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"meetups"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#meetups"}},[e._v("#")]),e._v(" Meetups")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.meetup.com/bitcoinpark/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Park"),r("OutboundLink")],1),e._v(" - Community supported campus in Nashville, Tennessee focused on grassroots Bitcoin adoption and a home for Bitcoiners to work, learn, collaborate, and build")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.bitcoinerevents.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoiner Events"),r("OutboundLink")],1),e._v(" - Curated list of all the best Bitcoin-only events, meetups, and conferences around the world")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.meetup.com/find/?source=EVENTS&keywords=bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Meetup Groups"),r("OutboundLink")],1),e._v(" - Find a local Bitcoin meetup group by searching for upcoming meetups near you. Remember to do your own research to avoid any sketchy meetups, and don't share any personal information that you don't want others to know")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"nodes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#nodes"}},[e._v("#")]),e._v(" Nodes")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://mynodebtc.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("myNode"),r("OutboundLink")],1),e._v(" - Open source prebuilt Bitcoin and Lightning node that comes with many features including Tor support, Bitcoin Explorer, Electrum Server, multisig tools, an easy-to-use web interface, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.nodl.eu/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodl"),r("OutboundLink")],1),e._v(" - Open source prebuilt Bitcoin and Lightning full node that comes with many features including BTCPay Server, Tor support, Electrum Rust Server (Electrs), Ride the Lightning (RTL), BTC RPC Explorer, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://raspibolt.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("RaspiBolt"),r("OutboundLink")],1),e._v(" - Set up your own Bitcoin and Lightning node from scratch doing everything yourself. You'll learn about Linux, Bitcoin, and Lightning")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://ronindojo.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("RoninDojo"),r("OutboundLink")],1),e._v(" - Open source high performance plug and play full node with an emphasis on maintaining strong privacy while interacting with Bitcoin")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://start9.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Start9"),r("OutboundLink")],1),e._v(" - They develop the open source Linux-based Operating System (OS) embassyOS which is built specifically for self-hosting open source software like a Bitcoin full node, a Lightning full node, Mempool.space, and more. You have the option of buying a prebuilt server or you can build your own server and install embassyOS on it")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://umbrel.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Umbrel"),r("OutboundLink")],1),e._v(" - Open source Operating System (OS) for running a personal server in your home that allows you to self-host numerous apps like Nextcloud, a Bitcoin full node, a Lightning node, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"payment-processors"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#payment-processors"}},[e._v("#")]),e._v(" Payment Processors")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://btcpayserver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("BTCPay Server"),r("OutboundLink")],1),e._v(" - Open source self-hostable cryptocurrency payment processor focused on providing secure, private, and censorship-resistant payments")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"peer-to-peer-p2p-exchanges"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#peer-to-peer-p2p-exchanges"}},[e._v("#")]),e._v(" Peer-to-Peer (P2P) Exchanges")]),e._v(" "),r("h3",{attrs:{id:"reviews"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#reviews"}},[e._v("#")]),e._v(" Reviews")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://kycnot.me/",target:"_blank",rel:"noopener noreferrer"}},[e._v("KYCNOT.ME"),r("OutboundLink")],1),e._v(" - Open source privacy focused website with the goal of providing a list of Non KYC exchanges and ranking them based on how well you can use them in an anonymous way. The website may not always be up to date, so be sure to do your own research. Don't trust, verify!")]),e._v(" "),r("h3",{attrs:{id:"exchanges"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#exchanges"}},[e._v("#")]),e._v(" Exchanges")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://agoradesk.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("AgoraDesk"),r("OutboundLink")],1),e._v(" - Closed source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin, Monero, and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a semi-custodial wallet, no JavaScript needed to use the service, the service has an API available, and Android and iOS apps are available")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bisq.network/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bisq"),r("OutboundLink")],1),e._v(" - Open source peer-to-peer (P2P) exchange that you run on your own hardware over Tor, accepts Bitcoin, Monero, and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and no JavaScript needed to use the service")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://hodlhodl.com/?filters%5Bcurrency_code%5D=UAH",target:"_blank",rel:"noopener noreferrer"}},[e._v("Hodl Hodl"),r("OutboundLink")],1),e._v(" - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a non-custodial wallet, JavaScript is needed to use the service, the service has an API available, and refunds may require KYC")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://peachbitcoin.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Peach"),r("OutboundLink")],1),e._v(" - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin and cash, doesn't allow you to swap coins, doesn't require an account, uses a non-custodial wallet, no JavaScript needed to use the service, Android and iOS apps are available, and refunds are handled without the need of a KYC procedure")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://learn.robosats.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Robosats"),r("OutboundLink")],1),e._v(" - Open source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and the service has an API available")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"podcasts"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#podcasts"}},[e._v("#")]),e._v(" Podcasts")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://podcasters.spotify.com/pod/show/bitcoin-explained",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Explained"),r("OutboundLink")],1),e._v(" - If you're interested in learning more about the technical side of Bitcoin, then you should check out this podcast with Bitcoin Magazine's Technical editor Aaron van Wirdum and Bitcoin core contributor Sjors Provoost")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://podcasters.spotify.com/pod/show/jimmysong",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Fixes This"),r("OutboundLink")],1),e._v(" - An exploration of the impact Bitcoin has had and continues to have on multiple aspects of society hosted by Jimmy Song")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.theinvestorspodcast.com/bitcoin-fundamentals/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Fundamentals"),r("OutboundLink")],1),e._v(" - Show focused on discussing Bitcoin fundamentals, investing, and news hosted by Preston Pysh")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin.review/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Review Podcast"),r("OutboundLink")],1),e._v(" - Technical updates and commentary on Bitcoin and related projects hosted by Rodolfo Novak (NVK)")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://citadeldispatch.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Citadel Dispatch"),r("OutboundLink")],1),e._v(" - An interactive live show about Bitcoin and freedom tech with an emphasis on actionable steps one can take to become more sovereign and private when using Bitcoin hosted by Matt Odell")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://rhr.tv/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rabbit Hole Recap"),r("OutboundLink")],1),e._v(" - Recap of the weeks events in the world of Bitcoin hosted by Matt Odell and Marty Bent")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://saifedean.com/podcast",target:"_blank",rel:"noopener noreferrer"}},[e._v("The Bitcoin Standard Podcast"),r("OutboundLink")],1),e._v(" - Discusses Bitcoin, Austrian economics, and various news and events hosted by Saifedean Ammous")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.whatbitcoindid.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("What Bitcoin Did"),r("OutboundLink")],1),e._v(" - A tri-weekly Bitcoin podcast where host Peter McCormack interviews experts in the world of Bitcoin development, privacy, investment and adoption")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"products"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#products"}},[e._v("#")]),e._v(" Products")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://coinkite.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Coinkite"),r("OutboundLink")],1),e._v(" - Company focused on designing and manufacturing bitcoin security and fun devices like the Coldcard, Opendime, Tapsigner, Satscard, Blockclock, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.cryptocloaks.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Crypto Cloaks"),r("OutboundLink")],1),e._v(" - Company focused on designing and manufacturing 3D printed Bitcoin related products like node shells, hardware wallet mounts, home mining devices, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"website"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#website"}},[e._v("#")]),e._v(" Website")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoin.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin"),r("OutboundLink")],1),e._v(" - Bitcoin core website that has introductory resources for individuals, businesses, and developers, resources, ways to participate, FAQs, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"seed-storage"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#seed-storage"}},[e._v("#")]),e._v(" Seed Storage")]),e._v(" "),r("h3",{attrs:{id:"reviews-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#reviews-2"}},[e._v("#")]),e._v(" Reviews")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://jlopp.github.io/metal-bitcoin-storage-reviews/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Metal Bitcoin Seed Storage Reviews"),r("OutboundLink")],1),e._v(" - Stress tests and reviews of seed storage devices by Jameson Lopp the grades are based on how well the devices resist heat, corrosion, and being crushed")]),e._v(" "),r("h3",{attrs:{id:"storage-devices"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#storage-devices"}},[e._v("#")]),e._v(" Storage Devices")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.bitplates.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitplates"),r("OutboundLink")],1),e._v(" - Multiple plate sizes available, uses stainless steel (Marine Grade 316L), plates are laser cut for precision and engraved to ensure permanent marking, suitable for use with BIP39 and SLIP39 compatible Bitcoin wallets, up to 24 seed words per plate, and received an overall grade of A from Jameson Lopp")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.blockplate.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Blockplate"),r("OutboundLink")],1),e._v(" - Inventor of center punch style seed storage, 12 word, 24 word, and passphrase plates available, uses thick 12 gauge stainless steel, plates are laser cut for precision and engraved to ensure permanent marking, received an overall grade of A from Jameson Lopp, and made in the USA")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://codl.co/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Codl"),r("OutboundLink")],1),e._v(" - Multiple plate sizes and types of plates available including passphrase plates, uses 304 stainless steel, received an overall grade of A from Jameson Lopp, made in the USA, and they make a really cool stainless steel copy of the Bitcoin white paper")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://qreg.tech/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Quadrat Register"),r("OutboundLink")],1),e._v(" - Multiple plate sizes and types of plates available, uses AISI 316 Ti stainless steel, received an overall grade of A from Jameson Lopp, made in Germany")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoinseedbackup.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Seedplate"),r("OutboundLink")],1),e._v(" - Single plate design, 12 words per side, etch marks chemically colored in black for better legibility, designed to be small, compatible with Seed XOR, received an overall grade of A from Jameson Lopp, and made by Coinkite in Canada")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"software-wallets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#software-wallets"}},[e._v("#")]),e._v(" Software Wallets")]),e._v(" "),r("h3",{attrs:{id:"lightning-and-on-chain"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#lightning-and-on-chain"}},[e._v("#")]),e._v(" Lightning and On-Chain")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bluewallet.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Blue Wallet"),r("OutboundLink")],1),e._v(" - Open source wallet for Android and iOS that supports numerous features including multiple wallets, watch-only wallets, multisig vault, fee and transaction control, plausible deniability, batch transactions, coin control, PayJoin, ability to use your own Bitcoin and Lightning nodes, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://electrum.org/#home",target:"_blank",rel:"noopener noreferrer"}},[e._v("Electrum"),r("OutboundLink")],1),e._v(" - Open source wallet for Linux, macOS, Windows, and Android that supports numerous features including multiple wallets, watch-only wallets, multisig, fee and transaction control, passphrases, coin control, ability to use your own Bitcoin node, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://fullynoded.app/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Fully Noded"),r("OutboundLink")],1),e._v(" - Open source wallet for iOS and macOS that automatically prompts you to connect your own Bitcoin full node and acts as an offline signer using your node as a watch-only wallet")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://muun.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Muun"),r("OutboundLink")],1),e._v(" - Open source wallet for Android and iOS that uses a unique 2 of 2 multisig setup that stores only one private key on your phone and both of the private keys in an emergency kit which allows for a balance between hot and cold storage")]),e._v(" "),r("h3",{attrs:{id:"lightning-only"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#lightning-only"}},[e._v("#")]),e._v(" Lightning Only")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://getalby.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alby"),r("OutboundLink")],1),e._v(" - Open source browser extension that allows you to connect one or multiple Lightning wallets and control them in your browser, generate and manage multiple Nostr keys, and interact with numerous Bitcoin applications seamlessly. Note connecting your own Lightning node is an experimental feature, so the extension uses a custodial Lightning node which means you're trusting a third-party with your funds and privacy")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://breez.technology/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Breez"),r("OutboundLink")],1),e._v(" - Open source Android and iOS full-service, non-custodial Lightning client that offers many features like cloud backups, connecting to multiple nodes including your own, built-in next-generation podcast player, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://phoenix.acinq.co/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Phoenix"),r("OutboundLink")],1),e._v(" - Open source Android and iOS non-custodial Lightning wallet and node that offers many features and is powered by Eclair")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/Ride-The-Lightning/RTL",target:"_blank",rel:"noopener noreferrer"}},[e._v("RTL"),r("OutboundLink")],1),e._v(" - Open source full function, device agnostic, web user interface Lightning wallet and node management tool available on Lightning Network Daemon (LND), Core Lightning, and Eclair implementations")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://zaphq.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zap"),r("OutboundLink")],1),e._v(" - Open source non-custodial Lightning wallet available for Android, iOS, Linux, macOS, and Windows that offers many features including connecting to your own Lightning node")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://zeusln.app/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zeus"),r("OutboundLink")],1),e._v(" - Open source Android and iOS non-custodial Lightning wallet that offers many features including connecting to your own Lightning node")]),e._v(" "),r("h3",{attrs:{id:"on-chain-only"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#on-chain-only"}},[e._v("#")]),e._v(" On-Chain Only")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://nunchuk.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nunchuk"),r("OutboundLink")],1),e._v(" - Open source wallet available for Android, iOS, Linux, macOS, and Windows with an emphasis on combining security and ease of use. It supports numerous features including multisig, collaborative custody, inheritance planning, Tapsigner integration, connecting to your own Bitcoin full node, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://sparrowwallet.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sparrow"),r("OutboundLink")],1),e._v(" - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to use all Hierarchical Deterministic (HD) wallets, strong encryption, detailed wallet history, coin control, connecting to your own Bitcoin full node, using your own blockchain explorer, and more")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://specter.solutions/desktop/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Specter"),r("OutboundLink")],1),e._v(" - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to connect your own Bitcoin full node, support for numerous hardware wallets, multisig, coin control, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"statistics"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#statistics"}},[e._v("#")]),e._v(" Statistics")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://kycp.org/#/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Know Your Coin Privacy (KYCP)"),r("OutboundLink")],1),e._v(" - Open source online tool for users to visualize the degree of privacy in a Bitcon transaction. Their zero log policy states KYCP is a static client for OXT, no backend or third-party service involved other than OXT, queries are directly sent to OXT over HTTPS, and there is no way to see or log your searches")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://mempool.observer/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mempool Observer"),r("OutboundLink")],1),e._v(" - Interesting statistics about the Bitcoin mempool including current data, historical data, recent blocks, Segregated Witness (SegWit) data, a transaction monitor, and more")])]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"support"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#support"}},[e._v("#")]),e._v(" Support")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://bitcoindevlist.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitcoin Dev List"),r("OutboundLink")],1),e._v(" - Open source Bitcoin donation portal that lists people working on Bitcoin and related projects with the goal of increasing visibility of contributors to the space that are accepting donations")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://opensats.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenSats"),r("OutboundLink")],1),e._v(" - Focused on helping to support and maintain a sustainable ecosystem of funding for free and open source projects and contributors related to Bitcoin")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://ten31.vc/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ten31"),r("OutboundLink")],1),e._v(" - Venture capital fund focused exclusively on investing in the Bitcoin ecosystem")])])])}),[],!1,null,"5c5a75c5",null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/19.2c32600e.js b/assets/js/19.2c32600e.js new file mode 100644 index 00000000..971e5100 --- /dev/null +++ b/assets/js/19.2c32600e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{448:function(e,t,r){},507:function(e,t,r){"use strict";r(448)},563:function(e,t,r){"use strict";r.r(t);r(507);var a=r(18),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[r("h1",{attrs:{id:"free-and-open-source-software-foss-💻-🐒"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#free-and-open-source-software-foss-💻-🐒"}},[e._v("#")]),e._v(" Free and Open Source Software (FOSS) "),r("div",{staticClass:"emoji-wrap"},[e._v("💻 🐒")])])]},proxy:!0}])},[r("p",[e._v("Here you'll find a list of resources related to free and open source software (FOSS) presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.")]),e._v(" "),r("div",{staticClass:"resource-card"},[r("h2",{attrs:{id:"education"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#education"}},[e._v("#")]),e._v(" Education")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://dzone.com/articles/free-software-vs-open-source-vs-freeware-whats-the",target:"_blank",rel:"noopener noreferrer"}},[e._v("Free Software vs Open Source vs Freeware"),r("OutboundLink")],1),e._v(" - Clarifies the differences between free software, open source, and freeware which are often confusingly used interchangeably")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://lukesmith.xyz/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Luke Smith"),r("OutboundLink")],1),e._v(" - A LandChad that emphasizes the importance of using FOSS as well as self-hosting your own websites and applications")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://www.gnu.org/philosophy/free-sw.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("What is Free Software?"),r("OutboundLink")],1),e._v(" - Description of the philosophy and principles behind free software from the Free Software Foundation (FSF)")])])])}),[],!1,null,"1098e494",null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/2.848dd251.js b/assets/js/2.848dd251.js new file mode 100644 index 00000000..efdb01d8 --- /dev/null +++ b/assets/js/2.848dd251.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{407:function(t,e,n){"use strict";n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return u})),n.d(e,"e",(function(){return c})),n.d(e,"a",(function(){return h})),n.d(e,"g",(function(){return d})),n.d(e,"f",(function(){return m})),n.d(e,"b",(function(){return g}));n(37),n(64),n(410),n(412),n(207),n(62),n(46),n(47),n(27),n(48),n(206),n(213);var a=/#.*$/,i=/\.(md|html)$/,s=/\/$/,r=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(a,"").replace(i,"")}function l(t){return r.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function h(t){if(l(t))return t;var e=t.match(a),n=e?e[0]:"",i=o(t);return s.test(i)?t:i+".html"+n}function p(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){var a=t.charAt(0);if("/"===a)return t;if("?"===a||"#"===a)return e+t;var i=e.split("/");n&&i[i.length-1]||i.pop();for(var s=t.replace(/^\//,"").split("/"),r=0;r3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return p(n,e,a);if(Array.isArray(e))return Object.assign(p(n,e[0],a),{title:e[1]});var s=e.children||[];return 0===s.length&&e.path?Object.assign(p(n,e.path,a),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map((function(e){return t(e,n,a,i+1)})),collapsable:!1!==e.collapsable}}(t,i,u)})):[]}return[]}function f(t){var e=function(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map((function(e){return{type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}}))}]}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}function g(t){return new Date(t).toLocaleString(this.$lang,{month:"short",day:"numeric",year:"numeric"})}},415:function(t,e,n){"use strict";n.r(e);n(215),n(213),n(46),n(47),n(65);var a=n(1),i=n(406),s=n(418),r={name:"Home",components:{VLazyImage:i.a,NavLink:s.a},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},o=(n(464),n(18)),l=Object(o.a)(r,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[n("header",{staticClass:"hero",on:{click:function(e){return t.$router.push(""+t.data.actionLink)}}},[n("div",{staticClass:"logo-wrapper"},[t.data.heroImage?n("v-lazy-image",{attrs:{src:t.$withBase(t.data.heroImage),"src-placeholder":"/images/code-monkeys-logos/code-monkeys-full-logo-150w.png",alt:t.data.heroAlt||"hero"}}):t._e()],1),t._v(" "),null!==t.data.heroText?n("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?n("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?n("p",{staticClass:"action"},[n("span",{staticClass:"nav-link action-button"},[t._v(t._s(t.data.actionText))])]):t._e()]),t._v(" "),t.data.features&&t.data.features.length?n("div",{staticClass:"features"},t._l(t.data.features,(function(e,a){return n("div",{key:a,staticClass:"feature"},[n("h2",[t._v(t._s(e.title))]),t._v(" "),n("p",[t._v(t._s(e.details))])])})),0):t._e(),t._v(" "),n("Content",{staticClass:"theme-default-content custom"})],1)}),[],!1,null,null,null).exports,u=(n(228),n(465)),c=n(517),h={name:"SidebarButton",props:{value:{type:Boolean,required:!0,default:!1}}},p=(n(469),Object(o.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("vp-icon",{directives:[{name:"show",rawName:"v-show",value:!t.value,expression:"!value"}],staticClass:"icon",attrs:{name:"menu"}}),t._v(" "),n("vp-icon",{directives:[{name:"show",rawName:"v-show",value:t.value,expression:"value"}],staticClass:"icon",attrs:{name:"cross"}})],1)}),[],!1,null,null,null).exports),d=n(459);function f(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var m={name:"Navbar",components:{VLazyImage:i.a,SidebarButton:p,NavLinks:d.a,SearchBox:c.a,AlgoliaSearchBox:u.a},props:{value:{type:Boolean,required:!1,default:!1}},data:function(){return{linksWrapMaxWidth:null}},computed:{algolia:function(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch:function(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted:function(){var t=this,e=parseInt(f(this.$el,"paddingLeft"))+parseInt(f(this.$el,"paddingRight")),n=function(){document.documentElement.clientWidth<719?t.linksWrapMaxWidth=null:t.linksWrapMaxWidth=t.$el.offsetWidth-e-(t.$refs.siteName&&t.$refs.siteName.offsetWidth||0)};n(),window.addEventListener("resize",n,!1)}},g=(n(473),Object(o.a)(m,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("header",{staticClass:"navbar"},[n("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}},model:{value:t.value,callback:function(e){t.value=e},expression:"value"}}),t._v(" "),n("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?n("v-lazy-image",{staticClass:"logo",attrs:{src:t.$withBase(""+t.$site.themeConfig.logo),"src-placeholder":t.$withBase("/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-35w.png"),alt:t.$siteTitle+" Head and Shoulders Logo"}}):t._e(),t._v(" "),t.$siteTitle?n("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()],1),t._v(" "),n("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?n("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?n("SearchBox"):t._e(),t._v(" "),n("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),v={components:{PageNav:n(519).a},props:["sidebarItems"]},b=(n(477),Object(o.a)(v,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{staticClass:"page"},[t._t("top"),t._v(" "),n("Content",{staticClass:"theme-default-content",attrs:{"slot-key":"header"}}),t._v(" "),t._t("post-details"),t._v(" "),t._t("embedded-video"),t._v(" "),n("Content",{staticClass:"theme-default-content"}),t._v(" "),n("PageNav",t._b({},"PageNav",{sidebarItems:t.sidebarItems},!1)),t._v(" "),t._t("post-pagination"),t._v(" "),t._t("post-comments"),t._v(" "),t._t("bottom")],2)}),[],!1,null,null,null).exports),k=n(518),_=n(407),y={name:"Layout",components:{Home:l,Page:b,Sidebar:k.a,Navbar:g},created:function(){void 0===this.$postPagination&&this.postPagination(),"undefined"!=typeof window&&(sessionStorage.getItem("allPosts")||sessionStorage.setItem("allPosts","false"))},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(_.g)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,n=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(n)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))},sortPostsByDate:function(t){return t.sort((function(t,e){return new Date(e.posted)-new Date(t.posted)}))},prevAndNextLinks:function(t){var e,n,a={};return t.forEach((function(i,s){e=0!==s?t[s-1].path:"",n=s!==t.length-1?t[s+1].path:"",a[i.key]={prevLink:e,nextLink:n}})),a},postPagination:function(){var t=this;a.a.prototype.$postPagination={};var e=[],n=[];this.$topics.list.forEach((function(a){a.pages.forEach((function(t){e.push({path:t.path,posted:t.frontmatter.date,key:t.key}),n.push({path:t.path,posted:t.frontmatter.date,key:t.key})})),t.$postPagination[a.name]=t.prevAndNextLinks(t.sortPostsByDate(n)),n=[]})),this.$postPagination.allPosts=this.prevAndNextLinks(this.sortPostsByDate(e))}}},$=Object(o.a)(y,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?n("Navbar",{on:{"toggle-sidebar":t.toggleSidebar},model:{value:t.isSidebarOpen,callback:function(e){t.isSidebarOpen=e},expression:"isSidebarOpen"}}):t._e(),t._v(" "),n("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),n("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?n("Home"):n("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"post-details",fn:function(){return[t._t("post-details")]},proxy:!0},{key:"embedded-video",fn:function(){return[t._t("embedded-video")]},proxy:!0},{key:"post-pagination",fn:function(){return[t._t("post-pagination")]},proxy:!0},{key:"post-comments",fn:function(){return[t._t("post-comments")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=$.exports},418:function(t,e,n){"use strict";n(461),n(63),n(66);var a=n(407),i={name:"NavLink",props:{item:{required:!0}},computed:{link:function(){return Object(a.a)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/topics/"===this.link||"/resources/"===this.link||"/"===this.link},isNonHttpURI:function(){return Object(a.d)(this.link)||Object(a.e)(this.link)},isBlankTarget:function(){return"_blank"===this.target},isInternal:function(){return!Object(a.c)(this.link)&&!this.isBlankTarget},target:function(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(a.c)(this.link)?"_blank":""},rel:function(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction:function(){this.$emit("focusout")}}},s=n(18),r=Object(s.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.a=r.exports},419:function(t,e,n){},423:function(t,e,n){},425:function(t,e,n){},426:function(t,e,n){},427:function(t,e,n){},429:function(t,e,n){},459:function(t,e,n){"use strict";var a=n(60),i=(n(66),n(62),n(37),n(64),n(63),n(119),n(410),n(421),n(214),n(418)),s=n(460),r=n(227),o=n.n(r),l={name:"DropdownLink",components:{NavLink:i.a,DropdownTransition:s.a},props:{item:{required:!0}},data:function(){return{open:!1}},computed:{dropdownAriaLabel:function(){return this.item.ariaLabel||this.item.text}},watch:{$route:function(){this.open=!1}},methods:{setOpen:function(t){this.open=t},isLastItemOfArray:function(t,e){return o()(e)===t},handleDropdown:function(){0===event.detail&&this.setOpen(!this.open)}}},u=(n(471),n(18)),c=Object(u.a)(l,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow down"})]),t._v(" "),n("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,a){return n("li",{key:e.link||a,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(a){return n("li",{key:a.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:a},on:{focusout:function(n){t.isLastItemOfArray(a,e.items)&&t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0):n("NavLink",{attrs:{item:e},on:{focusout:function(n){t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports,h=n(407),p={name:"NavLinks",components:{NavLink:i.a,DropdownLink:c},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var n=this.$page.path,i=this.$router.options.routes,s=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(e).map((function(a){var r,o=e[a],l=s[a]&&s[a].label||o.lang;return o.lang===t.$lang?r=n:(r=n.replace(t.$localeConfig.path,a),i.some((function(t){return t.path===r}))||(r=a)),{text:l,link:r}}))};return[].concat(Object(a.a)(this.userNav),[r])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(h.f)(t),{items:(t.items||[]).map(h.f)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):null},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;n"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mi",{staticClass:"mjx-i",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"c"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{attrs:{space:"2"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:">"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Now, we'll let "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1)],1)],1),t._v(" denote our function for climbing the stairs.")],1)]),t._v(" "),a("li",[a("p",[t._v("Here's how we can represent the different scenarios for climbing the stairs:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"2"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"3"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"2"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{attrs:{space:"2"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:">"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("We're passing the "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1)],1)],1),t._v(" + "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"x"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"S"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"S"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"z"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1)],1),t._v(" and our target value of "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),t._v(" steps to our function "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1)],1)],1),t._v(".")],1)]),t._v(" "),a("li",[a("p",[t._v("Now, we need to determine how many times we need to to call "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1)],1)],1),t._v(".")],1)]),t._v(" "),a("li",[a("p",[t._v("We know from the diagram if "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mi",{staticClass:"mjx-i",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"c"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:">"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),t._v(", then we can ignore that way of climbing the stairs")],1)]),t._v(" "),a("li",[a("p",[t._v("We also know if "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mi",{staticClass:"mjx-i",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"c"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),t._v(", then we have found a valid way to climb the steps.")],1)]),t._v(" "),a("li",[a("p",[t._v("Using this knowledge we can come up with the following:")])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Climbing Stairs Solution 1"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var climbStairs = function(n) {\n return wayToClimb(0, n);\n};\n\nvar wayToClimb = function(stepsTaken, n) {\n if (stepsTaken > n) {\n return 0;\n }\n\n if (stepsTaken === n) {\n return 1;\n }\n\n return wayToClimb(stepsTaken + 1, n) + wayToClimb(stepsTaken + 2, n);\n};\n\nlet n = 4;\nconsole.log(climbStairs(n));\n\n")])]),t._v(" "),a("h2",{attrs:{id:"downsides"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#downsides"}},[t._v("#")]),t._v(" Downsides")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Our solution will work, but it's not efficient.")])]),t._v(" "),a("li",[a("p",[t._v("We'll actually get a time limit exceeded error on LeetCode if we submit this.")])]),t._v(" "),a("li",[a("p",[t._v("This is because the "),a("span",{staticClass:"post-term-one"},[t._v("time complexity")]),t._v(" of our solution is "),a("span",{staticClass:"post-term-one"},[t._v("O(2"),a("sup",[t._v("n")]),t._v(")")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We can look at our "),a("span",{staticClass:"post-term-one"},[t._v("recursion tree")]),t._v(" above and count the number of nodes to determine the "),a("span",{staticClass:"post-term-one"},[t._v("time complexity")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Now, we won't count exactly "),a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("n")])]),t._v(" nodes since our "),a("span",{staticClass:"post-term-one"},[t._v("recursive formula")]),t._v(" isn't exactly "),a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("n")])]),t._v(", but when dealing with "),a("span",{staticClass:"post-term-one"},[t._v("Big-Oh")]),t._v(" we only care about the behavior as "),a("span",{staticClass:"post-term-one"},[t._v("n")]),t._v(" becomes very large.")])]),t._v(" "),a("li",[a("p",[t._v("We'll be improving this in the next post by drawing out "),a("span",{staticClass:"post-term-one"},[t._v("recursion trees")]),t._v(" for larger values of "),a("span",{staticClass:"post-term-one"},[t._v("n")]),t._v(" which will allow us to see an interesting pattern.")])])])],1)}),[],!1,null,null,null);"function"==typeof c&&c(i);s.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/26.7d6839f2.js b/assets/js/26.7d6839f2.js new file mode 100644 index 00000000..75764c8b --- /dev/null +++ b/assets/js/26.7d6839f2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{528:function(t,s,a){"use strict";a.r(s);var m=a(18),e=function(t){t.options.__data__block__={mermaid_382ee1e8:"graph TD\n 1([Bottom of the Staircase])--+1--\x3e 2([1 out of 1]);\n 1--+2--\x3e 3([2 out of 1]);\n",mermaid_382ee21f:"graph TD\n 1([Bottom of the Staircase])--+1--\x3e 2([1 out of 2]);\n 1--+2--\x3e 3([2 out of 2]);\n 2--+1--\x3e 4([2 out of 2]);\n 2--+2--\x3e 5([3 out of 2]);\n",mermaid_382ee241:"graph TD\n 1([Bottom of the Staircase])--+1--\x3e 2([1 out of 3]);\n 1--+2--\x3e 3([2 out of 3]);\n 2--+1--\x3e 4([2 out of 3]);\n 2--+2--\x3e 5([3 out of 3]);\n 3--+1--\x3e 6([3 out of 3]);\n 3--+2--\x3e 7([4 out of 3]);\n 4--+1--\x3e 8([3 out of 3]);\n 4--+2--\x3e 9([4 out of 3]);\n",mermaid_64a570dc:"graph TD\n 1([Bottom of the Staircase])--+1--\x3e 2([1 out of 4]);\n 1--+2--\x3e 3([2 out of 4]);\n 2--+1--\x3e 4([2 out of 4]);\n 2--+2--\x3e 5([3 out of 4]);\n 3--+1--\x3e 6([3 out of 4]);\n 3--+2--\x3e 7([4 out of 4]);\n 4--+1--\x3e 8([3 out of 4]);\n 4--+2--\x3e 9([4 out of 4]);\n 5--+1--\x3e 10([4 out of 4]);\n 5--+2--\x3e 11([5 out of 4]);\n 6--+1--\x3e 12([4 out of 4]);\n 6--+2--\x3e 13([5 out of 4]);\n 8--+1--\x3e 14([4 out of 4]);\n 8--+2--\x3e 15([5 out of 4]);\n"}},c=Object(m.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"climbing-stairs-solution-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#climbing-stairs-solution-2"}},[t._v("#")]),t._v(" Climbing Stairs Solution 2")])]},proxy:!0}])},[a("h2",{attrs:{id:"links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://leetcode.com/problems/climbing-stairs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Climbing Stairs "),a("div",{staticClass:"emoji-wrap"},[t._v("Problem"),a("span",[t._v(" 💡")])])])]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),a("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),a("span",[t._v(" 💻")])])])]),t._v(" "),a("h2",{attrs:{id:"problem-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),a("p",[t._v("You are climbing a staircase. It takes "),a("span",{staticClass:"post-term-one"},[t._v("n")]),t._v(" steps to reach the top.")]),t._v(" "),a("p",[t._v("Each time you can either climb "),a("span",{staticClass:"post-term-one"},[t._v("1")]),t._v(" or "),a("span",{staticClass:"post-term-one"},[t._v("2")]),t._v(" steps. In how many distinct ways can you climb to the top?")]),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("p",[t._v("Ex 1) Input: "),a("span",{staticClass:"post-term-one"},[t._v("n = 2")]),t._v(" "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("2")])],1),t._v(" "),a("p",[t._v("Explanation: There are "),a("span",{staticClass:"post-term-one"},[t._v("two")]),t._v(" ways to climb to the top."),a("br"),t._v("1. 1 step + 1 step"),a("br"),t._v("2. 2 steps")]),t._v(" "),a("p",[t._v("Ex 2) Input: "),a("span",{staticClass:"post-term-one"},[t._v("n = 3")]),t._v(" "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("3")])],1),t._v(" "),a("p",[t._v("Explanation: There are "),a("span",{staticClass:"post-term-one"},[t._v("three")]),t._v(" ways to climb to the top."),a("br"),t._v("1. 1 step + 1 step + 1 step"),a("br"),t._v("2. 1 step + 2 steps"),a("br"),t._v("3. 2 steps + 1 step")]),t._v(" "),a("h2",{attrs:{id:"constraints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),a("ul",[a("li",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"4"}}),a("mjx-c",{attrs:{c:"5"}})],1)],1)],1)],1)]),t._v(" "),a("h2",{attrs:{id:"thought-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#thought-process"}},[t._v("#")]),t._v(" Thought Process")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("We previously came up with a solution for this problem by using a "),a("span",{staticClass:"post-term-one"},[t._v("recursive formula")]),t._v(" that represents how many distinct ways we can climb the stairs.")])]),t._v(" "),a("li",[a("p",[t._v("The issue with the previous solution is it has a "),a("span",{staticClass:"post-term-one"},[t._v("time complexity")]),t._v(" of "),a("span",{staticClass:"post-term-one"},[t._v("O(2"),a("sup",[t._v("n")]),t._v(")")]),t._v(" which is very inefficient.")])]),t._v(" "),a("li",[a("p",[t._v("To come up with a better solution we'll be drawing out multiple "),a("span",{staticClass:"post-term-one"},[t._v("recursion trees")]),t._v(" to help us see a pattern.")])]),t._v(" "),a("li",[a("p",[t._v("When "),a("span",{staticClass:"post-term-one"},[t._v("n = 1")]),t._v(" we have:")])])]),t._v(" "),a("Mermaid",{attrs:{id:"mermaid_382ee1e8",graph:t.$dataBlock.mermaid_382ee1e8}}),a("ul",[a("li",[a("p",[t._v("From the diagram we can see there is "),a("span",{staticClass:"post-term-one"},[t._v("1 distinct way")]),t._v(" to climb to the top when "),a("span",{staticClass:"post-term-one"},[t._v("n = 1")]),t._v(" since we can ignore the scenarios where we take extra steps.")])]),t._v(" "),a("li",[a("p",[t._v("When "),a("span",{staticClass:"post-term-one"},[t._v("n = 2")]),t._v(" we have:")])])]),t._v(" "),a("Mermaid",{attrs:{id:"mermaid_382ee21f",graph:t.$dataBlock.mermaid_382ee21f}}),a("ul",[a("li",[a("p",[t._v("So, we have "),a("span",{staticClass:"post-term-one"},[t._v("2 distinct ways")]),t._v(" to climb to the top.")])]),t._v(" "),a("li",[a("p",[t._v("When "),a("span",{staticClass:"post-term-one"},[t._v("n = 3")]),t._v(" we have:")])])]),t._v(" "),a("Mermaid",{attrs:{id:"mermaid_382ee241",graph:t.$dataBlock.mermaid_382ee241}}),a("ul",[a("li",[a("p",[t._v("So, we have "),a("span",{staticClass:"post-term-one"},[t._v("3 distinct ways")]),t._v(" to climb to the top.")])]),t._v(" "),a("li",[a("p",[t._v("When "),a("span",{staticClass:"post-term-one"},[t._v("n = 4")]),t._v(" we have:")])])]),t._v(" "),a("Mermaid",{attrs:{id:"mermaid_64a570dc",graph:t.$dataBlock.mermaid_64a570dc}}),a("ul",[a("li",[a("p",[t._v("So, we have "),a("span",{staticClass:"post-term-one"},[t._v("5 distinct ways")]),t._v(" to climb to the top.")])]),t._v(" "),a("li",[a("p",[t._v("Now, let's take a look at our cases from "),a("span",{staticClass:"post-term-one"},[t._v("n = 1")]),t._v(" to "),a("span",{staticClass:"post-term-one"},[t._v("n = 2")]),t._v(" and see if we can find a pattern:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Here, "),a("span",{staticClass:"post-term-three"},[t._v("waysToClimb")]),t._v(" denotes our function for determining how many unique ways we can climb the stairs.")])]),t._v(" "),a("li",[a("p",[t._v("This sequence of numbers follows the "),a("span",{staticClass:"post-term-one"},[t._v("Fibonacci")]),t._v(" sequence with the only difference being the value of the "),a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")])]),t._v(" and "),a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")])]),t._v(" terms.")])]),t._v(" "),a("li",[a("p",[t._v("Here, the "),a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")])]),t._v(" term has a value of "),a("span",{staticClass:"post-term-three"},[t._v("1")]),t._v(" and the "),a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")])]),t._v(" term has a value of "),a("span",{staticClass:"post-term-three"},[t._v("2")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Also, notice that we know we have "),a("span",{staticClass:"post-term-one"},[t._v("two ways")]),t._v(" to climb the stairs to reach the "),a("span",{staticClass:"post-term-one"},[t._v("n"),a("sup",[t._v("th")])]),t._v(" step.")])]),t._v(" "),a("li",[a("p",[t._v("If we take "),a("span",{staticClass:"post-term-one"},[t._v("1 step")]),t._v(", then we're "),a("span",{staticClass:"post-term-one"},[t._v("n - 1")]),t._v(" steps closer to "),a("span",{staticClass:"post-term-one"},[t._v("n")]),t._v(", and if we take "),a("span",{staticClass:"post-term-one"},[t._v("2 steps")]),t._v(" then we're "),a("span",{staticClass:"post-term-one"},[t._v("n - 2")]),t._v(" steps closer to "),a("span",{staticClass:"post-term-one"},[t._v("n")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("So, we can get the distinct number of ways to climb the steps by summing up the ways of climbing to the "),a("span",{staticClass:"post-term-one"},[t._v("n - 1 step")]),t._v(" and the ways of climbing to the "),a("span",{staticClass:"post-term-one"},[t._v("n - 2 step")]),t._v(" using the following formula:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"3"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:">"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("Fibonacci")]),t._v(" sequence is the following series of numbers:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"5"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"8"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"2"}}),a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"3"}}),a("mjx-c",{attrs:{c:"4"}})],1),a("mjx-msub",[a("mjx-mo",{staticClass:"mjx-n",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"22EF"}})],1)],1)],1)],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("The next number is found by "),a("span",{staticClass:"post-term-one"},[t._v("adding up the two numbers before it")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("For example, "),a("span",{staticClass:"post-term-one"},[t._v("5")]),t._v(" is found by adding "),a("span",{staticClass:"post-term-one"},[t._v("2")]),t._v(" and "),a("span",{staticClass:"post-term-one"},[t._v("3")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("first two terms")]),t._v(" are called "),a("span",{staticClass:"post-term-one"},[t._v("seed numbers")]),t._v(", which we'll denote as:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"2"}},[a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's the formula used to characterize the sequence:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mi",{staticClass:"mjx-i",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"+"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"3"}},[a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-TeXAtom",{attrs:{size:"s"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:">"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("seed numbers")]),t._v(" for our problem are:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"2"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"w"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"T"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"C"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-msub",[a("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Now that we know our pattern of climbing the stairs follows a "),a("span",{staticClass:"post-term-one"},[t._v("Fibonnaci")]),t._v(" sequence we can implement the sequence in our code using the "),a("span",{staticClass:"post-term-three"},[t._v("waysToClimb")]),t._v(" formula and the "),a("span",{staticClass:"post-term-one"},[t._v("seed numbers")]),t._v(" we came up with.")])]),t._v(" "),a("li",[a("p",[t._v("This will improve the "),a("span",{staticClass:"post-term-one"},[t._v("time complexity")]),t._v(" of our solution from the "),a("span",{staticClass:"post-term-one"},[t._v("O(2"),a("sup",[t._v("n")]),t._v(")")]),t._v(" solution we previously came up with.")])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Climbing Stairs Solution 2"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var climbStairs = function(n) {\n if (n === 1) {\n return 1;\n } else if (n === 2) {\n return 2;\n } else {\n let waysToClimb1 = 1;\n let waysToClimb2 = 2;\n let waysToClimb;\n let i = 1;\n\n while (n - 1 > i) {\n waysToClimb = waysToClimb2 + waysToClimb1;\n waysToClimb1 = waysToClimb2;\n waysToClimb2 = waysToClimb;\n i++;\n }\n\n return waysToClimb;\n }\n};\n\nlet n = 4;\nconsole.log(climbStairs(n));\n\n")])]),t._v(" "),a("h2",{attrs:{id:"analysis"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#analysis"}},[t._v("#")]),t._v(" Analysis")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Since we're looping over the length of "),a("span",{staticClass:"post-term-one"},[t._v("n - 1")]),t._v(" our "),a("span",{staticClass:"post-term-one"},[t._v("time complexity")]),t._v(" is "),a("span",{staticClass:"post-term-one"},[t._v("O(n)")]),t._v(" which is a much more efficient solution!")])]),t._v(" "),a("li",[a("p",[t._v("See if you can come up with an even more efficient solution using more properties of the "),a("span",{staticClass:"post-term-one"},[t._v("Fibonnaci")]),t._v(" sequence!")])])])],1)}),[],!1,null,null,null);"function"==typeof e&&e(c);s.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/27.738c91c9.js b/assets/js/27.738c91c9.js new file mode 100644 index 00000000..e5fd92fa --- /dev/null +++ b/assets/js/27.738c91c9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{538:function(t,s,a){"use strict";a.r(s);var m=a(18),c=Object(m.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"contains-duplicate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contains-duplicate"}},[t._v("#")]),t._v(" Contains Duplicate")])]},proxy:!0}])},[a("h2",{attrs:{id:"links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://leetcode.com/problems/contains-duplicate/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Contains Duplicate "),a("div",{staticClass:"emoji-wrap"},[t._v("Problem"),a("span",[t._v(" 💡")])])])]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),a("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),a("span",[t._v(" 💻")])])])]),t._v(" "),a("h2",{attrs:{id:"problem-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),a("p",[t._v("Given an "),a("span",{staticClass:"post-term-one"},[t._v("integer")]),t._v(" array "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", return "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(" if any value appears "),a("span",{staticClass:"post-term-one post-term-bold"},[t._v("at least twice")]),t._v(", and return "),a("span",{staticClass:"post-term-one"},[t._v("false")]),t._v(" if every element is distinct.")]),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("p",[t._v("Ex 1) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 2, 3, 1] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(" since 1 appears twice.")],1),t._v(" "),a("p",[t._v("Ex 2) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 2, 3, 4] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("false")]),t._v(" since no value appears twice.")],1),t._v(" "),a("p",[t._v("Ex 3) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(" since 1, 3, and 2 appear more than once.")],1),t._v(" "),a("p",[t._v("Ex 4) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("false")]),t._v(" since there are no values.")],1),t._v(" "),a("h2",{attrs:{id:"constraints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"."}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"g"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1)],1)],1)],1)],1),t._v(" "),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"9"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"9"}})],1)],1)],1)],1)],1)],1),t._v(" "),a("h2",{attrs:{id:"thought-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#thought-process"}},[t._v("#")]),t._v(" Thought Process")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("By looking at the examples, the 1"),a("sup",[t._v("st")]),t._v(" thought that comes to mind may be to simply take each value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and compare it with every other value.")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Basically, we'll be comparing each pair of values in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" to see if a duplicate has occurred.")])]),t._v(" "),a("li",[a("p",[t._v("To do this we'll start at the "),a("span",{staticClass:"post-term-one"},[t._v("first")]),t._v(" value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and compare it with each value to the right until we reach the end of "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Then we'll take the "),a("span",{staticClass:"post-term-one"},[t._v("second")]),t._v(" value in nums, and compare it with each value to the right until we reach the end of "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We repeat this process until we reach the end of "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" in the worst case or until we find a duplicate value.")])]),t._v(" "),a("li",[a("p",[t._v("Here's a visualization for "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 2, 3] which represents a worst case scenario:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Let's take our 1"),a("sup",[t._v("st")]),t._v(" value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and compare it with each value to the right of it:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")]),t._v(" Comparison:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2260"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"N"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")]),t._v(" Comparison:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2260"}})],1),a("mjx-mstyle",{staticStyle:{color:"#cc99ff"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"N"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1)],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[t._v("Now, let's take our 2"),a("sup",[t._v("nd")]),t._v(" value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and compare it with each value to the right of it:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"post-term-one"},[t._v("3"),a("sup",[t._v("rd")]),t._v(" Comparison:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2260"}})],1),a("mjx-mstyle",{staticStyle:{color:"#cc99ff"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"N"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"c"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"f"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("The 3"),a("sup",[t._v("rd")]),t._v(" value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" is also the last value, so there's no more comparisons to be made.")])])])])]),t._v(" "),a("li",[a("p",[t._v("To achieve this we'll need to loop over each value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and for each iteration of this loop we need to compare our current value which will denote as "),a("span",{staticClass:"post-term-one"},[t._v("nums[i]")]),t._v(" with each value to the right of it.")])]),t._v(" "),a("li",[a("p",[t._v("The process of comparing "),a("span",{staticClass:"post-term-one"},[t._v("nums[i]")]),t._v(" with each value to the right of it means we'll need a nested for loop that loops from "),a("span",{staticClass:"post-term-one"},[t._v("nums[i + 1]")]),t._v(" to the last value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("A nested for loop "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" a time complexity of "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-msup",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.363em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1)],1)],1)],1),t._v(" which is not efficient and will result in a Time Limit Exceeded error on LeetCode.")],1)])])]),t._v(" "),a("li",[a("p",[t._v("Before checking for duplicate values, we can realize that if we "),a("span",{staticClass:"post-term-one"},[t._v("sort nums")]),t._v(" any duplicate values will be consecutive.")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Let's visualize this with an example for "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 2, 3, 1]:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Sorting "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" gives us:")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"("}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:")"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[t._v("Now, we can loop over "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" and check for duplicates values.")])])])]),t._v(" "),a("li",[a("p",[t._v("Looping over "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" has a time complexity of "),a("span",{staticClass:"post-term-one"},[t._v("O(n)")]),t._v(", and the sorting algorithm can have a time complexity as good as "),a("span",{staticClass:"post-term-one"},[t._v("O(nlogn)")]),t._v(" if something like heapsort is used.")])]),t._v(" "),a("li",[a("p",[t._v("So, the overall time complexity is "),a("span",{staticClass:"post-term-one"},[t._v("O(nlogn)")]),t._v(" since it's the dominating factor.")])])])]),t._v(" "),a("li",[a("p",[t._v("Solving this problem requires the ability to efficiently search for values, and a great way to do that is to use a "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(".")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("A "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" is an object that maps keys to values.")])]),t._v(" "),a("li",[a("p",[t._v("The search and insert opertions in a hash table have a time complexity of "),a("span",{staticClass:"post-term-one"},[t._v("O(1)")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Using a "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" will allow us to store each value in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" as a key, and we can map a value of let's say "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(" to it if it's the first time we've seen the value.")])]),t._v(" "),a("li",[a("p",[t._v("Now, to create our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" we can loop over "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" then check to see if the key is present.")])]),t._v(" "),a("li",[a("p",[t._v("If the key is present, then we have found a duplicate, and we'll return true.")])]),t._v(" "),a("li",[a("p",[t._v("If the key isn't present, then we'll store the current value of "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" as a key in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" with a value of "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("If no key appears twice, then "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" has no duplicates, and we'll return false.")])]),t._v(" "),a("li",[a("p",[t._v("Here's a visualization of creating our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" which we'll denote as "),a("span",{staticClass:"post-term-one"},[t._v("obj")]),t._v(" for "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 2, 1]:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")]),t._v(" Iteration:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("So, we'll store the value of "),a("span",{staticClass:"post-term-two"},[t._v("nums[0]")]),t._v(" as a key in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" with a value of true.")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")]),t._v(" Iteration:")])])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("So, we'll store the value of "),a("span",{staticClass:"post-term-three"},[t._v("nums[1]")]),t._v(" as a key in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" with a value of true.")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("3"),a("sup",[t._v("rd")]),t._v(" Iteration:")])])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"d"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Since the same key appeared in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(", a duplicate has been found in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", so we'll return false.")])])])])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Contains Duplicate"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var containsDuplicate = function(nums) {\n const obj = {};\n for (let i = 0; i < nums.length; i++) {\n if (obj[nums[i]]) {\n return true;\n }\n obj[nums[i]] = true;\n }\n\n return false;\n};\n\nnums = [1, 2, 3, 1];\nconsole.log(containsDuplicate(nums));\n")])])],1)}),[],!1,null,null,null);s.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/28.2333857e.js b/assets/js/28.2333857e.js new file mode 100644 index 00000000..f4f079c4 --- /dev/null +++ b/assets/js/28.2333857e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{540:function(t,s,m){"use strict";m.r(s);var a=m(18),c=Object(a.a)({},(function(){var t=this,s=t.$createElement,m=t._self._c||s;return m("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[m("h1",{attrs:{id:"remove-duplicates-from-sorted-array"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#remove-duplicates-from-sorted-array"}},[t._v("#")]),t._v(" Remove Duplicates from Sorted Array")])]},proxy:!0}])},[m("h2",{attrs:{id:"links"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),m("p",[m("a",{attrs:{href:"https://leetcode.com/problems/remove-duplicates-from-sorted-array/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Remove Duplicates from Sorted Array "),m("div",{staticClass:"emoji-wrap"},[t._v("Problem"),m("span",[t._v(" 💡")])])])]),t._v(" "),m("p",[m("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),m("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),m("span",[t._v(" 💻")])])])]),t._v(" "),m("h2",{attrs:{id:"problem-description"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),m("p",[t._v("Given an "),m("span",{staticClass:"post-term-one"},[t._v("integer")]),t._v(" array "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" sorted in "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("non-decreasing order")]),t._v(", remove the duplicates "),m("span",{staticClass:"post-term-one"},[t._v("in-place")]),t._v(" such that each unique element appears only "),m("span",{staticClass:"post-term-one post-term-blod"},[t._v("once")]),t._v(". The relative "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("order")]),t._v(" of the elements should be kept the "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("same")]),t._v(".")]),t._v(" "),m("p",[t._v("Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("first part")]),t._v(" of the array "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(". More formally, if there are "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements after removing the duplicates, then the first "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" should hold the final result. It does not matter what you leave beyond the first "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements.")]),t._v(" "),m("p",[t._v("Return "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" after placing the final result in the first "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" slots of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(".")]),t._v(" "),m("p",[t._v("Do "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("not")]),t._v(" allocate extra space for another array. You must do this by "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("modifying the input array in-place")]),t._v(" with "),m("span",{staticClass:"post-term-one"},[t._v("O(1)")]),t._v(" extra memory.")]),t._v(" "),m("h2",{attrs:{id:"examples"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),m("p",[t._v("Ex 1) Input: "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 1, 2] "),m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),m("span",{staticClass:"post-term-one"},[t._v("2, nums = [1, 2, _]")])],1),t._v(" "),m("p",[t._v("Explanation: Your function should return "),m("span",{staticClass:"post-term-one"},[t._v("k = 2")]),t._v(", with the first two elements of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" being "),m("span",{staticClass:"post-term-one"},[t._v("1")]),t._v(" and "),m("span",{staticClass:"post-term-one"},[t._v("2")]),t._v(" respectively."),m("br"),t._v("It does not matter what you leave beyond the returned k (hence they are underscores).")]),t._v(" "),m("p",[t._v("Ex 2) Input: "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] "),m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),m("span",{staticClass:"post-term-one"},[t._v("5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]")])],1),t._v(" "),m("p",[t._v("Explanation: Your function should return "),m("span",{staticClass:"post-term-one"},[t._v("k = 5")]),t._v(", with the first five elements of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" being "),m("span",{staticClass:"post-term-one"},[t._v("0, 1, 2, 3,")]),t._v(" and "),m("span",{staticClass:"post-term-one"},[t._v("4")]),t._v(" respectively."),m("br"),t._v("It does not matter what you leave beyond the returned k (hence they are underscores).")]),t._v(" "),m("h2",{attrs:{id:"constraints"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),m("ul",[m("li",[m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"0"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2264"}})],1),m("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"."}})],1),m("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[m("mjx-c",{attrs:{c:"l"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"g"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"h"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2264"}})],1),m("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"3"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[m("mjx-c",{attrs:{c:"2217"}})],1),m("mjx-msup",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}}),m("mjx-c",{attrs:{c:"0"}})],1),m("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1)],1)]),t._v(" "),m("li",[m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2212"}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}}),m("mjx-c",{attrs:{c:"0"}}),m("mjx-c",{attrs:{c:"0"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2264"}})],1),m("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"i"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2264"}})],1),m("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"1"}}),m("mjx-c",{attrs:{c:"0"}}),m("mjx-c",{attrs:{c:"0"}})],1)],1)],1)],1)]),t._v(" "),m("li",[m("p",[m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" is sorted in "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("non-decreasing")]),t._v(" order.")])])]),t._v(" "),m("h2",{attrs:{id:"what-does-in-place-mean"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#what-does-in-place-mean"}},[t._v("#")]),t._v(" What does In-Place mean?")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("Let's start by defining "),m("span",{staticClass:"post-term-one"},[t._v("in-place")]),t._v(" which is an algorithm that transforms input using no auxiliary data structure.")])]),t._v(" "),m("li",[m("p",[t._v("So, we "),m("span",{staticClass:"post-term-one"},[t._v("cannot")]),t._v(" allocate extra space for another array, a hash table, or any other data structure.")])]),t._v(" "),m("li",[m("p",[t._v("Another way of saying this is we must use "),m("span",{staticClass:"post-term-one"},[t._v("O(1) extra memory")]),t._v(".")])])]),t._v(" "),m("h2",{attrs:{id:"removing-or-moving-duplicates-maintaining-relative-order"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#removing-or-moving-duplicates-maintaining-relative-order"}},[t._v("#")]),t._v(" Removing (or Moving) Duplicates & Maintaining Relative Order")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("In JavaScript we "),m("span",{staticClass:"post-term-one"},[t._v("can")]),t._v(" change the length of an array by adding or removing elements, but in other languages like C for example we "),m("span",{staticClass:"post-term-one"},[t._v("cannot")]),t._v(" change the length of an array after it's created.")])]),t._v(" "),m("li",[m("p",[t._v("So, to get around this we're told we can place the result in the first part of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("Recall the formal description from earlier: if there are "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements after removing the duplicates, then the first "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" should hold the final result, and it doesn't matter what is left after the first "),m("span",{staticClass:"post-term-one"},[t._v("k")]),t._v(" elements.")])]),t._v(" "),m("li",[m("p",[t._v("The examples from earlier should make this clearer:")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("Ex 1) Input: "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 1, 2] "),m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),m("span",{staticClass:"post-term-one"},[t._v("2, nums = [1, 2, _ ]")])],1)]),t._v(" "),m("li",[m("p",[t._v("Notice:")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("The output maintains the relative order for "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" by keeping the elements we care about in "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("non-decreasing")]),t._v(" order.")])]),t._v(" "),m("li",[m("p",[t._v("Also, recall if we're moving the duplicates it doesn't matter what we leave after the "),m("span",{staticClass:"post-term-one"},[t._v("k"),m("sup",[t._v("th")])]),t._v(" element, so those elements were denoted with underscores.")])])])]),t._v(" "),m("li",[m("p",[t._v("Ex 2) Input: "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] "),m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[m("mjx-math",{staticClass:" MJX-TEX"},[m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),m("span",{staticClass:"post-term-one"},[t._v("5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]")])],1)]),t._v(" "),m("li",[m("p",[t._v("Notice:")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("The output maintains the relative order again for "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" by keeping the elements we care about in "),m("span",{staticClass:"post-term-one post-term-bold"},[t._v("non-decreasing")]),t._v(" order.")])]),t._v(" "),m("li",[m("p",[t._v("And again, recall if we're moving the duplicates it doesn't matter what we leave after the "),m("span",{staticClass:"post-term-one"},[t._v("k"),m("sup",[t._v("th")])]),t._v(" element, so those elements were denoted with underscores.")])])])])])])]),t._v(" "),m("h2",{attrs:{id:"how-to-modify-nums-in-place"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#how-to-modify-nums-in-place"}},[t._v("#")]),t._v(" How to Modify nums In-Place?")]),t._v(" "),m("ul",[m("li",[m("p",[t._v("We're told we can only modify "),m("span",{staticClass:"post-term-one"},[t._v("nums in-place")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("Let's start with "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1, 1, 1, 2, 2], and see if we can come up with some way to move around the elements to get our desired output.")])]),t._v(" "),m("li",[m("p",[t._v("Let's start by taking our 1"),m("sup",[t._v("st")]),t._v(" element in "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" and compare it with the 2"),m("sup",[t._v("nd")]),t._v(" element, then we can compare the 2"),m("sup",[t._v("nd")]),t._v(" element with the 3"),m("sup",[t._v("rd")]),t._v(" and so on...")])]),t._v(" "),m("li",[m("p",[m("span",{staticClass:"post-term-one"},[t._v("1"),m("sup",[t._v("st")]),t._v(" Iteration:")])])])]),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"="}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"0"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"2"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"3"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"4"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),m("p"),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"0"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"W"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-msup",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-script",{staticStyle:{"vertical-align":"0.413em"}},[m("mjx-mo",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"2032"}})],1)],1)],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"v"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),m("p"),t._v(" "),m("ul",[m("li",[m("span",{staticClass:"post-term-one"},[t._v("2"),m("sup",[t._v("nd")]),t._v(" Iteration:")])])]),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"="}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"0"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"3"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"4"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),m("p"),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"W"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-msup",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-script",{staticStyle:{"vertical-align":"0.413em"}},[m("mjx-mo",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"2032"}})],1)],1)],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"v"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),m("p"),t._v(" "),m("ul",[m("li",[m("span",{staticClass:"post-term-one"},[t._v("3"),m("sup",[t._v("rd")]),t._v(" Iteration:")])])]),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"="}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"0"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"4"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),m("p"),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2260"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2260"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"W"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"v"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"h"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-msup",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1),m("mjx-script",{staticStyle:{"vertical-align":"0.413em"}},[m("mjx-TeXAtom",{attrs:{size:"s"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1)],1)],1)],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"p"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"i"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"r"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"a"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"r"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"r"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"a"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"y"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"w"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"h"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"i"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"c"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"h"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"i"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),m("p"),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"T"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"h"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"a"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"w"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"c"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"a"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"="}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),m("p"),t._v(" "),m("ul",[m("li",[m("span",{staticClass:"post-term-one"},[t._v("4"),m("sup",[t._v("th")]),t._v(" Iteration:")])])]),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"="}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"0"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#cc99ff"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"2"}})],1)],1),m("mjx-base",[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"1"}})],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:","}})],1),m("mjx-mover",[m("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.073em"}},[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"4"}})],1)],1)],1),m("mjx-base",[m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),m("p"),t._v(" "),m("p"),m("p",[m("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[m("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"3"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"4"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"2261"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"2"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[m("mjx-c",{attrs:{c:"27F9"}})],1),m("mjx-mstyle",{attrs:{space:"4"}},[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"W"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-msup",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-script",{staticStyle:{"vertical-align":"0.413em"}},[m("mjx-mo",{staticClass:"mjx-n",attrs:{size:"s"}},[m("mjx-c",{attrs:{c:"2032"}})],1)],1)],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"d"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"t"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-TeXAtom",[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"o"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"v"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"e"}})],1)],1),m("mjx-mstyle",[m("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),m("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"n"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"u"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"m"}})],1),m("mjx-mi",{staticClass:"mjx-i"},[m("mjx-c",{attrs:{c:"s"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"["}})],1),m("mjx-mn",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"4"}})],1),m("mjx-mo",{staticClass:"mjx-n"},[m("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),m("p"),t._v(" "),m("ul",[m("li",[m("p",[t._v("After the 4"),m("sup",[t._v("th")]),t._v(" iteration, there's nothing left to compare "),m("span",{staticClass:"post-term-three"},[t._v("nums[4]")]),t._v(" with, so that's the last iteration we need.")])]),t._v(" "),m("li",[m("p",[t._v("During our iterations we had to keep track of our current element in "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" which we'll call "),m("span",{staticClass:"post-term-two"},[t._v("nums[i]")]),t._v(" and the next element in "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" which will be "),m("span",{staticClass:"post-term-three"},[t._v("nums[i + 1]")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("We also had to keep track of which element we needed to replace in "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" if we ran into an element we hadn't seen before which we'll call "),m("span",{staticClass:"post-term-four"},[t._v("nums[j]")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("So, to implement this we'll loop over "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" from the beginning to the length of "),m("span",{staticClass:"post-term-one"},[t._v("nums - 1")]),t._v(" since when we get to the last element there's nothing else for us to compare it with.")])]),t._v(" "),m("li",[m("p",[t._v("On each iteration we'll compare the current element of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" which is "),m("span",{staticClass:"post-term-two"},[t._v("nums[i]")]),t._v(" with the next element of "),m("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" which is "),m("span",{staticClass:"post-term-three"},[t._v("nums[i + 1]")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("If they're not equal then we'll set "),m("span",{staticClass:"post-term-four"},[t._v("nums[j]")]),t._v(" "),m("span",{staticClass:"post-term-one"},[t._v("=")]),t._v(" "),m("span",{staticClass:"post-term-three"},[t._v("nums[i + 1]")]),t._v(" where "),m("span",{staticClass:"post-term-four"},[t._v("j")]),t._v(" gets initialized to "),m("span",{staticClass:"post-term-four"},[t._v("1")]),t._v(", and we'll increment "),m("span",{staticClass:"post-term-four"},[t._v("j")]),t._v(" every time "),m("span",{staticClass:"post-term-two"},[t._v("nums[i]")]),t._v(" doesn't equal "),m("span",{staticClass:"post-term-three"},[t._v("nums[i + 1]")]),t._v(".")])]),t._v(" "),m("li",[m("p",[t._v("We also need to remember the case of "),m("span",{staticClass:"post-term-four"},[t._v("nums.length = 0")]),t._v(" which means we have no elements in our array, so we'll just return 0.")])])]),t._v(" "),m("h2",{attrs:{id:"implementation"}},[m("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),m("code-fence",{attrs:{lang:"js",heading:"Remove Duplicates from Sorted Array"}},[m("pre",{attrs:{"vue-slot":"code"}},[t._v("var removeDuplicates = function(nums) {\n const numsLength = nums.length;\n\n if (numsLength === 0) {\n return 0;\n }\n\n let j = 1;\n for (let i = 0; i < numsLength - 1; i++) {\n if (nums[i] !== nums[i + 1]) {\n nums[j] = nums[i + 1];\n j++;\n }\n }\n\n return j;\n};\n\nnums = [1, 1, 1, 2, 2];\nconsole.log('k =', removeDuplicates(nums), 'nums =', nums);\n\n")])])],1)}),[],!1,null,null,null);s.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/29.41859207.js b/assets/js/29.41859207.js new file mode 100644 index 00000000..f758c236 --- /dev/null +++ b/assets/js/29.41859207.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{539:function(t,s,a){"use strict";a.r(s);var m=a(18),c=Object(m.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"reverse-string"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#reverse-string"}},[t._v("#")]),t._v(" Reverse String")])]},proxy:!0}])},[a("h2",{attrs:{id:"links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://leetcode.com/problems/reverse-string/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Reverse String "),a("div",{staticClass:"emoji-wrap"},[t._v("Problem"),a("span",[t._v(" 💡")])])])]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),a("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),a("span",[t._v(" 💻")])])])]),t._v(" "),a("h2",{attrs:{id:"problem-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),a("p",[t._v("Write a function that reverses a string. The input string is given as an array of characters "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("p",[t._v("Ex 1) Input: "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(' = ["h", "e", "l", "l", "o"] '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v('["o", "l", "l", "e", "h"]')])],1),t._v(" "),a("p",[t._v("Ex 2) Input: "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(' = ["H", "a", "n", "n", "a", "h"] '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v('["h", "a", "n", "n", "a", "H"]')])],1),t._v(" "),a("h2",{attrs:{id:"constraints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),a("ul",[a("li",[a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"."}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"g"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1)],1)],1)],1)],1)]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("s[i]")]),t._v(" is a printable ASCII character.")])]),t._v(" "),a("li",[a("p",[t._v("Do not allocate extra space for another array. You must do this "),a("span",{staticClass:"post-term-one"},[t._v("in-place")]),t._v(" with "),a("span",{staticClass:"post-term-one"},[t._v("O(1) extra memory")]),t._v(".")])])]),t._v(" "),a("h2",{attrs:{id:"what-is-a-printable-ascii-character"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-printable-ascii-character"}},[t._v("#")]),t._v(" What is a printable ASCII Character?")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("ASCII stands for American Standard Code for Information Interchange and it consists of 33 non-printable and 95 printable characters.")])]),t._v(" "),a("li",[a("p",[t._v("You can check out the non-printable, printable, and extended ASCII characters "),a("a",{attrs:{href:"https://www.ascii-code.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("For this problem we only care about the printable ASCII characters.")])])]),t._v(" "),a("h2",{attrs:{id:"what-does-in-place-mean"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-does-in-place-mean"}},[t._v("#")]),t._v(" What does In-Place Mean?")]),t._v(" "),a("ul",[a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("In-place")]),t._v(" refers to an algorithm that transforms input using no auxiliary data structure.")])]),t._v(" "),a("li",[a("p",[t._v("So, we "),a("span",{staticClass:"post-term-one"},[t._v("cannot")]),t._v(" allocate extra space for another array, a hash table, or any other data structure.")])]),t._v(" "),a("li",[a("p",[t._v("Another way of saying this is we must use "),a("span",{staticClass:"post-term-one"},[t._v("O(1) extra memory")]),t._v(".")])])]),t._v(" "),a("h2",{attrs:{id:"thought-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#thought-process"}},[t._v("#")]),t._v(" Thought Process")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Let's take our two examples from earlier and find a way to model the reversing of the characters in "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Let's start with Ex 1)")]),t._v(" "),a("ul",[a("li",[t._v("Initially, we have")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.056em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.066em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p",[t._v("and after reversing "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" our output should be:")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.066em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.056em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("To perform the reversal we need to swap the characters in "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We can start by swapping the "),a("span",{staticClass:"post-term-one"},[t._v("leftmost")]),t._v(" character and the "),a("span",{staticClass:"post-term-one"},[t._v("rightmost")]),t._v(" character.")])]),t._v(" "),a("li",[a("p",[t._v("Then we'll move to the "),a("span",{staticClass:"post-term-one"},[t._v("second leftmost")]),t._v(" character and the "),a("span",{staticClass:"post-term-one"},[t._v("second rightmost")]),t._v(" character and swap them.")])]),t._v(" "),a("li",[a("p",[t._v("We'll continue this process until "),a("span",{staticClass:"post-term-one"},[t._v("every")]),t._v(" character has been swapped if we have an "),a("span",{staticClass:"post-term-one"},[t._v("even")]),t._v(" number of characters, or until we have "),a("span",{staticClass:"post-term-one"},[t._v("one")]),t._v(" unswapped character left if we have an "),a("span",{staticClass:"post-term-one"},[t._v("odd")]),t._v(" number of characters.")])]),t._v(" "),a("li",[a("p",[t._v("To perform this swapping we'll need to loop over "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" while there are still characters that can be swapped.")])]),t._v(" "),a("li",[a("p",[t._v("Let's visualize this process to help us see how the swapping will occur and to better understand what we need to keep track of.")]),t._v(" "),a("ul",[a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")]),t._v(" Iteration")]),t._v(":")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.056em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.066em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Current Leftmost Character: "),a("span",{staticClass:"post-term-two"},[t._v("h")])])]),t._v(" "),a("li",[a("p",[t._v("Current Rightmost Character: "),a("span",{staticClass:"post-term-three"},[t._v("o")])])]),t._v(" "),a("li",[a("p",[t._v("Now, we can swap the characters by assigning "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(" to be "),a("span",{staticClass:"post-term-three"},[t._v("s[4]")]),t._v(", but if we want to assign "),a("span",{staticClass:"post-term-three"},[t._v("s[4]")]),t._v(" to be "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(", then we must first store "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(" in a "),a("span",{staticClass:"post-term-one"},[t._v("temp")]),t._v(" variable.")])]),t._v(" "),a("li",[a("p",[t._v("Storing "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(" in a "),a("span",{staticClass:"post-term-one"},[t._v("temp")]),t._v(" variable will allow us to still have the original character that was stored in "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Here's the steps for the swapping process:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" after the 1"),a("sup",[t._v("st")]),t._v(" swap:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.066em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.056em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")]),t._v(" Iteration")]),t._v(":")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.066em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.056em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1)],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Current Leftmost Character: "),a("span",{staticClass:"post-term-two"},[t._v("e")])])]),t._v(" "),a("li",[a("p",[t._v("Current Rightmost Character: "),a("span",{staticClass:"post-term-three"},[t._v("l")])])]),t._v(" "),a("li",[a("p",[t._v("Now, we can swap the characters by assigning "),a("span",{staticClass:"post-term-two"},[t._v("s[1]")]),t._v(" to be "),a("span",{staticClass:"post-term-three"},[t._v("s[3]")]),t._v(" and by assinging "),a("span",{staticClass:"post-term-three"},[t._v("s[3]")]),t._v(" to be "),a("span",{staticClass:"post-term-two"},[t._v("s[1]")]),t._v(" using the swapping process from before.")])]),t._v(" "),a("li",[a("p",[t._v("Here's the steps for the swapping process:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" after the 2"),a("sup",[t._v("nd")]),t._v(" swap:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.066em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",{staticStyle:{"padding-left":"0.028em"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"l"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.056em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("There are no unswapped characters left to swap with our only remaining unswapped character, "),a("span",{staticClass:"post-term-four"},[t._v("s[2]")]),t._v(", so the reversal is complete.")])])])])]),t._v(" "),a("li",[a("p",[t._v("To perform these swaps we had to keep track of the index of our "),a("span",{staticClass:"post-term-one"},[t._v("current leftmost character")]),t._v(" which we'll denote with "),a("span",{staticClass:"post-term-two"},[t._v("i")]),t._v(" and the index of our "),a("span",{staticClass:"post-term-one"},[t._v("current rightmost character")]),t._v(" which we'll denote with "),a("span",{staticClass:"post-term-three"},[t._v("j")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Keeping track of the "),a("span",{staticClass:"post-term-one"},[t._v("current leftmost")]),t._v(" index required us to start with "),a("span",{staticClass:"post-term-two"},[t._v("i = 0")]),t._v(" and to increment "),a("span",{staticClass:"post-term-two"},[t._v("i")]),t._v(" on each subsequent iteration.")])]),t._v(" "),a("li",[a("p",[t._v("Keeping track of the "),a("span",{staticClass:"post-term-one"},[t._v("current rightmost")]),t._v(" index required us to start with "),a("span",{staticClass:"post-term-three"},[t._v("j = s.length - 1")]),t._v(" and to decrement "),a("span",{staticClass:"post-term-three"},[t._v("j")]),t._v(" on each subsequent iteration.")])]),t._v(" "),a("li",[a("p",[t._v("We continued the loop while "),a("span",{staticClass:"post-term-two"},[t._v("i")]),t._v(" < "),a("span",{staticClass:"post-term-three"},[t._v("j")]),t._v(".")])])])]),t._v(" "),a("li",[a("p",[t._v("Let's now look at Ex 2)")]),t._v(" "),a("ul",[a("li",[t._v("Initially, we have")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p",[t._v("and after reversing "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" our output should be:")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("We need to swap the characters in "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" again like in Ex) 1.")])]),t._v(" "),a("li",[a("p",[t._v("Let's visualize this process to help us see how the swapping will occur for this example:")]),t._v(" "),a("ul",[a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")]),t._v(" Iteration")]),t._v(":")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"5"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Current Leftmost Character: "),a("span",{staticClass:"post-term-two"},[t._v("H")])])]),t._v(" "),a("li",[a("p",[t._v("Current Rightmost Character: "),a("span",{staticClass:"post-term-three"},[t._v("h")])])]),t._v(" "),a("li",[a("p",[t._v("Now, we can swap the characters by assigning "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(" to be "),a("span",{staticClass:"post-term-three"},[t._v("s[5]")]),t._v(" and by assinging "),a("span",{staticClass:"post-term-three"},[t._v("s[5]")]),t._v(" to be "),a("span",{staticClass:"post-term-two"},[t._v("s[0]")]),t._v(" using the swapping process from before.")])]),t._v(" "),a("li",[a("p",[t._v("Here's the steps for the swapping process:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"5"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"5"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" after the 1"),a("sup",[t._v("st")]),t._v(" swap:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")]),t._v(" Iteration")]),t._v(":")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Current Leftmost Character: "),a("span",{staticClass:"post-term-two"},[t._v("a")])])]),t._v(" "),a("li",[a("p",[t._v("Current Rightmost Character: "),a("span",{staticClass:"post-term-three"},[t._v("a")])])]),t._v(" "),a("li",[a("p",[t._v("Now, we can swap the characters by assigning "),a("span",{staticClass:"post-term-two"},[t._v("s[1]")]),t._v(" to be "),a("span",{staticClass:"post-term-three"},[t._v("s[4]")]),t._v(" and by assinging "),a("span",{staticClass:"post-term-three"},[t._v("s[4]")]),t._v(" to be "),a("span",{staticClass:"post-term-two"},[t._v("s[1]")]),t._v(" using the swapping process from before.")])]),t._v(" "),a("li",[a("p",[t._v("Here's the steps for the swapping process:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"4"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" after the 2"),a("sup",[t._v("nd")]),t._v(" swap:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[t._v("Note if you wanted to you could include a check to see if the characters are the same before swapping since the result after swapping will be the same.")])]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("3"),a("sup",[t._v("rd")]),t._v(" Iteration")]),t._v(":")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{size:"s"}},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1)],1)],1),a("mjx-base",[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("Current Leftmost Character: "),a("span",{staticClass:"post-term-two"},[t._v("n")])])]),t._v(" "),a("li",[a("p",[t._v("Current Rightmost Character: "),a("span",{staticClass:"post-term-three"},[t._v("n")])])]),t._v(" "),a("li",[a("p",[t._v("Now, we can swap the characters by assigning "),a("span",{staticClass:"post-term-two"},[t._v("s[2]")]),t._v(" to be "),a("span",{staticClass:"post-term-three"},[t._v("s[3]")]),t._v(" and by assinging "),a("span",{staticClass:"post-term-three"},[t._v("s[3]")]),t._v(" to be "),a("span",{staticClass:"post-term-two"},[t._v("s[2]")]),t._v(" using the swapping process from before.")])]),t._v(" "),a("li",[a("p",[t._v("Here's the steps for the swapping process:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"p"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Here's "),a("span",{staticClass:"post-term-one"},[t._v("s")]),t._v(" after the 3"),a("sup",[t._v("rd")]),t._v(" swap:")])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mover",[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.111em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"0"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.123em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"3"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.2em","padding-left":"0.088em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mover",{attrs:{space:"2"}},[a("mjx-over",{staticStyle:{"padding-bottom":"0.184em","padding-left":"0.31em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"5"}})],1)],1),a("mjx-base",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"H"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[t._v("Every character has been swapped, so the reversal is complete.")])])])])]),t._v(" "),a("li",[a("p",[t._v("Notice again we continued the loop while "),a("span",{staticClass:"post-term-two"},[t._v("i")]),t._v(" < "),a("span",{staticClass:"post-term-three"},[t._v("j")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Using the model we described above we can come up with the following implementation:")])])])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Reverse String"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var reverseString = function(s) {\n let temp;\n let i = 0;\n let j = s.length - 1;\n\n while (i < j) {\n temp = s[i];\n s[i] = s[j];\n s[j] = temp;\n i++;\n j--;\n }\n};\n\n// Case 1: s has an odd length\ns = ['h', 'e', 'l', 'l', 'o'];\nreverseString(s);\nconsole.log(s);\n\n// Case 2: s has an even length\ns = ['H', 'a', 'n', 'n', 'a', 'h'];\nreverseString(s);\nconsole.log(s);\n")])])],1)}),[],!1,null,null,null);s.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/30.a46fbbd9.js b/assets/js/30.a46fbbd9.js new file mode 100644 index 00000000..279779cd --- /dev/null +++ b/assets/js/30.a46fbbd9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{541:function(t,s,a){"use strict";a.r(s);var m=a(18),c=Object(m.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"single-number"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#single-number"}},[t._v("#")]),t._v(" Single Number")])]},proxy:!0}])},[a("h2",{attrs:{id:"links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://leetcode.com/problems/single-number/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Single Number "),a("div",{staticClass:"emoji-wrap"},[t._v("Problem"),a("span",[t._v(" 💡")])])])]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),a("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),a("span",[t._v(" 💻")])])])]),t._v(" "),a("h2",{attrs:{id:"problem-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),a("p",[t._v("Given a "),a("span",{staticClass:"post-term-one post-term-bold"},[t._v("non-empty")]),t._v(" array of integers "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", every element appears "),a("span",{staticClass:"post-term-one"},[t._v("twice")]),t._v(" excepet for one. Find that single one.")]),t._v(" "),a("p",[t._v("You must implement a solution with a "),a("span",{staticClass:"post-term-one"},[t._v("linear runtime")]),t._v(" complexity and use only "),a("span",{staticClass:"post-term-one"},[t._v("constant extra space")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("p",[t._v("Ex 1) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [2, 2, 1] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("1")]),t._v(" since 1 appears once.")],1),t._v(" "),a("p",[t._v("Ex 2) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [4, 1, 2, 1, 2] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("4")]),t._v(" since 4 appears once.")],1),t._v(" "),a("p",[t._v("Ex 3) Input: "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [1] "),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("1")]),t._v(" since 1 appears once.")],1),t._v(" "),a("h2",{attrs:{id:"constraints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),a("ul",[a("li",[a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"."}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"g"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2217"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1)],1)]),t._v(" "),a("li",[a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2212"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2217"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#ebeb33"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"3"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2217"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1)],1)]),t._v(" "),a("li",[a("p",[t._v("Each element in the array appears "),a("span",{staticClass:"post-term-one"},[t._v("twice")]),t._v(" except for one element which appears only once.")])])]),t._v(" "),a("h2",{attrs:{id:"what-does-linear-runtime-mean"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-does-linear-runtime-mean"}},[t._v("#")]),t._v(" What does Linear Runtime Mean?")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("A "),a("span",{staticClass:"post-term-one"},[t._v("linear runtime")]),t._v(" means our solution must have a time complexity of "),a("span",{staticClass:"post-term-one"},[t._v("O(n)")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("So, it's ok to use a loop in our solution but not a nested loop.")])])]),t._v(" "),a("h2",{attrs:{id:"what-does-using-constant-extra-space-mean"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-does-using-constant-extra-space-mean"}},[t._v("#")]),t._v(" What does Using Constant Extra Space Mean?")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Our given space complexity is "),a("span",{staticClass:"post-term-one"},[t._v("O(n)")]),t._v(" since we're given "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" which is an array of "),a("span",{staticClass:"post-term-one"},[t._v("length n")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("Since we want to use "),a("span",{staticClass:"post-term-one"},[t._v("constant extra space")]),t._v(", our solution must have at most "),a("span",{staticClass:"post-term-one"},[t._v("O(n)")]),t._v(" space complexity.")])])]),t._v(" "),a("h2",{attrs:{id:"thought-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#thought-process"}},[t._v("#")]),t._v(" Thought Process")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("We need to iterate over "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" since we need to find out which element appears only once.")])]),t._v(" "),a("li",[a("p",[t._v("The iteration can be done using a for loop.")])]),t._v(" "),a("li",[a("p",[t._v("Now, to keep track of how many times an element has appeared in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" we can use a "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("A "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" is an object that maps keys to values.")])]),t._v(" "),a("li",[a("p",[t._v("Here, the key will represent the element in "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(", and the value can be set to "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v(" if it has appeared once.")])]),t._v(" "),a("li",[a("p",[t._v("If the key appears again we can remove it since we know every element other than the unique element appears "),a("span",{staticClass:"post-term-one"},[t._v("twice")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("After removing the keys that appear "),a("span",{staticClass:"post-term-one"},[t._v("twice")]),t._v(", we just need to return the key of our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" that appeared once.")])]),t._v(" "),a("li",[a("p",[t._v("Here's a visualization of creating our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" which we'll denote as "),a("span",{staticClass:"post-term-one"},[t._v("myObj")]),t._v(" for "),a("span",{staticClass:"post-term-one"},[t._v("nums")]),t._v(" = [2, 2, 1]:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"post-term-one"},[t._v("1"),a("sup",[t._v("st")]),t._v(" Iteration:")])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("So, we'll store the value of "),a("span",{staticClass:"post-term-two"},[t._v("nums[0]")]),t._v(" as a key in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" with a value of true.")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("2"),a("sup",[t._v("nd")]),t._v(" Iteration:")])])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:":"}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"r"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("So, we'll remove the 2 key from our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" since it has now appeared twice.")]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1)],1)],1)],1),a("p")]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("3"),a("sup",[t._v("rd")]),t._v(" Iteration:")])])])]),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"1"}})],1)],1)],1)],1),a("p"),t._v(" "),a("p"),a("p",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[a("mjx-math",{staticClass:" MJX-TEX",attrs:{display:"true"}},[a("mjx-mstyle",{staticStyle:{color:"#ebeb33"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"O"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"b"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"j"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"="}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"{"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"}"}})],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mstyle",{staticStyle:{color:"#cc99ff"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"u"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"m"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"["}})],1),a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"2"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"]"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"i"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"o"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"a"}})],1)],1),a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-TeXAtom",[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"k"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"y"}})],1)],1)],1)],1)],1),a("p"),t._v(" "),a("ul",[a("li",[a("p",[t._v("So, we'll store the value of "),a("span",{staticClass:"post-term-four"},[t._v("nums[2]")]),t._v(" as a key in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" with a value of true.")])]),t._v(" "),a("li",[a("p",[t._v("Now, we have reached the end of the loop, so we'll return the value of the only key left in our "),a("span",{staticClass:"post-term-one"},[t._v("hash table")]),t._v(" which in this case is 1.")])])])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Single Number"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var singleNumber = function(nums) {\n const myObj = {};\n for (let i = 0; i < nums.length; i++) {\n if (myObj[nums[i]]) {\n delete myObj[nums[i]];\n } else {\n myObj[nums[i]] = true;\n }\n }\n\n return Object.keys(myObj)[0];\n};\n\nnums = [2, 2, 1];\nconsole.log(singleNumber(nums));\n\n")])])],1)}),[],!1,null,null,null);s.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/31.ef0ccef5.js b/assets/js/31.ef0ccef5.js new file mode 100644 index 00000000..44379f73 --- /dev/null +++ b/assets/js/31.ef0ccef5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{542:function(t,s,a){"use strict";a.r(s);var e=a(18),r=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"valid-anagram"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#valid-anagram"}},[t._v("#")]),t._v(" Valid Anagram")])]},proxy:!0}])},[a("h2",{attrs:{id:"links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[t._v("#")]),t._v(" Links")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://leetcode.com/problems/valid-anagram/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Valid Anagram "),a("div",{staticClass:"emoji-wrap"},[t._v("Problem"),a("span",[t._v(" 💡")])])])]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/codemonkeysio/LeetCode",target:"_blank",rel:"noopener noreferrer"}},[t._v("Get the code & notes on "),a("div",{staticClass:"emoji-wrap"},[t._v("GitHub"),a("span",[t._v(" 💻")])])])]),t._v(" "),a("h2",{attrs:{id:"problem-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#problem-description"}},[t._v("#")]),t._v(" Problem Description")]),t._v(" "),a("p",[t._v("Given two strings "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(", return "),a("span",{staticClass:"post-term-one"},[t._v("true")]),t._v("\nif "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" is an "),a("span",{staticClass:"post-term-one"},[t._v("anagram")]),t._v(" of "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(", and "),a("span",{staticClass:"post-term-one"},[t._v("false")]),t._v(" otherwise.")]),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("p",[t._v("Ex 1) Input: "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(' = "anagram", '),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(' = "nagaram" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("true")])],1),t._v(" "),a("p",[t._v("Ex 2) Input: "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(' = "rat", '),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(' = "car" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" Output: "),a("span",{staticClass:"post-term-one"},[t._v("false")])],1),t._v(" "),a("h2",{attrs:{id:"constraints"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constraints"}},[t._v("#")]),t._v(" Constraints")]),t._v(" "),a("ul",[a("li",[a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mstyle",{staticStyle:{color:"#33eb61"},attrs:{space:"4"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"s"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"."}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"g"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:","}})],1),a("mjx-mstyle",{staticStyle:{color:"#33ebeb"},attrs:{space:"2"}},[a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mo",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"."}})],1),a("mjx-mi",{staticClass:"mjx-i",attrs:{space:"2"}},[a("mjx-c",{attrs:{c:"l"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"e"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"n"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"g"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"t"}})],1),a("mjx-mi",{staticClass:"mjx-i"},[a("mjx-c",{attrs:{c:"h"}})],1)],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"2264"}})],1),a("mjx-mn",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"5"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[a("mjx-c",{attrs:{c:"2217"}})],1),a("mjx-msup",[a("mjx-mn",{staticClass:"mjx-n"},[a("mjx-c",{attrs:{c:"1"}}),a("mjx-c",{attrs:{c:"0"}})],1),a("mjx-script",{staticStyle:{"vertical-align":"0.393em"}},[a("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[a("mjx-c",{attrs:{c:"4"}})],1)],1)],1)],1)],1)],1),t._v(" "),a("li",[a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" consist of lowercase English letters")])]),t._v(" "),a("h2",{attrs:{id:"what-is-an-anagram"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-an-anagram"}},[t._v("#")]),t._v(" What is an Anagram?")]),t._v(" "),a("ul",[a("li",[t._v("A word or a phrase that is formed by "),a("span",{staticClass:"post-term-one"},[t._v("rearranging")]),t._v(" the letters of a different word or phrase typically using all of the original letters exactly "),a("span",{staticClass:"post-term-one"},[t._v("once")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"assumptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#assumptions"}},[t._v("#")]),t._v(" Assumptions")]),t._v(" "),a("ul",[a("li",[t._v("To clarify the provided constraints we're also assuming "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" contain no spaces, and we're only able to use each letter "),a("span",{staticClass:"post-term-one"},[t._v("once")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"how-to-check-if-t-is-an-anagram-of-s"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-to-check-if-t-is-an-anagram-of-s"}},[t._v("#")]),t._v(" How to Check if t is an Anagram of s?")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Since we're assuming we can only use each letter in "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" once, then for "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" to be an anagram of "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" they must be the same length.")])]),t._v(" "),a("li",[a("p",[t._v("We can first check that "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" are the same length, and if they aren't we can return false.")])]),t._v(" "),a("li",[a("p",[t._v("Now, if "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" are the same length, they must also contain the same letters.")])])]),t._v(" "),a("h3",{attrs:{id:"how-to-check-if-s-and-t-contain-the-same-letters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-to-check-if-s-and-t-contain-the-same-letters"}},[t._v("#")]),t._v(" How to Check if s and t contain the same letters?")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("We're given "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" as strings, but we care about being able to examine each character in the strings. So, what we can do is create an array of characters for "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(" and "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(".")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Ex 1) "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(' = "anagram" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" "),a("span",{staticClass:"post-term-two"},[t._v("sArray")]),t._v(' = ["a", "n", "a", "g", "r", "a", "m"]'),a("br"),a("span",{staticClass:"post-term-three post-example"},[t._v("t")]),t._v(' = "nagaram" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" "),a("span",{staticClass:"post-term-three"},[t._v("tArray")]),t._v(' = ["n", "a", "g", "a", "r", "a", "m"]')],1)]),t._v(" "),a("li",[a("p",[t._v("Ex 2) "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(' = "rat" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" "),a("span",{staticClass:"post-term-two"},[t._v("sArray")]),t._v(' = ["r", "a", "t"]'),a("br"),a("span",{staticClass:"post-term-three post-example"},[t._v("t")]),t._v(' = "car" '),a("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML"}},[a("mjx-math",{staticClass:" MJX-TEX"},[a("mjx-mstyle",[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1),a("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[a("mjx-c",{attrs:{c:"27F9"}})],1),a("mjx-mstyle",{attrs:{space:"4"}},[a("mjx-mspace",{staticStyle:{width:"0.278em"}})],1)],1)],1),t._v(" "),a("span",{staticClass:"post-term-three"},[t._v("tArray")]),t._v(' = ["c", "a", "r"]')],1)])])]),t._v(" "),a("li",[a("p",[t._v("We can use the "),a("span",{staticClass:"post-term-one"},[t._v("split()")]),t._v(" method, and pass it a pattern of "),a("span",{staticClass:"post-term-one"},[t._v('""')]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("This tells "),a("span",{staticClass:"post-term-one"},[t._v("split()")]),t._v(" to split our strings into substrings where a "),a("span",{staticClass:"post-term-one"},[t._v('""')]),t._v(" pattern occurs which is between each character in our strings.")])]),t._v(" "),a("li",[a("p",[a("span",{staticClass:"post-term-one"},[t._v("split()")]),t._v(" will then return an array of these substrings.")])]),t._v(" "),a("li",[a("p",[t._v("Now, we need a way to compare the letters of "),a("span",{staticClass:"post-term-two"},[t._v("sArray")]),t._v(" with the letters of "),a("span",{staticClass:"post-term-three"},[t._v("tArray")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("We could take the first value of "),a("span",{staticClass:"post-term-two"},[t._v("sArray")]),t._v(" and compare it with each value of "),a("span",{staticClass:"post-term-three"},[t._v("tArray")]),t._v(". Then break when the letters are the same, and keep track of which index the match occurred at. This will allow us to not use the value at the matched index again on the next comparison.")])]),t._v(" "),a("li",[a("p",[t._v("A simplier solution though is to realize that we can sort our arrays, and if "),a("span",{staticClass:"post-term-three"},[t._v("t")]),t._v(" is an anagram of "),a("span",{staticClass:"post-term-two"},[t._v("s")]),t._v(", then our arrays will have all the same letters in the same order.")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Ex 1) "),a("span",{staticClass:"post-term-two"},[t._v("sArray.sort()")]),t._v(' = ["a", "a", "a", "g", "m", "n", "r"]'),a("br"),a("span",{staticClass:"post-term-three post-example"},[t._v("tArray.sort()")]),t._v(' = ["a", "a", "a", "g", "m", "n", "r"]')])]),t._v(" "),a("li",[a("p",[t._v("Ex 2) "),a("span",{staticClass:"post-term-two"},[t._v("sArray.sort()")]),t._v(' = ["a", "r", "t"]'),a("br"),a("span",{staticClass:"post-term-three post-example"},[t._v("tArray.sort()")]),t._v(' = ["a", "c", "r"]')])])])]),t._v(" "),a("li",[a("p",[t._v("Then we can check if the letters in the arrays are equal by comparing each value at index "),a("span",{staticClass:"post-term-one"},[t._v("i")]),t._v(" of "),a("span",{staticClass:"post-term-two"},[t._v("sArray")]),t._v(" with each value at index "),a("span",{staticClass:"post-term-one"},[t._v("i")]),t._v(" of "),a("span",{staticClass:"post-term-three"},[t._v("tArray")]),t._v(".")])]),t._v(" "),a("li",[a("p",[t._v("To do this we can loop over the length of one of the arrays, and if the values of our arrays at index "),a("span",{staticClass:"post-term-one"},[t._v("i")]),t._v(" are "),a("span",{staticClass:"post-term-one"},[t._v("not")]),t._v(" equal, then we can break the loop by returning false.")])]),t._v(" "),a("li",[a("p",[t._v("If the arrays are "),a("span",{staticClass:"post-term-one"},[t._v("equal")]),t._v(", then we'll loop over the entire length of our array and return true.")])])]),t._v(" "),a("h2",{attrs:{id:"implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementation"}},[t._v("#")]),t._v(" Implementation")]),t._v(" "),a("code-fence",{attrs:{lang:"js",heading:"Valid Anagram"}},[a("pre",{attrs:{"vue-slot":"code"}},[t._v("var isAnagram = function(s, t) {\n if (s.length === t.length) {\n let sArray = s.split('');\n let tArray = t.split('');\n\n sArray.sort();\n tArray.sort();\n\n for (let i = 0; i < s.length; i++) {\n if (sArray[i] !== tArray[i]) {\n return false;\n }\n }\n\n return true;\n\n } else {\n return false;\n }\n};\n\nlet s = 'rat';\nlet t = 'car';\n\nconsole.log(isAnagram(s, t));\n\n")])])],1)}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/32.609622c9.js b/assets/js/32.609622c9.js new file mode 100644 index 00000000..c0ff6dd8 --- /dev/null +++ b/assets/js/32.609622c9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{543:function(s,e,t){"use strict";t.r(e);var a=t(18),n=Object(a.a)({},(function(){var s=this,e=s.$createElement,t=s._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey},scopedSlots:s._u([{key:"header",fn:function(){return[t("h1",{attrs:{id:"installing-fast-node-manager-fnm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-fast-node-manager-fnm"}},[s._v("#")]),s._v(" Installing Fast Node Manager (fnm)")])]},proxy:!0}])},[t("h2",{attrs:{id:"why-use-fnm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-use-fnm"}},[s._v("#")]),s._v(" Why use fnm?")]),s._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("Fast Node Manager (fnm)"),t("OutboundLink")],1),s._v(" is a fast and simple Node version manager built in "),t("a",{attrs:{href:"https://www.rust-lang.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Rust"),t("OutboundLink")],1),s._v(".")]),s._v(" "),t("p",[s._v("For those of you who haven't read the post "),t("RouterLink",{attrs:{to:"/installing-nvm/"}},[s._v("Installing Node Version Manager (nvm)")]),s._v(", a Node version manager allows you to "),t("span",{staticClass:"post-term-one"},[s._v("easily install and switch")]),s._v(" between numerous versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Node.js"),t("OutboundLink")],1),s._v(". This is useful when a project you’re working on requires a different version of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Node.js"),t("OutboundLink")],1),s._v(" than what you currently have installed.")],1),s._v(" "),t("p",[s._v("Here are some features of "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(":")]),s._v(" "),t("ul",[t("li",[s._v("Cross-platform, i.e., supports Linux, macOS, and Windows")]),s._v(" "),t("li",[s._v("Single file, easy installation, and instant startup")]),s._v(" "),t("li",[s._v("Significantly faster than "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[s._v("Node Version Manager (nvm)"),t("OutboundLink")],1)]),s._v(" "),t("li",[s._v("Works with "),t("code",{staticClass:"inline-code-block"},[s._v(".node-version")]),s._v(" and "),t("code",{staticClass:"inline-code-block"},[s._v(".nvmrc")]),s._v(" files")])]),s._v(" "),t("p",[s._v("Since "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" is much faster than "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[s._v("nvm"),t("OutboundLink")],1),s._v(", it's my "),t("span",{staticClass:"post-term-one"},[s._v("preferred")]),s._v(" way to manage my Node versions.")]),s._v(" "),t("h2",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),t("p",[s._v("We'll be going over how to install "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" on Linux, macOS, and Windows. If you run into any issues with installation then check out the "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" repository for any updates.")]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("Other Installation Methods")]),s._v(" "),t("p",[s._v("If you're interested in using "),t("a",{attrs:{href:"https://doc.rust-lang.org/cargo/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Cargo"),t("OutboundLink")],1),s._v(" or downloading a release binary, then check out the "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" repository for installation instructions.")])]),s._v(" "),t("h3",{attrs:{id:"linux"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linux"}},[s._v("#")]),s._v(" Linux")]),s._v(" "),t("p",[s._v("First make sure you have "),t("code",{staticClass:"inline-code-block"},[s._v("curl")]),s._v(" installed:")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Arch"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("pacman -Sy "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("code-block",{attrs:{title:"Ubuntu"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Next you can install "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" using either one of the following commands for "),t("code",{staticClass:"inline-code-block"},[s._v("bash")]),s._v(", "),t("code",{staticClass:"inline-code-block"},[s._v("zsh")]),s._v(", and "),t("code",{staticClass:"inline-code-block"},[s._v("fish")]),s._v(" shells.")]),s._v(" "),t("p",[s._v("Here we're setting the custom directory "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.local/bin")]),s._v(" as the location to install "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" using "),t("code",{staticClass:"inline-code-block"},[s._v("--install-dir")]),s._v(".")]),s._v(" "),t("p",[s._v("If you want to install "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" in a different location, then change "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.local/bin")]),s._v(" to your preferred directory.")]),s._v(" "),t("p",[s._v("You can also remove "),t("code",{staticClass:"inline-code-block"},[s._v("--install-dir")]),s._v(" when installing to use the default directory "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.fnm")]),s._v(".")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Custom Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://fnm.vercel.app/install "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -s -- --install-dir "),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("$HOME")]),s._v("/.local/bin\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("code-block",{attrs:{title:"Default Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://fnm.vercel.app/install "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Run the following command if you "),t("span",{staticClass:"post-term-one"},[s._v("don't")]),s._v(" have "),t("code",{staticClass:"inline-code-block"},[s._v(".local/bin")]),s._v(" in your path and you're using the custom directory "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.local/bin")]),s._v(".")]),s._v(" "),t("p",[s._v("If you're using a different custom directory and you "),t("span",{staticClass:"post-term-one"},[s._v("don't")]),s._v(" have it in your path, then replace "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.local/bin")]),s._v(" with you're preferred directory.")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Setting PATH"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("export")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("PATH")])]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/home/"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("$USER")]),s._v("/.local/bin/fnm:"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("$PATH")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Run the following command to upgrade "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(".")]),s._v(" "),t("p",[s._v("If you're using a different custom directory, then replace "),t("code",{staticClass:"inline-code-block"},[s._v("$HOME/.local/bin")]),s._v(" with you're preferred directory.")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Custom Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://fnm.vercel.app/install "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -s -- --install-dir "),t("span",{pre:!0,attrs:{class:"token environment constant"}},[s._v("$HOME")]),s._v("/.local/bin --skip-shell\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("code-block",{attrs:{title:"Default Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://fnm.vercel.app/install "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -s -- --install-dir "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./.fnm"')]),s._v(" --skip-shell\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"macos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#macos"}},[s._v("#")]),s._v(" macOS")]),s._v(" "),t("p",[s._v("The "),t("span",{staticClass:"post-term-one"},[s._v("preferred")]),s._v(" way to install on macOS is to use "),t("a",{attrs:{href:"https://brew.sh/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Homebrew"),t("OutboundLink")],1),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Installing fnm"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("brew "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Here's how to upgrade using "),t("a",{attrs:{href:"https://brew.sh/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Homebrew"),t("OutboundLink")],1),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrading fnm"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("brew upgrade fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[s._v("#")]),s._v(" Windows")]),s._v(" "),t("p",[s._v("You can manually install on Windows using either "),t("a",{attrs:{href:"https://scoop.sh/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Scoop"),t("OutboundLink")],1),s._v(" or "),t("a",{attrs:{href:"https://chocolatey.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Chocolatey"),t("OutboundLink")],1),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Scoop"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("scoop "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])]),s._v(" "),t("code-block",{attrs:{title:"Chocolatey"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("choco "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h2",{attrs:{id:"shell-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#shell-setup"}},[s._v("#")]),s._v(" Shell Setup")]),s._v(" "),t("p",[s._v("Before you can use "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(", you have to first set up your shell. We'll be going over how to set up "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" for "),t("code",{staticClass:"inline-code-block"},[s._v("bash")]),s._v(", "),t("code",{staticClass:"inline-code-block"},[s._v("zsh")]),s._v(", "),t("code",{staticClass:"inline-code-block"},[s._v("fish")]),s._v(", and "),t("code",{staticClass:"inline-code-block"},[s._v("powershell")]),s._v(".")]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("Windows Command Prompt and Cmder")]),s._v(" "),t("p",[s._v("If you're interested in using Windows Command Prompt or Cmder then check out the "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" repository for instructions.")])]),s._v(" "),t("h3",{attrs:{id:"bash"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bash"}},[s._v("#")]),s._v(" Bash")]),s._v(" "),t("p",[s._v("Add the following to your "),t("code",{staticClass:"inline-code-block"},[s._v(".bashrc")]),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Bash"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("eval")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v('"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"zsh"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#zsh"}},[s._v("#")]),s._v(" Zsh")]),s._v(" "),t("p",[s._v("Add the following to your "),t("code",{staticClass:"inline-code-block"},[s._v(".zshrc")]),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Zsh"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("eval")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v('"')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"fish-shell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fish-shell"}},[s._v("#")]),s._v(" Fish Shell")]),s._v(" "),t("p",[s._v("Create "),t("code",{staticClass:"inline-code-block"},[s._v("~/.config/fish/conf.d/fnm.fish")]),s._v(" and add this line:")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Fish Shell"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("source")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"powershell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#powershell"}},[s._v("#")]),s._v(" PowerShell")]),s._v(" "),t("p",[s._v("Add this line to the end of your profile file:")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"PowerShell"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),s._v(" --use-on-cd "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Out-String "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Invoke-Expression\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("p",[s._v("On Windows, the profile is located at "),t("code",{staticClass:"inline-code-block"},[s._v("~\\Documents\\PowerShell\\Microsoft.PowerShell_profile.ps1")]),s._v(" or "),t("code",{staticClass:"inline-code-block"},[s._v("$PROFILE")])]),s._v(" "),t("p",[s._v("On macOS and Linux, the profile is located at "),t("code",{staticClass:"inline-code-block"},[s._v("~/.config/powershell/Microsoft.PowerShell_profile.ps1")])]),s._v(" "),t("h2",{attrs:{id:"usage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),t("p",[s._v("Here are some useful commands to get started with "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(". You can find more commands "),t("a",{attrs:{href:"https://github.com/Schniz/fnm/blob/master/docs/commands.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),t("OutboundLink")],1),s._v(" or you can run "),t("code",{staticClass:"inline-code-block"},[s._v("fnm --help")]),s._v(" to see a list of subcommands and "),t("code",{staticClass:"inline-code-block"},[s._v("fnm --help")]),s._v(" to see information for a specific subcommand.")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Remote Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm ls-remote\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16.11")]),s._v(".1\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Installed Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("ls")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Choose a Version to Use"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm use "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16.11")]),s._v(".1\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Check Active Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm current\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Alias a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("alias")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16.11")]),s._v(".1 nickname\nfnm use nickname\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])])],1),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Default a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("fnm default "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("16.11")]),s._v(".1\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])],1),s._v(" "),t("h2",{attrs:{id:"completions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#completions"}},[s._v("#")]),s._v(" Completions")]),s._v(" "),t("p",[s._v("Here's how to set up "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[s._v("fnm"),t("OutboundLink")],1),s._v(" completions for "),t("code",{staticClass:"inline-code-block"},[s._v("bash")]),s._v(" and "),t("code",{staticClass:"inline-code-block"},[s._v("zsh")]),s._v(":")]),s._v(" "),t("h3",{attrs:{id:"bash-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bash-2"}},[s._v("#")]),s._v(" Bash")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"fnm Completions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p ~/.config/bash/completions\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("touch")]),s._v(" ~/.config/bash/completions/_fnm\n\nfnm completions --shell"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("bash "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" ~/.config/bash/completions/_fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Add the following to your "),t("code",{staticClass:"inline-code-block"},[s._v(".bashrc")]),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Set Up .bashrc"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("fpath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v("~/.config/bash/completions/_fnm\ncompinit\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])])],1),s._v(" "),t("h3",{attrs:{id:"zsh-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#zsh-2"}},[s._v("#")]),s._v(" Zsh")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"fnm Completions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p ~/.config/zsh/completions\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("touch")]),s._v(" ~/.config/zsh/completions/_fnm\n\nfnm completions --shell"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("zsh "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" ~/.config/zsh/completions/_fnm\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])])])],1),s._v(" "),t("p",[s._v("Add the following to your "),t("code",{staticClass:"inline-code-block"},[s._v(".zshrc")]),s._v(":")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"Set Up .zshrc"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("fpath")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v("~/.config/zsh/completions/_fnm\ncompinit\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])])])],1)],1)}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/33.6e7f24bc.js b/assets/js/33.6e7f24bc.js new file mode 100644 index 00000000..ba95ee70 --- /dev/null +++ b/assets/js/33.6e7f24bc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{544:function(e,s,t){"use strict";t.r(s);var n=t(18),a=Object(n.a)({},(function(){var e=this,s=e.$createElement,t=e._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[t("h1",{attrs:{id:"installing-node-version-manager-nvm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-node-version-manager-nvm"}},[e._v("#")]),e._v(" Installing Node Version Manager (nvm)")])]},proxy:!0}])},[t("h2",{attrs:{id:"why-use-a-node-version-manager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-use-a-node-version-manager"}},[e._v("#")]),e._v(" Why use a Node Version Manager?")]),e._v(" "),t("p",[e._v("A Node version manager allows you to "),t("span",{staticClass:"post-term-one"},[e._v("easily install and switch")]),e._v(" between numerous versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(". This is useful when a project you’re working on requires a different version of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" than what you currently have installed.")]),e._v(" "),t("h2",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),t("p",[e._v("We'll be going over how to install "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" on Linux and macOS.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Windows")]),e._v(" "),t("p",[e._v("Windows is not supported, but you can get it to work by setting up "),t("a",{attrs:{href:"https://docs.microsoft.com/en-us/windows/wsl/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Windows Subsystem for Linux (WSL)"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://gitforwindows.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitBash"),t("OutboundLink")],1),e._v(", or "),t("a",{attrs:{href:"https://cygwin.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Cygwin"),t("OutboundLink")],1),e._v(". Other alternatives exist that are not supported or developed by "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" like "),t("a",{attrs:{href:"https://github.com/coreybutler/nvm-windows",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm-windows"),t("OutboundLink")],1),e._v(". Check out the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#important-notes",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm Important Notes"),t("OutboundLink")],1),e._v(" for more alternatives and details.")])]),e._v(" "),t("p",[e._v("Before installing make sure your using a POSIX-compliant shell like "),t("code",{staticClass:"inline-code-block"},[e._v("sh")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("dash")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("ksh")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("zsh")]),e._v(", or "),t("code",{staticClass:"inline-code-block"},[e._v("bash")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Fish Shell")]),e._v(" "),t("p",[e._v("If you want to use "),t("a",{attrs:{href:"https://fishshell.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("fish"),t("OutboundLink")],1),e._v(", then check out the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#important-notes",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm Important Notes"),t("OutboundLink")],1),e._v(" repository for alternatives.")])]),e._v(" "),t("p",[e._v("If you run into any issues with installation, then be sure to check out the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" repository for any updates and troubleshooting tips.")]),e._v(" "),t("h3",{attrs:{id:"linux-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linux-dependencies"}},[e._v("#")]),e._v(" Linux Dependencies")]),e._v(" "),t("p",[e._v("You can install "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" using either "),t("code",{staticClass:"inline-code-block"},[e._v("curl")]),e._v(" or "),t("code",{staticClass:"inline-code-block"},[e._v("wget")]),e._v(".")]),e._v(" "),t("p",[e._v("Here's how to install "),t("code",{staticClass:"inline-code-block"},[e._v("curl")]),e._v(" for Linux:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Arch"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("pacman -Sy "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("code-block",{attrs:{title:"Ubuntu"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Here's how to install "),t("code",{staticClass:"inline-code-block"},[e._v("wget")]),e._v(" for Linux:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Arch"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("pacman -Sy "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wget")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("code-block",{attrs:{title:"Ubuntu"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wget")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"macos-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#macos-dependencies"}},[e._v("#")]),e._v(" macOS Dependencies")]),e._v(" "),t("p",[e._v("macOS should already have "),t("code",{staticClass:"inline-code-block"},[e._v("curl")]),e._v(" installed, but you can use "),t("a",{attrs:{href:"https://brew.sh/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Homebrew"),t("OutboundLink")],1),e._v(" to upgrade to the latest version:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"macOS"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("brew "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("If you want to use "),t("code",{staticClass:"inline-code-block"},[e._v("wget")]),e._v(" on macOS, then you can use "),t("a",{attrs:{href:"https://brew.sh/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Homebrew"),t("OutboundLink")],1),e._v(" to install it:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"macOS"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("brew "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wget")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("If you're using OS X 10.9 or newer, you'll need to install "),t("a",{attrs:{href:"https://developer.apple.com/xcode/whats-new/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Xcode"),t("OutboundLink")],1),e._v(" or just the "),t("code",{staticClass:"inline-code-block"},[e._v("Command Line Tools")]),e._v(".")]),e._v(" "),t("p",[e._v("Here's a good post explaining how to install "),t("a",{attrs:{href:"https://developer.apple.com/xcode/whats-new/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Xcode"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("ul",[t("li",[t("span",{staticClass:"external-link-wrap"},[t("a",{attrs:{href:"https://www.freecodecamp.org/news/how-to-download-and-install-xcode/",target:"_blank",rel:"noopener noreferrer"}},[e._v("How to Download Xcode and Install it on Your Mac – and Update it for iOS Development"),t("OutboundLink")],1)])])]),e._v(" "),t("p",[e._v("If you don't want to install "),t("a",{attrs:{href:"https://developer.apple.com/xcode/whats-new/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Xcode"),t("OutboundLink")],1),e._v(", then you can install only the "),t("code",{staticClass:"inline-code-block"},[e._v("Command Line Tools")]),e._v(" by following along with this post:")]),e._v(" "),t("ul",[t("li",[t("span",{staticClass:"external-link-wrap"},[t("a",{attrs:{href:"http://osxdaily.com/2014/02/12/install-command-line-tools-mac-os-x/",target:"_blank",rel:"noopener noreferrer"}},[e._v("How to Install Command Line Tools in OS X Mavericks & Yosemite (Without Xcode)"),t("OutboundLink")],1)])])]),e._v(" "),t("h3",{attrs:{id:"system-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-version"}},[e._v("#")]),e._v(" System Version")]),e._v(" "),t("p",[e._v("If you have a "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(", i.e., you downloaded and installed "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" without using "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(", then version mismatches may occur.")]),e._v(" "),t("p",[e._v("This can occur since versions installed by "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" will only be available to the user account it was installed on, and any other user accounts will use the "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(".")]),e._v(" "),t("p",[e._v("If version mismatches are occurring or any other issues, then you can uninstall "),t("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" associated with the "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" and just use versions installed by "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Be sure to uninstall any globally installed "),t("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" packages associated with the "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" as well.")]),e._v(" "),t("p",[e._v("Also, if you're using a "),t("code",{staticClass:"inline-code-block"},[e._v("~/.npmrc")]),e._v(" file it may not be compatible see "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm Compatibility Issues"),t("OutboundLink")],1),e._v(" in which case you should remove it.")]),e._v(" "),t("p",[e._v("When using "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(", you don't need to use "),t("code",{staticClass:"inline-code-block"},[e._v("sudo npm install -g ")]),e._v(" instead use "),t("code",{staticClass:"inline-code-block"},[e._v("npm install -g ")]),e._v(" when installing global packages.")]),e._v(" "),t("p",[e._v("Finally, if you're using a different node version manager like "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),t("OutboundLink")],1),e._v(", then you may run into issues with your installed versions from "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(". If this is the case, then uninstall the node version manager you will not be using to resolve the issues.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Preferred Node Manager")]),e._v(" "),t("p",[e._v("My preferred way to manage my node versions is with "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),t("OutboundLink")],1),e._v(". Check out "),t("RouterLink",{attrs:{to:"/installing-fnm/"}},[e._v("Installing Fast Node Manager (fnm)")]),e._v(" to learn more about it.")],1)]),e._v(" "),t("h3",{attrs:{id:"install-and-update-script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-and-update-script"}},[e._v("#")]),e._v(" Install and Update Script")]),e._v(" "),t("p",[e._v("After installing the necessary dependencies, you can install or update "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" by using "),t("code",{staticClass:"inline-code-block"},[e._v("curl")]),e._v(" or "),t("code",{staticClass:"inline-code-block"},[e._v("wget")]),e._v(" on Linux or macOS:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"curl"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])]),e._v(" "),t("code-block",{attrs:{title:"wget"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("wget")]),e._v(" -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The above commands will download and run a script to install or update "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("The script clones the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" repository to "),t("code",{staticClass:"inline-code-block"},[e._v("~/.nvm")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Additional Notes")]),e._v(" "),t("p",[e._v("If you're interested, check out the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#additional-notes",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm Additional Notes"),t("OutboundLink")],1),e._v(" for information on more parameters and how to customize the install source, directory, profile, and version for the install script.")])]),e._v(" "),t("p",[e._v("After running the command above, you'll be prompted to close and reopen your terminal to start using "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(", or you can run the following commands to start using it in the current shell session:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"nvm Installation Commands"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NVM_DIR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("$HOME")]),e._v('/.config/nvm"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" \n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v(" -s "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/nvm.sh"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v(". "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/nvm.sh"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This loads nvm")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v(" -s "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/bash_completion"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v(". "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/bash_completion"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This loads nvm bash_completion")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The third line provides autocompletion for "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(". Here's some examples of the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#usage-1",target:"_blank",rel:"noopener noreferrer"}},[e._v("autocompletion usage"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"verify-installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#verify-installation"}},[e._v("#")]),e._v(" Verify Installation")]),e._v(" "),t("p",[e._v("To verify the installation you can run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Verify Installation"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("command")]),e._v(" -v nvm\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("If the installation was successful, then the command should output "),t("code",{staticClass:"inline-code-block"},[e._v("nvm")]),e._v(".")]),e._v(" "),t("p",[e._v("If you get no output after running the above command, then see the troubleshooting sections below.")]),e._v(" "),t("h3",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("p",[e._v("Try closing the current terminal and opening a new terminal. Then try verifying the installation again.")]),e._v(" "),t("p",[e._v("Here are some examples of commands you can run depending on your shell:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"bash"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("source")]),e._v(" ~/.bashrc\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"zsh"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("source")]),e._v(" ~/.zshrc\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"ksh"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(".")]),e._v(" ~/.profile\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("After running the command for your shell, try verifying the installation again.")]),e._v(" "),t("p",[e._v("If you're still experiencing issues verifying your installtion for Linux, then check out "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#troubleshooting-on-linux",target:"_blank",rel:"noopener noreferrer"}},[e._v("Troubleshooting on Linux"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("For macOS check out "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#troubleshooting-on-macos",target:"_blank",rel:"noopener noreferrer"}},[e._v("Troubleshooting on macOS"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#macos-troubleshooting",target:"_blank",rel:"noopener noreferrer"}},[e._v("macOS Troubleshooting"),t("OutboundLink")],1),e._v(" which contain more specific information related to shell issues and to issues with Macs using the M1 chip.")]),e._v(" "),t("p",[e._v("For more general issues check out the "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#problems",target:"_blank",rel:"noopener noreferrer"}},[e._v("Problems"),t("OutboundLink")],1),e._v(" section.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Other Installation Methods")]),e._v(" "),t("p",[e._v("Instead of using the script above, you can also perform a "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#git-install",target:"_blank",rel:"noopener noreferrer"}},[e._v("git install"),t("OutboundLink")],1),e._v(" or a "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#manual-install",target:"_blank",rel:"noopener noreferrer"}},[e._v("manual install"),t("OutboundLink")],1),e._v(" as well as a "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm#manual-upgrade",target:"_blank",rel:"noopener noreferrer"}},[e._v("manaul upgrade"),t("OutboundLink")],1),e._v(". The minimum required "),t("a",{attrs:{href:"https://git-scm.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("git"),t("OutboundLink")],1),e._v(" version for the installation methods is v1.7.10.")])]),e._v(" "),t("h2",{attrs:{id:"usage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[e._v("#")]),e._v(" Usage")]),e._v(" "),t("p",[e._v("Here are some useful commands to get started with "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(". You can run "),t("code",{staticClass:"inline-code-block"},[e._v("nvm --help")]),e._v(" to see a list of commands, their flags, and descriptions.")]),e._v(" "),t("h3",{attrs:{id:"check-nvm-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check-nvm-version"}},[e._v("#")]),e._v(" Check nvm Version")]),e._v(" "),t("p",[e._v("The following command will display the version of "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Check nvm Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm --version\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"list-remote-versions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-remote-versions"}},[e._v("#")]),e._v(" List Remote Versions")]),e._v(" "),t("p",[e._v("The following commands will list the remote versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("List the all remote versions by using "),t("code",{staticClass:"inline-code-block"},[e._v("ls-remote")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Remote Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm ls-remote\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" has a release "),t("a",{attrs:{href:"https://github.com/nodejs/Release#release-schedule",target:"_blank",rel:"noopener noreferrer"}},[e._v("schedule"),t("OutboundLink")],1),e._v(" for long-term support (LTS).")]),e._v(" "),t("p",[e._v("List the LTS remote versions by using "),t("code",{staticClass:"inline-code-block"},[e._v("--lts")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Remote LTS Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm ls-remote --lts\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("List all of the LTS remote versions for a specific line by using, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--lts=boron")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Remote LTS Boron Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm ls-remote --lts"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("boron\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("List all of the LTS remote versions for a given version number by providing, e.g., 16 to "),t("code",{staticClass:"inline-code-block"},[e._v("ls-remote")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Remote Versions Matching 16"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm ls-remote "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"install-versions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-versions"}},[e._v("#")]),e._v(" Install Versions")]),e._v(" "),t("p",[e._v("The following commands are examples of how to install different versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("If you try to install a version and the installation fails, then run "),t("code",{staticClass:"inline-code-block"},[e._v("nvm cache clear")]),e._v(" to delete the cached versions.")]),e._v(" "),t("p",[e._v("Install the latest version by using the special default alias "),t("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install Latest Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" node\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Install the latest LTS version by using "),t("code",{staticClass:"inline-code-block"},[e._v("--lts")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install Latest LTS Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --lts\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Install the latest LTS version for a specific line by using, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--lts=boron")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install Latest LTS Boron Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --lts"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("boron\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Install a specific version by providing a version number:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16.11")]),e._v(".1\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"list-installed-versions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-installed-versions"}},[e._v("#")]),e._v(" List Installed Versions")]),e._v(" "),t("p",[e._v("The following command will list all of the installed versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Installed Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ls")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"use-a-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-a-version"}},[e._v("#")]),e._v(" Use a Version")]),e._v(" "),t("p",[e._v("The following commands will set which version of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" to use.")]),e._v(" "),t("p",[e._v("Use the latest version by using the special default alias "),t("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Use Latest Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm use node\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Use the latest LTS version by using "),t("code",{staticClass:"inline-code-block"},[e._v("--lts")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Use Latest LTS Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm use --lts\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Use the latest LTS version for a specific line by using, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--lts=boron")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Use Latest LTS Boron Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm use --lts"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("boron\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Use a specific version by providing a version number:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Use a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm use "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16.11")]),e._v(".1\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("If you have a "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" installed, then you can use the special default alias "),t("code",{staticClass:"inline-code-block"},[e._v("system")]),e._v(" to use it:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Use System Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm use system\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"check-active-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check-active-version"}},[e._v("#")]),e._v(" Check Active Version")]),e._v(" "),t("p",[e._v("Check the currently active "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" version by using "),t("code",{staticClass:"inline-code-block"},[e._v("current")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Check Active Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm current\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"set-aliases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-aliases"}},[e._v("#")]),e._v(" Set Aliases")]),e._v(" "),t("p",[e._v("Set an alias for a specific "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" version by provding a name and a version.")]),e._v(" "),t("p",[e._v("Here, version 16.11.1 will get an alias of nickname:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Alias a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("alias")]),e._v(" nickname "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16.11")]),e._v(".1\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The "),t("span",{staticClass:"post-term-one"},[e._v("default version")]),e._v(" is the active version when opening new shells. The first installed version will get set as the "),t("span",{staticClass:"post-term-one"},[e._v("default version")]),e._v(". To change the "),t("span",{staticClass:"post-term-one"},[e._v("default version")]),e._v(" run the command below.")]),e._v(" "),t("p",[e._v("Here, we're setting the "),t("span",{staticClass:"post-term-one"},[e._v("default version")]),e._v(" to be 17.1.0:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Alias the Default Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("alias")]),e._v(" default "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("17.1")]),e._v(".0\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"get-path-to-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#get-path-to-version"}},[e._v("#")]),e._v(" Get Path to Version")]),e._v(" "),t("p",[e._v("The following commands will get the path of where a "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" version was installed.")]),e._v(" "),t("p",[e._v("Get the path of where a version was installed by specifying a version number:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Path to Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("which")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16.11")]),e._v(".1\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Get the path to where a version is installed by specifying an alias:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Path to Version Using an Alias"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("which")]),e._v(" nickname\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"uninstall-versions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uninstall-versions"}},[e._v("#")]),e._v(" Uninstall Versions")]),e._v(" "),t("p",[e._v("The following commands are examples of how to uninstall different versions of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Uninstall the latest version by using the special default alias "),t("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Uninstall Latest Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm uninstall node\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Uninstall the latest LTS version by using "),t("code",{staticClass:"inline-code-block"},[e._v("--lts")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Uninstall Latest LTS Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm uninstall --lts\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Uninstall the latest LTS version for a specific line by using, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--lts=boron")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Uninstall Latest LTS Boron Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm uninstall --lts"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("boron\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Uninstall a specific version by providing a version number:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Uninstall a Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("nvm uninstall "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16.11")]),e._v(".1\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h2",{attrs:{id:"uninstall-nvm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uninstall-nvm"}},[e._v("#")]),e._v(" Uninstall nvm")]),e._v(" "),t("p",[e._v("To uninstall "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Uninstall nvm"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" -rf "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('"')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Then remove these lines from your "),t("code",{staticClass:"inline-code-block"},[e._v("~/.bashrc")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("~/.zshrc")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("~/.profile")]),e._v(", etc.")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Remove these Lines"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NVM_DIR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("$HOME")]),e._v('/.config/nvm"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v(" -s "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/nvm.sh"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v(". "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/nvm.sh"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This loads nvm")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v(" -s "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/bash_completion"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v(". "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$NVM_DIR")]),e._v('/bash_completion"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This loads nvm bash_completion")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br")])])])],1)],1)}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/34.cab303ee.js b/assets/js/34.cab303ee.js new file mode 100644 index 00000000..d8ed840f --- /dev/null +++ b/assets/js/34.cab303ee.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{545:function(e,a,t){"use strict";t.r(a);var s=t(18),n=Object(s.a)({},(function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[t("h1",{attrs:{id:"installing-yarn-1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-yarn-1"}},[e._v("#")]),e._v(" Installing Yarn 1")])]},proxy:!0}])},[t("h2",{attrs:{id:"what-is-a-package-manager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-package-manager"}},[e._v("#")]),e._v(" What is a Package Manager?")]),e._v(" "),t("p",[e._v("Before discussing "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" in more detail, let's first define what a "),t("span",{staticClass:"post-term-one"},[e._v("package manager")]),e._v(" is and what it handles for us.")]),e._v(" "),t("p",[e._v("A "),t("span",{staticClass:"post-term-one"},[e._v("package manager")]),e._v(" is a tool that allows developers to manage a project's dependencies.")]),e._v(" "),t("p",[e._v("Dependencies also known as packages are programs that a project relys on to function properly.")]),e._v(" "),t("p",[e._v("Using dependencies makes development easier since you can use other developer's solutions for implementing features in your project.")]),e._v(" "),t("p",[e._v("A "),t("span",{staticClass:"post-term-one"},[e._v("package manager")]),e._v(" handles the following for your packages:")]),e._v(" "),t("ul",[t("li",[e._v("Installing")]),e._v(" "),t("li",[e._v("Updating and upgrading")]),e._v(" "),t("li",[e._v("Uninstalling")]),e._v(" "),t("li",[e._v("Configuring")])]),e._v(" "),t("h2",{attrs:{id:"what-is-yarn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-yarn"}},[e._v("#")]),e._v(" What is Yarn?")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" is a "),t("span",{staticClass:"post-term-one"},[e._v("package manager")]),e._v(" designed with three main goals in mind:")]),e._v(" "),t("ul",[t("li",[e._v("Speed")]),e._v(" "),t("li",[e._v("Security")]),e._v(" "),t("li",[e._v("Reliability")])]),e._v(" "),t("p",[e._v("Like other "),t("span",{staticClass:"post-term-one"},[e._v("package managers")]),e._v(", "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" allows you to use and share code with other developers which again makes development easier. The code is shared using a "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file which describes the dependencies used in a project.")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" is an alternative to "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" which is the default node package manager for "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(". It was originally developed to address the performance and security issues with "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("This post will cover the installation and some commands for "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Yarn 1 Maintenance Mode")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" is officially in maintenance mode, so no further updates will be released unless they are needed to patch vulnerabilities. If you're starting a new project, it's recommended to use the latest stable version which at the time of this writing is "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 3"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("p",[e._v("If you're interested in learning more about the release history of "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(", then check out the section below.")]),e._v(" "),t("h2",{attrs:{id:"timeline-of-yarn-and-npm-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#timeline-of-yarn-and-npm-development"}},[e._v("#")]),e._v(" Timeline of Yarn and npm Development")]),e._v(" "),t("p",[e._v("When "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" was released in 2016 it achieved its goals of being a faster, more secure, and more reliable alternative to "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(". The improved reliability was accomplished by generating a "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file which handles keeping track of the exact versions of packages used in a project.")]),e._v(" "),t("p",[e._v("In 2017, "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" addressed its speed and reliability issues with the release of "),t("a",{attrs:{href:"https://www.npmjs.com/package/npm5",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm 5"),t("OutboundLink")],1),e._v(". The reliability issue was addressed with the introduction of the "),t("code",{staticClass:"inline-code-block"},[e._v("package-lock.json")]),e._v(" file which provided similar functionality to the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file.")]),e._v(" "),t("p",[e._v("In 2018, "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" addressed its security issues with the release of "),t("a",{attrs:{href:"https://www.npmjs.com/package/npm/v/6.0.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm 6"),t("OutboundLink")],1),e._v(" by checking vulnerabilities before installing dependencies as well as introducing more improvements to speed and reliability.")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 2"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.npmjs.com/package/npm/v/7.0.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm 7"),t("OutboundLink")],1),e._v(" were both released in 2020 with improved performance and some new features as well.")]),e._v(" "),t("p",[e._v("In 2021, "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 3"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.npmjs.com/package/npm/v/7.0.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm 8"),t("OutboundLink")],1),e._v(" were released which again introduced improved performance and some new features.")]),e._v(" "),t("p",[e._v("Today, the performance and features of "),t("a",{attrs:{href:"https://yarnpkg.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" are very similar, so which one to use mainly depends on a developer's preference.")]),e._v(" "),t("h2",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),t("p",[e._v("There are multiple ways to install "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(". Currently, the recommended way to install it is with "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" the default node package manager that comes with "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(". When installing "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" you have the option to install a "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" which you can do by downloading and installing a version directly from "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(", or you can install multiple node versions with a "),t("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Using a Node Version Manager")]),e._v(" "),t("p",[e._v("If you're a developer that needs to use multiple versions of "),t("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" when working on different projects, then I recommend installing either "),t("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),t("OutboundLink")],1),e._v(". My "),t("span",{staticClass:"post-term-one"},[e._v("preferred")]),e._v(" way to manage my node versions is with "),t("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),t("OutboundLink")],1),e._v(". If you're interested in installing a "),t("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(", then check out these posts "),t("RouterLink",{attrs:{to:"/installing-nvm/"}},[e._v("Installing Node Version Manager (nvm)")]),e._v(" and "),t("RouterLink",{attrs:{to:"/installing-fnm/"}},[e._v("Installing Fast Node Manager (fnm)")]),e._v(".")],1)]),e._v(" "),t("p",[e._v("After installing a "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" or a version with a "),t("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(", you can run the following command to install and upgrade "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Installation Using npm"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --global "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("This will install "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" globally. We'll see how to install a specific "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" in the root of a project directory when looking at the usage of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Resolving Permissions Error")]),e._v(" "),t("p",[e._v("If you're using a "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(", you may get a permissions error when attempting to install with "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(". To resolve this check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("installation"),t("OutboundLink")],1),e._v(" documentation for "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" methods for Linux, macOS, and Windows. Alternatively, you can uninstall your "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" and use a "),t("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(" instead.")])]),e._v(" "),t("h3",{attrs:{id:"platform-installation-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#platform-installation-notes"}},[e._v("#")]),e._v(" Platform Installation Notes")]),e._v(" "),t("p",[e._v("When using a "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" method a version of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" will also be installed. To avoid the "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" installation some "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" methods have the option of ignoring it by passing certain commands. See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("installation"),t("OutboundLink")],1),e._v(" documentation for more details on ignoring the "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" installation, configuration requirements, and possible issues.")]),e._v(" "),t("p",[e._v("If the option to ignore the installation of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" is not available for your preferred "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" method, then you can uninstall your "),t("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" and just use the "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" method to install both "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("If you prefer to use a "),t("span",{staticClass:"post-term-one"},[e._v("platform-specific")]),e._v(" method with a "),t("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(", then you should only use a method that can ignore the installation of "),t("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),t("OutboundLink")],1),e._v(" since it can cause conflicts.")]),e._v(" "),t("h2",{attrs:{id:"usage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[e._v("#")]),e._v(" Usage")]),e._v(" "),t("p",[e._v("Now we'll be discussing some useful and common commands to get you started with "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"help-commands"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#help-commands"}},[e._v("#")]),e._v(" Help Commands")]),e._v(" "),t("p",[e._v("Here's how to access the help documentation for the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" command which is always useful and recommended to do for any installed tool.")]),e._v(" "),t("p",[e._v("Run the following command to see a list of commands, flags, and descriptions for "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Display Help Information"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" --help\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To see help information for a specific subcommand run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Information for Subcommand"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("subcommand"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" --help\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"check-yarn-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check-yarn-version"}},[e._v("#")]),e._v(" Check Yarn Version")]),e._v(" "),t("p",[e._v("To verify your installation was successful and to check your version of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Check Yarn Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" --version\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("h3",{attrs:{id:"setting-a-local-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-a-local-version"}},[e._v("#")]),e._v(" Setting a Local Version")]),e._v(" "),t("p",[e._v("To install and set a "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for a specific project you can use the global "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" command we installed earlier. This ensures everyone working on a project is using the exact same version of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" which is useful to avoid any undesired behavior like producing a different "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file.")]),e._v(" "),t("p",[e._v("This is accomplished by using "),t("a",{attrs:{href:"https://classic.yarnpkg.com/lang/en/docs/cli/policies/",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn policies"),t("OutboundLink")],1),e._v(" which allows you to check in your "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" release within your repository. After running the command below in your project's root directory, a single-file release from the GitHub repository will be downloaded and stored in your project in a "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn/releases")]),e._v(" directory. Then your "),t("code",{staticClass:"inline-code-block"},[e._v("yarn-path")]),e._v(" will be updated in a "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" file.")]),e._v(" "),t("p",[e._v("Now any "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" command run in your project will be using the "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" that you set. Be sure to push these changes to your project's remote branch, so everyone using the project will be downloading and using the same version of "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" as you.")]),e._v(" "),t("p",[e._v("If you're using an existing project, then you don't need to set the "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" as long as the project has the desired version of "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" in the "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn/releases")]),e._v(" directory, and the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn-path")]),e._v(" is configured properly in the "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" file.")]),e._v(" "),t("p",[e._v("If you don't have a project directory, then run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Create Project Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" ~/"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("path-to-project-directory"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Next, navigate to your project:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Navigate to Project Directory"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" ~/"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("path-to-project-directory"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Now, set the version of "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(" for your project:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Set Local Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" policies set-version "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("There are multiple ways to specify which version you want to use:")]),e._v(" "),t("ul",[t("li",[t("code",{staticClass:"inline-code-block"},[e._v("yarn policies set-version")]),e._v(" downloads the latest stable release")]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("yarn policies set-version --rc")]),e._v(" downloads the latest rc release")]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("yarn policies set-version 1.22.4")]),e._v(" downloads a specific version")])]),e._v(" "),t("p",[e._v("Running "),t("code",{staticClass:"inline-code-block"},[e._v("yarn policies set-version [version]")]),e._v(" is also the recommended way to upgrade your version of "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Now run "),t("code",{staticClass:"inline-code-block"},[e._v("yarn --version")]),e._v(" in your project directory, and it should output the "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" you just set. If you navigate out of your project directory and run "),t("code",{staticClass:"inline-code-block"},[e._v("yarn --version")]),e._v(", then you should see the global version that you installed.")]),e._v(" "),t("p",[e._v("The global version of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" will first check if it's in a directory with a "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" file. If the directory has a "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" file, then the configured "),t("code",{staticClass:"inline-code-block"},[e._v("yarn-path")]),e._v(" value will be used to switch the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" version from the global version to the project specific version.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Resolving Installation Directory Issue")]),e._v(" "),t("p",[e._v("If you set the "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" in your project's root directory and the "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn")]),e._v(" directory and "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" file aren't generated there, then delete the files that were generated and run the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn init")]),e._v(" command in your project's root directory before setting the "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(". The "),t("code",{staticClass:"inline-code-block"},[e._v("yarn init")]),e._v(" command is described in the Creating a New Project section.")])]),e._v(" "),t("h3",{attrs:{id:"updating-the-gitignore-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-the-gitignore-file"}},[e._v("#")]),e._v(" Updating the .gitignore File")]),e._v(" "),t("p",[e._v("After setting your "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(", you should now have "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn")]),e._v(" directory in the root of your project.")]),e._v(" "),t("p",[e._v("Some of the files "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" adds to your "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn")]),e._v(" directory should be checked into version control, e.g., git and others should be ignored.")]),e._v(" "),t("p",[e._v("To specify which directories and files should be ignored when pushing to your repositiory you can create a "),t("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file.")]),e._v(" "),t("p",[e._v("After creating the "),t("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file, you can add the recommended basic configuration for "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:".gitignore File for Yarn"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v(".pnp.*\n.yarn/*\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(".yarn/patches\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(".yarn/plugins\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(".yarn/releases\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(".yarn/sdks\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(".yarn/versions\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br")])])])],1),e._v(" "),t("p",[e._v("This will ignore the entire "),t("code",{staticClass:"inline-code-block"},[e._v(".yarn")]),e._v(" directory except for the directories specified after the "),t("code",{staticClass:"inline-code-block"},[e._v("!")]),e._v(".")]),e._v(" "),t("p",[e._v("The "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(" files should always be checked into version control.")]),e._v(" "),t("h3",{attrs:{id:"adding-a-gitattributes-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-gitattributes-file"}},[e._v("#")]),e._v(" Adding a .gitattributes File")]),e._v(" "),t("p",[e._v("If you're using a "),t("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),t("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(", then it's recommended to add a "),t("code",{staticClass:"inline-code-block"},[e._v(".gitattributes")]),e._v(" file to your project which will prevent "),t("code",{staticClass:"inline-code-block"},[e._v("git")]),e._v(" from showing large diffs when you add or update releases and plugins:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:".gitattributes File for Yarn"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v(".yarn/releases/** binary\n.yarn/plugins/** binary\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br")])])])],1),e._v(" "),t("p",[e._v("This is accomplished by identifying the release and plugin directories as binary content.")]),e._v(" "),t("h3",{attrs:{id:"creating-a-new-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-new-project"}},[e._v("#")]),e._v(" Creating a New Project")]),e._v(" "),t("p",[e._v("To create a new project first create and navigate to the project directory. See the commands above for creating and navigating to a project directory.")]),e._v(" "),t("p",[e._v("Then run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Create a New Project"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" init\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept the defaults. Here's an example of running the command in a directory named "),t("code",{staticClass:"inline-code-block"},[e._v("project-directory")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Project Questions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("question name "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("project-directory"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(": my-new-project\nquestion version "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1.0")]),e._v(".0"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(": "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1.2")]),e._v(".4\nquestion description: Learning Yarn\nquestion entry point "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("index.js"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion repository url: https://github.com/github-username/my-new-project\nquestion author: Your Name\nquestion license "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("MIT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion private:\nsuccess Saved package.json\nDone "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("34")]),e._v(".11s.\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br"),t("span",{staticClass:"line-number"},[e._v("10")]),t("br")])])])],1),e._v(" "),t("p",[e._v("After answering all of the questions, a "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file containing the answers will be created. The "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow "),t("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning (semver)"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Now, let's describe each property in a little more detail:")]),e._v(" "),t("ul",[t("li",[t("code",{staticClass:"inline-code-block"},[e._v("name")]),e._v(" is the name given to your project\n"),t("ul",[t("li",[e._v("Must be less than or equal to 214 characters including the "),t("code",{staticClass:"inline-code-block"},[e._v("@scope/")]),e._v(" for "),t("a",{attrs:{href:"https://docs.npmjs.com/cli/v8/using-npm/scope",target:"_blank",rel:"noopener noreferrer"}},[e._v("scoped packages"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Cannot start with a dot or an underscore")]),e._v(" "),t("li",[e._v("Must contain only lowercase letters and URL-safe characters")]),e._v(" "),t("li",[e._v("If the project is published to "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(", it gets a URL based on the given value which is the reason for the requirements given above")]),e._v(" "),t("li",[e._v("The default value is the same name as the directory you're in when running the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn init")]),e._v(" command")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("version")]),e._v(" indicates the current version of your project\n"),t("ul",[t("li",[e._v("The versioning follows "),t("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semver"),t("OutboundLink")],1),e._v(" notation")]),e._v(" "),t("li",[e._v("The default value is 1.0.0")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("description")]),e._v(" is used to describe and provide more information about your project\n"),t("ul",[t("li",[e._v("Especially useful to include if you plan on publishing your project to "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("If no value is given, it will not be set")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("entry point")]),e._v(" is a JavaScript file that starts the execution of your project\n"),t("ul",[t("li",[e._v("This property is called "),t("code",{staticClass:"inline-code-block"},[e._v("main")]),e._v(" in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file")]),e._v(" "),t("li",[e._v("The default value is index.js")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("repository url")]),e._v(" describes the location of the project repository containing the code\n"),t("ul",[t("li",[e._v("This property is called repository in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file")]),e._v(" "),t("li",[e._v("You can explicitly set the URL and a version control type in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file by adding, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v('"repository": { "type": "git", "url": "https://github.com/github-username/my-new-project" }')])]),e._v(" "),t("li",[e._v("If no value is given, it will not be set")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("author")]),e._v(" describes the creator or owner of the project\n"),t("ul",[t("li",[e._v("Used to describe one person")]),e._v(" "),t("li",[e._v("You can explicitly set the author name, email, and website in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file by adding, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v('"author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }')])]),e._v(" "),t("li",[e._v("If no value is given, it will not be set")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("license")]),e._v(" indicates the type of license being used by the project\n"),t("ul",[t("li",[e._v("Allows users to know how they're permitted to use the project")]),e._v(" "),t("li",[e._v("Check out "),t("a",{attrs:{href:"https://choosealicense.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Choose a License"),t("OutboundLink")],1),e._v(" if you need help determining how you should license your project")]),e._v(" "),t("li",[e._v("The default value is MIT")])])]),e._v(" "),t("li",[t("code",{staticClass:"inline-code-block"},[e._v("private")]),e._v(" indicates whether or not the project can be published to "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" "),t("ul",[t("li",[e._v("If set to true, it will prevent the project from being published")]),e._v(" "),t("li",[e._v("If no value is given, it's assumed the value is false, and it will not be explicitly set in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file")])])])]),e._v(" "),t("p",[e._v("If you're interested in learning more about the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file, then check out "),t("a",{attrs:{href:"https://nodejs.dev/learn/the-package-json-guide",target:"_blank",rel:"noopener noreferrer"}},[e._v("The package.json guide"),t("OutboundLink")],1),e._v(" and the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/package-json",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1 package.json"),t("OutboundLink")],1),e._v(" documentation. Also, check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/dependency-versions/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Versions of dependencies"),t("OutboundLink")],1),e._v(" documentation for more information about how "),t("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semver"),t("OutboundLink")],1),e._v(" is used.")]),e._v(" "),t("p",[e._v("Here's the contents of the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file from the example above:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"package.json"}},[t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"my-new-project"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.2.4"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learning Yarn"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/github-username/my-new-project"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"author"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your Name"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"MIT"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br"),t("span",{staticClass:"line-number"},[e._v("5")]),t("br"),t("span",{staticClass:"line-number"},[e._v("6")]),t("br"),t("span",{staticClass:"line-number"},[e._v("7")]),t("br"),t("span",{staticClass:"line-number"},[e._v("8")]),t("br"),t("span",{staticClass:"line-number"},[e._v("9")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To update the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file you can open and edit it directly, or you can run the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn init")]),e._v(" command again.")]),e._v(" "),t("p",[e._v("Check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/init",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn init"),t("OutboundLink")],1),e._v(" documentation for more information about the command.")]),e._v(" "),t("h3",{attrs:{id:"adding-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-packages"}},[e._v("#")]),e._v(" Adding Packages")]),e._v(" "),t("p",[e._v("When adding a package the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file gets updated by adding the package as a dependency to a "),t("code",{staticClass:"inline-code-block"},[e._v("dependencies")]),e._v(" object where each key is a package name and the value represents a range of allowed versions following "),t("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semver"),t("OutboundLink")],1),e._v(" notation.")]),e._v(" "),t("p",[e._v("A "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file will also be created if it doesn't exist or updated if it already exists. A "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file is used to keep track of the exact versions of packages added to a project. This allows consistent installs across machines by allowing developers to have the exact same versions of packages when installing all of a project's dependencies.")]),e._v(" "),t("p",[e._v("Here's how to handle the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file in your project:")]),e._v(" "),t("ul",[t("li",[e._v("The "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file should be in the root of your project directory")]),e._v(" "),t("li",[e._v("You shouldn't directly edit the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file it gets auto-generated and automatically updated")]),e._v(" "),t("li",[e._v("When installing only the top-level "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file is used and any "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" files that exist in the dependencies will be ignored")]),e._v(" "),t("li",[e._v("The "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file should also be checked into version control since it's used to install the exact same versions of packages across machines")])]),e._v(" "),t("p",[e._v("To add the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" of a package run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add Latest Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To add a "),t("span",{staticClass:"post-term-one"},[e._v("specific version")]),e._v(" of a package run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add Specific Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("@1.2.3\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To add the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" of a package within a "),t("span",{staticClass:"post-term-one"},[e._v("specified version range")]),e._v(" run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add a Package in a Specified Version Range"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("@"),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"^1.2.3"')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" within the given version range is determined by the range specifier and the version number.")]),e._v(" "),t("p",[e._v("In the example above the range specifier is the caret symbol, i.e., "),t("code",{staticClass:"inline-code-block"},[e._v("^")]),e._v(". You can use any desired range specifier, and the added package will be the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" within the given version range.")]),e._v(" "),t("p",[e._v("You can also add a package with a "),t("span",{staticClass:"post-term-one"},[e._v("specific tag")]),e._v(" by running the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add Specific Tag"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("@tag\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Tags are a way to mark published versions of a package with a label. Check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/tag",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn tag"),t("OutboundLink")],1),e._v(" documentation for more information about them.")]),e._v(" "),t("p",[e._v("To add a package to your development dependencies, i.e., "),t("code",{staticClass:"inline-code-block"},[e._v("devDependencies")]),e._v(" you can add either the "),t("code",{staticClass:"inline-code-block"},[e._v("--dev")]),e._v(" or "),t("code",{staticClass:"inline-code-block"},[e._v("-D")]),e._v(" flag to the end of the command.")]),e._v(" "),t("p",[e._v("Development dependencies are dependencies that you need for the development workflow, e.g., "),t("a",{attrs:{href:"https://babeljs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Babel"),t("OutboundLink")],1),e._v(", but not while running the project.")]),e._v(" "),t("p",[e._v("Here's an example of adding the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" of a package to your "),t("code",{staticClass:"inline-code-block"},[e._v("devDependencies")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add to Development Dependencies"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" --dev\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/dependency-types",target:"_blank",rel:"noopener noreferrer"}},[e._v("Types of dependencies"),t("OutboundLink")],1),e._v(" documentation for more information about them.")]),e._v(" "),t("p",[e._v("To add a package globally to your operating system you can use the "),t("code",{staticClass:"inline-code-block"},[e._v("global")]),e._v(" subcommand before "),t("code",{staticClass:"inline-code-block"},[e._v("add")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Add Global Package"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" global "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("When to Use Global")]),e._v(" "),t("p",[e._v("In general you should be adding packages locally because anyone else using your project will then get the same packages. If you install a package globally it will be available globally on your operating system, but it won't be available to anyone else using your project. You should only install a package globally if it's for developer tooling that isn't used for only a specific project, e.g., "),t("a",{attrs:{href:"https://nodemon.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("nodemon"),t("OutboundLink")],1),e._v(". See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/global",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn global"),t("OutboundLink")],1),e._v(" documentation for more details.")])]),e._v(" "),t("p",[e._v("Check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/add",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn add"),t("OutboundLink")],1),e._v(" documentation for more information about adding packages.")]),e._v(" "),t("h3",{attrs:{id:"listing-added-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#listing-added-packages"}},[e._v("#")]),e._v(" Listing Added Packages")]),e._v(" "),t("p",[e._v("To list all of your added packages in your project run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Added Packages"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" list\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("This will list all of the packages you added as well as their dependencies for the current working directory.")]),e._v(" "),t("p",[e._v("To list only the packages you explicitly added you can use the "),t("code",{staticClass:"inline-code-block"},[e._v("--depth")]),e._v(" flag as follows:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Explicity Added Packages"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" list --depth"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The above will restrict the depth of the displayed dependencies to be the first level. Notice that the levels are zero-indexed.")]),e._v(" "),t("p",[e._v("To learn more about listing added packages check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/list",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn list"),t("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),t("h3",{attrs:{id:"upgrading-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-packages"}},[e._v("#")]),e._v(" Upgrading Packages")]),e._v(" "),t("p",[e._v("The "),t("code",{staticClass:"inline-code-block"},[e._v("upgrade")]),e._v(" subcommand will update the packages to their "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" based on the version ranges defined in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file. See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/dependency-versions/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Versions of dependencies"),t("OutboundLink")],1),e._v(" documentation to get a better understanding of how version ranges are used.")]),e._v(" "),t("p",[e._v("After running the "),t("code",{staticClass:"inline-code-block"},[e._v("upgrade")]),e._v(" subcommand, the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file will be updated with the "),t("span",{staticClass:"post-term-one"},[e._v("latest versions")]),e._v(" specified by the version ranges. The versions in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file will remain the same though since the upgraded packages will still be within the same version ranges.")]),e._v(" "),t("p",[e._v("To view the upgraded versions of your packages in a readable format you can use the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn list")]),e._v(" command described in the previous section.")]),e._v(" "),t("p",[e._v("We'll see how to upgrade packages to versions outside of the "),t("span",{staticClass:"post-term-one"},[e._v("specified version ranges")]),e._v(" which will update both the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file and the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file.")]),e._v(" "),t("p",[e._v("The following command upgrades all packages within their "),t("span",{staticClass:"post-term-one"},[e._v("specified version ranges")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade All Packages Within Version Ranges"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("You can also upgrade a specific package within its "),t("span",{staticClass:"post-term-one"},[e._v("specified version range")]),e._v(":")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade Specific Package Within Version Range"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To upgrade all packages to their "),t("span",{staticClass:"post-term-one"},[e._v("latest versions")]),e._v(" you can add the "),t("code",{staticClass:"inline-code-block"},[e._v("--latest")]),e._v(" flag:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade All Packages to Latest Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade --latest\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("You can also upgrade a specific package to its "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" using the "),t("code",{staticClass:"inline-code-block"},[e._v("--latest")]),e._v(" flag:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade Specific Package to Latest Versions"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" --latest\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("When using the "),t("code",{staticClass:"inline-code-block"},[e._v("--latest")]),e._v(" flag, the version range in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file will be ignored. This can potentially result in the packages being upgraded across major versions which can lead to potential incompatible API changes, so be sure to check the packages for any breaking changes.")]),e._v(" "),t("p",[e._v("Since the range versions in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file are ignored, both the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" files can be updated.")]),e._v(" "),t("p",[e._v("Also, the range specifiers in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file will remain the same if it is still compatible with the latest version. If the range specifier isn't compatible with the new version a caret range specifier, i.e., "),t("code",{staticClass:"inline-code-block"},[e._v("^")]),e._v(" will be used instead.")]),e._v(" "),t("p",[e._v("So, e.g., a tilde range specifier, i.e., "),t("code",{staticClass:"inline-code-block"},[e._v("~")]),e._v(" will still be used for any packages that we're using it previously.")]),e._v(" "),t("p",[e._v("You can also explicitly set the range specifier by passing a flag after the "),t("code",{staticClass:"inline-code-block"},[e._v("--latest")]),e._v(" flag, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--caret")]),e._v(".")]),e._v(" "),t("p",[e._v("You can also upgrade a package to a "),t("span",{staticClass:"post-term-one"},[e._v("specific version")]),e._v(" with the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade a Package to a Specific Version"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("@1.2.3\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("To upgrade a package to the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" within a "),t("span",{staticClass:"post-term-one"},[e._v("specified version range")]),e._v(" run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade a Package in a Specified Version Range"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"@^1.2.3"')]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("The "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" within the given version range is again determined by the range specifier and the version number.")]),e._v(" "),t("p",[e._v("In the example above the range specifier is the caret symbol, i.e., "),t("code",{staticClass:"inline-code-block"},[e._v("^")]),e._v(". You can again use any desired range specifier, and the package will be upgraded to the "),t("span",{staticClass:"post-term-one"},[e._v("latest version")]),e._v(" within the given version range.")]),e._v(" "),t("p",[e._v("You can also upgrade a package to a "),t("span",{staticClass:"post-term-one"},[e._v("specific tag")]),e._v(" using the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Upgrade a Package Using a Tag"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" upgrade "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("@tag\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Tags are again a way to mark published versions of a package with a label. Check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/tag",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn tag"),t("OutboundLink")],1),e._v(" documentation for more information about them.")]),e._v(" "),t("p",[e._v("You can specify a preferred range specifier when upgrading a package with a tag by passing, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("--tilde")]),e._v(" flag at the end of the command.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Downgrading Packages")]),e._v(" "),t("p",[e._v("Using specific versions and tags when upgrading packages also allows you to downgrade your package by specifying a version that is older than your currently installed version.")])]),e._v(" "),t("p",[e._v("To learn more about upgrading packages check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/upgrade",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn upgrade"),t("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),t("h3",{attrs:{id:"removing-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#removing-packages"}},[e._v("#")]),e._v(" Removing Packages")]),e._v(" "),t("p",[e._v("To remove a package run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Remove a Package"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" remove "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("package-name"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("After running the command above, the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" files will both always be updated. This ensures all developers will still be using the exact same versions of the packages.")]),e._v(" "),t("p",[e._v("Also, when removing a package it will be removed from all types of dependencies, e.g., "),t("code",{staticClass:"inline-code-block"},[e._v("dependencies")]),e._v(", "),t("code",{staticClass:"inline-code-block"},[e._v("devDependencies")]),e._v(", etc.")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/dependency-types",target:"_blank",rel:"noopener noreferrer"}},[e._v("Types of dependencies"),t("OutboundLink")],1),e._v(" documentation for more information about dependencies and the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/remove",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn remove"),t("OutboundLink")],1),e._v(" documentation for more information about the command.")]),e._v(" "),t("h3",{attrs:{id:"installing-all-project-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-all-project-packages"}},[e._v("#")]),e._v(" Installing All Project Packages")]),e._v(" "),t("p",[e._v("The following command should be run when checking out code for a new project and when another developer adds or removes a package.")]),e._v(" "),t("p",[e._v("Run the following command to install all of a project's packages specified in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install All Project Packages"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("You can also just run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Install All Project Packages Shorthand"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("After running either one of the commands above, a "),t("code",{staticClass:"inline-code-block"},[e._v("node_modules")]),e._v(" directory will be created in the current directory which contains all of the code for the installed packages.")]),e._v(" "),t("p",[e._v("Here's how the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file is used:")]),e._v(" "),t("ul",[t("li",[e._v("If the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file is present and if it contains all of the packages specified in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file, then the exact versions specified in the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file will be installed.")]),e._v(" "),t("li",[e._v("If there is no "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file or there is one that doesn't contain all of the packages in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file, then the newest versions within the version ranges specified in the "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file will be installed. This will then update the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file.")])]),e._v(" "),t("p",[e._v("To ensure the "),t("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(" file is not updated when installing all of a project's dependencies you can run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Prevent Lockfile Update on Install"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" --frozen-lockfile\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("For more information about installing all the packages in a project check out the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn install"),t("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),t("h3",{attrs:{id:"running-scripts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#running-scripts"}},[e._v("#")]),e._v(" Running Scripts")]),e._v(" "),t("p",[e._v("To run a script you need to first add a "),t("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" object to your "),t("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file. Then you can add each script as a key-value pair where the key is the name of the script you want to run, and the value is a command that gets run in your shell.")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Scripts Object in package.json"}},[t("div",{staticClass:"language-json line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"test"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"test-script"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"build-script"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br"),t("span",{staticClass:"line-number"},[e._v("2")]),t("br"),t("span",{staticClass:"line-number"},[e._v("3")]),t("br"),t("span",{staticClass:"line-number"},[e._v("4")]),t("br")])])])],1),e._v(" "),t("p",[e._v("Here, we have defined two scripts in our "),t("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" object with the names of "),t("code",{staticClass:"inline-code-block"},[e._v("test")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v("build")]),e._v(" and with the commands of "),t("code",{staticClass:"inline-code-block"},[e._v("test-script")]),e._v(" and "),t("code",{staticClass:"inline-code-block"},[e._v("build-script")]),e._v(", respectively.")]),e._v(" "),t("p",[e._v("To run a script you can run the following command:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Run a Script"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" run "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("script-name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("You can also just run the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"Run a Script Shorthand"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("script-name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Potential Shorthand Issue")]),e._v(" "),t("p",[e._v("Built-in CLI commands will have preference over your scripts if they share the same name. To avoid running a built-in CLI command you can always include the "),t("code",{staticClass:"inline-code-block"},[e._v("run")]),e._v(" subcommand when running your scripts.")])]),e._v(" "),t("p",[e._v("It's also possible to list all of the scripts available to run in your project by running the following:")]),e._v(" "),t("code-group",[t("code-block",{attrs:{title:"List All Available Scripts"}},[t("div",{staticClass:"language-sh line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" run\n")])]),e._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[e._v("1")]),t("br")])])])],1),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/run",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn run"),t("OutboundLink")],1),e._v(" documentation to lean more about the command and the "),t("a",{attrs:{href:"https://classic.yarnpkg.com/en/docs/cli/test",target:"_blank",rel:"noopener noreferrer"}},[e._v("yarn test"),t("OutboundLink")],1),e._v(" documentation for more information about testing.")])],1)}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/35.d3a29ee8.js b/assets/js/35.d3a29ee8.js new file mode 100644 index 00000000..12ad2378 --- /dev/null +++ b/assets/js/35.d3a29ee8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{546:function(e,t,s){"use strict";s.r(t);var a=s(18),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"configuring-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuring-settings"}},[e._v("#")]),e._v(" Configuring Settings")])]},proxy:!0}])},[s("h2",{attrs:{id:"what-we-re-doing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[e._v("#")]),e._v(" What We're Doing")]),e._v(" "),s("p",[e._v("In this tutorial we're going to learn how to configure various settings for a "),s("a",{attrs:{href:"https://www.raspberrypi.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi"),s("OutboundLink")],1),e._v(" using standard "),s("a",{attrs:{href:"https://www.debian.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),s("OutboundLink")],1),e._v(" commands. Since we'll be using standard Debian commands, the commands will be compatible with most other hardware platforms running Debian.")]),e._v(" "),s("p",[e._v("Instead of using the standard Debian commands to configure the settings, you can preconfigure the settings with the "),s("a",{attrs:{href:"https://github.com/raspberrypi/rpi-imager",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi Imager"),s("OutboundLink")],1),e._v(" by using the advanced options when installing the "),s("a",{attrs:{href:"https://www.raspberrypi.com/software/operating-systems/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi OS"),s("OutboundLink")],1),e._v(". You also have the option to use the "),s("a",{attrs:{href:"https://www.raspberrypi.com/documentation/computers/configuration.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("raspi-config"),s("OutboundLink")],1),e._v(" tool to configure the settings.")]),e._v(" "),s("p",[e._v("If you preconfigure the settings using the Raspberry Pi Imager, you can always update them later by using either the raspi-config tool or the standard Debian commands discussed in this post.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Raspberry Pi Imager Boot Issues")]),e._v(" "),s("p",[e._v("If you're having issues booting your Raspberry Pi after preconfiguring the settings using the Raspberry Pi Imager, then don't preconfigure the settings. Instead you can use the raspi-config tool or the standard Debian commands to configure the settings after booting into the Raspberry Pi.")])]),e._v(" "),s("p",[e._v("We'll be configuring the following settings:")]),e._v(" "),s("ul",[s("li",[e._v("Username")]),e._v(" "),s("li",[e._v("Password")]),e._v(" "),s("li",[e._v("Secure Shell (SSH)")]),e._v(" "),s("li",[e._v("WiFi")]),e._v(" "),s("li",[e._v("Time Zone")]),e._v(" "),s("li",[e._v("Keyboard Layout")])]),e._v(" "),s("p",[e._v("We'll be using the "),s("code",{staticClass:"inline-code-block"},[e._v("nano")]),e._v(" text editor to edit the configuration files.")]),e._v(" "),s("p",[e._v("Here's how to save and exit "),s("code",{staticClass:"inline-code-block"},[e._v("nano")]),e._v(":")]),e._v(" "),s("ul",[s("li",[e._v("Save: press "),s("code",{staticClass:"inline-code-block"},[e._v("Ctrl+o")]),e._v(", confirm the filename, and press the "),s("code",{staticClass:"inline-code-block"},[e._v("Enter")]),e._v(" key")]),e._v(" "),s("li",[e._v("Exit: press "),s("code",{staticClass:"inline-code-block"},[e._v("Ctrl+x")])])]),e._v(" "),s("h2",{attrs:{id:"assumptions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#assumptions"}},[e._v("#")]),e._v(" Assumptions")]),e._v(" "),s("p",[e._v("We're making the following assumptions:")]),e._v(" "),s("ul",[s("li",[e._v("You're using a "),s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.raspberrypi.com/products/raspberry-pi-4-model-b/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi 4"),s("OutboundLink")],1)]),e._v(" running Raspberry Pi OS Lite (64-bit)")]),e._v(" "),s("li",[e._v("You're using an official "),s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.raspberrypi.com/products/type-c-power-supply/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi Power Supply"),s("OutboundLink")],1)])]),e._v(" "),s("li",[e._v("The Raspberry Pi is connected to a display either a computer monitor or television")]),e._v(" "),s("li",[e._v("You have a USB keyboard plugged into the Raspberry Pi")])]),e._v(" "),s("h2",{attrs:{id:"username"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#username"}},[e._v("#")]),e._v(" Username")]),e._v(" "),s("p",[e._v("There are multiple ways to update your username. We'll be updating the username by logging in as the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user. Instead of using the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user, it's also possible to create another user and log into it to update the username.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Don't Use pi for your Username")]),e._v(" "),s("p",[e._v("For security reasons it's recommended to not use "),s("code",{staticClass:"inline-code-block"},[e._v("pi")]),e._v(" as your username since it has been used in the past as the default username. Potential hackers have a list of commonly used usernames which may include the "),s("code",{staticClass:"inline-code-block"},[e._v("pi")]),e._v(" username.")])]),e._v(" "),s("h3",{attrs:{id:"enable-root-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enable-root-user"}},[e._v("#")]),e._v(" Enable root User")]),e._v(" "),s("p",[e._v("To update the username using the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user, you first need to enable it which you can do by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Enable root User"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("passwd")]),e._v(" root\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to choose a secure password for the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user. You can use a password mananger like "),s("a",{attrs:{href:"https://keepass.info/",target:"_blank",rel:"noopener noreferrer"}},[e._v("KeePass"),s("OutboundLink")],1),e._v(" or "),s("a",{attrs:{href:"https://bitwarden.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitwarden"),s("OutboundLink")],1),e._v(" to generate and store your passwords.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Disabling the root User")]),e._v(" "),s("p",[e._v("You can also disable the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user if you want after updating the username which we'll demonstrate below. For security reasons it's recommended to disable the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user after updating the username.")])]),e._v(" "),s("h3",{attrs:{id:"logout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logout"}},[e._v("#")]),e._v(" Logout")]),e._v(" "),s("p",[e._v("After enabling the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user, you need to log out of the current user which you can do with the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Logout"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("logout")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h3",{attrs:{id:"update-username"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#update-username"}},[e._v("#")]),e._v(" Update Username")]),e._v(" "),s("p",[e._v("Now, you'll need to log in using the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user by entering "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" for the username and the password you just created for the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user.")]),e._v(" "),s("p",[e._v("After logging in as the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user, you're now ready to update the username by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Update Username"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("usermod")]),e._v(" -l "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("new_username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("old_username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the updated username")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the username you want to update")])]),e._v(" "),s("h3",{attrs:{id:"update-home-directory"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#update-home-directory"}},[e._v("#")]),e._v(" Update home Directory")]),e._v(" "),s("p",[e._v("The username has been updated, but the user's "),s("code",{staticClass:"inline-code-block"},[e._v("home")]),e._v(" directory will still be using the previous username. To update the "),s("code",{staticClass:"inline-code-block"},[e._v("home")]),e._v(" directory to reflect the updated username you need to run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Update home Directory"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("usermod")]),e._v(" -m -d /home/"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("new_username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("new_username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the updated username")])]),e._v(" "),s("p",[e._v("You can now log out of the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user by running the "),s("code",{staticClass:"inline-code-block"},[e._v("logout")]),e._v(" command we used earlier, and log in using the updated username and the user's password.")]),e._v(" "),s("h3",{attrs:{id:"disable-root-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#disable-root-user"}},[e._v("#")]),e._v(" Disable root User")]),e._v(" "),s("p",[e._v("You can now disable the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user if you want, but you'll first want to make sure the updated user still has "),s("code",{staticClass:"inline-code-block"},[e._v("sudo")]),e._v(" privileges. You can check this by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check sudo Privileges"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("groups")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("new_username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the updated username")])]),e._v(" "),s("p",[e._v("If the user still has "),s("code",{staticClass:"inline-code-block"},[e._v("sudo")]),e._v(" privileges, you should see the "),s("code",{staticClass:"inline-code-block"},[e._v("sudo")]),e._v(" group in the output.")]),e._v(" "),s("p",[e._v("After confirming the updated user still has "),s("code",{staticClass:"inline-code-block"},[e._v("sudo")]),e._v(" privileges, you can disable the "),s("code",{staticClass:"inline-code-block"},[e._v("root")]),e._v(" user by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Disable root User"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("passwd")]),e._v(" -l root\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h2",{attrs:{id:"password"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#password"}},[e._v("#")]),e._v(" Password")]),e._v(" "),s("p",[e._v("To update the password for your user you can run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Update Password"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("passwd")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("You will need to enter the current password for the user. Then you will be asked to enter the updated password and to re-enter the updated password.")]),e._v(" "),s("p",[e._v("Be sure to choose a secure password for your user. You can again use a password mananger like "),s("a",{attrs:{href:"https://keepass.info/",target:"_blank",rel:"noopener noreferrer"}},[e._v("KeePass"),s("OutboundLink")],1),e._v(" or "),s("a",{attrs:{href:"https://bitwarden.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bitwarden"),s("OutboundLink")],1),e._v(" to generate and store your passwords.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Don't Use raspberry for your Password")]),e._v(" "),s("p",[e._v("It's recommended to not use "),s("code",{staticClass:"inline-code-block"},[e._v("raspberry")]),e._v(" as your password since it has been used in the past as the default password plus it isn't a secure password anyway.")])]),e._v(" "),s("h2",{attrs:{id:"hostname"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hostname"}},[e._v("#")]),e._v(" Hostname")]),e._v(" "),s("p",[e._v("Every Raspberry Pi using Raspberry Pi OS Lite (64-bit) uses the default hostname "),s("code",{staticClass:"inline-code-block"},[e._v("raspberrypi")]),e._v(" which isn't very helpful when you're using multiple Raspberry Pi devices that you're trying to distinguish between on your network.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("hostname Restrictions")]),e._v(" "),s("p",[e._v("The hostname may contain lowercase letters 'a' through 'z', uppercase letters 'A' through 'Z', numbers '0' through '9', and hyphens '-' as long as the first and last characters aren't hyphens. No other symbols, punctuation characters, or white space are allowed in the hostname.")])]),e._v(" "),s("h3",{attrs:{id:"hosts-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hosts-file"}},[e._v("#")]),e._v(" hosts File")]),e._v(" "),s("p",[e._v("To update the hostname you can open the "),s("code",{staticClass:"inline-code-block"},[e._v("/etc/hosts")]),e._v(" file by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Open hosts File"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/hosts\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Your "),s("code",{staticClass:"inline-code-block"},[e._v("hosts")]),e._v(" file should look something like this:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"hosts File"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[e._v(" ")]),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("127.0.0.1 localhost\n::1 localhost ip6-localhost ip6-loopback\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters\n\n127.0.1.1 \n")])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the updated hostname")])]),e._v(" "),s("p",[e._v("Then save and exit the file.")]),e._v(" "),s("h3",{attrs:{id:"hostname-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hostname-file"}},[e._v("#")]),e._v(" hostname File")]),e._v(" "),s("p",[e._v("Next you need to open the "),s("code",{staticClass:"inline-code-block"},[e._v("/etc/hostname")]),e._v(" file by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Open hostname File"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/hostname\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Your "),s("code",{staticClass:"inline-code-block"},[e._v("hostname")]),e._v(" file should look something like this:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"hostname File"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with the updated hostname")])]),e._v(" "),s("p",[e._v("Then save and exit the file.")]),e._v(" "),s("p",[e._v("For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Reboot"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo reboot\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After rebooting the command prompt should now display, "),s("code",{staticClass:"inline-code-block"},[e._v("@")]),e._v(".")]),e._v(" "),s("p",[e._v("Where:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" is the username of the current user")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" is the updated hostname")])]),e._v(" "),s("h2",{attrs:{id:"enable-and-start-ssh"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enable-and-start-ssh"}},[e._v("#")]),e._v(" Enable and Start SSH")]),e._v(" "),s("p",[e._v("Secure Shell (SSH) is a network communication protocol that enables you to connect securely to a remote computer or a server by using a text-based interface. When a secure SSH connection is established, a shell session is started, and you'll be able to manipulate the server by typing commands from your local computer.")]),e._v(" "),s("p",[e._v("If you want to remotely connect to your Raspberry Pi, i.e., be able to access it from your local computer, then you'll need to enable and start the SSH service on the Raspberry Pi.")]),e._v(" "),s("h3",{attrs:{id:"enable-ssh"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enable-ssh"}},[e._v("#")]),e._v(" Enable SSH")]),e._v(" "),s("p",[e._v("To enable SSH run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Enable SSH"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo systemctl enable ssh\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h3",{attrs:{id:"start-ssh"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-ssh"}},[e._v("#")]),e._v(" Start SSH")]),e._v(" "),s("p",[e._v("To start the SSH service run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Start SSH"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo systemctl start ssh\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("You should now be able to SSH into the Raspberry Pi from your local computer.")]),e._v(" "),s("h2",{attrs:{id:"configure-wifi"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-wifi"}},[e._v("#")]),e._v(" Configure WiFi")]),e._v(" "),s("p",[e._v("To configure WiFi you need to edit the "),s("code",{staticClass:"inline-code-block"},[e._v("wpa_supplicant.conf")]),e._v(" file.")]),e._v(" "),s("h3",{attrs:{id:"wpa-supplicant-conf"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#wpa-supplicant-conf"}},[e._v("#")]),e._v(" wpa_supplicant.conf")]),e._v(" "),s("p",[e._v("The "),s("code",{staticClass:"inline-code-block"},[e._v("wpa_supplicant.conf")]),e._v(" file should be located in the "),s("code",{staticClass:"inline-code-block"},[e._v("/etc/wpa_supplicant")]),e._v(" directory.")]),e._v(" "),s("p",[e._v("To open the "),s("code",{staticClass:"inline-code-block"},[e._v("wpa_supplicant.conf")]),e._v(" file you can run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Open wpa_supplicant.conf"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo nano /etc/wpa_supplicant/wpa_supplicant.conf\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After editing the file, it should look like this:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"wpa_supplicant.conf File"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("div",{staticClass:"highlighted"},[e._v(" ")]),s("br"),s("br"),s("div",{staticClass:"highlighted"},[e._v(" ")]),s("div",{staticClass:"highlighted"},[e._v(" ")]),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\nupdate_config=1\ncountry=\n\nnetwork={\n ssid=""\n psk=""\n scan_ssid=1\n}\n')])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your own "),s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.iban.com/country-codes",target:"_blank",rel:"noopener noreferrer"}},[e._v("country code"),s("OutboundLink")],1)])]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your WiFi SSID, i.e., the name of your WiFi")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your WiFi password")])]),e._v(" "),s("p",[e._v("Then save and exit the file.")]),e._v(" "),s("p",[e._v("For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Reboot"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo reboot\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h3",{attrs:{id:"unblock-wifi"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#unblock-wifi"}},[e._v("#")]),e._v(" Unblock WiFi")]),e._v(" "),s("p",[e._v("If you get the following message after rebooting:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Wi-Fi Currently Blocked Message"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("Wi-Fi is currently blocked by rfkill.\nUse raspi-config to set the country before use.\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Then you can run the following command to unblock the WiFi;")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Unblock WiFi Using raspi-config"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo raspi-config nonint do_wifi_country \n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your own "),s("span",{staticClass:"external-link-wrap"},[s("a",{attrs:{href:"https://www.iban.com/country-codes",target:"_blank",rel:"noopener noreferrer"}},[e._v("country code"),s("OutboundLink")],1)])])]),e._v(" "),s("p",[e._v("Instead of using "),s("code",{staticClass:"inline-code-block"},[e._v("raspi-config")]),e._v(" to unblock the WiFi which isn't a standard Debian command, you can also try installing and running "),s("code",{staticClass:"inline-code-block"},[e._v("urfkill")]),e._v(".")]),e._v(" "),s("p",[e._v("Run the following command to install "),s("code",{staticClass:"inline-code-block"},[e._v("urfkill")]),e._v(":")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Install urfkill"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo apt install urfkill\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("To unblock the WiFi using "),s("code",{staticClass:"inline-code-block"},[e._v("urfkill")]),e._v(" run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Unblock WiFi Using urfkill"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo unblock wifi\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h3",{attrs:{id:"test-connection"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#test-connection"}},[e._v("#")]),e._v(" Test Connection")]),e._v(" "),s("p",[e._v("To test the WiFi connection you can check the IP address by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check IP Address"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("hostname -I\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h2",{attrs:{id:"locale-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#locale-settings"}},[e._v("#")]),e._v(" Locale Settings")]),e._v(" "),s("p",[e._v("We're now going to go over how to update the time zone and keyboard layout locale settings.")]),e._v(" "),s("h3",{attrs:{id:"time-zone"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#time-zone"}},[e._v("#")]),e._v(" Time Zone")]),e._v(" "),s("p",[e._v("You can check the current time zone by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check Time Zone"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("ls -l /etc/localtime\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("To update the time zone you can run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Update Time Zone"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo timedatectl set-timezone /\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your own area")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your own location")])]),e._v(" "),s("p",[e._v("If you're unsure what your area and location are, then take a look at the "),s("a",{attrs:{href:"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones",target:"_blank",rel:"noopener noreferrer"}},[e._v("list of tz database time zones"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h3",{attrs:{id:"keyboard-layout"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-layout"}},[e._v("#")]),e._v(" Keyboard Layout")]),e._v(" "),s("p",[e._v("To update the keyboard layout you can edit the "),s("code",{staticClass:"inline-code-block"},[e._v("keyboard")]),e._v(" file which is located in the "),s("code",{staticClass:"inline-code-block"},[e._v("/etc/default")]),e._v(" directory.")]),e._v(" "),s("p",[e._v("To open the "),s("code",{staticClass:"inline-code-block"},[e._v("keyboard")]),e._v(" file you can run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Open keyboard"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo nano /etc/default/keyboard\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After editing the file, it should look like this:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"keyboard File"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[e._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('# KEYBOARD CONFIGURATION FILE\n\n# Consult the keyboard(5) manual page.\n\nXKBMODEL="pc105"\nXKBLAYOUT=""\nXKBVARIANT=""\nXKBOPTIONS=""\n\nBACKSPACE="guess"\n')])]),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Be sure to replace:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("")]),e._v(" with your preferred keyboard layout, e.g., "),s("code",{staticClass:"inline-code-block"},[e._v("us")])])]),e._v(" "),s("p",[e._v("Then save and exit the file.")]),e._v(" "),s("p",[e._v("The value for the keyboard layout is typically the two character "),s("a",{attrs:{href:"https://www.iban.com/country-codes",target:"_blank",rel:"noopener noreferrer"}},[e._v("country code"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("After updating the time zone and keyboard layout locale settings, you need to reboot your Raspberry Pi to see the changes take effect which you can do by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Reboot"}},[s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("sudo reboot\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("h2",{attrs:{id:"conclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[e._v("#")]),e._v(" Conclusion")]),e._v(" "),s("p",[e._v("After following only with this tutorial, you should now know how to configure various settings for your Raspberry Pi using standard Debian commands.")])],1)}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/36.ee7b7393.js b/assets/js/36.ee7b7393.js new file mode 100644 index 00000000..f5502c91 --- /dev/null +++ b/assets/js/36.ee7b7393.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{547:function(e,t,r){"use strict";r.r(t);var o=r(18),a=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[r("h1",{attrs:{id:"vuepress-tutorial-1-introduction"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-1-introduction"}},[e._v("#")]),e._v(" VuePress Tutorial 1 - Introduction")])]},proxy:!0}])},[r("h2",{attrs:{id:"what-we-ll-be-developing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-we-ll-be-developing"}},[e._v("#")]),e._v(" What We'll be Developing")]),e._v(" "),r("p",[e._v("Welcome to our "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" series!")]),e._v(" "),r("p",[e._v("In this series we'll be developing the "),r("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" starting from the basics.")],1),e._v(" "),r("p",[e._v("So, have a look around if you haven't already.")]),e._v(" "),r("p",[e._v("Now grab a 🍌 and let's get to it!")]),e._v(" "),r("h2",{attrs:{id:"why-create-a-blog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#why-create-a-blog"}},[e._v("#")]),e._v(" Why Create a Blog?")]),e._v(" "),r("ul",[r("li",[r("p",[e._v("Benefits of creating a blog:")]),e._v(" "),r("ul",[r("li",[e._v("Learn how to Create a Website")]),e._v(" "),r("li",[e._v("Improve your Web Development Skills & Writing Ability")]),e._v(" "),r("li",[e._v("Document your Thoughts & Ideas")]),e._v(" "),r("li",[e._v("Help Others Learn & Meet New People")]),e._v(" "),r("li",[e._v("Build your Online Brand")]),e._v(" "),r("li",[e._v("Source of Independent Income")]),e._v(" "),r("li",[e._v("Show it to Employers")])])])]),e._v(" "),r("h2",{attrs:{id:"what-we-ll-be-covering"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-we-ll-be-covering"}},[e._v("#")]),e._v(" What We'll be Covering")]),e._v(" "),r("ul",[r("li",[r("p",[e._v("Numerous "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" topics including:")]),e._v(" "),r("ul",[r("li",[e._v("Installation")]),e._v(" "),r("li",[e._v("Directory Structure")]),e._v(" "),r("li",[e._v("Configuration")]),e._v(" "),r("li",[e._v("Asset Handling")]),e._v(" "),r("li",[e._v("Markdown Extensions")]),e._v(" "),r("li",[e._v("Using "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" in Markdown")]),e._v(" "),r("li",[e._v("Deploying (Specifically to "),r("a",{attrs:{href:"https://pages.github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub Pages"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("Frontmatter")]),e._v(" "),r("li",[e._v("Various Plugins:\n"),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("@vuepress/plugin-blog"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-community.netlify.app/plugins/mathjax/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-plugin-mathjax"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://github.com/znicholasbrown/vuepress-plugin-code-copy",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-plugin-code-copy"),r("OutboundLink")],1)])]),e._v(" "),r("li",[e._v("And More!")])])])])]),e._v(" "),r("li",[r("p",[e._v("More general Web Dev topics & tools including:")]),e._v(" "),r("ul",[r("li",[e._v("Favicons")]),e._v(" "),r("li",[e._v("Scalable Vector Graphics (SVGs)")]),e._v(" "),r("li",[e._v("Images (Compression, Lazy Loading, etc.)")]),e._v(" "),r("li",[e._v("Embedding Videos")]),e._v(" "),r("li",[e._v("Responsive Design ("),r("a",{attrs:{href:"https://github.com/twbs/rfs",target:"_blank",rel:"noopener noreferrer"}},[e._v("RFS"),r("OutboundLink")],1),e._v(", Videos, etc.)")]),e._v(" "),r("li",[e._v("Color Schemes")]),e._v(" "),r("li",[e._v("Gradients")]),e._v(" "),r("li",[e._v("Embeddable Interactive Code Editors ("),r("a",{attrs:{href:"https://codefence.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("codefence"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("OAuth Apps (Specifically for "),r("a",{attrs:{href:"https://docs.github.com/en/developers/apps/building-oauth-apps/creating-an-oauth-app",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("And More!")])])])]),e._v(" "),r("h2",{attrs:{id:"nice-to-know"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#nice-to-know"}},[e._v("#")]),e._v(" Nice to Know")]),e._v(" "),r("p",[e._v("Since "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" uses HTML, CSS, JavaScript, "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(", and Markdown, it's good to have a solid grasp of them before starting.")]),e._v(" "),r("p",[e._v("However, in these posts and the accompanying videos I'll try to explain everything in sufficient detail, and anything that may need more explanation I'll provide links to helpful resources.")]),e._v(" "),r("h2",{attrs:{id:"how-to-use-these-tutorials"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#how-to-use-these-tutorials"}},[e._v("#")]),e._v(" How to Use these Tutorials")]),e._v(" "),r("ul",[r("li",[r("p",[e._v("If you want to recreate the "),r("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" or create a very similar blog then you can simply follow these tutorials in order.")],1)]),e._v(" "),r("li",[r("p",[e._v("Each tutorial will give you some general information about a "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" topic and provide helpful resources.")])]),e._v(" "),r("li",[r("p",[e._v("Then we'll apply what we've learned to the blog as an example.")])]),e._v(" "),r("li",[r("p",[e._v("This way you don't have to necessarily follow the tutorials in a linear order.")])]),e._v(" "),r("li",[r("p",[e._v("You'll be able to just learn a "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" topic if you don't want to recreate the entire blog or create a very similar blog.")])])]),e._v(" "),r("h2",{attrs:{id:"updates"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#updates"}},[e._v("#")]),e._v(" Updates")]),e._v(" "),r("p",[e._v("Note that the "),r("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" is not a finished product.")],1),e._v(" "),r("p",[e._v("This means new features will be added, and the current code will be optimized and refactored as needed.")]),e._v(" "),r("p",[e._v("So, when something gets updated a new post will be made discussing the changes and/or an old post may be updated.")]),e._v(" "),r("p",[e._v("Also, this blog is currently using "),r("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress v1"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://v2.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress v2"),r("OutboundLink")],1),e._v(" is still in beta at the time of this writing.")]),e._v(" "),r("p",[e._v("Once "),r("a",{attrs:{href:"https://v2.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress v2"),r("OutboundLink")],1),e._v(" is out of beta and the plugins being used are updated, the plan is to migrate over.")]),e._v(" "),r("h2",{attrs:{id:"resources"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[e._v("#")]),e._v(" Resources")]),e._v(" "),r("ul",[r("li",[r("p",[e._v("Each tutorial with code will have a corresponding branch which can be found here "),r("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),r("OutboundLink")],1),e._v(".")])]),e._v(" "),r("li",[r("p",[e._v("The code for the current version of the blog can be found here "),r("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog"),r("OutboundLink")],1),e._v(".")])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/37.a8592e6c.js b/assets/js/37.a8592e6c.js new file mode 100644 index 00000000..613533ca --- /dev/null +++ b/assets/js/37.a8592e6c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{548:function(t,s,a){"use strict";a.r(s);var e=a(18),r=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-10-homepage-styling-part-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-10-homepage-styling-part-2"}},[t._v("#")]),t._v(" VuePress Tutorial 10 - Homepage Styling Part 2")])]},proxy:!0}])},[a("h2",{attrs:{id:"homepage-styling-recap"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#homepage-styling-recap"}},[t._v("#")]),t._v(" Homepage Styling Recap")]),t._v(" "),a("p",[t._v("In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global styling variables for the "),a("code",{staticClass:"inline-code-block"},[t._v("$accentColor")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("$textColor")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("$borderColor")]),t._v(" in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file. The colors of these variables then get applied instead of the colors originally set by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(". These variables can also be used to style other elements of the blog as well.")]),t._v(" "),a("p",[t._v("We also added our own global styling variables to the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file which included the "),a("code",{staticClass:"inline-code-block"},[t._v("$backgroundColor")]),t._v(" and the "),a("code",{staticClass:"inline-code-block"},[t._v("$darkBorderColor")]),t._v(". These variables were then used in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file.")]),t._v(" "),a("p",[t._v("In the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we used some of the global styling variables along with overriding and adding our own global styling to style the "),a("code",{staticClass:"inline-code-block"},[t._v("background-color")]),t._v(" of the blog, the "),a("code",{staticClass:"inline-code-block"},[t._v("main")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("home")]),t._v(", the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("hero")]),t._v(", and the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("features")]),t._v(".")]),t._v(" "),a("p",[t._v("After overriding and adding these styles to the blog, the main card on the homepage was being covered by the navbar, so in this tutorial we'll be fixing this issue. Then we'll be adding some hover effects to the main card logo and to the box shadow around the main card. Finally, we'll be adding a radial gradient background to the main card.")]),t._v(" "),a("h2",{attrs:{id:"homepage-styling-updates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#homepage-styling-updates"}},[t._v("#")]),t._v(" Homepage Styling Updates")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-10")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-10",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h3",{attrs:{id:"fixing-the-main-card-placement"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#fixing-the-main-card-placement"}},[t._v("#")]),t._v(" Fixing the Main Card Placement")]),t._v(" "),a("p",[t._v("We'll start by fixing the issue of the main card being covered by the navbar. To fix this issue we just need to update the "),a("code",{staticClass:"inline-code-block"},[t._v("padding")]),t._v(" in the "),a("code",{staticClass:"inline-code-block"},[t._v("home")]),t._v(" class:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"index.styl"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding: 8rem 0 0")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("8rem")]),t._v(" to the top and a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" to the left, right, and bottom of the main card. This pushes the main card down, so it is no longer being covered by the navbar.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Why not Start with this Padding?")]),t._v(" "),a("p",[t._v("In the previous tutorial we used "),a("code",{staticClass:"inline-code-block"},[t._v("padding: 0")]),t._v(" to style the "),a("code",{staticClass:"inline-code-block"},[t._v("home")]),t._v(" class since that code was based off of a more complicated way of styling the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component which has now been simplified. We'll be going over this simplified "),a("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component styling in the next tutorial.")])]),t._v(" "),a("p",[t._v("Now that we've fixed the placement of the main card, let's add the hover effects to the main card logo and to the box shadow around the main card.")]),t._v(" "),a("h3",{attrs:{id:"adding-hover-effects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-hover-effects"}},[t._v("#")]),t._v(" Adding Hover Effects")]),t._v(" "),a("p",[t._v("To implement the hover effects we'll be adding a "),a("span",{staticClass:"post-term-one"},[t._v("CSS pseudo-class")]),t._v(" of "),a("code",{staticClass:"inline-code-block"},[t._v("hover")]),t._v(" to the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("hero")]),t._v(" which we'll use along with the "),a("code",{staticClass:"inline-code-block"},[t._v("transition")]),t._v(" property to smoothly apply the hover effects to the main card logo and to the box shadow around the main card.")]),t._v(" "),a("p",[t._v("First, let's add the "),a("code",{staticClass:"inline-code-block"},[t._v("hover")]),t._v(" pseudo-class:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"index.styl"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v(".hero:hover")]),t._v(" applies the "),a("code",{staticClass:"inline-code-block"},[t._v("hover")]),t._v(" pseudo-class to the "),a("code",{staticClass:"inline-code-block"},[t._v(".hero")]),t._v(" selector which will apply the styles defined inside of it when the user hovers their pointer over the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("hero")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f")]),t._v(" changes the box shadow style defined in the "),a("code",{staticClass:"inline-code-block"},[t._v("hero")]),t._v(" class.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("transform: scale(1.1)")]),t._v(" applies the "),a("code",{staticClass:"inline-code-block"},[t._v("scale()")]),t._v(" method to the "),a("code",{staticClass:"inline-code-block"},[t._v("transform")]),t._v(" property to increase the size of the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.1")]),t._v(" times the original width and height.")])]),t._v(" "),a("p",[t._v("If you have questions about the CSS discussed above, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pseudo-classes"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/:hover",target:"_blank",rel:"noopener noreferrer"}},[t._v(":hover"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/css3_2dtransforms.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS 2D Transforms"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/cssref/css3_pr_box-shadow.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS box-shadow Property"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("When you hover your pointer over the main card, you should see the logo increase in width and height and the box shadow around the main card should now be more prevalent.")]),t._v(" "),a("p",[t._v("The hover effects are working, but they aren't that smooth. To make them smoother we're going to use the "),a("code",{staticClass:"inline-code-block"},[t._v("transition")]),t._v(" property.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("transition")]),t._v(" property allows you to change CSS property values smoothly over a specified duration. To create a transition you need to specify two values:")]),t._v(" "),a("ul",[a("li",[t._v("The CSS property you want to add the transition to")]),t._v(" "),a("li",[t._v("The duration of the transition")])]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file looks like after adding our "),a("code",{staticClass:"inline-code-block"},[t._v("transition")]),t._v(" properties:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"index.styl"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("transition: box-shadow 0.2s")]),t._v(" adds the transition effect to the "),a("code",{staticClass:"inline-code-block"},[t._v("box-shadow")]),t._v(" property with a specified duration of "),a("code",{staticClass:"inline-code-block"},[t._v("0.2s")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("transition: transform 0.2s")]),t._v(" adds the transition effect to the "),a("code",{staticClass:"inline-code-block"},[t._v("transform")]),t._v(" property used by the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag with a specified duration of "),a("code",{staticClass:"inline-code-block"},[t._v("0.2s")]),t._v(".")])]),t._v(" "),a("p",[t._v("When you hover your pointer over the main card, the hover effects should look much smoother.")]),t._v(" "),a("p",[t._v("If you want to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("transition")]),t._v(" property, then check out "),a("a",{attrs:{href:"https://www.w3schools.com/css/css3_transitions.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Transitions"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("Now that we have added our hover effects, let's add the radial gradient background to the main card.")]),t._v(" "),a("h3",{attrs:{id:"adding-gradient-background"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-gradient-background"}},[t._v("#")]),t._v(" Adding Gradient Background")]),t._v(" "),a("p",[t._v("CSS gradients allow you to display smooth transitions between two or more specified colors.\nYou can control numerous aspects of the transitions between the colors including the direction, shape, number of colors, etc.")]),t._v(" "),a("p",[t._v("We'll be adding a circular radial gradient background to the center of the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("hero")]),t._v(":")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"index.styl"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)")]),t._v(" adds a radial gradient with a circular shape to the center of the element starting with a color of "),a("code",{staticClass:"inline-code-block"},[t._v("#2c303a")]),t._v(" which transitions to the "),a("code",{staticClass:"inline-code-block"},[t._v("$backgroundColor")]),t._v(" variable that is defined in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")])]),t._v(" "),a("p",[t._v("If you want to learn more about CSS gradients, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/css3_gradients.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Gradients"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://css-tricks.com/a-complete-guide-to-css-gradients/#top-of-site",target:"_blank",rel:"noopener noreferrer"}},[t._v("A Complete Guide to CSS Gradients"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/radial-gradient",target:"_blank",rel:"noopener noreferrer"}},[t._v("radial-gradient()"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://dev.to/obinnaogbonnajoseph/a-practical-guide-on-radial-gradient-css-2383",target:"_blank",rel:"noopener noreferrer"}},[t._v("A Practical Guide on Radial Gradient - CSS"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("You can also check out "),a("a",{attrs:{href:"https://www.gradientmagic.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Gradient Magic"),a("OutboundLink")],1),t._v(" which is a gallery of CSS gradients that you can freely use in your own projects.")]),t._v(" "),a("p",[t._v("The background of the main card should now be a radial gradient that starts at the center of the card with a color of "),a("code",{staticClass:"inline-code-block"},[t._v("#2c303a")]),t._v(" that circularly transitions to the "),a("code",{staticClass:"inline-code-block"},[t._v("$backgroundColor")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll add styling to make the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component stick to the bottom of the page, and we'll add a highlight effect to the SVG icons.")])],1)}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/38.8ac14eba.js b/assets/js/38.8ac14eba.js new file mode 100644 index 00000000..e5ee3f9b --- /dev/null +++ b/assets/js/38.8ac14eba.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{549:function(t,s,e){"use strict";e.r(s);var a=e(18),n=Object(a.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[e("h1",{attrs:{id:"vuepress-tutorial-11-sticky-footer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-11-sticky-footer"}},[t._v("#")]),t._v(" VuePress Tutorial 11 - Sticky Footer")])]},proxy:!0}])},[e("h2",{attrs:{id:"what-we-re-doing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),e("p",[t._v("We're going to continue styling the blog by making the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component we created in "),e("a",{attrs:{href:"/vuepress-tutorial-8"}},[t._v("VuePress Tutorial 8 - Custom Footer")]),t._v(" into a sticky footer. We were going to be adding a highlight effect when hovering over the "),e("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),e("OutboundLink")],1),t._v(" icons in this tutorial as well, but the process is a little more involved than I remembered. So, we're going to be adding the highlight effect when hovering in the next tutorial.")]),t._v(" "),e("p",[t._v("Make sure you start the local development server which should be running at "),e("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),e("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),e("p",[t._v("You can view all of the code in this tutorial by going to the "),e("code",{staticClass:"inline-code-block"},[t._v("tutorial-11")]),t._v(" branch of the "),e("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-11",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),e("OutboundLink")],1),t._v(" repository.")]),t._v(" "),e("p",[t._v("Now let's get started by discussing what a sticky footer is.")]),t._v(" "),e("h2",{attrs:{id:"what-is-a-sticky-footer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-sticky-footer"}},[t._v("#")]),t._v(" What is a Sticky Footer?")]),t._v(" "),e("p",[t._v("A sticky footer adheres or "),e("span",{staticClass:"post-term-one"},[t._v("sticks")]),t._v(" to the bottom of the browser window assuming there isn't enough content on the page to push the footer lower like on this blog post for example. If the content on the page is short like on the "),e("RouterLink",{attrs:{to:"/"}},[t._v("homepage")]),t._v(", then the footer will still stick to the bottom of the page instead of appearing directly below the content above it.")],1),t._v(" "),e("p",[t._v("There are multiple ways to add a sticky footer to your site, but we're only going to discuss how to use the CSS "),e("code",{staticClass:"inline-code-block"},[t._v("calc()")]),t._v(" function. If you're interested in learning about the other ways of adding a sticky footer, then check out "),e("a",{attrs:{href:"https://css-tricks.com/couple-takes-sticky-footer/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sticky Footer, Five Ways"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"sticky-footer-styling"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sticky-footer-styling"}},[t._v("#")]),t._v(" Sticky Footer Styling")]),t._v(" "),e("p",[t._v("Here's what the "),e("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file looks like after adding the sticky footer styling:")]),t._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token func"}},[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token func"}},[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token func"}},[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),e("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br"),e("span",{staticClass:"line-number"},[t._v("11")]),e("br"),e("span",{staticClass:"line-number"},[t._v("12")]),e("br"),e("span",{staticClass:"line-number"},[t._v("13")]),e("br"),e("span",{staticClass:"line-number"},[t._v("14")]),e("br"),e("span",{staticClass:"line-number"},[t._v("15")]),e("br"),e("span",{staticClass:"line-number"},[t._v("16")]),e("br"),e("span",{staticClass:"line-number"},[t._v("17")]),e("br"),e("span",{staticClass:"line-number"},[t._v("18")]),e("br"),e("span",{staticClass:"line-number"},[t._v("19")]),e("br"),e("span",{staticClass:"line-number"},[t._v("20")]),e("br"),e("span",{staticClass:"line-number"},[t._v("21")]),e("br"),e("span",{staticClass:"line-number"},[t._v("22")]),e("br"),e("span",{staticClass:"line-number"},[t._v("23")]),e("br"),e("span",{staticClass:"line-number"},[t._v("24")]),e("br"),e("span",{staticClass:"line-number"},[t._v("25")]),e("br"),e("span",{staticClass:"line-number"},[t._v("26")]),e("br"),e("span",{staticClass:"line-number"},[t._v("27")]),e("br"),e("span",{staticClass:"line-number"},[t._v("28")]),e("br"),e("span",{staticClass:"line-number"},[t._v("29")]),e("br"),e("span",{staticClass:"line-number"},[t._v("30")]),e("br"),e("span",{staticClass:"line-number"},[t._v("31")]),e("br"),e("span",{staticClass:"line-number"},[t._v("32")]),e("br"),e("span",{staticClass:"line-number"},[t._v("33")]),e("br")])])])],1),t._v(" "),e("p",[t._v("Here we added "),e("code",{staticClass:"inline-code-block"},[t._v("min-height: calc(100vh - 10.3125rem)")]),t._v(" to a "),e("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(".")]),t._v(" "),e("p",[t._v("If you inspect the browser and go to the "),e("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab, you can see where the "),e("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(" is in the HTML of the blog.")]),t._v(" "),e("code-group",[e("code-block",{attrs:{title:"HTML Showing the theme-container Class"}},[e("div",{staticClass:"language-html line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-html"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br")])])])],1),t._v(" "),e("p",[t._v("The "),e("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(" contains all of the content of the blog except for the "),e("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag.")]),t._v(" "),e("p",[t._v("So, here we're using "),e("code",{staticClass:"inline-code-block"},[t._v("min-height: calc(100vh - 10.3125rem)")]),t._v(" to set the minimum height of the content inside of the "),e("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(" to be "),e("code",{staticClass:"inline-code-block"},[t._v("100vh")]),t._v(" minus "),e("code",{staticClass:"inline-code-block"},[t._v("10.3125rem")]),t._v(" which is the height of the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component including the top and bottom padding.")]),t._v(" "),e("p",[t._v("The unit of "),e("code",{staticClass:"inline-code-block"},[t._v("vh")]),t._v(" is relative to 1% of the height of the viewport which is the browser window size, so "),e("code",{staticClass:"inline-code-block"},[t._v("100vh")]),t._v(" is 100% of the height of the viewport.")]),t._v(" "),e("p",[t._v("So, when we subtract "),e("code",{staticClass:"inline-code-block"},[t._v("10.3125rem")]),t._v(" from "),e("code",{staticClass:"inline-code-block"},[t._v("100vh")]),t._v(", we're subtracting the height of the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component from 100% of the viewport height.")]),t._v(" "),e("p",[t._v("This means the minimum height of the content inside of the "),e("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(" will be the entire homepage height minus the height of the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component.")]),t._v(" "),e("p",[t._v("After setting this style, notice how the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component is now pushed to the bottom of the page. This is how we get the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component to stick to the bottom of the page.")]),t._v(" "),e("p",[t._v("Also, since we added this style to the "),e("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file, this style will be applied globally to the blog which is fine since the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component will be used on every page in the blog.")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Using a Fixed Footer Size")]),t._v(" "),e("p",[t._v("We're using a fixed size for the height of the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component which means if we change the height later on we'll have to update this value. In a future tutorial we'll be changing the height, so we'll have to update this value. If you prefer to not update this value whenever you update the height of the "),e("code",{staticClass:"inline-code-block"},[t._v("Footer")]),t._v(" component, then it may be worth looking into implementing the "),e("code",{staticClass:"inline-code-block"},[t._v("flexbox")]),t._v(" or "),e("code",{staticClass:"inline-code-block"},[t._v("grid")]),t._v(" methods for adding a sticky footer which you can find in the "),e("a",{attrs:{href:"https://css-tricks.com/couple-takes-sticky-footer/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sticky Footer, Five Ways"),e("OutboundLink")],1),t._v(" post.")])]),t._v(" "),e("p",[t._v("If you have questions about the CSS discussed above, then check out these resources:")]),t._v(" "),e("ul",[e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://www.w3schools.com/cssref/pr_dim_min-height.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS min-height Property"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/calc",target:"_blank",rel:"noopener noreferrer"}},[t._v("calc()"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS values and units"),e("OutboundLink")],1)])])]),t._v(" "),e("h2",{attrs:{id:"next-steps"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),e("p",[t._v("As mentioned in the beginning of this post, in the next tutorial we're going to be adding a highlight effect when hovering over the "),e("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),e("OutboundLink")],1),t._v(" icons.")])],1)}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/39.adfc8e53.js b/assets/js/39.adfc8e53.js new file mode 100644 index 00000000..51a0d704 --- /dev/null +++ b/assets/js/39.adfc8e53.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{550:function(t,s,a){"use strict";a.r(s);var n=a(18),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-12-highlight-svgs-on-hover"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-12-highlight-svgs-on-hover"}},[t._v("#")]),t._v(" VuePress Tutorial 12 - Highlight SVGs on Hover")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("We're now ready to add a highlight effect when hovering over the "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),a("OutboundLink")],1),t._v(" icons. The method we'll be using doesn't require a lot of styling, but it does require us to edit the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute of the "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),a("OutboundLink")],1),t._v(" icons.")]),t._v(" "),a("p",[t._v("We'll demonstrate how to edit the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute by manually editing the files as well as using a Command-line Interface (CLI) command provided by "),a("a",{attrs:{href:"https://github.com/ntnyq/vuepress-plugin-svg-icons/tree/vuepress-v1",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" which will automate the process and optimize the files.")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-12")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-12",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("p",[t._v("Now let's begin by manually editing one of the icon files.")]),t._v(" "),a("h2",{attrs:{id:"manual-editing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manual-editing"}},[t._v("#")]),t._v(" Manual Editing")]),t._v(" "),a("p",[t._v("When we downloaded the icons from "),a("a",{attrs:{href:"https://www.iconfont.cn/collections/index",target:"_blank",rel:"noopener noreferrer"}},[t._v("iconfont"),a("OutboundLink")],1),t._v(" we downloaded them with a "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute which will override the color we set for the hover effect.")]),t._v(" "),a("p",[t._v("To fix this issue we can manually remove the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute from each icon file.")]),t._v(" "),a("h3",{attrs:{id:"icon-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#icon-example"}},[t._v("#")]),t._v(" Icon Example")]),t._v(" "),a("p",[t._v("We'll use the "),a("code",{staticClass:"inline-code-block"},[t._v("GitHub.svg")]),t._v(" file as an example:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"GitHub.svg with fill Attribute"}},[a("div",{staticClass:"language-svg line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-svg"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token doctype"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("svg")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("t")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1625711611350"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("viewBox")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0 0 1024 1024"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("version")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("xmlns")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2000/svg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("p-id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2770"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xlink")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/1999/xlink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("200"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("200"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("defs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/css"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("d")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9\n 19.9-10.8 19.9-22.2v-77.6c-135.8\n 15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5\n 31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5\n 17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5\n 16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2\n 118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0\n 80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7\n 24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59\n 188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8\n 9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4\n 512.1c0-247.5-200.6-447.9-447.9-447.9C265\n 64.1 64.6 264.5 64.6 512z"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("fill")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("#e6e6e6"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("p-id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2771"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br")])])])],1),t._v(" "),a("p",[t._v("After removing "),a("code",{staticClass:"inline-code-block"},[t._v('fill="e6e6e6"')]),t._v(", the file will look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"GitHub.svg without fill Attribute"}},[a("div",{staticClass:"language-svg line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-svg"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token doctype"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("svg")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("t")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1625711611350"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("viewBox")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0 0 1024 1024"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("version")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("xmlns")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2000/svg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("p-id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2770"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xlink")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/1999/xlink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("200"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("200"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("defs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/css"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("d")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9\n 19.9-10.8 19.9-22.2v-77.6c-135.8\n 15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5\n 31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5\n 17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5\n 16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2\n 118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0\n 80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7\n 24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59\n 188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8\n 9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4\n 512.1c0-247.5-200.6-447.9-447.9-447.9C265\n 64.1 64.6 264.5 64.6 512z"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("p-id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2771"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("SVG File Formatting")]),t._v(" "),a("p",[t._v("The files above have been formatted to make them easier to read for this post, but the contents in your file may all be on one line. If this is the case, just scroll until you find the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute or search for "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" in the file to be able to easily find and remove it.")])]),t._v(" "),a("h3",{attrs:{id:"icon-styles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#icon-styles"}},[t._v("#")]),t._v(" Icon Styles")]),t._v(" "),a("p",[t._v("Now that we have removed the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute from the file, we can add the styling to highlight the icon when hovering over it.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file looks like after adding the hover effect:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Footer.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icons"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://github.com/codemonkeysio"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("GitHub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://www.youtube.com/@codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("YouTube"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://gab.com/codemonkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Gab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://t.me/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Telegram"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://twitter.com/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Twitter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://codemonkeys.tech/rss.xml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("RSS"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://keybase.io/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Keybase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("made-by"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Made by & for Code Monkeys 🐵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Footer'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.footer\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("flex-direction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" column\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2.5rem 2.5rem 2rem\n .icons\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1.75rem\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("svg")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("hover\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fill")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $accentColor\n .icons > "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("not")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("last-child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 4.6875rem\n .made-by\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br"),a("span",{staticClass:"line-number"},[t._v("70")]),a("br"),a("span",{staticClass:"line-number"},[t._v("71")]),a("br"),a("span",{staticClass:"line-number"},[t._v("72")]),a("br"),a("span",{staticClass:"line-number"},[t._v("73")]),a("br"),a("span",{staticClass:"line-number"},[t._v("74")]),a("br"),a("span",{staticClass:"line-number"},[t._v("75")]),a("br"),a("span",{staticClass:"line-number"},[t._v("76")]),a("br"),a("span",{staticClass:"line-number"},[t._v("77")]),a("br"),a("span",{staticClass:"line-number"},[t._v("78")]),a("br"),a("span",{staticClass:"line-number"},[t._v("79")]),a("br"),a("span",{staticClass:"line-number"},[t._v("80")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("svg:hover")]),t._v(" applies the "),a("code",{staticClass:"inline-code-block"},[t._v("hover")]),t._v(" pseudo-class to the "),a("code",{staticClass:"inline-code-block"},[t._v("svg")]),t._v(" selector which will apply the styles defined inside of it when the user hovers their pointer over the "),a("code",{staticClass:"inline-code-block"},[t._v("svg")]),t._v(" tag.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("fill: $accentColor")]),t._v(" changes the fill of the "),a("code",{staticClass:"inline-code-block"},[t._v("svg")]),t._v(" tag to be the accent color.")])]),t._v(" "),a("p",[t._v("Notice the icon fill is now set to be the accent color even if you're not hovering over the icon.")]),t._v(" "),a("p",[t._v("This is because we haven't set a "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute value for when the user isn't hovering over the icon, so it falls back to the value set in "),a("code",{staticClass:"inline-code-block"},[t._v("svg:hover")]),t._v(".")]),t._v(" "),a("p",[t._v("To fix this issue we'll add the following styling to the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Footer.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icons"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://github.com/codemonkeysio"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("GitHub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://www.youtube.com/@codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("YouTube"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://gab.com/codemonkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Gab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://t.me/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Telegram"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://twitter.com/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Twitter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://codemonkeys.tech/rss.xml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("RSS"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://keybase.io/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Keybase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("made-by"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Made by & for Code Monkeys 🐵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Footer'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.footer\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("flex-direction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" column\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2.5rem 2.5rem 2rem\n .icons\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1.75rem\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n svg\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fill")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("svg")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("hover\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fill")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $accentColor\n .icons > "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("not")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("last-child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 4.6875rem\n .made-by\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br"),a("span",{staticClass:"line-number"},[t._v("70")]),a("br"),a("span",{staticClass:"line-number"},[t._v("71")]),a("br"),a("span",{staticClass:"line-number"},[t._v("72")]),a("br"),a("span",{staticClass:"line-number"},[t._v("73")]),a("br"),a("span",{staticClass:"line-number"},[t._v("74")]),a("br"),a("span",{staticClass:"line-number"},[t._v("75")]),a("br"),a("span",{staticClass:"line-number"},[t._v("76")]),a("br"),a("span",{staticClass:"line-number"},[t._v("77")]),a("br"),a("span",{staticClass:"line-number"},[t._v("78")]),a("br"),a("span",{staticClass:"line-number"},[t._v("79")]),a("br"),a("span",{staticClass:"line-number"},[t._v("80")]),a("br"),a("span",{staticClass:"line-number"},[t._v("81")]),a("br"),a("span",{staticClass:"line-number"},[t._v("82")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("svg")]),t._v(" is the selector used to target the icon.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("fill: $textColor")]),t._v(" sets the fill of the "),a("code",{staticClass:"inline-code-block"},[t._v("svg")]),t._v(" to be the text color when the user isn't hovering over the icon.")])]),t._v(" "),a("p",[t._v("The fill should now be the same as the text color when you're not hovering over the icon, and it should get set to be the accent color when you hover over the icon.")]),t._v(" "),a("p",[t._v("To set the hover effect for the other icons, you will need to remove the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute from the other icon files.")]),t._v(" "),a("p",[t._v("If you have questions about the CSS discussed above, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pseudo-classes"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/:hover",target:"_blank",rel:"noopener noreferrer"}},[t._v(":hover"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG Attribute reference"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill",target:"_blank",rel:"noopener noreferrer"}},[t._v("fill"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("You can also check out this "),a("a",{attrs:{href:"https://css-tricks.com/the-many-ways-to-change-an-svg-fill-on-hover-and-when-to-use-them/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS-Tricks post"),a("OutboundLink")],1),t._v(" if you're interested in learning about other ways to change the fill on hover.")]),t._v(" "),a("p",[t._v("Instead of manually editing each file, we can use the CLI command provided by "),a("a",{attrs:{href:"https://github.com/ntnyq/vuepress-plugin-svg-icons/tree/vuepress-v1",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" to automate the process.")]),t._v(" "),a("h2",{attrs:{id:"automated-editing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#automated-editing"}},[t._v("#")]),t._v(" Automated Editing")]),t._v(" "),a("p",[t._v("The CLI command provided by "),a("a",{attrs:{href:"https://github.com/ntnyq/vuepress-plugin-svg-icons/tree/vuepress-v1",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" optimizes "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),a("OutboundLink")],1),t._v(" files by removing a lot of redundant and useless information including the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute. The plugin does this by integrating "),a("a",{attrs:{href:"https://github.com/svg/svgo",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVGO"),a("OutboundLink")],1),t._v(" which stands for Scalable Vector Graphic Optimizer and is a "),a("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Node.js"),a("OutboundLink")],1),t._v(" based tool for optimizing "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),a("OutboundLink")],1),t._v(" files.")]),t._v(" "),a("h3",{attrs:{id:"cli-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cli-command"}},[t._v("#")]),t._v(" CLI Command")]),t._v(" "),a("p",[t._v("Here's the CLI command you need to run "),a("code",{staticClass:"inline-code-block"},[t._v("vuepress svgo [docsDir]")]),t._v(" where "),a("code",{staticClass:"inline-code-block"},[t._v("[docsDir]")]),t._v(" is the docs directory for your project which in our case is "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(".")]),t._v(" "),a("p",[t._v("You can add the CLI command to the "),a("code",{staticClass:"inline-code-block"},[t._v("scripts")]),t._v(" object in the "),a("code",{staticClass:"inline-code-block"},[t._v("package.json")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"package.json"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"code-monkeys-blog-tutorials"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"main"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"repository"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"git"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"author"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"J the Code Monkey"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"support@codemonkeys.tech"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://www.codemonkeys.tech/"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"license"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GPL-3.0-or-later"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docs:dev"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vuepress dev docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docs:build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vuepress build docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"svgo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vuepress svgo docs"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@goy/vuepress-plugin-svg-icons"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^4.2.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vuepress"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1.8.2"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Then you can run the script using:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" svgo\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])]),t._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" run svgo\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("p",[t._v("After running the script, the "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG"),a("OutboundLink")],1),t._v(" files will be optimized which includes removing the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute from the files.")]),t._v(" "),a("p",[t._v("The hover effect should now be applied to each icon assuming you added the styling from the section above.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about the plugin, then check out the "),a("a",{attrs:{href:"https://github.com/ntnyq/vuepress-plugin-svg-icons/tree/vuepress-v1/docs/guide",target:"_blank",rel:"noopener noreferrer"}},[t._v("guide"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You can also check out "),a("a",{attrs:{href:"https://github.com/svg/svgo",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVGO"),a("OutboundLink")],1),t._v(" if you want to learn more about the optimization tool including CLI usage, configuration, API usage, etc.")]),t._v(" "),a("h3",{attrs:{id:"optimized-icon-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#optimized-icon-example"}},[t._v("#")]),t._v(" Optimized Icon Example")]),t._v(" "),a("p",[t._v("Here's the contents of the optimized "),a("code",{staticClass:"inline-code-block"},[t._v("GitHub.svg")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Optimized GitHub.svg"}},[a("div",{staticClass:"language-svg line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-svg"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("svg")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("viewBox")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0 0 1024 1024"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("xmlns")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2000/svg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("defs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("d")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9\n 19.9-10.8 19.9-22.2v-77.6c-135.8\n 15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5\n 31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5\n 17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5\n 16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2\n 118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0\n 80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7\n 24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59\n 188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c.8\n 9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4\n 512.1c0-247.5-200.6-447.9-447.9-447.9C265\n 64.1 64.6 264.5 64.6 512z"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("SVG File Formatting")]),t._v(" "),a("p",[t._v("Just like the previous examples the file is formatted to make it easier to read for this post, but the contents in your file may all be on one line.")])]),t._v(" "),a("p",[t._v("If you compare the optimized file with the original file above, you'll notice a lot of unnecessary information was removed including the "),a("code",{staticClass:"inline-code-block"},[t._v("fill")]),t._v(" attribute without affecting the rendering of the icons.")]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll be styling the navbar by updating the background color, height, border, etc.")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/4.f23131f6.js b/assets/js/4.f23131f6.js new file mode 100644 index 00000000..75817aa2 --- /dev/null +++ b/assets/js/4.f23131f6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{408:function(t,e,r){},409:function(t,e,r){},413:function(t,e,r){"use strict";r(408)},414:function(t,e,r){"use strict";r(409)},416:function(t,e,r){"use strict";var n=r(407),i={name:"PostDetails",props:{author:{type:String,required:!0},posted:{type:String,required:!0},updated:{required:!0},numberOfCommits:{required:!0}},methods:{formatDate:n.b}},s=(r(413),r(18)),o=Object(s.a)(i,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"post-details"},[r("span",{staticClass:"author"},[t._v(" By: "+t._s(t.author)+" ")]),t._v(" "),r("div",{staticClass:"posted-updated-wrapper"},[r("span",{staticClass:"posted-wrapper"},[r("span",{staticClass:"bullet"},[t._v("•")]),r("span",{staticClass:"posted"},[t._v("Posted: "+t._s(t.formatDate(t.posted)))])]),t._v(" "),t.numberOfCommits>1?r("span",{staticClass:"updated-wrapper"},[r("span",{staticClass:"bullet"},[t._v("•")]),r("span",{staticClass:"updated"},[t._v("Updated: "+t._s(t.formatDate(t.updated)))])]):t._e()])])}),[],!1,null,"652ba438",null);e.a=o.exports},417:function(t,e,r){"use strict";var n={name:"PaginationButtons",props:{prevButton:{type:Boolean,required:!1,default:!1}}},i=(r(414),r(18)),s=Object(i.a)(n,(function(){var t=this.$createElement,e=this._self._c||t;return this.prevButton?e("div",[e("vp-icon",{staticClass:"left-arrow",attrs:{name:"leftArrow"}}),this._v("Prev\n")],1):e("div",[this._v("\n Next"),e("vp-icon",{staticClass:"right-arrow",attrs:{name:"rightArrow"}})],1)}),[],!1,null,"547f8e12",null);e.a=s.exports},434:function(t,e,r){},435:function(t,e,r){},436:function(t,e,r){},483:function(t,e,r){"use strict";r(434)},484:function(t,e,r){"use strict";r(435)},485:function(t,e,r){var n=r(225),i=r(121),s=r(486),o=r(490);t.exports=function(t,e){if(null==t)return{};var r=n(o(t),(function(t){return[t]}));return e=i(e),s(t,r,(function(t,r){return e(t,r[0])}))}},486:function(t,e,r){var n=r(125),i=r(487),s=r(113);t.exports=function(t,e,r){for(var o=-1,a=e.length,u={};++o")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("theme-container")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the navbar Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("display: flex")]),t._v(" defines a flex container for all of the direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("align-items: center")]),t._v(" vertically centers the flex items, i.e., the direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("height: 4.5rem")]),t._v(" sets the height of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("4.5rem")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("background-color: $backgroundColor")]),t._v(" sets the background color of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("$backgroundColor")]),t._v(" which is a global styling variable we set in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("border-bottom-width: 0.125rem")]),t._v(" sets the border bottom width of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("0.125rem")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"site-name-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#site-name-class"}},[t._v("#")]),t._v(" Site Name Class")]),t._v(" "),a("p",[t._v("After locating and styling the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class, we're ready to move on to the "),a("code",{staticClass:"inline-code-block"},[t._v("site-name")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-2"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("site-name")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the site-name Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Code Monkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("logo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("site-name can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Code Monkeys"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("site-name")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("span")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("home-link")]),t._v(" which is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-2"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("site-name")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class and apply the following style:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the site-name Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("font-size: 1.5rem")]),t._v(" sets the font size of the site name in the navbar, i.e., Code Monkeys to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.5rem")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"links-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#links-class"}},[t._v("#")]),t._v(" Links Class")]),t._v(" "),a("p",[t._v("We're now ready to style the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-3"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the links Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-3"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the links Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("background-color: transparent")]),t._v(" sets the background color behind the search box and of the links on the right side of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("transparent")]),t._v(". This has the effect of showing the background color set in the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class since it's no longer being covered by the background color set in the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("height: 3rem")]),t._v(" sets the height of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag which contains the search box and the links on the right side of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("3rem")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("align-items: center")]),t._v(" vertically centers the flex items, i.e., the direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" which was given a style of "),a("code",{staticClass:"inline-code-block"},[t._v("display: flex")]),t._v(" by the "),a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1)]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"search-box-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#search-box-class"}},[t._v("#")]),t._v(" Search Box Class")]),t._v(" "),a("p",[t._v("We've finished styling the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class, so let's begin the styling of the "),a("code",{staticClass:"inline-code-block"},[t._v("search-box")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-4"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("search-box")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the search-box Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("search-box")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-4"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("search-box")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the search-box Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("margin-right: 1.5rem")]),t._v(" adds a margin of "),a("code",{staticClass:"inline-code-block"},[t._v("1.5rem")]),t._v(" to the right of the search box.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("font-size: 1.125rem")]),t._v(" sets the font size of the text in the "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.125rem")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("background-color: transparent")]),t._v(" sets the background color of the "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("transparent")]),t._v(". This has the effect of showing the background color set in the "),a("code",{staticClass:"inline-code-block"},[t._v("navbar")]),t._v(" class since it's no longer being covered by the background color set in the "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("border-width: 0.125rem")]),t._v(" sets the width of the border around the "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("0.125rem")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("color: $textColor")]),t._v(" sets the color of the text in the "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("$textColor")]),t._v(" which is a global styling variable we set in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Viewing the font-size and color Styles")]),t._v(" "),a("p",[t._v("To see the "),a("code",{staticClass:"inline-code-block"},[t._v("font-size")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("color")]),t._v(" styles in action try typing some text in the search box. Once you click in the search box, notice the border gets its color set to the "),a("code",{staticClass:"inline-code-block"},[t._v("$accentColor")]),t._v(" which is a global styling variable we set in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file. This effect is provided by the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(" and uses the "),a("code",{staticClass:"inline-code-block"},[t._v("focus")]),t._v(" pseudo-class.")])]),t._v(" "),a("h2",{attrs:{id:"nav-links-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nav-links-class"}},[t._v("#")]),t._v(" Nav Links Class")]),t._v(" "),a("p",[t._v("Now that we have styled the "),a("code",{staticClass:"inline-code-block"},[t._v("search-box")]),t._v(" class and its child "),a("code",{staticClass:"inline-code-block"},[t._v("input")]),t._v(" tag, we're ready to move on to the styling of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-5"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the nav-links Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("nav")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-5"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("links")]),t._v(" class and apply the following style:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the nav-links Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("font-size: 1.25rem")]),t._v(" sets the font size of the nav links on the right side of the navbar to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.25rem")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"nav-item-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nav-item-class"}},[t._v("#")]),t._v(" Nav Item Class")]),t._v(" "),a("p",[t._v("We're now ready to style the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-6"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the nav-item Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that there are four "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" classes. Each one is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-6"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-links")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the nav-item Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item:first-child")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.75")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v(".nav-item:first-child")]),t._v(" applies the "),a("code",{staticClass:"inline-code-block"},[t._v("first-child")]),t._v(" pseudo-class to the "),a("code",{staticClass:"inline-code-block"},[t._v(".nav-item")]),t._v(" selector. The "),a("code",{staticClass:"inline-code-block"},[t._v("first-child")]),t._v(" pseudo-class applies the styles defined inside of it to the first element among a group of sibling elements which in our case is the first "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" in the group of sibling "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags that have the class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("margin-left: 0")]),t._v(" adds a margin of "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" to the left of the first "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" within the group of sibling "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags that have a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("margin-left: 1.75rem")]),t._v(" adds a margin of "),a("code",{staticClass:"inline-code-block"},[t._v("1.75rem")]),t._v(" to the left of all of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags that have a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" except for the first one since that is being styled by the "),a("code",{staticClass:"inline-code-block"},[t._v("first-child")]),t._v(" pseudo-class.")])]),t._v(" "),a("h2",{attrs:{id:"dropdown-title-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dropdown-title-class"}},[t._v("#")]),t._v(" Dropdown Title Class")]),t._v(" "),a("p",[t._v("After finishing the styling for the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class, we're now ready to move on to the styling of the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-title")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-7"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-7"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-title")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the dropdown-title Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("mobile-dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-title")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("button")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" which is a child tag of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling-7"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-7"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-title")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class and apply the following style:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the nav-item Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item:first-child")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.75")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".dropdown-title")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("font-size: 1.25rem")]),t._v(" sets the font size of the dropdown title, i.e., Posts to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.25rem")]),t._v(".")])]),t._v(" "),a("p",[t._v("If you have questions about the CSS discussed above, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox",target:"_blank",rel:"noopener noreferrer"}},[t._v("Basic Concepts of Flexbox"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://css-tricks.com/snippets/css/a-guide-to-flexbox/",target:"_blank",rel:"noopener noreferrer"}},[t._v("A Complete Guide to Flexbox"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pseudo-classes"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/:focus",target:"_blank",rel:"noopener noreferrer"}},[t._v(":focus"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child",target:"_blank",rel:"noopener noreferrer"}},[t._v(":first-child"),a("OutboundLink")],1)])])]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll be styling the dropdown menu in the navbar by updating the background color, border, padding, etc.")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/41.c172b375.js b/assets/js/41.c172b375.js new file mode 100644 index 00000000..2245519e --- /dev/null +++ b/assets/js/41.c172b375.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{551:function(t,s,a){"use strict";a.r(s);var n=a(18),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-14-dropdown-menu-styling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-14-dropdown-menu-styling"}},[t._v("#")]),t._v(" VuePress Tutorial 14 - Dropdown Menu Styling")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling to make it match the rest of the blog. To implement the styling we'll be targeting these CSS classes "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" which are provided by the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the "),a("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file which will globally apply the styles. Finally, we'll be describing the styling in detail.")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-14")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-14",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"force-dropdown-menu-to-hover"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#force-dropdown-menu-to-hover"}},[t._v("#")]),t._v(" Force Dropdown Menu to Hover")]),t._v(" "),a("p",[t._v("Before we start styling the dropdown menu, we're going to force an element state of hover on the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(". This will ensure we can see the changes we're making to the dropdown menu even when we move the cursor away from the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" class.")]),t._v(" "),a("p",[t._v("To do this we need to select the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" class in the "),a("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab.")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the dropdown-wrapper Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2337px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])],1),t._v(" "),a("p",[t._v("After selecting the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" class in the "),a("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab, we need to go to the "),a("code",{staticClass:"inline-code-block"},[t._v("Styles")]),t._v(" tab, click on the "),a("code",{staticClass:"inline-code-block"},[t._v(":hov")]),t._v(" tab, then force the element state of hover by checking the "),a("code",{staticClass:"inline-code-block"},[t._v(":hover")]),t._v(" checkbox.")]),t._v(" "),a("p",[t._v("The dropdown menu should now be shown even when the cursor is moved away from the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" class.")]),t._v(" "),a("h2",{attrs:{id:"nav-dropdown"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nav-dropdown"}},[t._v("#")]),t._v(" Nav Dropdown")]),t._v(" "),a("p",[t._v("We're now ready to begin styling the dropdown menu.")]),t._v(" "),a("h3",{attrs:{id:"html-location"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("We're going to begin the styling by locating where the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(" class is in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the nav-dropdown Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2337px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("mobile-dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(" class is attached to a "),a("code",{staticClass:"inline-code-block"},[t._v("ul")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-wrapper")]),t._v(" which is a child tag of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"styling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("This means in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-item")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the nav-dropdown Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item:first-child")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.75")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".dropdown-title")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-dropdown")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("text-align: center")]),t._v(" horizontally aligns the text in the dropdown menu.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("background-color: $backgroundColor")]),t._v(" sets the background color of the dropdown menu to be "),a("code",{staticClass:"inline-code-block"},[t._v("$backgroundColor")]),t._v(" which is a global styling variable we set in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("border: 0.125rem solid $borderColor")]),t._v(" adds a border around the dropdown menu with a thickness of "),a("code",{staticClass:"inline-code-block"},[t._v("0.125rem")]),t._v(", a style of "),a("code",{staticClass:"inline-code-block"},[t._v("solid")]),t._v(", and a color of "),a("code",{staticClass:"inline-code-block"},[t._v("$borderColor")]),t._v(" which was defined in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding: 0.8rem 0")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("0.8rem")]),t._v(" to the top and bottom and "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" to the left and right of the dropdown menu.")])]),t._v(" "),a("h2",{attrs:{id:"dropdown-item"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dropdown-item"}},[t._v("#")]),t._v(" Dropdown Item")]),t._v(" "),a("p",[t._v("We're now ready to style the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" class.")]),t._v(" "),a("h3",{attrs:{id:"html-location-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#html-location-2"}},[t._v("#")]),t._v(" HTML Location")]),t._v(" "),a("p",[t._v("Here's the location of the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" class in the HTML:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Locating the dropdown-item Class"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-current")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home-link router-link-exact-active router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("links"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2337px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("search-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("nav")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-links can-hide"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("button"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-label")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Posts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("mobile-dropdown-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ::marker\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" All Posts "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ::marker\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" By Topic "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dropdown-subitem-wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("nav-item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br")])])])],1),t._v(" "),a("p",[t._v("From the HTML above we can see that there are two "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" classes. Each one is attached to an "),a("code",{staticClass:"inline-code-block"},[t._v("li")]),t._v(" tag and is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("ul")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(".")]),t._v(" "),a("p",[t._v("Also, notice the "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag which is a child of the "),a("code",{staticClass:"inline-code-block"},[t._v("li")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(". We'll be styling this "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag as well.")]),t._v(" "),a("h3",{attrs:{id:"styling-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-2"}},[t._v("#")]),t._v(" Styling")]),t._v(" "),a("p",[t._v("In the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" file we can nest the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" class inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("nav-dropdown")]),t._v(" class as well as nest the "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("dropdown-item")]),t._v(" class and apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the dropdown-item Class"}},[a("div",{staticClass:"language-stylus line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-stylus"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-container")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("min-height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("calc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("vh")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.3125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".navbar")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".site-name")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".search-box")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("input")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token color"}},[t._v("transparent")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $textColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-links")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item:first-child")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-item")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.75")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".dropdown-title")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".nav-dropdown")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" $backgroundColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".dropdown-item")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h4")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("cursor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" text")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.45")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.375")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".home")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" $darkBorderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" box-shadow "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.625")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-image")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("radial-gradient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("circle at center center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#2c303a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $backgroundColor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" transform "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("s")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".hero:hover")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token hexcode"}},[t._v("#0b0c0f")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token func"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("scale")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".features")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.125")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")]),t._v(" solid $borderColor")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".feature")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v("h2")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property-declaration"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.4")]),a("span",{pre:!0,attrs:{class:"token unit"}},[t._v("rem")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br"),a("span",{staticClass:"line-number"},[t._v("70")]),a("br"),a("span",{staticClass:"line-number"},[t._v("71")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding-bottom: 0.4rem")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("0.4rem")]),t._v(" to the bottom of each of the dropdown items.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("border-top: 0.0625rem solid $borderColor")]),t._v(" adds a border to the top of the "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag, i.e., the By Topics text with a thickness of "),a("code",{staticClass:"inline-code-block"},[t._v("0.0625rem")]),t._v(", a style of "),a("code",{staticClass:"inline-code-block"},[t._v("solid")]),t._v(", and a color of "),a("code",{staticClass:"inline-code-block"},[t._v("$borderColor")]),t._v(" which was defined in the "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("cursor: text")]),t._v(" sets the cursor when pointing over the "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag, i.e., the By Topics text to be the text cursor which indicates the text can be selected and is typically in the shape of an I-beam.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("margin: 0.45rem 0.375rem 0")]),t._v(" adds a margin of "),a("code",{staticClass:"inline-code-block"},[t._v("0.45rem")]),t._v(" to the top, "),a("code",{staticClass:"inline-code-block"},[t._v("0.375rem")]),t._v(" to the left and right, and "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" to the bottom of the "),a("code",{staticClass:"inline-code-block"},[t._v("h4")]),t._v(" tag, i.e., the By Topics text.")])]),t._v(" "),a("p",[t._v("If you have questions about the CSS discussed above, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor",target:"_blank",rel:"noopener noreferrer"}},[t._v("cursor"),a("OutboundLink")],1)])])]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll be installing and beginning the process of configuring the "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("@vuepress/plugin-blog"),a("OutboundLink")],1),t._v(".")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/42.06b358e9.js b/assets/js/42.06b358e9.js new file mode 100644 index 00000000..56d48287 --- /dev/null +++ b/assets/js/42.06b358e9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{553:function(s,t,a){"use strict";a.r(t);var n=a(18),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey},scopedSlots:s._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-15-blog-plugin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-15-blog-plugin"}},[s._v("#")]),s._v(" VuePress Tutorial 15 - Blog Plugin")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[s._v("#")]),s._v(" What We're Doing")]),s._v(" "),a("p",[s._v("It's now time to install and begin the process of configuring "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("@vuepress/plugin-blog"),a("OutboundLink")],1),s._v(". We're going to start by describing the main features provided by the plugin. Then we'll go over the installation and usage. After going over the installation and usage, we'll describe the concepts and implementation of "),a("span",{staticClass:"post-term-one"},[s._v("document classification")]),s._v(", "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(", and "),a("span",{staticClass:"post-term-one"},[s._v("directory classification")]),s._v(".")]),s._v(" "),a("p",[s._v("If you're interested you can check out the blog plugin code "),a("a",{attrs:{href:"https://github.com/vuepress/vuepress-plugin-blog",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(". You can also check out the "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("@vuepress/theme-blog"),a("OutboundLink")],1),s._v(" if you're interested in learning more about it. We won't be discussing the blog theme in detail since we're using the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("p",[s._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/"),a("OutboundLink")],1),s._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),s._v(" "),a("p",[s._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[s._v("tutorial-15")]),s._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-15",target:"_blank",rel:"noopener noreferrer"}},[s._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),s._v(" repository.")]),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("The blog plugin provides the following main features:")]),s._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/guide/getting-started.html#document-classifier",target:"_blank",rel:"noopener noreferrer"}},[s._v("Classification"),a("OutboundLink")],1)]),s._v(" which means you can quickly classify posts by using their characteristics.")]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/guide/getting-started.html#pagination",target:"_blank",rel:"noopener noreferrer"}},[s._v("Pagination"),a("OutboundLink")],1)]),s._v(" which allows you to break up the display of your posts into multiple pages. This provides easier navigation and a better user experience.")]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/client-api/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Client API"),a("OutboundLink")],1)]),s._v(" which allows you to access global variables that contain data about pagination, frontmatter, and the various services the plugin provides.")])]),s._v(" "),a("p",[s._v("We'll be discussing "),a("span",{staticClass:"post-term-one"},[s._v("pagination")]),s._v(" and the "),a("span",{staticClass:"post-term-one"},[s._v("Client API")]),s._v(" in more detail in future tutorials.")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("We're now ready to discuss the installation of the plugin.")]),s._v(" "),a("h3",{attrs:{id:"using-the-tutorials-repo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-tutorials-repo"}},[s._v("#")]),s._v(" Using the Tutorials Repo")]),s._v(" "),a("p",[s._v("If you're following along with the tutorials, then when you switch to the "),a("code",{staticClass:"inline-code-block"},[s._v("tutorial-15")]),s._v(" branch you can run the following command to install the package instead of running the installation command:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])],1),s._v(" "),a("p",[s._v("This will ensure you have the same version used in the blog since the command uses the version specified in the "),a("code",{staticClass:"inline-code-block"},[s._v("yarn.lock")]),s._v(" file during the installation.")]),s._v(" "),a("h3",{attrs:{id:"using-the-installation-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-installation-command"}},[s._v("#")]),s._v(" Using the Installation Command")]),s._v(" "),a("p",[s._v("To install the blog plugin in your own project you can run the following command:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D @vuepress/plugin-blog\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -D @vuepress/plugin-blog\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Installing the Same Blog Plugin Version")]),s._v(" "),a("p",[s._v("If you want to ensure you're installing the same version being used in the tutorials and blog, then run "),a("code",{staticClass:"inline-code-block"},[s._v("yarn upgrade @vuepress/plugin-blog@1.9.4")]),s._v(".")])]),s._v(" "),a("h3",{attrs:{id:"updated-package-json-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#updated-package-json-file"}},[s._v("#")]),s._v(" Updated package.json File")]),s._v(" "),a("p",[s._v("After installing the plugin, the "),a("code",{staticClass:"inline-code-block"},[s._v("package.json")]),s._v(" file should look something like this:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"package.json"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"code-monkeys-blog-tutorials"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"main"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"repository"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"git"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"author"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"J the Code Monkey"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"support@codemonkeys.tech"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://www.codemonkeys.tech/"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"license"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GPL-3.0-or-later"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"docs:dev"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vuepress dev docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"docs:build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vuepress build docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"svgo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"vuepress svgo docs"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"devDependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@goy/vuepress-plugin-svg-icons"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^4.2.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@vuepress/plugin-blog"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^1.9.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"vuepress"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.8.2"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"automatically-installed-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#automatically-installed-plugins"}},[s._v("#")]),s._v(" Automatically Installed Plugins")]),s._v(" "),a("p",[s._v("When installing the blog plugin you may have noticed the following plugins also get installed:")]),s._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vssue.js.org/guide/vuepress.html#vuepress-plugin",target:"_blank",rel:"noopener noreferrer"}},[s._v("@vssue/vuepress-plugin-vssue"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://github.com/lorisleiva/vuepress-plugin-disqus",target:"_blank",rel:"noopener noreferrer"}},[s._v("vuepress-plugin-disqus"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://github.com/webmasterish/vuepress-plugin-feed",target:"_blank",rel:"noopener noreferrer"}},[s._v("vuepress-plugin-feed"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress-plugin-mailchimp.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("vuepress-plugin-mailchimp"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://github.com/ekoeryanto/vuepress-plugin-sitemap",target:"_blank",rel:"noopener noreferrer"}},[s._v("vuepress-plugin-sitemap"),a("OutboundLink")],1)])])]),s._v(" "),a("p",[s._v("These plugins provide features that are common to blogs, so they're included in the installation of the blog plugin. Including these plugins in the installation of the blog plugin saves you the time of searching for plugins that provide these common features as well as from having to separately install each plugin.")]),s._v(" "),a("p",[s._v("The plugins will only be used though if you enable them in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file.")]),s._v(" "),a("p",[s._v("They can also be installed as standalone plugins, so you don't need to use the blog plugin to use them for your site.")]),s._v(" "),a("p",[s._v("We'll be discussing these plugins in more detail in future tutorials.")]),s._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("p",[s._v("To use the blog plugin we need to add the following to the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file which should now look something like this:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"document-classification"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#document-classification"}},[s._v("#")]),s._v(" Document Classification")]),s._v(" "),a("p",[s._v("The blog plugin provides a "),a("span",{staticClass:"post-term-one"},[s._v("document classifier")]),s._v(" which is a set of functions that handles the classifications of pages with the same characteristics.")]),s._v(" "),a("p",[s._v("These characteristics for pages in a blog may consist of:")]),s._v(" "),a("ul",[a("li",[s._v("Pages in the same directory, e.g., a "),a("code",{staticClass:"inline-code-block"},[s._v("_posts")]),s._v(" directory.")]),s._v(" "),a("li",[s._v("Pages containing the same frontmatter key, e.g., "),a("code",{staticClass:"inline-code-block"},[s._v("tag: js")]),s._v(" which signifies those pages contain content related to "),a("code",{staticClass:"inline-code-block"},[s._v("js")]),s._v(", i.e., "),a("code",{staticClass:"inline-code-block"},[s._v("JavaScript")]),s._v(".")])]),s._v(" "),a("p",[s._v("Another common requirement is the ability to group all pages as well as pages with specific tags for "),a("span",{staticClass:"post-term-one"},[s._v("pagination")]),s._v(".")]),s._v(" "),a("p",[s._v("Before discussing directory classification, we're going to first define what a "),a("span",{staticClass:"post-term-one"},[s._v("permalink")]),s._v(" is as well as discuss how they're built and configured. This will give us a better understanding of how the blog plugin uses "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" to build customizable links for blog posts which is preferable to using the default way of creating links.")]),s._v(" "),a("h2",{attrs:{id:"permalinks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#permalinks"}},[s._v("#")]),s._v(" Permalinks")]),s._v(" "),a("p",[s._v("A "),a("span",{staticClass:"post-term-one"},[s._v("permalink")]),s._v(" is a URL that is intended to remain unchanged for a long time. This leads to links that are less susceptible to "),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Link_rot",target:"_blank",rel:"noopener noreferrer"}},[s._v("link rot"),a("OutboundLink")],1),s._v(" which is when a link ceases to point to its originally targeted web page due to the page being relocated to a new address or becoming permanently unavailable.")]),s._v(" "),a("p",[a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("VuePress v1"),a("OutboundLink")],1),s._v(" provided support for creating customizable links by introducing the ability to build "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(".")]),s._v(" "),a("h3",{attrs:{id:"template-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#template-variables"}},[s._v("#")]),s._v(" Template Variables")]),s._v(" "),a("p",[s._v("We're able to build "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" by using the following template variables:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Variable")]),s._v(" "),a("th",[s._v("Description")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v(":year")]),s._v(" "),a("td",[s._v("Published year of post (4-digit)")])]),s._v(" "),a("tr",[a("td",[s._v(":month")]),s._v(" "),a("td",[s._v("Published month of post (2-digit)")])]),s._v(" "),a("tr",[a("td",[s._v(":i_month")]),s._v(" "),a("td",[s._v("Published month of post (without leading zeros)")])]),s._v(" "),a("tr",[a("td",[s._v(":day")]),s._v(" "),a("td",[s._v("Published day of post (2-digit)")])]),s._v(" "),a("tr",[a("td",[s._v(":i_day")]),s._v(" "),a("td",[s._v("Published day of post (without leading zeros)")])]),s._v(" "),a("tr",[a("td",[s._v(":slug")]),s._v(" "),a("td",[s._v("Slugified file path (without extension)")])]),s._v(" "),a("tr",[a("td",[s._v(":regular")]),s._v(" "),a("td",[s._v("Permalink generated by VuePress by default.")])])])]),s._v(" "),a("h3",{attrs:{id:"default-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-configuration"}},[s._v("#")]),s._v(" Default Configuration")]),s._v(" "),a("p",[s._v("The default configuration for "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" is "),a("code",{staticClass:"inline-code-block"},[s._v("/:regular")]),s._v(".")]),s._v(" "),a("p",[s._v("The "),a("code",{staticClass:"inline-code-block"},[s._v(":regular")]),s._v(" template variable will first check if the Markdown files in the documents directory which in our case is the "),a("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory are index files, i.e., "),a("code",{staticClass:"inline-code-block"},[s._v("README.md")]),s._v(" or "),a("code",{staticClass:"inline-code-block"},[s._v("index.md")]),s._v(".")]),s._v(" "),a("ul",[a("li",[s._v("If they're index files, they get converted to URLs without extensions that are based on the file hierarchy.")]),s._v(" "),a("li",[s._v("If they're not index files, they get converted to URLs with "),a("code",{staticClass:"inline-code-block"},[s._v("html")]),s._v(" extensions that are based on the file hierarchy.")])]),s._v(" "),a("p",[s._v("Let's look at some examples to make this clearer where the file paths are relative to the documents directory which again in our case is the "),a("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[s._v("Relative Path")]),s._v(" "),a("th",{staticStyle:{"text-align":"center"}},[s._v("Page Routing")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/README.md")])]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/")])])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo/README.md")])]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo/")])])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo.md")])]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo.html")])])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo/bar.md")])]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("code",{staticClass:"inline-code-block"},[s._v("/foo/bar.html")])])])])]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Using Vue Files")]),s._v(" "),a("p",[s._v("Files with a "),a("code",{staticClass:"inline-code-block"},[s._v("vue")]),s._v(" extension follow the same conventions described for Markdown files above, e.g., "),a("code",{staticClass:"inline-code-block"},[s._v("/README.vue")]),s._v(" gets converted to "),a("code",{staticClass:"inline-code-block"},[s._v("/")]),s._v(".")])]),s._v(" "),a("p",[s._v("You can take a look at "),a("a",{attrs:{href:"https://github.com/vuejs/vuepress/blob/master/packages/%40vuepress/shared-utils/src/fileToPath.ts",target:"_blank",rel:"noopener noreferrer"}},[s._v("fileToPath.ts"),a("OutboundLink")],1),s._v(" to see the code that handles converting files to paths.")]),s._v(" "),a("h3",{attrs:{id:"global-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#global-configuration"}},[s._v("#")]),s._v(" Global Configuration")]),s._v(" "),a("p",[s._v("To globally change the default configuration for "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" for your site you can add the "),a("code",{staticClass:"inline-code-block"},[s._v("permalink")]),s._v(" property to the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file.")]),s._v(" "),a("p",[s._v("We can build a "),a("span",{staticClass:"post-term-one"},[s._v("permalink")]),s._v(" to use in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file by using the template variables.")]),s._v(" "),a("p",[s._v("For example we can use the template variables to build the following "),a("span",{staticClass:"post-term-one"},[s._v("permalink")]),s._v(": "),a("code",{staticClass:"inline-code-block"},[s._v("/:year/:month/:day/:slug")]),s._v(".")]),s._v(" "),a("p",[s._v("We can then set this as the value for the "),a("code",{staticClass:"inline-code-block"},[s._v("permalink")]),s._v(" property in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n permalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/:year/:month/:day/:slug'")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Using the Default Configuration")]),s._v(" "),a("p",[s._v("We'll be leaving the "),a("code",{staticClass:"inline-code-block"},[s._v("permalink")]),s._v(" property with the default value of "),a("code",{staticClass:"inline-code-block"},[s._v("/:regular")]),s._v(", and we'll use the configuration provided by the blog plugin to customize the "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" for each blog post.")])]),s._v(" "),a("h3",{attrs:{id:"local-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#local-configuration"}},[s._v("#")]),s._v(" Local Configuration")]),s._v(" "),a("p",[s._v("It's also possible to set a "),a("span",{staticClass:"post-term-one"},[s._v("permalink")]),s._v(" locally for a single page which overrides any globally set configuration.")]),s._v(" "),a("p",[s._v("This is done be setting the "),a("code",{staticClass:"inline-code-block"},[s._v("permalink")]),s._v(" property in the frontmatter of the Markdown file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"Local Permalink"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("---")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" Local Permalink\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("permalink")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" /using"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("local"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("permalink")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("---")])]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])])])],1),s._v(" "),a("p",[s._v("This will set the "),a("code",{staticClass:"inline-code-block"},[s._v("permalink")]),s._v(" property to be "),a("code",{staticClass:"inline-code-block"},[s._v("/using-a-local-permalink")]),s._v(" instead of following the global configuration.")]),s._v(" "),a("p",[s._v("Now that we have an understanding of "),a("span",{staticClass:"post-term-one"},[s._v("document classification")]),s._v(" and "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(", let's move onto the "),a("span",{staticClass:"post-term-one"},[s._v("directory classifier")]),s._v(" which handles classifying pages placed in the same directory.")]),s._v(" "),a("h2",{attrs:{id:"directory-classification"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#directory-classification"}},[s._v("#")]),s._v(" Directory Classification")]),s._v(" "),a("p",[s._v("First we need to create a directory that will contain all of the pages we want to classify. To do this we'll create a "),a("code",{staticClass:"inline-code-block"},[s._v("_posts")]),s._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory for your site should now look something like this:")]),s._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[s._v(".\n├── "),a("code",[s._v("docs")]),s._v("\n│ ├── "),a("code",[s._v(".vuepress")]),s._v("\n│ ├── "),a("code",[s._v("_posts")]),s._v("\n│ ├── "),a("code",[s._v("icons")]),s._v("\n│ └── README.md")]),s._v("\n")])]),a("p",[s._v("Next, we'll create the following example pages in the "),a("code",{staticClass:"inline-code-block"},[s._v("_posts")]),s._v(" directory:")]),s._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[s._v("2020-07-03-example-page-1.md")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("2021-11-16-example-page-2.md")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("2022-05-08-example-page-3.md")])])]),s._v(" "),a("p",[s._v("The "),a("code",{staticClass:"inline-code-block"},[s._v("_posts")]),s._v(" directory for your site should now look like this:")]),s._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[s._v(".\n├── "),a("code",[s._v("_posts")]),s._v("\n│ ├── 2020-07-03-example-page-1.md\n│ ├── 2021-11-16-example-page-2.md\n│ └── 2022-05-08-example-page-3.md")]),s._v("\n")])]),a("p",[s._v("By default "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("VuePress"),a("OutboundLink")],1),s._v(" will create the following page URLs since it uses the "),a("code",{staticClass:"inline-code-block"},[s._v("/:regular")]),s._v(" template variable described above when building the links:")]),s._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/_posts/2020-07-03-example-page-1.html")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/_posts/2021-11-16-example-page-2.html")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/_posts/2022-05-08-example-page-3.html")])])]),s._v(" "),a("p",[s._v("You should now be able to navigate to these pages in the browser:")]),s._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/_posts/2020-07-03-example-page-1.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/_posts/2020-07-03-example-page-1.html"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/_posts/2021-11-16-example-page-2.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/_posts/2021-11-16-example-page-2.html"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/_posts/2022-05-08-example-page-3.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/_posts/2022-05-08-example-page-3.html"),a("OutboundLink")],1)])])]),s._v(" "),a("p",[s._v("The default behavior is fine for creating the main pages on the site, but having the ability to build customizable links for blog posts is preferable.")]),s._v(" "),a("p",[s._v("After using the configuration provided by the blog plugin to build customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(", the page URLs will look like this:")]),s._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/2020/07/03/example-page-1/")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/2021/11/16/example-page-2/")])]),s._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[s._v("/2022/05/08/example-page-3/")])])]),s._v(" "),a("p",[s._v("To build these customizable links we're going to start setting up the "),a("span",{staticClass:"post-term-one"},[s._v("directory classifier")]),s._v(" configuration in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file.")]),s._v(" "),a("h3",{attrs:{id:"directories"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#directories"}},[s._v("#")]),s._v(" directories")]),s._v(" "),a("p",[s._v("First, we'll add the "),a("code",{staticClass:"inline-code-block"},[s._v("directories")]),s._v(" property which is used to create the "),a("span",{staticClass:"post-term-one"},[s._v("directory classifier")]),s._v(".")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("DirectoryClassifier[]")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("[]")]),s._v(".")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"id"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#id"}},[s._v("#")]),s._v(" id")]),s._v(" "),a("p",[s._v("Next, we'll add the "),a("code",{staticClass:"inline-code-block"},[s._v("id")]),s._v(" property which sets a unique id for the current classifier. We'll use a value of "),a("code",{staticClass:"inline-code-block"},[s._v("posts")]),s._v(".")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("undefined")]),s._v(".")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"dirname"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dirname"}},[s._v("#")]),s._v(" dirname")]),s._v(" "),a("p",[s._v("Now, we'll add the "),a("code",{staticClass:"inline-code-block"},[s._v("dirname")]),s._v(" property which is used to identify the directory we want to classify. This is the "),a("code",{staticClass:"inline-code-block"},[s._v("_posts")]),s._v(" directory we created earlier.")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("undefined")]),s._v(".")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br")])])])],1),s._v(" "),a("p",[s._v("After setting the "),a("code",{staticClass:"inline-code-block"},[s._v("dirname")]),s._v(" property, the page URLs get set to the customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" mentioned above:")]),s._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/2020/07/03/example-page-1/",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/2020/07/03/example-page-1/"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/2021/11/16/example-page-2/",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/2021/11/16/example-page-2/"),a("OutboundLink")],1)])]),s._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/2022/05/08/example-page-3/",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/2022/05/08/example-page-3/"),a("OutboundLink")],1)])])]),s._v(" "),a("p",[s._v("The customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" are actually built using properties we haven't discussed yet. The blog plugin sets default values that don't need to be explicitly set in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file. We'll be discussing these other properties and their default values below.")]),s._v(" "),a("p",[s._v("The previously provided links still work because they get converted to the customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" when navigating to those pages.")]),s._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[s._v("Unknown Custom Element")]),s._v(" "),a("p",[s._v("When navigating to the links if you inspect the browser then go to the "),a("code",{staticClass:"inline-code-block"},[s._v("Console")]),s._v(", you'll see the following error: "),a("code",{staticClass:"inline-code-block"},[s._v("Unknown custom element: ")]),s._v(".")])]),s._v(" "),a("p",[s._v("This error is occurring because the plugin is looking for a "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component in the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory which we haven't created yet.")]),s._v(" "),a("p",[s._v("Before creating a "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component to fix this error, we're going to first add the "),a("code",{staticClass:"inline-code-block"},[s._v("path")]),s._v(" property.")]),s._v(" "),a("h3",{attrs:{id:"path"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#path"}},[s._v("#")]),s._v(" path")]),s._v(" "),a("p",[s._v("The "),a("code",{staticClass:"inline-code-block"},[s._v("path")]),s._v(" property specifies the entry page, also known as the list page for the current classifier. This page will be used to display your posts as a paginated list.")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("/${id}/")]),s._v(" where "),a("code",{staticClass:"inline-code-block"},[s._v("${id}")]),s._v(" is the value of the "),a("code",{staticClass:"inline-code-block"},[s._v("id")]),s._v(" property we previously set.")]),s._v(" "),a("p",[s._v("This means you don't need to explicitly set the "),a("code",{staticClass:"inline-code-block"},[s._v("path")]),s._v(" property if you're going to be using the same value as the "),a("code",{staticClass:"inline-code-block"},[s._v("id")]),s._v(" property. We'll be using a value of "),a("code",{staticClass:"inline-code-block"},[s._v("/posts/")]),s._v(" for the "),a("code",{staticClass:"inline-code-block"},[s._v("path")]),s._v(" property, so we don't need to explicitly set the property. However, we're going to explicitly set the property because it allows us to have a quick reference to the property and its value.")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br")])])])],1),s._v(" "),a("p",[s._v("You can navigate to the entry page by using the following link:")]),s._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])])]),s._v(" "),a("p",[s._v("Notice this link has the value of the "),a("code",{staticClass:"inline-code-block"},[s._v("path")]),s._v(" property in it, i.e., "),a("code",{staticClass:"inline-code-block"},[s._v("/posts/")]),s._v(". This is the same link we set in the navbar dropdown menu for All Posts, so you can click on that link to navigate to the entry page which will eventually be a paginated list of all of the posts.")]),s._v(" "),a("p",[s._v("Currently, when navigating to that link the "),a("code",{staticClass:"inline-code-block"},[s._v("Layout")]),s._v(" component provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),a("OutboundLink")],1),s._v(" is displayed. The blog plugin will fallback to using the "),a("code",{staticClass:"inline-code-block"},[s._v("Layout")]),s._v(" component if it's unable to find an "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component in the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory.")]),s._v(" "),a("p",[s._v("This means we can create an "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component that specifically handles the layout of the paginated list of all of the posts instead of using the "),a("code",{staticClass:"inline-code-block"},[s._v("Layout")]),s._v(" component.")]),s._v(" "),a("h3",{attrs:{id:"creating-the-indexpost-layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-indexpost-layout"}},[s._v("#")]),s._v(" Creating the IndexPost Layout")]),s._v(" "),a("p",[s._v("To create the "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component we're going to add an "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost.vue")]),s._v(" file inside of the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory for your site should now look something like this:")]),s._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[s._v(".\n├── "),a("code",[s._v("layouts")]),s._v("\n│ ├── GlobalLayout.vue\n│ └── IndexPost.vue")]),s._v("\n")])]),a("p",[s._v("We're going to begin the development of the "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component by adding "),a("code",{staticClass:"inline-code-block"},[s._v("template")]),s._v(", "),a("code",{staticClass:"inline-code-block"},[s._v("script")]),s._v(", and "),a("code",{staticClass:"inline-code-block"},[s._v("style")]),s._v(" tags:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"IndexPost.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])])],1),s._v(" "),a("p",[s._v("We'll continue developing the "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component in a future tutorial.")]),s._v(" "),a("h3",{attrs:{id:"layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#layout"}},[s._v("#")]),s._v(" layout")]),s._v(" "),a("p",[s._v("We're now ready to add the "),a("code",{staticClass:"inline-code-block"},[s._v("layout")]),s._v(" property which is used to specify which layout to use for the entry page.")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("'IndexPost' || 'Layout'")]),s._v(".")]),s._v(" "),a("p",[s._v("From the default value we can see why the entry page originally defaulted to using the "),a("code",{staticClass:"inline-code-block"},[s._v("Layout")]),s._v(" component before we created the "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component. Since the blog plugin looks for the "),a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.")]),s._v(" "),a("p",[s._v("It's also possible to use a custom value for the "),a("code",{staticClass:"inline-code-block"},[s._v("layout")]),s._v(" property, e.g., you could use a value of "),a("code",{staticClass:"inline-code-block"},[s._v("MyIndexPost")]),s._v(" which you would have to explicitly set in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file. Then you would have to create a "),a("code",{staticClass:"inline-code-block"},[s._v("MyIndexPost.vue")]),s._v(" file inside of the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory.")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br")])])])],1),s._v(" "),a("p",[s._v("We're now going to fix the "),a("code",{staticClass:"inline-code-block"},[s._v("Unknown Custom Element")]),s._v(" error we got after adding the "),a("code",{staticClass:"inline-code-block"},[s._v("dirname")]),s._v(" property. To fix this error we need to create the previously mentioned "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component.")]),s._v(" "),a("h3",{attrs:{id:"creating-the-post-layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-post-layout"}},[s._v("#")]),s._v(" Creating the Post Layout")]),s._v(" "),a("p",[s._v("The "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component is used to handle the layout for individual post pages.")]),s._v(" "),a("p",[s._v("To create the "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component we're going to add a "),a("code",{staticClass:"inline-code-block"},[s._v("Post.vue")]),s._v(" file inside of the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory for your site should now look something like this:")]),s._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[s._v(".\n├── "),a("code",[s._v("layouts")]),s._v("\n│ ├── GlobalLayout.vue\n│ ├── IndexPost.vue\n│ └── Post.vue")]),s._v("\n")])]),a("p",[s._v("We're going to begin the development of the "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component by adding "),a("code",{staticClass:"inline-code-block"},[s._v("template")]),s._v(", "),a("code",{staticClass:"inline-code-block"},[s._v("script")]),s._v(", and "),a("code",{staticClass:"inline-code-block"},[s._v("style")]),s._v(" tags:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"Post.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])])],1),s._v(" "),a("p",[s._v("We'll continue developing the "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component in a future tutorial.")]),s._v(" "),a("h3",{attrs:{id:"itemlayout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#itemlayout"}},[s._v("#")]),s._v(" itemLayout")]),s._v(" "),a("p",[s._v("We're now ready to add the "),a("code",{staticClass:"inline-code-block"},[s._v("itemLayout")]),s._v(" property which is used to specify which layout to use for individual post pages.")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("'Post'")]),s._v(".")]),s._v(" "),a("p",[s._v("From the default value we can see why the blog plugin looks for a "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component. Since the blog plugin looks for the "),a("code",{staticClass:"inline-code-block"},[s._v("Post")]),s._v(" layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.")]),s._v(" "),a("p",[s._v("It's also possible to use a custom value for the "),a("code",{staticClass:"inline-code-block"},[s._v("itemLayout")]),s._v(" property, e.g., you could use a value of "),a("code",{staticClass:"inline-code-block"},[s._v("MyPost")]),s._v(" which you would have to explicitly set in the "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file. Then you would have to create a "),a("code",{staticClass:"inline-code-block"},[s._v("MyPost.vue")]),s._v(" file inside of the "),a("code",{staticClass:"inline-code-block"},[s._v("layouts")]),s._v(" directory.")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"itempermalink"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#itempermalink"}},[s._v("#")]),s._v(" itemPermalink")]),s._v(" "),a("p",[s._v("We're now ready to add the "),a("code",{staticClass:"inline-code-block"},[s._v("itemPermalink")]),s._v(" property which is used to build customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" for each blog post.")]),s._v(" "),a("p",[s._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[s._v("string")]),s._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[s._v("'/:year/:month/:day/:slug'")]),s._v(".")]),s._v(" "),a("p",[s._v("From the default value we can see how the blog plugin built the customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" after only setting the "),a("code",{staticClass:"inline-code-block"},[s._v("dirname")]),s._v(" property. Since the blog plugin uses the value we currently want, we don't need to explicitly set the property. However, just like the other properties we're going to explicitly set it because this gives us a quick reference to the property and its value.")]),s._v(" "),a("p",[s._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[s._v("config.js")]),s._v(" file:")]),s._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[s._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/LeetCode/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/Node.js/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/topics/VuePress/'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"summary-of-urls-and-layouts"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#summary-of-urls-and-layouts"}},[s._v("#")]),s._v(" Summary of URLs and Layouts")]),s._v(" "),a("p",[s._v("Here's a table that summarizes the relationship between the page URLs the blog plugin builds using customized "),a("span",{staticClass:"post-term-one"},[s._v("permalinks")]),s._v(" and the layout components.")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("URLs")]),s._v(" "),a("th",[s._v("Layouts")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[s._v("/posts/")])]),s._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[s._v("IndexPost")]),s._v(" (falls back to "),a("code",{staticClass:"inline-code-block"},[s._v("Layout")]),s._v(")")])]),s._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[s._v("/2020/07/03/example-page-1/")])]),s._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[s._v("Post")])])]),s._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[s._v("/2021/11/16/example-page-2/")])]),s._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[s._v("Post")])])]),s._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[s._v("/2022/05/08/example-page-3/")])]),s._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[s._v("Post")])])])])]),s._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[s._v("#")]),s._v(" Next Steps")]),s._v(" "),a("p",[s._v("In the next tutorial we'll be discussing the configuration for the "),a("code",{staticClass:"inline-code-block"},[s._v("pagination")]),s._v(" property as well as how to access the "),a("span",{staticClass:"post-term-one"},[s._v("pagination")]),s._v(" data in the layout components by using the "),a("span",{staticClass:"post-term-one"},[s._v("Client API")]),s._v(".")])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/43.b7dc16e8.js b/assets/js/43.b7dc16e8.js new file mode 100644 index 00000000..df370d1d --- /dev/null +++ b/assets/js/43.b7dc16e8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{554:function(t,s,a){"use strict";a.r(s);var n=a(18),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-16-pagination"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-16-pagination"}},[t._v("#")]),t._v(" VuePress Tutorial 16 - Pagination")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("Now it's time to learn more about the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" feature and the "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(" provided by "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("@vuepress/plugin-blog"),a("OutboundLink")],1),t._v(". In this tutorial we're going to begin the configuration of the "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(" property as well as discuss the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable provided by the "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(".")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-16")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-16",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"pagination-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination-configuration"}},[t._v("#")]),t._v(" Pagination Configuration")]),t._v(" "),a("p",[t._v("As mentioned in the previous tutorial "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" allows you to break up the display of your posts into multiple pages. This provides easier navigation and a better user experience.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" configuration, then check out the "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/config/#pagination",target:"_blank",rel:"noopener noreferrer"}},[t._v("pagination property"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/pagination/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pagination Config"),a("OutboundLink")],1),t._v(" documentation.")]),t._v(" "),a("h3",{attrs:{id:"pagination"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination"}},[t._v("#")]),t._v(" pagination")]),t._v(" "),a("p",[t._v("We're going to begin the configuration by adding the "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(" property which allows you to customize the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" of your posts.")]),t._v(" "),a("p",[t._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[t._v("Pagination")]),t._v(" object.")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"lengthperpage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lengthperpage"}},[t._v("#")]),t._v(" lengthPerPage")]),t._v(" "),a("p",[t._v("Next, we'll add the "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" property which sets the maximum number of posts to display per page.")]),t._v(" "),a("p",[t._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[t._v("number")]),t._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[t._v("10")]),t._v(".")]),t._v(" "),a("p",[t._v("When the number of posts is greater than the "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" value, the blog plugin will generate the necessary pages to display all of the posts.")]),t._v(" "),a("p",[t._v("The blog plugin does this by adding "),a("code",{staticClass:"inline-code-block"},[t._v("page/n/")]),t._v(" onto the end of the entry page where "),a("code",{staticClass:"inline-code-block"},[t._v("n")]),t._v(" represents the number of the page.")]),t._v(" "),a("p",[t._v("So, the second page in the "),a("span",{staticClass:"post-term-one"},[t._v("paginated")]),t._v(" list of pages would be "),a("code",{staticClass:"inline-code-block"},[t._v("page/2/")]),t._v(".")]),t._v(" "),a("p",[t._v("If you remember from the previous tutorial "),a("a",{attrs:{href:"/vuepress-tutorial-15"}},[t._v("VuePress Tutorial 15 - Blog Plugin")]),t._v(", the entry page is set by the "),a("code",{staticClass:"inline-code-block"},[t._v("path")]),t._v(" property which was given a value of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/")]),t._v(".")]),t._v(" "),a("p",[t._v("This means in our case the blog plugin will generate pages with the following format: "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/page/n/")]),t._v(" where "),a("code",{staticClass:"inline-code-block"},[t._v("n")]),t._v(" once again represents the number of the page.")]),t._v(" "),a("p",[t._v("We also created the following posts in the "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory in the previous tutorial:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2020-07-03-example-page-1.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2021-11-16-example-page-2.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2022-05-08-example-page-3.md")])])]),t._v(" "),a("p",[t._v("Since we only have three posts and the default value for "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" is 10, the blog plugin won't generate any more pages. You can test this by attempting to navigate to the following page:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("To demonstrate the generation of pages we can set the "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" to have a value of "),a("code",{staticClass:"inline-code-block"},[t._v("2")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n lengthPerPage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br")])])])],1),t._v(" "),a("p",[t._v("You should now be able to navigate to the following page:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Updating lengthPerPage")]),t._v(" "),a("p",[t._v("In a future tutorial we'll be updating the value of "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" to be "),a("code",{staticClass:"inline-code-block"},[t._v("5")]),t._v(" which is the current value being used in the blog.")])]),t._v(" "),a("h3",{attrs:{id:"layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#layout"}},[t._v("#")]),t._v(" layout")]),t._v(" "),a("p",[t._v("Now we're going to add the "),a("code",{staticClass:"inline-code-block"},[t._v("layout")]),t._v(" property which is used to specify which layout component to use for the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages except for the entry page. The entry page uses the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component which we set in the previous tutorial.")]),t._v(" "),a("p",[t._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[t._v("'DirectoryPagination' || 'Layout'")]),t._v(".")]),t._v(" "),a("p",[t._v("Since we haven't created a "),a("code",{staticClass:"inline-code-block"},[t._v("DirectoryPagination")]),t._v(" layout component in the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory, the "),a("code",{staticClass:"inline-code-block"},[t._v("layout")]),t._v(" property uses the other default value which is the "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(" component. In our case the "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(" component is provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("To see the difference between the layout of the entry page and the layout of the second page you can navigate to the following pages:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("If you want your "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages except for the entry page to use a layout specifically designed for them, then you can create a "),a("code",{staticClass:"inline-code-block"},[t._v("DirectoryPagination.vue")]),t._v(" file inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory. Since "),a("code",{staticClass:"inline-code-block"},[t._v("DirectoryPagination")]),t._v(" is the default value for the "),a("code",{staticClass:"inline-code-block"},[t._v("layout")]),t._v(" property you won't need to explicitly set it in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("p",[t._v("We'll be using the same layout for the entry page and for the other "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages, so we're going to provide a custom value of "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" to the "),a("code",{staticClass:"inline-code-block"},[t._v("layout")]),t._v(" property.")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n lengthPerPage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br")])])])],1),t._v(" "),a("p",[t._v("When navigating to the following page you should now see the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component being used instead of the "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(" component:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("Here's a table that summarizes the relationship between the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" and post page URLs the blog plugin builds and the layout components:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("URLs")]),t._v(" "),a("th",[t._v("Layouts")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[t._v("/posts/")])]),t._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" (falls back to "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(")")])]),t._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[t._v("/posts/page/2/")])]),t._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" (falls back to "),a("code",{staticClass:"inline-code-block"},[t._v("DirectoryPagination")]),t._v(" or "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(")")])]),t._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[t._v("/2020/07/03/example-page-1/")])]),t._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[t._v("Post")])])]),t._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[t._v("/2021/11/16/example-page-2/")])]),t._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[t._v("Post")])])]),t._v(" "),a("tr",[a("td",[a("code",{staticClass:"inline-code-block"},[t._v("/2022/05/08/example-page-3/")])]),t._v(" "),a("td",[a("code",{staticClass:"inline-code-block"},[t._v("Post")])])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Post Pages Reminder")]),t._v(" "),a("p",[t._v("The post pages were given the URLs above by building customized "),a("span",{staticClass:"post-term-one"},[t._v("permalinks")]),t._v(" using the format specified by the "),a("code",{staticClass:"inline-code-block"},[t._v("itemPermalink")]),t._v(" property, and the layout components used by the post pages were set by the "),a("code",{staticClass:"inline-code-block"},[t._v("itemLayout")]),t._v(" property. Both of these properties can be found in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file, and you can refer to the previous tutorial "),a("a",{attrs:{href:"/vuepress-tutorial-15"}},[t._v("VuePress Tutorial 15 - Blog Plugin")]),t._v(" if you have any questions about the post pages.")])]),t._v(" "),a("h3",{attrs:{id:"prevtext"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prevtext"}},[t._v("#")]),t._v(" prevText")]),t._v(" "),a("p",[t._v("Now we'll add the "),a("code",{staticClass:"inline-code-block"},[t._v("prevText")]),t._v(" property which is used to specify the text for the previous links. The previous links are used to navigate to the previous page in the list of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[t._v("'Prev'")]),t._v(".")]),t._v(" "),a("p",[t._v("We'll be using the default value of "),a("code",{staticClass:"inline-code-block"},[t._v("'Prev'")]),t._v(" for the "),a("code",{staticClass:"inline-code-block"},[t._v("prevText")]),t._v(" property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.")]),t._v(" "),a("p",[t._v("It's also possible to use a custom value for the "),a("code",{staticClass:"inline-code-block"},[t._v("prevText")]),t._v(" property, e.g., you could use a value of "),a("code",{staticClass:"inline-code-block"},[t._v("Older")]),t._v(" which you would have to explicitly set in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n lengthPerPage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n prevText"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Prev'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"nexttext"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nexttext"}},[t._v("#")]),t._v(" nextText")]),t._v(" "),a("p",[t._v("We're now ready to add the "),a("code",{staticClass:"inline-code-block"},[t._v("nextText")]),t._v(" property which is used to specify the text for the next links. The next links are used to navigate to the next page in the list of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("The expected type is a "),a("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(", and the default value is "),a("code",{staticClass:"inline-code-block"},[t._v("'Next'")]),t._v(".")]),t._v(" "),a("p",[t._v("We'll be using the default value of "),a("code",{staticClass:"inline-code-block"},[t._v("'Next'")]),t._v(" for the "),a("code",{staticClass:"inline-code-block"},[t._v("nextText")]),t._v(" property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.")]),t._v(" "),a("p",[t._v("It's also possible to use a custom value for the "),a("code",{staticClass:"inline-code-block"},[t._v("nextText")]),t._v(" property, e.g., you could use a value of "),a("code",{staticClass:"inline-code-block"},[t._v("Newer")]),t._v(" which you would have to explicitly set in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nav"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Topics'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'All Posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'By Topic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'LeetCode'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/LeetCode/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Node.js'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/Node.js/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'VuePress'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/topics/VuePress/'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Resources'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/resources/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Donate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n link"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/donate/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/blog'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directories"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n dirname"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'_posts'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/posts/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemLayout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Post'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n itemPermalink"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/:year/:month/:day/:slug'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n lengthPerPage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n prevText"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Prev'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n nextText"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Next'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"client-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#client-api"}},[t._v("#")]),t._v(" Client API")]),t._v(" "),a("p",[t._v("We're now going to take a look at how to use the "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(" to access the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data in the layout components used by the blog plugin.")]),t._v(" "),a("p",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(" uses globally scoped variables which means you can access these variables from any component as well as in Markdown files when using Vue. You can check out the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/using-vue.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Using Vue in Markdown"),a("OutboundLink")],1),t._v(" documentation if you're interested.")]),t._v(" "),a("p",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(" provides the following globally scoped variables: "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("$frontmatterKey")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("$service")]),t._v(". We'll be focusing on the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable in this tutorial.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about the "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(", then check out the "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/client-api/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Client API"),a("OutboundLink")],1),t._v(" documentation.")]),t._v(" "),a("h3",{attrs:{id:"pagination-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination-2"}},[t._v("#")]),t._v(" $pagination")]),t._v(" "),a("p",[t._v("We're going to discuss each property the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable exposes as well as demonstrate how to access the properties in the layout components.")]),t._v(" "),a("p",[t._v("To get a better understanding of the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data we're going to log each property to the console. The logging will be added to the "),a("code",{staticClass:"inline-code-block"},[t._v("created")]),t._v(" lifecycle hook in the "),a("code",{staticClass:"inline-code-block"},[t._v("script")]),t._v(" tag. To view the data in the console we're going to inspect the browser then go to the "),a("code",{staticClass:"inline-code-block"},[t._v("Console")]),t._v(" tab.")]),t._v(" "),a("p",[t._v("If you have questions about the "),a("code",{staticClass:"inline-code-block"},[t._v("created")]),t._v(" lifecycle hook, then check out this resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/api/#created",target:"_blank",rel:"noopener noreferrer"}},[t._v("created"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://blog.logrocket.com/introduction-to-vue-lifecycle-hooks/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Introduction to Vue lifecycle hooks"),a("OutboundLink")],1)])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("null $paginaton")]),t._v(" "),a("p",[t._v("If you access the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable at a route which doesn't match any classification, i.e., the route isn't a pagination page, then the value of "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" will be "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(".")]),t._v(" "),a("p",[t._v("This means when developing layout components you should check if "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" has a value of "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(" before using the variable.")])]),t._v(" "),a("h3",{attrs:{id:"pages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pages"}},[t._v("#")]),t._v(" pages")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property is an array of objects where each object contains data related to post pages that are accessible on the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("p",[t._v("Since the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property contains data related to post pages that are accessible on the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page, the data of "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" will be different depending on which "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page is being viewed.")]),t._v(" "),a("p",[t._v("To see the differences between the data, we're going to look at the entry page and the second page which in our case is also the last page.")]),t._v(" "),a("p",[t._v("Here are the links to both the entry page and the second page:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property in the layout component which in our case is being used by both the entry page and the second page, i.e., the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.pages"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.pages'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Using Different Layout Components")]),t._v(" "),a("p",[t._v("If you're using different layout components for your entry page and the other "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages, then you'll need to add the logging of the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property to both of the files.")])]),t._v(" "),a("p",[t._v("After adding the above code to the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file and navigating to the entry page, the console should log an array of page objects with the following data:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page $pagination.pages"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frontmatter"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"layout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"permalink"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:year/:month/:day/:slug"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"v-4e4f6ae5"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"path"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/2020/07/03/example-page-1/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pid"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"regularPath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/_posts/2020-07-03-example-page-1.html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"relativePath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_posts/2020-07-03-example-page-1.md"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frontmatter"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"layout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"permalink"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:year/:month/:day/:slug"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"v-60c9aaf7"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"path"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/2021/11/16/example-page-2/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pid"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"regularPath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/_posts/2021-11-16-example-page-2.html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"relativePath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_posts/2021-11-16-example-page-2.md"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Since the "),a("code",{staticClass:"inline-code-block"},[t._v("lengthPerPage")]),t._v(" property was given a value of "),a("code",{staticClass:"inline-code-block"},[t._v("2")]),t._v(" and we have three post pages, the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property for the entry page contains two page objects one for each post.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Formatting Differences")]),t._v(" "),a("p",[t._v("The log in the "),a("code",{staticClass:"inline-code-block"},[t._v("Console")]),t._v(" tab will be formatted differently than the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" data shown here which was formatted using "),a("a",{attrs:{href:"https://www.json.org/json-en.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("JSON"),a("OutboundLink")],1),t._v(". The properties and values will be the same though.")])]),t._v(" "),a("p",[t._v("After navigating to the second page, the console should log an array consisting of one page object with the following data:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Second Page $pagination.pages"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frontmatter"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"layout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"permalink"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:year/:month/:day/:slug"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"v-9dca171a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"path"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/2022/05/08/example-page-3/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pid"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"regularPath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/_posts/2022-05-08-example-page-3.html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"relativePath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_posts/2022-05-08-example-page-3.md"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Now let's describe what each property in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" data represents:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("frontmatter")]),t._v(": Contains the data present in the "),a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("frontmatter"),a("OutboundLink")],1)]),t._v(" of the post pages.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("layout")]),t._v(": Layout component used by the post pages which is set using the "),a("code",{staticClass:"inline-code-block"},[t._v("itemLayout")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("permalink")]),t._v(": Permalink format used for the post pages which is set using the "),a("code",{staticClass:"inline-code-block"},[t._v("itemPermalink")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("id")]),t._v(": Unique id for the current classifier which is set using the "),a("code",{staticClass:"inline-code-block"},[t._v("id")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(": Unique key generated for each page in the site.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("path")]),t._v(": Path for the post page which uses a customized permalink built from the format specified by the "),a("code",{staticClass:"inline-code-block"},[t._v("itemPermalink")]),t._v(" property found in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("pid")]),t._v(": Represents the pid for the current classifier which is set using the "),a("code",{staticClass:"inline-code-block"},[t._v("id")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("regularPath")]),t._v(": Default path for the post page which is built using the "),a("code",{staticClass:"inline-code-block"},[t._v(":regular")]),t._v(" template variable.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("relativePath")]),t._v(": Location of the post page Markdown file relative to the documents directory which in our case is the "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("The $page Variable")]),t._v(" "),a("p",[t._v("The page objects in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property are the same page objects found by logging the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable in the "),a("code",{staticClass:"inline-code-block"},[t._v("Post")]),t._v(" layout component. After writing the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable, you can view the log by navigating to a post page, e.g., "),a("a",{attrs:{href:"http://localhost:8080/2020/07/03/example-page-1/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/2020/07/03/example-page-1/"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("To learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable and other globally scoped variables you can take a look at the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/global-computed.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Global Computed"),a("OutboundLink")],1),t._v(" documentation.")])]),t._v(" "),a("h3",{attrs:{id:"length"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#length"}},[t._v("#")]),t._v(" length")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.length")]),t._v(" property is a "),a("code",{staticClass:"inline-code-block"},[t._v("number")]),t._v(" whose value is determined by the number of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.length")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.length"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.length'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If we navigate to either the entry page or the second page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("2")]),t._v(" since in our case there are a total of two "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("h3",{attrs:{id:"hasprev"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hasprev"}},[t._v("#")]),t._v(" hasPrev")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasPrev")]),t._v(" property is a "),a("code",{staticClass:"inline-code-block"},[t._v("boolean")]),t._v(" which has a value of "),a("code",{staticClass:"inline-code-block"},[t._v("true")]),t._v(" when a previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page exists and a value of "),a("code",{staticClass:"inline-code-block"},[t._v("false")]),t._v(" when a previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page doesn't exist.")]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasPrev")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.hasPrev"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.hasPrev'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasPrev"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If we navigate to the entry page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("false")]),t._v(". This makes sense since the entry page is the first "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page which means there is no previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("p",[t._v("If we navigate to the second page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("true")]),t._v(" which makes sense since the entry page is before the second page.")]),t._v(" "),a("h3",{attrs:{id:"prevlink"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prevlink"}},[t._v("#")]),t._v(" prevLink")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.prevLink")]),t._v(" property is a "),a("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(" whose value is the previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page path if a previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page exists and a value of "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(" when a previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page doesn't exist.")]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.prevLink")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.prevLink"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.prevLink'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prevLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If we navigate to the entry page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(". This makes sense since the entry page is the first "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page which means there is no link to a previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("p",[t._v("If we navigate to the second page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/")]),t._v(" which makes sense since the previous link before the second page is the entry page which has a path of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"hasnext"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hasnext"}},[t._v("#")]),t._v(" hasNext")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasNext")]),t._v(" property is a "),a("code",{staticClass:"inline-code-block"},[t._v("boolean")]),t._v(" which has a value of "),a("code",{staticClass:"inline-code-block"},[t._v("true")]),t._v(" when a "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page exists after the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page and a value of "),a("code",{staticClass:"inline-code-block"},[t._v("false")]),t._v(" when a "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page doesn't exist after the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasNext")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.hasNext"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.hasNext'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasNext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If we navigate to the entry page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("true")]),t._v(". This makes sense since there is a next page in the "),a("span",{staticClass:"post-term-one"},[t._v("paginated")]),t._v(" list of pages, i.e., the second page.")]),t._v(" "),a("p",[t._v("If we navigate to the second page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("false")]),t._v(" which makes sense since in our case there is no "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page after the second page.")]),t._v(" "),a("h3",{attrs:{id:"nextlink"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nextlink"}},[t._v("#")]),t._v(" nextLink")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.nextLink")]),t._v(" property is a "),a("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(" whose value is the path of the next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page if it exists and a value of "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(" when the next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page doesn't exist.")]),t._v(" "),a("p",[t._v("Let's add the code to log the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.nextLink")]),t._v(" property in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.nextLink"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.nextLink'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If we navigate to the entry page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/page/2/")]),t._v(". This makes sense since the entry page is the first "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page, and in our case there is a link to the next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page, i.e., the second page.")]),t._v(" "),a("p",[t._v("If we navigate to the second page, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("null")]),t._v(". This makes sense since in our case the second page is the last page in the list of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages which means there is no link to the next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("h3",{attrs:{id:"getspecificpagelink"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getspecificpagelink"}},[t._v("#")]),t._v(" getSpecificPageLink()")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.getSpecificPageLink()")]),t._v(" is a method that accepts a page number and returns the path of a "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page. The page numbers start at "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(", so to get the entry page path you need to provide a value of "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(". If an input is provided that is unable to return a path to a "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page, then an error is thrown which can be found in the "),a("code",{staticClass:"inline-code-block"},[t._v("Console")]),t._v(" tab.")]),t._v(" "),a("p",[t._v("Let's add the code to log the output of the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.getSpecificPageLink()")]),t._v(" method in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Logging $pagination.getSpecificPageLink()"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("created")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$pagination.getSpecificPageLink(0)'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSpecificPageLink")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Since we used a page number of "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" in the code above, the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/")]),t._v(". This makes sense since a value of "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" refers to the entry page which has a path of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/")]),t._v(".")]),t._v(" "),a("p",[t._v("If we want to get the path of the second page, then we can use a value of "),a("code",{staticClass:"inline-code-block"},[t._v("1")]),t._v(" as the page number, so the console should log a value of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/page/2/")]),t._v(". This makes sense since a value of "),a("code",{staticClass:"inline-code-block"},[t._v("1")]),t._v(" refers to the second page which has a path of "),a("code",{staticClass:"inline-code-block"},[t._v("/posts/page/2/")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll begin the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component which will involve using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable provided by the "),a("span",{staticClass:"post-term-one"},[t._v("Client API")]),t._v(".")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/44.abceeaf3.js b/assets/js/44.abceeaf3.js new file mode 100644 index 00000000..ed1fc10d --- /dev/null +++ b/assets/js/44.abceeaf3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{555:function(t,s,a){"use strict";a.r(s);var n=a(18),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-17-indexpost-layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-17-indexpost-layout"}},[t._v("#")]),t._v(" VuePress Tutorial 17 - IndexPost Layout")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("We're now ready to begin the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component. We'll be using the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable provided by the blog plugin "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/client-api/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Client API"),a("OutboundLink")],1),t._v(" to access the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data. In this tutorial we'll be focusing on the post title and preview "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data. To display the data on the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages we'll be updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component's "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-17")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-17",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"naming-the-component"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#naming-the-component"}},[t._v("#")]),t._v(" Naming the Component")]),t._v(" "),a("p",[t._v("Before accessing and displaying the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data, we're going to first give the component a name and remove the "),a("code",{staticClass:"inline-code-block"},[t._v("created")]),t._v(" lifecycle hook which we were using in the previous tutorial to log the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data to the console.")]),t._v(" "),a("p",[t._v("Here's the updated "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Naming the Component"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"looping-over-pagination-pages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#looping-over-pagination-pages"}},[t._v("#")]),t._v(" Looping Over Pagination Pages")]),t._v(" "),a("p",[t._v("To display the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data we're going to loop over the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property which if you remember from the previous tutorial "),a("a",{attrs:{href:"/vuepress-tutorial-16"}},[t._v("VuePress Tutorial 16 - Pagination")]),t._v(" is an array of objects where each object contains data related to post pages that are accessible on the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("h3",{attrs:{id:"using-the-v-for-directive"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-v-for-directive"}},[t._v("#")]),t._v(" Using the v-for Directive")]),t._v(" "),a("p",[t._v("Since "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" is an array that we want to loop over, we're going to use the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive to render a list of post pages based on the data within the array. The "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive uses the following syntax "),a("code",{staticClass:"inline-code-block"},[t._v('v-for="item in items"')]),t._v(" where "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" is the array you want to loop over, and "),a("code",{staticClass:"inline-code-block"},[t._v("item")]),t._v(" is an alias for the array element being iterated on. Here, "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" corresponds to "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(", and we'll use "),a("code",{staticClass:"inline-code-block"},[t._v("post")]),t._v(" as the alias for the array element being iterated on. This means our "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive will be "),a("code",{staticClass:"inline-code-block"},[t._v('v-for="post in $pagination.pages"')]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"using-the-key-attribute"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-key-attribute"}},[t._v("#")]),t._v(" Using the key Attribute")]),t._v(" "),a("p",[t._v("When using the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive the common best practice is to bind a "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute where each value given to the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute should be unique. The "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute uses the following syntax "),a("code",{staticClass:"inline-code-block"},[t._v(':key="item.id"')]),t._v(" where "),a("code",{staticClass:"inline-code-block"},[t._v("id")]),t._v(" is a property with a unique value for every "),a("code",{staticClass:"inline-code-block"},[t._v("item")]),t._v(" in the "),a("code",{staticClass:"inline-code-block"},[t._v("items")]),t._v(" array.")]),t._v(" "),a("p",[t._v("You really only need to use the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute when the rendered list relies on child component state or temporary "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction",target:"_blank",rel:"noopener noreferrer"}},[t._v("Document Object Model (DOM)"),a("OutboundLink")],1),t._v(" state, e.g., form input values . This means we don't actually need to include the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute since we're currently just rendering a static list.")]),t._v(" "),a("p",[t._v("However, we're going to bind the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute in case we ever need to use it in the future. To ensure the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute has a unique value for each item in the list, we're going to use the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" property which is a unique value generated for each page object within the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" array. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute will look like in our case "),a("code",{staticClass:"inline-code-block"},[t._v(':key="post.key"')]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"determining-a-tag"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#determining-a-tag"}},[t._v("#")]),t._v(" Determining a Tag")]),t._v(" "),a("p",[t._v("Now we need to determine what tag we want to add our "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive and "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute to. We're going to add them to a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag which will allow us to wrap the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data for each post in the list of post pages. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag is going to look like after adding the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive and "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute "),a("code",{staticClass:"inline-code-block"},[t._v('
')]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"using-a-root-element"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-a-root-element"}},[t._v("#")]),t._v(" Using a Root Element")]),t._v(" "),a("p",[t._v("Since the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag uses the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive, it's going to render multiple elements. This means we cannot use it as the root element, i.e., the first element in the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag because the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag can only have one root element. To resolve this issue we're going to wrap the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag that's using the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive within another "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag which will serve as the root element.")]),t._v(" "),a("h3",{attrs:{id:"adding-the-loop"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-the-loop"}},[t._v("#")]),t._v(" Adding the Loop")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the Loop"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If you any questions or want to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("v-for")]),t._v(" directive and the "),a("code",{staticClass:"inline-code-block"},[t._v("key")]),t._v(" attribute then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/list.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("List Rendering"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/list.html#Maintaining-State",target:"_blank",rel:"noopener noreferrer"}},[t._v("Maintaining State"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/api/#key",target:"_blank",rel:"noopener noreferrer"}},[t._v("key"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.youtube.com/watch?v=yg0n19SdKzs",target:"_blank",rel:"noopener noreferrer"}},[t._v("Does Vue v-for really need a key?"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://michaelnthiessen.com/understanding-the-key-attribute",target:"_blank",rel:"noopener noreferrer"}},[t._v("Understanding the :key Attribute in Vue"),a("OutboundLink")],1)])])]),t._v(" "),a("h3",{attrs:{id:"entry-page-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you won't notice any changes on the page. This is because we've rendered "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags without any of the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data inside of them.")]),t._v(" "),a("p",[t._v("If you navigate to the entry page, inspect the browser, and go to the "),a("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab, the HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Notice how the entry page consists of two "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags wrapped inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag that's being used as the root element of the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag. Each of those "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags inside of the parent "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag corresponds to a post page that is accessible on the entry page.")]),t._v(" "),a("h3",{attrs:{id:"page-2-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you also won't notice any changes on the page. This is because we've rendered a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag without any of the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data inside of it.")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Notice how the second page consists of one "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag wrapped inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag that's being used as the root element of the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag. There is only one "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag since we have one post page accessible on the second page.")]),t._v(" "),a("h2",{attrs:{id:"post-titles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#post-titles"}},[t._v("#")]),t._v(" Post Titles")]),t._v(" "),a("p",[t._v("Before we can access the post title data using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property, we need to first add titles to the post files we created in the "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2020-07-03-example-page-1.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2021-11-16-example-page-2.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2022-05-08-example-page-3.md")])])]),t._v(" "),a("h3",{attrs:{id:"adding-titles-to-post-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-titles-to-post-files"}},[t._v("#")]),t._v(" Adding Titles to Post Files")]),t._v(" "),a("p",[t._v("Since the post files are Markdown files, we can add titles to the files by adding a heading level one, e.g., "),a("code",{staticClass:"inline-code-block"},[t._v("# Heading Level 1")]),t._v(" to each file which gets converted to the following HTML "),a("code",{staticClass:"inline-code-block"},[t._v("

Heading Level 1

")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's what the post files look like after adding the titles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 1"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 1")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 2"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 2")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 3"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 3")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about Markdown headings, then check out the "),a("a",{attrs:{href:"https://www.markdownguide.org/basic-syntax",target:"_blank",rel:"noopener noreferrer"}},[t._v("Basic Syntax"),a("OutboundLink")],1),t._v(" guide.")]),t._v(" "),a("h3",{attrs:{id:"adding-titles-to-page-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-titles-to-page-variables"}},[t._v("#")]),t._v(" Adding Titles to $page Variables")]),t._v(" "),a("p",[t._v("When "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" encounters a heading level one in a Markdown file it automatically adds a "),a("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property to the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable.")]),t._v(" "),a("p",[t._v("The page objects in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property are the same as the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variables used by the post pages which means each page object will now have a "),a("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property that we can access in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component.")]),t._v(" "),a("p",[t._v("You can take a look at the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/global-computed.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Global Computed"),a("OutboundLink")],1),t._v(" documentation to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable and other globally scoped variables.")]),t._v(" "),a("h3",{attrs:{id:"displaying-post-titles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-post-titles"}},[t._v("#")]),t._v(" Displaying Post Titles")]),t._v(" "),a("p",[t._v("Now that we can access the post titles in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property, we're ready to render the post titles on the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("We're going to display the post titles as "),a("code",{staticClass:"inline-code-block"},[t._v("h2")]),t._v(" tags which we'll be wrapping inside of two "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags. We'll be using the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags to add styling to the list of post pages in a future tutorial.")]),t._v(" "),a("p",[t._v("To display the post titles we'll be using "),a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/syntax.html#Text",target:"_blank",rel:"noopener noreferrer"}},[t._v("Text Interpolation"),a("OutboundLink")],1),t._v(' which allows us to use variables inside of HTML tags by using the "Mustache" syntax. The "Mustache" syntax consists of wrapping a variable inside of double curly braces.')]),t._v(" "),a("p",[t._v("We can access the "),a("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property on each page object in our loop by using "),a("code",{staticClass:"inline-code-block"},[t._v("post.title")]),t._v(". We can then display this by using the text interpolation described above.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying Post Titles"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"entry-page-html-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html-2"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you should now see the post titles being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the entry page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-2-html-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html-2"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you should now see one post title being displayed with some styling which again is being provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"post-previews"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#post-previews"}},[t._v("#")]),t._v(" Post Previews")]),t._v(" "),a("p",[t._v("The post preview data is a snippet of text taken from the beginning of a post which is used as an introduction to the post in the list of post pages. Before we can access the post preview data using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property, we need to first add previews to the post files we created in the "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2020-07-03-example-page-1.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2021-11-16-example-page-2.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2022-05-08-example-page-3.md")])])]),t._v(" "),a("h3",{attrs:{id:"adding-previews-to-post-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-previews-to-post-files"}},[t._v("#")]),t._v(" Adding Previews to Post Files")]),t._v(" "),a("p",[t._v("Since the post files are Markdown files, we can use "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks in the files and define a custom variable "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(".")]),t._v(" "),a("p",[t._v("Here's what the post files look like after adding the "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(" variables:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 1"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 1 preview")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 1")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 2"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 2 preview")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 2")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 3"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 3 preview")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 3")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks in "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" then check these resources:")]),t._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/vuepress-tutorial-6/#yaml-frontmatter-blocks"}},[t._v("YAML Frontmatter Blocks")])],1),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Frontmatter"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/miscellaneous/glossary.html#frontmatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("Glossary - frontmatter"),a("OutboundLink")],1)])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Number of Characters Used in Preview")]),t._v(" "),a("p",[t._v("The value for each post "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(" variable should be within a preferred minimum and maximum number of characters. This will ensure the post previews in the list of post pages looks consistent.")])]),t._v(" "),a("h3",{attrs:{id:"adding-previews-to-page-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-previews-to-page-variables"}},[t._v("#")]),t._v(" Adding Previews to $page Variables")]),t._v(" "),a("p",[t._v("When "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" encounters a "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$page.frontmatter")]),t._v(" variable.")]),t._v(" "),a("p",[t._v("The page objects in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property are the same as the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variables used by the post pages which means each page object will now have a "),a("code",{staticClass:"inline-code-block"},[t._v("frontmatter.preview")]),t._v(" property that we can access in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component.")]),t._v(" "),a("p",[t._v("You can take a look at the "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/global-computed.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Global Computed"),a("OutboundLink")],1),t._v(" documentation to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variable and other globally scoped variables.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Content Excerpt")]),t._v(" "),a("p",[t._v("Instead of defining the custom variable "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(" in the "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks of Markdown files, "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" provides the ability to use a "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/writing-a-theme.html#content-excerpt",target:"_blank",rel:"noopener noreferrer"}},[t._v("Content Excerpt"),a("OutboundLink")],1),t._v(" by adding a "),a("code",{staticClass:"inline-code-block"},[t._v("\x3c!-- more --\x3e")]),t._v(" comment to a Markdown file. Any content above the comment gets extracted and exposed as a globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$page.excerpt")]),t._v(" variable. This variable can then be used to render the list of post pages with excerpts for each post just like our custom variable "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(". I prefer to use the custom variable "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(" because the "),a("code",{staticClass:"inline-code-block"},[t._v("\x3c!-- more --\x3e")]),t._v(" comment takes all of the content above it which includes any HTML as opposed to using just the text of a post.")])]),t._v(" "),a("h3",{attrs:{id:"displaying-post-previews"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-post-previews"}},[t._v("#")]),t._v(" Displaying Post Previews")]),t._v(" "),a("p",[t._v("Now that we can access the post previews in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property, we're ready to render the post previews on the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("We're going to display the post previews as "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tags which we'll place underneath the parent "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag of the "),a("code",{staticClass:"inline-code-block"},[t._v("h2")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("To display the post previews we'll be using "),a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/syntax.html#Text",target:"_blank",rel:"noopener noreferrer"}},[t._v("Text Interpolation"),a("OutboundLink")],1),t._v(" just like we did when displaying the post titles.")]),t._v(" "),a("p",[t._v("We can access the "),a("code",{staticClass:"inline-code-block"},[t._v("preview")]),t._v(" property on each page object in our loop by using "),a("code",{staticClass:"inline-code-block"},[t._v("post.frontmatter.preview")]),t._v(".")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying Post Previews"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"entry-page-html-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html-3"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you should now see the post previews being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the entry page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-2-html-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html-3"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you should now see one post preview being displayed with some styling which again is being provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"indexpost-styling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#indexpost-styling"}},[t._v("#")]),t._v(" IndexPost Styling")]),t._v(" "),a("p",[t._v("When viewing the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages you probably noticed the list of post pages stretches across the entire width of the page. This styling doesn't look too good, so we're going to update the styling by adding the following class "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" to the outermost "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag.")]),t._v(" "),a("h3",{attrs:{id:"adding-theme-default-content"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-theme-default-content"}},[t._v("#")]),t._v(" Adding theme-default-content")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding theme-default-content"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"theme-default-content-styles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#theme-default-content-styles"}},[t._v("#")]),t._v(" theme-default-content Styles")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" class is provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(" and provides the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"theme-default-content Styles"}},[a("div",{staticClass:"language-css line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-default-content:not(.custom)")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 740px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 auto"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem 2.5rem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token atrule"}},[a("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@media")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 959px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-default-content:not(.custom)")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token atrule"}},[a("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@media")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("max-width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 419px"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".theme-default-content:not(.custom)")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1.5rem"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v(".theme-default-content:not(.custom)")]),t._v(" is used to select tags that have a class of "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" and that don't have a class of "),a("code",{staticClass:"inline-code-block"},[t._v("custom")]),t._v(" by using the "),a("code",{staticClass:"inline-code-block"},[t._v(":not()")]),t._v(" pseudo-class. This selector is defined by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(" since other pages can use the "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" class along with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("custom")]),t._v(" to apply different styles than the ones shown here. The homepage is an example of a page that uses the "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" class along with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("custom")]),t._v(" to apply different styles.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("max-width: 740px;")]),t._v(" sets the maximum width of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("740px")]),t._v(". If the content is greater than the "),a("code",{staticClass:"inline-code-block"},[t._v("max-width")]),t._v(", then the height of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag will automatically be changed. If the content is smaller than the "),a("code",{staticClass:"inline-code-block"},[t._v("max-width")]),t._v(", then the "),a("code",{staticClass:"inline-code-block"},[t._v("max-width")]),t._v(" property has no effect.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("margin: 0 auto;")]),t._v(" sets the margins for the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag by setting the top and bottom margins to be "),a("code",{staticClass:"inline-code-block"},[t._v("0")]),t._v(" and the left and right margins to a value of "),a("code",{staticClass:"inline-code-block"},[t._v("auto")]),t._v(". The value of "),a("code",{staticClass:"inline-code-block"},[t._v("auto")]),t._v(" means the browser will automatically set the left and right margins to horizontally center the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding: 2rem 2.5rem;")]),t._v(" sets the padding for the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag by setting the top and bottom paddings to be "),a("code",{staticClass:"inline-code-block"},[t._v("2rem")]),t._v(" and the left and right paddings to be "),a("code",{staticClass:"inline-code-block"},[t._v("2.5rem")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("@media (max-width: 959px)")]),t._v(" will apply the styles within it when the maximum width of the display area, e.g., the browser window is less than or equal to the provided value which in this case is "),a("code",{staticClass:"inline-code-block"},[t._v("959px")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding: 2rem;")]),t._v(" sets the padding for all of the sides of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("2rem")]),t._v(" when the width of the display area is less than or equal to "),a("code",{staticClass:"inline-code-block"},[t._v("959px")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("@media (max-width: 419px)")]),t._v(" will apply the styles within it when the maximum width of the display area is less than or equal to the provided value which in this case is "),a("code",{staticClass:"inline-code-block"},[t._v("419px")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding: 1.5rem;")]),t._v(" sets the padding for all of the sides of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag to be "),a("code",{staticClass:"inline-code-block"},[t._v("1.5rem")]),t._v(" when the width of the display area is less than or equal to "),a("code",{staticClass:"inline-code-block"},[t._v("419px")]),t._v(".")])]),t._v(" "),a("p",[t._v("If you have any questions about the CSS discussed above, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/:not",target:"_blank",rel:"noopener noreferrer"}},[t._v(":not()"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/cssref/pr_dim_max-width.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS max-width Property"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://selleo.com/blog/when-does-margin-0-auto-center",target:"_blank",rel:"noopener noreferrer"}},[t._v("When Does margin: 0 auto Center?"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/cssref/css3_pr_mediaquery.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS @media Rule"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("To view these styles in the browser you can navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" or to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(", inspect the browser, go to the "),a("code",{staticClass:"inline-code-block"},[t._v("Elements")]),t._v(" tab, locate the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(", and then go to the "),a("code",{staticClass:"inline-code-block"},[t._v("Styles")]),t._v(" tab.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Use in the Default Theme")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" class is used on the global "),a("code",{staticClass:"inline-code-block"},[t._v("Content")]),t._v(" component within the "),a("code",{staticClass:"inline-code-block"},[t._v("Page")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("Home")]),t._v(" components provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(". If you look at the HTML on the homepage, you'll see the "),a("code",{staticClass:"inline-code-block"},[t._v("theme-default-content")]),t._v(" class being used on a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag within the "),a("code",{staticClass:"inline-code-block"},[t._v("main")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("home")]),t._v(". We'll be discussing the global "),a("code",{staticClass:"inline-code-block"},[t._v("Content")]),t._v(" component, the "),a("code",{staticClass:"inline-code-block"},[t._v("Page")]),t._v(" component, and the "),a("code",{staticClass:"inline-code-block"},[t._v("Home")]),t._v(" component in more detail in future tutorials.")])]),t._v(" "),a("h2",{attrs:{id:"indexpost-heading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#indexpost-heading"}},[t._v("#")]),t._v(" IndexPost Heading")]),t._v(" "),a("p",[t._v("We're now going to add a heading to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages. This heading will be displayed on each "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page.")]),t._v(" "),a("h3",{attrs:{id:"displaying-the-heading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-the-heading"}},[t._v("#")]),t._v(" Displaying the Heading")]),t._v(" "),a("p",[t._v("We're going to display the heading as an "),a("code",{staticClass:"inline-code-block"},[t._v("h1")]),t._v(" tag which we'll be adding as the first child tag of the outermost "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying the Heading"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"entry-page-html-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html-4"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you should now see the heading being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the entry page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-2-html-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html-4"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you should now see the heading being displayed with some styling which again is being provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 Preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll be continuing the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component by using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable to add images to each post in the list of post pages.")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/45.15ca6b5f.js b/assets/js/45.15ca6b5f.js new file mode 100644 index 00000000..6cd793bd --- /dev/null +++ b/assets/js/45.15ca6b5f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{556:function(t,s,a){"use strict";a.r(s);var n=a(18),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-20-pagination-links-styling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-20-pagination-links-styling"}},[t._v("#")]),t._v(" VuePress Tutorial 20 - Pagination Links Styling")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("We're going to begin the process of styling the Prev and Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links that we added to each of the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages in the previous tutorial. To implement the styling we'll be adding the following CSS classes "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("left-arrow")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("right-arrow")]),t._v(" to the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(" class will be used to properly space out the Prev and Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links. The "),a("code",{staticClass:"inline-code-block"},[t._v("left-arrow")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("right-arrow")]),t._v(" classes will be used to add some styling to the left arrow and right arrow icons which we'll be adding using the global "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component which is provided by "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-20")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-20",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"pagination-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination-class"}},[t._v("#")]),t._v(" Pagination Class")]),t._v(" "),a("p",[t._v("We're going to start by adding the "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(" class to the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag that is wrapping both of the "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" components in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file.")]),t._v(" "),a("p",[t._v("Then we'll apply the following styles:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the pagination Class"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("`/images/${post.frontmatter.img}`"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.frontmatter.alt || "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasPrev"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.prevLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Prev\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasNext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.nextLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Next\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.pagination\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("justify-content")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" space-between\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v('lang="stylus"')]),t._v(" is used to specify which pre-processor we want to use in the component which in our case is "),a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://stylus-lang.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Stylus"),a("OutboundLink")],1)]),t._v(" which is the default pre-processor used by "),a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1)]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("scoped")]),t._v(" is used to only apply the styles to the current component, i.e., the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component. We're scoping these styles since they currently only apply to the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("display: flex")]),t._v(" defines a flex container for all of the direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(".")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("justify-content: space-between")]),t._v(" evenly spaces out the flex items along the main-axis of the flex container where the first item is flush with the start of the flex container, and the last item is flush with the end of the flex container. Here, the main-axis of the flex container is the horizontal axis. The flex items are the direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(", i.e., the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags that are wrapping the "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" components.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("padding-top: 2rem")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("2rem")]),t._v(" to the top of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("pagination")]),t._v(".")])]),t._v(" "),a("p",[t._v("The "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links should now be properly spaced out, and you can view the styling updates by navigating to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/3/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("If you have any questions about the "),a("code",{staticClass:"inline-code-block"},[t._v("lang")]),t._v(" attribute, the "),a("code",{staticClass:"inline-code-block"},[t._v("scoped")]),t._v(" attribute, flexbox, or CSS in general, then check out these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vue-loader-v14.vuejs.org/en/configurations/pre-processors.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Using Pre-Processors"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vue-loader.vuejs.org/guide/scoped-css.html#scoped-css",target:"_blank",rel:"noopener noreferrer"}},[t._v("Scoped CSS"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://css-tricks.com/snippets/css/a-guide-to-flexbox/",target:"_blank",rel:"noopener noreferrer"}},[t._v("A Complete Guide to Flexbox"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox",target:"_blank",rel:"noopener noreferrer"}},[t._v("Basics of Flexbox"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content",target:"_blank",rel:"noopener noreferrer"}},[t._v("justify-content"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1)])])]),t._v(" "),a("h2",{attrs:{id:"left-and-right-arrow-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#left-and-right-arrow-icons"}},[t._v("#")]),t._v(" Left and Right Arrow Icons")]),t._v(" "),a("p",[t._v("We're now ready to add the left and right arrow icons to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links.")]),t._v(" "),a("h3",{attrs:{id:"downloading-the-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#downloading-the-icons"}},[t._v("#")]),t._v(" Downloading the Icons")]),t._v(" "),a("p",[t._v("To add the left and right arrow icons to the site we need to first download the icons. To find icons for your site "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" recommends using "),a("a",{attrs:{href:"https://www.iconfont.cn/collections/index",target:"_blank",rel:"noopener noreferrer"}},[t._v("iconfont"),a("OutboundLink")],1),t._v(". After searching for the icons and downloading them, you'll be asked to specify a color and size for the icons. For the blog we'll be using a color of "),a("code",{staticClass:"inline-code-block"},[t._v("#e6e6e6")]),t._v(" and a size of "),a("code",{staticClass:"inline-code-block"},[t._v("200")]),t._v(" which is the default size.")]),t._v(" "),a("p",[t._v("Instead of searching "),a("a",{attrs:{href:"https://www.iconfont.cn/collections/index",target:"_blank",rel:"noopener noreferrer"}},[t._v("iconfont"),a("OutboundLink")],1),t._v(" for the left and right arrow icons, you can download them from the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-20")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-20",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Using SVG Export")]),t._v(" "),a("p",[t._v("To easily download the left and right arrow icons you can also install the browser extension "),a("a",{attrs:{href:"https://svgexport.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG Export"),a("OutboundLink")],1),t._v(". After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.")])]),t._v(" "),a("h3",{attrs:{id:"updating-the-icons-directory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#updating-the-icons-directory"}},[t._v("#")]),t._v(" Updating the Icons Directory")]),t._v(" "),a("p",[t._v("After downloading the left and right arrow icons, we'll need to add them to the "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory which should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v("├── "),a("code",[t._v("icons")]),t._v("\n│ ├── Gab.svg\n│ ├── leftArrow.svg\n│ ├── GitHub.svg\n│ ├── RSS.svg\n│ ├── Keybase.svg\n│ ├── rightArrow.svg\n│ ├── Telegram.svg\n│ ├── Twitter.svg\n│ └── YouTube.svg")]),t._v("\n")])]),a("h3",{attrs:{id:"displaying-the-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-the-icons"}},[t._v("#")]),t._v(" Displaying the Icons")]),t._v(" "),a("p",[t._v("After adding the left and right arrow icons to the "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory, the plugin will automatically load the icons and provides the global "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component. To use the "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component we need to pass a "),a("code",{staticClass:"inline-code-block"},[t._v("name")]),t._v(" attribute to it where the value is the name of the SVG file we want to use.")]),t._v(" "),a("p",[t._v("Here, the value for the "),a("code",{staticClass:"inline-code-block"},[t._v("name")]),t._v(" attribute will be "),a("code",{staticClass:"inline-code-block"},[t._v("leftArrow")]),t._v(" for the Prev "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link and "),a("code",{staticClass:"inline-code-block"},[t._v("rightArrow")]),t._v(" for the Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link.")]),t._v(" "),a("p",[t._v("We're going to be adding the "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" components inside of the corresponding "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" components.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying the Icons"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("`/images/${post.frontmatter.img}`"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.frontmatter.alt || "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasPrev"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.prevLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("leftArrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("Prev\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasNext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.nextLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Next"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("rightArrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.pagination\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("justify-content")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" space-between\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br")])])])],1),t._v(" "),a("p",[t._v("To view the left and right arrow icons navigate to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/3/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("Notice how the left arrow icon is being displayed to the left of the Prev "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" text and how the right arrow icon is being displayed to the right of the Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" text. This ensures the arrows and the text look correct when being displayed.")]),t._v(" "),a("h3",{attrs:{id:"styling-the-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#styling-the-icons"}},[t._v("#")]),t._v(" Styling the Icons")]),t._v(" "),a("p",[t._v("We're now going to add some styling to the left and right arrow icons. The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Styling the Icons"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("`/images/${post.frontmatter.img}`"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.frontmatter.alt || "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasPrev"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.prevLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("leftArrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("left-arrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("Prev\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasNext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.nextLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Next"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("rightArrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("right-arrow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.pagination\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("justify-content")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" space-between\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n .left-arrow\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0.25rem\n .right-arrow\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-left")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0.25rem\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br")])])])],1),t._v(" "),a("ul",[a("li",[a("p",[a("code",{staticClass:"inline-code-block"},[t._v("padding-right: 0.25rem")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("0.25rem")]),t._v(" to the right of the "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("left-arrow")]),t._v(".")])]),t._v(" "),a("li",[a("p",[a("code",{staticClass:"inline-code-block"},[t._v("padding-left: 0.25rem")]),t._v(" adds a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("0.25rem")]),t._v(" to the left of the "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component with a class of "),a("code",{staticClass:"inline-code-block"},[t._v("right-arrow")]),t._v(".")])])]),t._v(" "),a("p",[t._v("To view the styling updates to the left and right arrow icons navigate to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/3/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("If you have any questions about the CSS discussed above, then check out this resource:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.w3schools.com/css/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1)])])]),t._v(" "),a("h2",{attrs:{id:"optimizing-the-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#optimizing-the-icons"}},[t._v("#")]),t._v(" Optimizing the Icons")]),t._v(" "),a("p",[t._v("When downloading the left and right arrow icons from "),a("a",{attrs:{href:"https://www.iconfont.cn/collections/index",target:"_blank",rel:"noopener noreferrer"}},[t._v("iconfont"),a("OutboundLink")],1),t._v(", the icons will have a lot of redundant and useless information. We can use a Command-line Interface (CLI) command provided by "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" to optimize the icons.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Icons Already Optimized")]),t._v(" "),a("p",[t._v("If you downloaded the left and right arrow icons from the repository or by using the "),a("a",{attrs:{href:"https://svgexport.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG Export"),a("OutboundLink")],1),t._v(" browser extension, then the icons should already be optimized and you shouldn't have to run the CLI command.")])]),t._v(" "),a("p",[t._v("Here's the CLI command you can run to optimize the icons "),a("code",{staticClass:"inline-code-block"},[t._v("vuepress svgo [docsDir]")]),t._v(" where "),a("code",{staticClass:"inline-code-block"},[t._v("[docsDir]")]),t._v(" is the docs directory for your project which in our case is "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(".")]),t._v(" "),a("p",[t._v("We added this CLI command to the "),a("code",{staticClass:"inline-code-block"},[t._v("scripts")]),t._v(" object in the "),a("code",{staticClass:"inline-code-block"},[t._v("package.json")]),t._v(" file in the previous post "),a("RouterLink",{attrs:{to:"/vuepress-tutorial-12/#cli-command"}},[t._v("VuePress Tutorial 12 - Highlight SVGs on Hover")]),t._v(".")],1),t._v(" "),a("p",[t._v("Here's how to run the script:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" svgo\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])]),t._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" run svgo\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("p",[t._v("After running the script, the icons should be optimized.")]),t._v(" "),a("p",[t._v("If you have questions about how the plugin implements the CLI command or about the plugin in general, then checkout the "),a("a",{attrs:{href:"https://github.com/ntnyq/vuepress-plugin-svg-icons/tree/vuepress-v1/docs/guide",target:"_blank",rel:"noopener noreferrer"}},[t._v("guide"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You can also check out "),a("a",{attrs:{href:"https://github.com/svg/svgo",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVGO"),a("OutboundLink")],1),t._v(" which is the optimization tool being used by the plugin to optimize the icons.")]),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we're going to continue styling the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component by making each post in the list of posts look like a card.")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/46.c591d97d.js b/assets/js/46.c591d97d.js new file mode 100644 index 00000000..cbaf0bbe --- /dev/null +++ b/assets/js/46.c591d97d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{557:function(e,t,s){"use strict";s.r(t);var a=s(18),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"vuepress-tutorial-3-set-up-and-installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-3-set-up-and-installation"}},[e._v("#")]),e._v(" VuePress Tutorial 3 - Set Up and Installation")])]},proxy:!0}])},[s("h2",{attrs:{id:"setting-up-and-using-github"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-and-using-github"}},[e._v("#")]),e._v(" Setting Up and Using GitHub")]),e._v(" "),s("p",[e._v("First we'll be going over how to create a repository on "),s("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),s("OutboundLink")],1),e._v(". If you plan on using these tutorials as guides and want to start your own project from scratch, then you should create your own repository.")]),e._v(" "),s("p",[e._v("Each tutorial in this series involving code will also have a branch in the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" repository. If you want the code for a specific tutorial, then you can download a specific branch or clone the repository and switch to one of the remote-tracking branches. We'll go over how to download and clone the code in more detail in the sections below.")]),e._v(" "),s("p",[e._v("You can also download, clone, or fork the current version of the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("If you don't have "),s("code",{staticClass:"inline-code-block"},[e._v("git")]),e._v(" installed, then check out the "),s("a",{attrs:{href:"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git",target:"_blank",rel:"noopener noreferrer"}},[e._v("Installing Git"),s("OutboundLink")],1),e._v(" documentation. Also, if you don't have a GitHub account, then "),s("a",{attrs:{href:"https://github.com/join",target:"_blank",rel:"noopener noreferrer"}},[e._v("Join GitHub"),s("OutboundLink")],1),e._v(" and "),s("a",{attrs:{href:"https://docs.github.com/en/get-started/quickstart/set-up-git",target:"_blank",rel:"noopener noreferrer"}},[e._v("Set up Git"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h3",{attrs:{id:"creating-a-repository"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-repository"}},[e._v("#")]),e._v(" Creating a Repository")]),e._v(" "),s("p",[e._v("A repository is a directory where you store the code and other files used in a project. A repository can be a local directory on your computer and can be stored and accessed online from a website like "),s("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("If you want to create your own repository for your own project, then you need to:")]),e._v(" "),s("ol",[s("li",[e._v("Go to your profile page, click on the "),s("span",{staticClass:"post-term-bold"},[e._v("Repositories")]),e._v(" tab, then click the "),s("span",{staticClass:"post-term-bold"},[e._v("New")]),e._v(" button or on any page in the upper right corner, click the "),s("span",{staticClass:"post-term-bold"},[e._v("+")]),e._v(" drop-down menu, then select "),s("span",{staticClass:"post-term-bold"},[e._v("New repository")])]),e._v(" "),s("li",[e._v("Type a short and descriptive name in the "),s("span",{staticClass:"post-term-bold"},[e._v("Repository name")]),e._v(" field")]),e._v(" "),s("li",[e._v("Type a description in the "),s("span",{staticClass:"post-term-bold"},[e._v("Description")]),e._v(" field (optional)")]),e._v(" "),s("li",[e._v("Choose if you want the repository to be "),s("span",{staticClass:"post-term-bold"},[e._v("Public")]),e._v(" or "),s("span",{staticClass:"post-term-bold"},[e._v("Private")])]),e._v(" "),s("li",[e._v("Add a "),s("code",{staticClass:"inline-code-block"},[e._v("README.md")]),e._v(" file which you can use to describe your project in more detail and to document how to install and use your project")]),e._v(" "),s("li",[e._v("Add a "),s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file which is used to ignore specified files and directories when making a commit, I recommend selecting the "),s("span",{staticClass:"post-term-bold"},[e._v("Node")]),e._v(" template from the drop-down menu")]),e._v(" "),s("li",[e._v("Add your preferred "),s("span",{staticClass:"post-term-bold"},[e._v("license")]),e._v(" which is used to tell others how they can use your code")]),e._v(" "),s("li",[e._v("You can also choose a different default branch name, e.g., "),s("span",{staticClass:"post-term-bold"},[e._v("master")]),e._v(" instead of "),s("span",{staticClass:"post-term-bold"},[e._v("main")]),e._v(" by clicking on the settings link")]),e._v(" "),s("li",[e._v("Click the "),s("span",{staticClass:"post-term-bold"},[e._v("Create repository")]),e._v(" button")])]),e._v(" "),s("p",[e._v("If you run into any issues when creating the repository or want to learn more, then check out the "),s("a",{attrs:{href:"https://docs.github.com/en/get-started/quickstart/create-a-repo",target:"_blank",rel:"noopener noreferrer"}},[e._v("Create a Repo"),s("OutboundLink")],1),e._v(" documentation. If you need help determining which license you should use, then check out "),s("a",{attrs:{href:"https://choosealicense.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Choose a License"),s("OutboundLink")],1),e._v(". You can also learn more about the "),s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file from the "),s("a",{attrs:{href:"https://git-scm.com/docs/gitignore",target:"_blank",rel:"noopener noreferrer"}},[e._v("gitignore"),s("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),s("p",[e._v("After successfully creating your repository, you can now clone it to make a local copy on your computer.")]),e._v(" "),s("h3",{attrs:{id:"cloning-a-repository"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cloning-a-repository"}},[e._v("#")]),e._v(" Cloning a Repository")]),e._v(" "),s("p",[e._v("To clone your newly created repository, you need to:")]),e._v(" "),s("ol",[s("li",[e._v("Go to the main page of your repository")]),e._v(" "),s("li",[e._v("Click the "),s("span",{staticClass:"post-term-bold"},[e._v("Code")]),e._v(" button and select your preferred method to clone the repositroy, e.g., "),s("span",{staticClass:"post-term-bold"},[e._v("SSH")])]),e._v(" "),s("li",[e._v("Copy your preferred remote URL")]),e._v(" "),s("li",[e._v("Replace the example URL below with your copied URL, then run one of the following commands in your preferred directory:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"SSH"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone git@github.com:"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("repository-name"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"HTTPS"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("username"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("repository-name"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you run into any issues when cloning the repository or want to learn more, then check out "),s("a",{attrs:{href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository",target:"_blank",rel:"noopener noreferrer"}},[e._v("Cloning a Repository"),s("OutboundLink")],1),e._v(" and "),s("a",{attrs:{href:"https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories",target:"_blank",rel:"noopener noreferrer"}},[e._v("About Remote Repositories"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("The next sections will show you how to download and clone the code from the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" repository.")]),e._v(" "),s("h3",{attrs:{id:"downloading-tutorials-from-github"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#downloading-tutorials-from-github"}},[e._v("#")]),e._v(" Downloading Tutorials from GitHub")]),e._v(" "),s("p",[e._v("If you want to download the code for a specific tutorial, then you need to:")]),e._v(" "),s("ol",[s("li",[e._v("Go to the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" repository")]),e._v(" "),s("li",[e._v("Select which branch you want to download, e.g., "),s("span",{staticClass:"post-term-bold"},[e._v("tutorial-3")])]),e._v(" "),s("li",[e._v("Click the "),s("span",{staticClass:"post-term-bold"},[e._v("Code")]),e._v(" button and select "),s("span",{staticClass:"post-term-bold"},[e._v("Download ZIP")])]),e._v(" "),s("li",[e._v("Save the ZIP file to your preferred directory")]),e._v(" "),s("li",[e._v("Unzip the file in your preferred directory")])]),e._v(" "),s("h3",{attrs:{id:"cloning-and-using-tutorials-from-github"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cloning-and-using-tutorials-from-github"}},[e._v("#")]),e._v(" Cloning and Using Tutorials from GitHub")]),e._v(" "),s("p",[e._v("If you want to clone the tutorials, then you need to run one of the following commands in your preferred directory depending on your preferred method:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"SSH"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone git@github.com:codemonkeysio/code-monkeys-blog-tutorials.git\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"HTTPS"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you run into any issues when cloning the repository or want to learn more, then check out "),s("a",{attrs:{href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository",target:"_blank",rel:"noopener noreferrer"}},[e._v("Cloning a Repository"),s("OutboundLink")],1),e._v(" and "),s("a",{attrs:{href:"https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories",target:"_blank",rel:"noopener noreferrer"}},[e._v("About Remote Repositories"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("After successfully cloning the repository, you can run the following command to list both the remote-tracking and local branches:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"List All Branches"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" branch -a\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Before switching to one of the remote-tracking branches, run the following command to get all of the latest changes from the remote repository without modifying your working directory:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Fetch All Branches"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" fetch\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Now, to work on the code for a remote-tracking branch you need to make a local copy of it which you can do by running the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Switch Branches"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" switch "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("branch-name"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you get an error when running the above command and the provided branch name exists, then check your version of "),s("code",{staticClass:"inline-code-block"},[e._v("git")]),e._v(" by running "),s("code",{staticClass:"inline-code-block"},[e._v("git --version")]),e._v(". You need to be using at least "),s("a",{attrs:{href:"https://github.com/git/git/blob/master/Documentation/RelNotes/2.23.0.txt",target:"_blank",rel:"noopener noreferrer"}},[e._v("Git 2.23"),s("OutboundLink")],1),e._v(" to use the "),s("code",{staticClass:"inline-code-block"},[e._v("switch")]),e._v(" command.")]),e._v(" "),s("p",[e._v("If you have an older version of "),s("code",{staticClass:"inline-code-block"},[e._v("git")]),e._v(" or if you prefer to not use the "),s("code",{staticClass:"inline-code-block"},[e._v("switch")]),e._v(" command, you can alternatively run the following command to work on the code for a remote-tracking branch:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Using Checkout to Switch Branches"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" checkout "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("branch-name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("The "),s("span",{staticClass:"post-term-one"},[e._v("recommended")]),e._v(" way to switch branches is with the "),s("code",{staticClass:"inline-code-block"},[e._v("switch")]),e._v(" command since the "),s("code",{staticClass:"inline-code-block"},[e._v("checkout")]),e._v(" command does more than just switching branches which can lead to confusion.")]),e._v(" "),s("p",[e._v("If a remote-tracking branch is updated and you want to integrate those changes into your local branch, then switch to the branch you want to update and run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Pull Changes"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" pull\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you edit the code for a branch and attempt to pull, you may run into merge conflicts. You can check out "),s("a",{attrs:{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts",target:"_blank",rel:"noopener noreferrer"}},[e._v("About Merge Conflicts"),s("OutboundLink")],1),e._v(" to learn more about what they are and how to resolve them.")]),e._v(" "),s("h2",{attrs:{id:"dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),s("p",[e._v("Before installing "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(", you first need to have "),s("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js 10+"),s("OutboundLink")],1),e._v(" installed and optionally "),s("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("It's recommended to use "),s("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),s("OutboundLink")],1),e._v(" if either one of the following applies to you:")]),e._v(" "),s("ul",[s("li",[e._v("You're using "),s("a",{attrs:{href:"https://webpack.js.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack 3.x"),s("OutboundLink")],1),e._v(" in which case you may notice installation issues with "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(".")]),e._v(" "),s("li",[e._v("You're going to be closely following along with these turtorials in which case I recommend using "),s("code",{staticClass:"inline-code-block"},[e._v("v1.22.17")]),e._v(" since it's the same version being used by the "),s("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(". This will allow you to avoid any potential issues with packages and with the "),s("a",{attrs:{href:"https://github.com/features/actions",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub Actions"),s("OutboundLink")],1),e._v(" workflow which is used when deploying the site.")],1)]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Using the Locally Set Version of Yarn in the Repositories")]),e._v(" "),s("p",[e._v("The "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" and the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog"),s("OutboundLink")],1),e._v(" repositories both have a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" set to "),s("code",{staticClass:"inline-code-block"},[e._v("v1.22.17")]),e._v(" in a "),s("code",{staticClass:"inline-code-block"},[e._v(".yarn/releases")]),e._v(" directory. This means if you use the code from the repositories, then you'll be able to use the "),s("span",{staticClass:"post-term-one"},[e._v("locally set version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" instead of having to install the specific "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" yourself.")])]),e._v(" "),s("p",[e._v("The next sections will show you how to check your current versions of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" and "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(".")]),e._v(" "),s("p",[e._v("If you don't have "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" or "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" installed or you want to change the versions, then check out the provided resources explaining how to install specific versions.")]),e._v(" "),s("h3",{attrs:{id:"checking-node-version"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#checking-node-version"}},[e._v("#")]),e._v(" Checking Node Version")]),e._v(" "),s("p",[e._v("To check if you have "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" installed run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check Node Version"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("node -v\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you see an output of "),s("code",{staticClass:"inline-code-block"},[e._v("v10.xx.xx")]),e._v(" or greater, then you can continue on with the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" installation.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Code Monkeys Blog Node Version")]),e._v(" "),s("p",[e._v("The "),s("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" is currently using "),s("a",{attrs:{href:"https://nodejs.org/dist/v16.11.1/docs/api/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js v16.11.1"),s("OutboundLink")],1),e._v(". If you're going to be closely following along with these turtorials, then I recommend using the same version to avoid any potential issues.")],1)]),e._v(" "),s("p",[e._v("If you don't see the proper output or want to use the same version in these tutorials, then you need to either install or upgrade "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(".")]),e._v(" "),s("p",[e._v("To install a "),s("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" you can go to "),s("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),s("OutboundLink")],1),e._v(" and download a compatible version.")]),e._v(" "),s("p",[e._v("If you previously installed a "),s("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" from "),s("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),s("OutboundLink")],1),e._v(", then you can go back to the site and download a newer version to upgrade your current version.")]),e._v(" "),s("p",[e._v("If you're a developer that needs to use multiple versions of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(" when working on different projects, then I recommend using a "),s("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(". Before installing a "),s("span",{staticClass:"post-term-one"},[e._v("node version manager")]),e._v(" like "),s("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),s("OutboundLink")],1),e._v(" or "),s("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),s("OutboundLink")],1),e._v(", I recommend uninstalling your "),s("span",{staticClass:"post-term-one"},[e._v("system version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(", "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(", and any globally installed "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" packages to avoid potential issues.")]),e._v(" "),s("p",[e._v("Check out these posts "),s("RouterLink",{attrs:{to:"/installing-nvm/"}},[e._v("Installing Node Version Manager (nvm)")]),e._v(" and "),s("RouterLink",{attrs:{to:"/installing-fnm/"}},[e._v("Installing Fast Node Manager (fnm)")]),e._v(" to learn how to install and use them.")],1),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Preferred Node Version Manager")]),e._v(" "),s("p",[e._v("My "),s("span",{staticClass:"post-term-one"},[e._v("preferred")]),e._v(" way to manage my node versions is with "),s("a",{attrs:{href:"https://github.com/Schniz/fnm",target:"_blank",rel:"noopener noreferrer"}},[e._v("fnm"),s("OutboundLink")],1),e._v(" since it's much faster than "),s("a",{attrs:{href:"https://github.com/nvm-sh/nvm",target:"_blank",rel:"noopener noreferrer"}},[e._v("nvm"),s("OutboundLink")],1),e._v(".")])]),e._v(" "),s("p",[e._v("After installing a compatible version of "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(", you will now have "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" the default package manager for "),s("code",{staticClass:"inline-code-block"},[e._v("node")]),e._v(". If you prefer you can use "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" to install "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(". However, if you're going to be closely following along with these tutorials, then I recommend using "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(".")]),e._v(" "),s("h3",{attrs:{id:"checking-yarn-version"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#checking-yarn-version"}},[e._v("#")]),e._v(" Checking Yarn Version")]),e._v(" "),s("p",[e._v("To check if you have "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" installed run the following command:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check Yarn Version"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" -v\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If you don't see your preferred version of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(", then it's recommended to install or upgrade a "),s("span",{staticClass:"post-term-one"},[e._v("global version")]),e._v(" of "),s("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),s("OutboundLink")],1),e._v(" which can then be used to set a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for the project.")]),e._v(" "),s("p",[e._v("To learn more about how to install a "),s("span",{staticClass:"post-term-one"},[e._v("global version")]),e._v(" of "),s("a",{attrs:{href:"https://classic.yarnpkg.com/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn 1"),s("OutboundLink")],1),e._v(", how to use the "),s("span",{staticClass:"post-term-one"},[e._v("global version")]),e._v(" to set a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for a project, and other commonly used commands check out the "),s("RouterLink",{attrs:{to:"/installing-yarn-1/"}},[e._v("Installing Yarn 1")]),e._v(" post.")],1),e._v(" "),s("p",[e._v("If you created your own repository and are using a "),s("span",{staticClass:"post-term-one"},[e._v("locally set version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(", then be sure to update your "),s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file and add a "),s("code",{staticClass:"inline-code-block"},[e._v(".gitattributes")]),e._v(" file as described in the "),s("RouterLink",{attrs:{to:"/installing-yarn-1/"}},[e._v("Installing Yarn 1")]),e._v(" post.")],1),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Recommended Version and Repositories Reminder")]),e._v(" "),s("p",[e._v("Remember the recommended version of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" to use with your project if you're closely following along with these tutorials is "),s("code",{staticClass:"inline-code-block"},[e._v("v1.22.17")]),e._v(". Also, if you use the code from the repositories, then there will be a provided "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" which you can use instead of installing the specific "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" yourself.")])]),e._v(" "),s("h3",{attrs:{id:"installing-tutorial-packages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-tutorial-packages"}},[e._v("#")]),e._v(" Installing Tutorial Packages")]),e._v(" "),s("p",[e._v("If you downloaded or cloned the code from the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(", first check your version of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" by running the following command in the project directory:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Check Yarn Version"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" -v\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("If the version of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" is "),s("code",{staticClass:"inline-code-block"},[e._v("v1.22.17")]),e._v(", then you can install all of the packages being used in the project by running the following command in the root project directory:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Install All Project Packages"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Make sure you're not using the "),s("code",{staticClass:"inline-code-block"},[e._v("master")]),e._v(" branch when checking the version since it doesn't have the "),s("code",{staticClass:"inline-code-block"},[e._v(".yarn")]),e._v(" directory and that you have a "),s("span",{staticClass:"post-term-one"},[e._v("global version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" installed.")]),e._v(" "),s("p",[e._v("If you're using your own repository and want to install "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" yourself, then use one of the installation methods described below.")]),e._v(" "),s("h2",{attrs:{id:"installing-vuepress"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-vuepress"}},[e._v("#")]),e._v(" Installing VuePress")]),e._v(" "),s("p",[e._v("When installing "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" you have the option to use the "),s("a",{attrs:{href:"https://github.com/vuepress/create-vuepress-site",target:"_blank",rel:"noopener noreferrer"}},[e._v("create-vuepress-site generator"),s("OutboundLink")],1),e._v(" for a quick start installation or a manual installation. We'll go over both of the installation methods, but the future tutorials will be based off of the manual installation.")]),e._v(" "),s("h3",{attrs:{id:"quick-start"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[e._v("#")]),e._v(" Quick Start")]),e._v(" "),s("p",[e._v("Using the generator will help scaffold a basic site structure for you by creating common directories and files found in "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" sites.")]),e._v(" "),s("ol",[s("li",[e._v("To use the generator run the following command in your preferred directory using your preferred package manager:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" create vuepress-site "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("optional-directory-name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("npx create-vuepress-site "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("optional-directory-name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After running the above command, you'll be asked to answer some questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named "),s("code",{staticClass:"inline-code-block"},[e._v("quick-start-project")]),e._v(":")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Quick Start Questions"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("Whats the name of your project? quick-start-project\nWhats the description of your project? Learning VuePress\nWhats your email? youremail@example.com\nWhats your name? Your Name\nWhats the repo of your project? https://github.com/github-username/quick-start-project\n create docs/.gitignore\n create docs/package.json\n create docs/src/.vuepress/components/demo-component.vue\n create docs/src/.vuepress/components/Foo/Bar.vue\n create docs/src/.vuepress/components/OtherComponent.vue\n create docs/src/.vuepress/config.js\n create docs/src/.vuepress/enhanceApp.js\n create docs/src/.vuepress/styles/index.styl\n create docs/src/.vuepress/styles/palette.styl\n create docs/src/config/README.md\n create docs/src/guide/README.md\n create docs/src/guide/using-vue.md\n create docs/src/index.md\n✨ File Generate Done\nDone "),s("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("38")]),e._v(".23s.\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br"),s("span",{staticClass:"line-number"},[e._v("11")]),s("br"),s("span",{staticClass:"line-number"},[e._v("12")]),s("br"),s("span",{staticClass:"line-number"},[e._v("13")]),s("br"),s("span",{staticClass:"line-number"},[e._v("14")]),s("br"),s("span",{staticClass:"line-number"},[e._v("15")]),s("br"),s("span",{staticClass:"line-number"},[e._v("16")]),s("br"),s("span",{staticClass:"line-number"},[e._v("17")]),s("br"),s("span",{staticClass:"line-number"},[e._v("18")]),s("br"),s("span",{staticClass:"line-number"},[e._v("19")]),s("br"),s("span",{staticClass:"line-number"},[e._v("20")]),s("br")])])])],1),e._v(" "),s("p",[e._v("The scaffolded basic site is created in a "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory in your current directory which in the example above was "),s("code",{staticClass:"inline-code-block"},[e._v("quick-start-project")]),e._v(". All of the created directories and files are listed above.")]),e._v(" "),s("p",[e._v("If you're using "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" you'll see a "),s("code",{staticClass:"inline-code-block"},[e._v(".npmignore")]),e._v(" file in the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory instead of a "),s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Using an Optional Directory Name")]),e._v(" "),s("p",[e._v("If you passed an optional directory name, then the scaffolded basic site is created in the given directory in a "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory.")])]),e._v(" "),s("p",[e._v("The answers given to the questions can be found in the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory in the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file which contains your site's metadata.")]),e._v(" "),s("p",[e._v("Here's the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file from the example above:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"package.json"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"quick-start-project"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learning VuePress"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"authors"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your Name"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"email"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"youremail@example.com"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/github-username/quick-start-project.git"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev src"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build src"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"MIT"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"vuepress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"^1.5.3"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br"),s("span",{staticClass:"line-number"},[e._v("11")]),s("br"),s("span",{staticClass:"line-number"},[e._v("12")]),s("br"),s("span",{staticClass:"line-number"},[e._v("13")]),s("br"),s("span",{staticClass:"line-number"},[e._v("14")]),s("br"),s("span",{staticClass:"line-number"},[e._v("15")]),s("br"),s("span",{staticClass:"line-number"},[e._v("16")]),s("br"),s("span",{staticClass:"line-number"},[e._v("17")]),s("br"),s("span",{staticClass:"line-number"},[e._v("18")]),s("br"),s("span",{staticClass:"line-number"},[e._v("19")]),s("br")])])])],1),e._v(" "),s("p",[e._v("We'll be covering the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file in the next tutorial. If you're interested in learning more now, then check out the "),s("a",{attrs:{href:"https://nodejs.dev/learn/the-package-json-guide",target:"_blank",rel:"noopener noreferrer"}},[e._v("package.json guide"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[e._v("To see your newly created site, navigate to the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Navigate to docs Directory"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" docs\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[e._v("Install your site's packages using your preferred package manager:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Installing the Same VuePress Version")]),e._v(" "),s("p",[e._v("The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run "),s("code",{staticClass:"inline-code-block"},[e._v("yarn upgrade vuepress@1.8.2")]),e._v(".")])]),e._v(" "),s("ol",{attrs:{start:"4"}},[s("li",[e._v("Start the hot reloading local development server:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" dev\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run dev\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Your site should now be running at "),s("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://localhost:8080/"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h3",{attrs:{id:"manual-installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#manual-installation"}},[e._v("#")]),e._v(" Manual Installation")]),e._v(" "),s("p",[e._v("The manual installation method allows you to start building your site from scratch unlike the quick start method which scaffolds a basic site structure for you.")]),e._v(" "),s("p",[e._v("As mentioned above, the following tutorials will be based off of the manual installation method.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Using an Existing Project")]),e._v(" "),s("p",[e._v("If you already have an existing project and you would like to keep the documentation inside of it, then start from the third command.")])]),e._v(" "),s("ol",[s("li",[e._v("Navigate to your preferred directory which should be where you cloned your site's repository:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Navigate to Preferred Directory"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("preferred-directory"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("ol",{attrs:{start:"2"}},[s("li",[e._v("Initialize your project with your preferred package manager:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" init\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" init\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named "),s("code",{staticClass:"inline-code-block"},[e._v("project-directory")]),e._v(":")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Project Questions"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("question name "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("project-directory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion version "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("1.0")]),e._v(".0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion description: Learning VuePress\nquestion entry point "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("index.js"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion repository url: https://github.com/github-username/project-directory.git\nquestion author: Your Name\nquestion license "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("MIT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(":\nquestion private:\nsuccess Saved package.json\nDone "),s("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("40")]),e._v(".63s.\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br")])])])],1),e._v(" "),s("p",[e._v("After answering all of the questions, a "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file containing the answers is created. The "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file is used to describe metadata about your site.")]),e._v(" "),s("p",[e._v("Here's the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file from the example above:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"package.json"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"project-directory"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learning VuePress"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/github-username/project-directory.git"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your Name"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"MIT"')]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br")])])])],1),e._v(" "),s("p",[e._v("We'll be covering the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file in the next tutorial. If you're interested in learning more now, then check out the "),s("a",{attrs:{href:"https://nodejs.dev/learn/the-package-json-guide",target:"_blank",rel:"noopener noreferrer"}},[e._v("package.json guide"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("ol",{attrs:{start:"3"}},[s("li",[e._v("Install "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(":")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" -D vuepress\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -D vuepress\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Installing the Same VuePress Version")]),e._v(" "),s("p",[e._v("The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run "),s("code",{staticClass:"inline-code-block"},[e._v("yarn upgrade vuepress@1.8.2")]),e._v(".")])]),e._v(" "),s("ol",{attrs:{start:"4"}},[s("li",[e._v("Create a "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory and your first document:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Create Your First Document"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" docs "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v("'# Hello VuePress'")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" docs/README.md\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("ol",{attrs:{start:"5"}},[s("li",[e._v("Add the following "),s("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" object to your "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Scripts Object"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev docs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build docs"')]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Here's the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file from the example above after installing "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" and adding the "),s("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" object:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"package.json"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"project-directory"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learning VuePress"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/github-username/project-directory.git"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your Name"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"MIT"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev docs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build docs"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"vuepress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"^1.9.5"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br"),s("span",{staticClass:"line-number"},[e._v("11")]),s("br"),s("span",{staticClass:"line-number"},[e._v("12")]),s("br"),s("span",{staticClass:"line-number"},[e._v("13")]),s("br"),s("span",{staticClass:"line-number"},[e._v("14")]),s("br"),s("span",{staticClass:"line-number"},[e._v("15")]),s("br"),s("span",{staticClass:"line-number"},[e._v("16")]),s("br")])])])],1),e._v(" "),s("ol",{attrs:{start:"6"}},[s("li",[e._v("Start the hot reloading local development server:")])]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Yarn"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" docs:dev\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])]),e._v(" "),s("code-block",{attrs:{title:"npm"}},[s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run docs:dev\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Your site should now be running at "),s("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://localhost:8080/"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h2",{attrs:{id:"next-steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[e._v("#")]),e._v(" Next Steps")]),e._v(" "),s("p",[e._v("In the next tutorial we'll be summarizing our current directory structure as well as going over the recommended "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/directory-structure.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("directory structure"),s("OutboundLink")],1),e._v(" for a "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" site.")])],1)}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/47.6dcb7d35.js b/assets/js/47.6dcb7d35.js new file mode 100644 index 00000000..5c789a86 --- /dev/null +++ b/assets/js/47.6dcb7d35.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{558:function(e,t,s){"use strict";s.r(t);var o=s(18),a=Object(o.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"vuepress-tutorial-4-directory-structure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-4-directory-structure"}},[e._v("#")]),e._v(" VuePress Tutorial 4 - Directory Structure")])]},proxy:!0}])},[s("h2",{attrs:{id:"current-directory-structure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#current-directory-structure"}},[e._v("#")]),e._v(" Current Directory Structure")]),e._v(" "),s("p",[e._v("We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the recommended directory structure for a "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" site.")]),e._v(" "),s("p",[e._v("The current directory structure of the project is based off of creating a repository for your project on "),s("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),s("OutboundLink")],1),e._v(", cloning the repository, setting a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for your project, and doing a manual installation of "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(". This means if you're not using a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" and/or did a quick start installation your current directory structure will be a little different.")]),e._v(" "),s("p",[e._v("Here's the current directory structure of the project:")]),e._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[e._v(".\n├── "),s("code",[e._v(".yarn")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ ├── "),s("code",[e._v("releases")]),e._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),s("code",[e._v("docs")]),e._v("\n│ └── README.md\n├── "),s("code",[e._v("node_modules")]),e._v("\n├── .gitattributes "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n├── .gitignore\n├── .yarnrc "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),e._v("\n")])]),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v(".yarn/releases")]),e._v(": Stores a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for the project which ensures everyone working on the project is using the same version. If you didn't set a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for your project, you won't have this directory.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v(".yarn/releases/yarn-1.22.17.cjs")]),e._v(": Specific "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" used in the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" and the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog"),s("OutboundLink")],1),e._v(" repositories. The file name will be different if you're using a different version.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/README.md")]),e._v(": The first document for the site which will be used as the homepage.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("node_modules")]),e._v(": Contains all of the code for the installed packages.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v(".gitattributes")]),e._v(": Used to prevent "),s("code",{staticClass:"inline-code-block"},[e._v("git")]),e._v(" from showing large diffs when you add or update "),s("span",{staticClass:"post-term-one"},[e._v("local versions")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(". If you didn't set a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for your project, you won't have this file.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(": Ignores specified files and directories when making a commit to your repository.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v(".yarnrc")]),e._v(": Instructs your "),s("span",{staticClass:"post-term-one"},[e._v("global version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" to use the specified "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" in the project. If you didn't set a "),s("span",{staticClass:"post-term-one"},[e._v("local version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(" for your project, you won't have this file.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("LICENSE")]),e._v(": Tells others how they can use your code.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(": Describes metadata about your site.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("README.md")]),e._v(": Used to describe your project in more detail and to document how to install and use your project.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("yarn.lock")]),e._v(": Keeps track of the exact versions of packages installed in the project. If you're using "),s("code",{staticClass:"inline-code-block"},[e._v("npm")]),e._v(" you'll have a "),s("code",{staticClass:"inline-code-block"},[e._v("package-lock.json")]),e._v(" file instead.")])]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Reminder to Update the .gitattributes and .gitignore Files")]),e._v(" "),s("p",[e._v("If you created your own repository and are using a "),s("span",{staticClass:"post-term-one"},[e._v("locally set version")]),e._v(" of "),s("code",{staticClass:"inline-code-block"},[e._v("yarn")]),e._v(", then be sure to update your "),s("code",{staticClass:"inline-code-block"},[e._v(".gitignore")]),e._v(" file and add a "),s("code",{staticClass:"inline-code-block"},[e._v(".gitattributes")]),e._v(" file as described in the "),s("RouterLink",{attrs:{to:"/installing-yarn-1/"}},[e._v("Installing Yarn 1")]),e._v(" post.")],1)]),e._v(" "),s("h2",{attrs:{id:"contents-of-the-package-json-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contents-of-the-package-json-file"}},[e._v("#")]),e._v(" Contents of the package.json File")]),e._v(" "),s("p",[e._v("Before moving on to the recommended directory structure, we're going to first go over the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file and add some simple updates.")]),e._v(" "),s("p",[e._v("The properties of your "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file may be different depending on how you answered the questions when initializing your project and if you used the quick start installation method instead of the manual installation method. If you want to update any properties or values, you can edit your "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file directly.")]),e._v(" "),s("p",[e._v("If you plan on publishing your project to the "),s("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),s("OutboundLink")],1),e._v(" registry, then take a look at the "),s("a",{attrs:{href:"https://docs.npmjs.com/cli/v8/configuring-npm/package-json",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm package.json"),s("OutboundLink")],1),e._v(" documentation to make sure you are following all of the specifications.")]),e._v(" "),s("p",[e._v("Here's what the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file looks like for the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(":")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"package.json"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"code-monkeys-blog-tutorials"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"J the Code Monkey"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"GPL-3.0-or-later"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev docs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build docs"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"vuepress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.8.2"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br"),s("span",{staticClass:"line-number"},[e._v("11")]),s("br"),s("span",{staticClass:"line-number"},[e._v("12")]),s("br"),s("span",{staticClass:"line-number"},[e._v("13")]),s("br"),s("span",{staticClass:"line-number"},[e._v("14")]),s("br"),s("span",{staticClass:"line-number"},[e._v("15")]),s("br"),s("span",{staticClass:"line-number"},[e._v("16")]),s("br")])])])],1),e._v(" "),s("p",[e._v("The "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow "),s("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning (semver)"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("p",[e._v("Let's describe each property in a little more detail:")]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("name")]),e._v(" is the name given to your project")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("version")]),e._v(" indicates the current version of your project\n"),s("ul",[s("li",[e._v("The versioning follows "),s("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semver"),s("OutboundLink")],1),e._v(" notation")])])]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("description")]),e._v(" is used to describe and provide more information about your project")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("main")]),e._v(" is a JavaScript file that starts the execution of your project")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("repository")]),e._v(" describes the location of the project repository containing the code\n"),s("ul",[s("li",[e._v("You can explicitly set the URL and a version control type in the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file by adding, e.g., "),s("code",{staticClass:"inline-code-block"},[e._v('"repository": { "type": "git", "url": "https://github.com/github-username/your-project" }')])])])]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("author")]),e._v(" describes the creator or owner of the project\n"),s("ul",[s("li",[e._v("You can explicitly set the author name, email, and website in the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file by adding, e.g., "),s("code",{staticClass:"inline-code-block"},[e._v('"author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }')])])])]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("license")]),e._v(" indicates the type of license being used by the project")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" are command-line applications that are described as an object where the property is the name of the script and the value is a command that gets run")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("devDependencies")]),e._v(" are dependencies you need during development only, i.e., not during production")])]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Installing the Same VuePress Version")]),e._v(" "),s("p",[e._v("If you see a different version of "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" and want to install the same version being used in the tutorials and blog, then you can run "),s("code",{staticClass:"inline-code-block"},[e._v("yarn upgrade vuepress@1.8.2")]),e._v(".")])]),e._v(" "),s("p",[e._v("Now, let's make some simple updates to the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file.")]),e._v(" "),s("p",[e._v("To start we're going to be adding a version control type to the "),s("code",{staticClass:"inline-code-block"},[e._v("repository")]),e._v(" property by updating it to be "),s("code",{staticClass:"inline-code-block"},[e._v('"repository": { "type": "git", "url": "https://github.com/github-username/your-project" }')]),e._v(".")]),e._v(" "),s("p",[e._v("Next we're going to be adding an optional email and url to the "),s("code",{staticClass:"inline-code-block"},[e._v("author")]),e._v(" property by updating it to be "),s("code",{staticClass:"inline-code-block"},[e._v('"author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }')]),e._v(".")]),e._v(" "),s("p",[e._v("If you prefer you can also shorten the "),s("code",{staticClass:"inline-code-block"},[e._v("author")]),e._v(" property to be one string by defining it like this "),s("code",{staticClass:"inline-code-block"},[e._v('"author": "Your Name (https://your-website.com)"')]),e._v(".")]),e._v(" "),s("p",[e._v("The email could be a personal or work email, and the url could be a link to a personal website or the website related to your project.")]),e._v(" "),s("p",[e._v("Here's what the contents of the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file looks like for the "),s("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials",target:"_blank",rel:"noopener noreferrer"}},[e._v("code-monkeys-blog-tutorials"),s("OutboundLink")],1),e._v(" after adding the updates:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"package.json"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"code-monkeys-blog-tutorials"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"repository"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"git"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"J the Code Monkey"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"email"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"support@codemonkeys.tech"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://codemonkeys.tech/"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"license"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"GPL-3.0-or-later"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev docs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build docs"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"devDependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"vuepress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"1.8.2"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br"),s("span",{staticClass:"line-number"},[e._v("8")]),s("br"),s("span",{staticClass:"line-number"},[e._v("9")]),s("br"),s("span",{staticClass:"line-number"},[e._v("10")]),s("br"),s("span",{staticClass:"line-number"},[e._v("11")]),s("br"),s("span",{staticClass:"line-number"},[e._v("12")]),s("br"),s("span",{staticClass:"line-number"},[e._v("13")]),s("br"),s("span",{staticClass:"line-number"},[e._v("14")]),s("br"),s("span",{staticClass:"line-number"},[e._v("15")]),s("br"),s("span",{staticClass:"line-number"},[e._v("16")]),s("br"),s("span",{staticClass:"line-number"},[e._v("17")]),s("br"),s("span",{staticClass:"line-number"},[e._v("18")]),s("br"),s("span",{staticClass:"line-number"},[e._v("19")]),s("br"),s("span",{staticClass:"line-number"},[e._v("20")]),s("br"),s("span",{staticClass:"line-number"},[e._v("21")]),s("br"),s("span",{staticClass:"line-number"},[e._v("22")]),s("br"),s("span",{staticClass:"line-number"},[e._v("23")]),s("br")])])])],1),e._v(" "),s("p",[e._v("Now that we have a good understanding of our current directory structure and the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file, let's discuss the recommended directory structure.")]),e._v(" "),s("h2",{attrs:{id:"recommended-directory-structure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#recommended-directory-structure"}},[e._v("#")]),e._v(" Recommended Directory Structure")]),e._v(" "),s("p",[e._v("Here's the recommended directory structure for a standard "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" site:")]),e._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[e._v(".\n├── docs\n│ ├── .vuepress "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ ├── "),s("code",[e._v("components")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ ├── "),s("code",[e._v("public")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ ├── "),s("code",[e._v("styles")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ │ ├── index.styl\n│ │ │ └── palette.styl\n│ │ ├── "),s("code",[e._v("templates")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional, Danger Zone")]),e._v(")")]),e._v("\n│ │ │ ├── dev.html\n│ │ │ └── ssr.html\n│ │ ├── "),s("code",[e._v("theme")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ │ └── Layout.vue\n│ │ ├── "),s("code",[e._v("config.js")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │ └── "),s("code",[e._v("enhanceApp.js")]),e._v(" "),s("em",[e._v("("),s("strong",[e._v("Optional")]),e._v(")")]),e._v("\n│ │\n│ ├── README.md\n│ └── example-page\n│ └── README.md\n│\n└── package.json")]),e._v("\n")])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Capitalization")]),e._v(" "),s("p",[e._v("When creating these directories and files be sure to follow the capitalization to prevent any potential issues.")])]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress")]),e._v(": Stores the global configuration, components, static resources, etc.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/components")]),e._v(": The Vue components in this directory automatically get registered as global components.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/public")]),e._v(": Static resource directory.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/styles")]),e._v(": Stores style related files.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/styles/index.styl")]),e._v(": Used to add global styles that can override the default styles.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/styles/palette.styl")]),e._v(": Used to define global styling variables and override the default styling variables.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/templates")]),e._v(": Stores HTML template files.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/templates/dev.html")]),e._v(": HTML template file for development environment.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/templates/ssr.html")]),e._v(": HTML template file used in the build time.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/theme")]),e._v(": Stores the local theme of the site.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/theme/Layout.vue")]),e._v(": Layout component used by the theme.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/config.js")]),e._v(": Entry file for configuration, can also be "),s("code",{staticClass:"inline-code-block"},[e._v("yml")]),e._v(" or "),s("code",{staticClass:"inline-code-block"},[e._v("toml")]),e._v(".")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/enhanceApp.js")]),e._v(": App level enhancement.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/README.md")]),e._v(": The first document for the site which will be used as the homepage (same file described in the current directory structure section).")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/example-page/README.md")]),e._v(": An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., "),s("code",{staticClass:"inline-code-block"},[e._v("/example-page/")]),e._v(".")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(": Describes metadata about your site (same file described in the current directory structure section).")])]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Using the Recommended Directory Structure for Themes")]),e._v(" "),s("p",[e._v("If you plan on writing your own theme for your site or you plan on closely following along with these tutorials, then be sure to use the recommended directory structure for themes instead of the recommended directory structure for a standard "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" site.")])]),e._v(" "),s("p",[e._v("Be sure to check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/directory-structure.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Directory Structure"),s("OutboundLink")],1),e._v(" documentation if you have any questions.")]),e._v(" "),s("h2",{attrs:{id:"recommended-directory-structure-for-themes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#recommended-directory-structure-for-themes"}},[e._v("#")]),e._v(" Recommended Directory Structure for Themes")]),e._v(" "),s("p",[e._v("Here's the recommended directory structure if you plan on writing your own theme for your site. Since the "),s("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" is a child theme inherited from the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("default theme"),s("OutboundLink")],1),e._v(", we'll be using the recommended directory structure for themes when developing the blog.")],1),e._v(" "),s("p",[e._v("We'll be going over child themes and parent themes in more detail in future tutorials, but if you want to learn more now, you can read through the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theme Inheritance"),s("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),s("p",[e._v("If you're not using a theme when developing your site, you have the option of using the recommended directory structure for a standard "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),s("OutboundLink")],1),e._v(" site. There should only be minor differences when following along with these tutorials.")]),e._v(" "),s("p",[e._v("Only the "),s("code",{staticClass:"inline-code-block"},[e._v("Layout.vue")]),e._v(" file is mandatory when writing a theme, but we'll be using the other recommended directories as we continue to develop the blog.")]),e._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[e._v(".\n├── docs\n│ ├── .vuepress\n│ │ ├── "),s("code",[e._v("public")]),e._v("\n│ │ ├── theme\n│ │ │ ├── "),s("code",[e._v("components")]),e._v("\n│ │ │ ├── "),s("code",[e._v("global-components")]),e._v("\n│ │ │ ├── "),s("code",[e._v("layouts")]),e._v("\n│ │ │ │ └── Layout.vue "),s("em",[e._v("("),s("strong",[e._v("Mandatory")]),e._v(")")]),e._v("\n│ │ │ ├── "),s("code",[e._v("styles")]),e._v("\n│ │ │ │ ├── index.styl\n│ │ │ │ └── palette.styl\n│ │ │ ├── "),s("code",[e._v("templates")]),e._v("\n│ │ │ │ ├── dev.html\n│ │ │ │ └── ssr.html\n│ │ │ ├── "),s("code",[e._v("enhanceApp.js")]),e._v("\n│ │ │ └── "),s("code",[e._v("index.js")]),e._v("\n│ │ └── "),s("code",[e._v("config.js")]),e._v("\n│ │\n│ ├── README.md\n│ └── example-page\n│ └── README.md\n│\n└── package.json")]),e._v("\n")])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Capitalization")]),e._v(" "),s("p",[e._v("When creating these directories and files be sure to follow the capitalization to prevent any potential issues.")])]),e._v(" "),s("ul",[s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress")]),e._v(": Stores the global configuration, theme, static resources, etc.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/public")]),e._v(": Static resource directory.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/theme")]),e._v(": Stores the theme of the site.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/components")]),e._v(": Stores the Vue components.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/global-components")]),e._v(": The Vue components in this directory automatically get registered as global components.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/layouts")]),e._v(": Stores the layout components used by the theme.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/layouts/Layout.vue")]),e._v(": Mandatory layout component used by the theme.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/styles")]),e._v(": Stores style related files.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/styles/index.styl")]),e._v(": Used to add global styles that can override the default styles.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/styles/palette.styl")]),e._v(": Used to define global styling variables and override the default styling variables.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/templates")]),e._v(": Stores HTML template files.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/templates/dev.html")]),e._v(": HTML template file for development environment.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/templates/ssr.html")]),e._v(": HTML template file used in the build time.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/enhanceApp.js")]),e._v(": Theme level enhancement.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("theme/index.js")]),e._v(": Entry file for theme configuration.")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/.vuepress/config.js")]),e._v(": Entry file for configuration, can also be "),s("code",{staticClass:"inline-code-block"},[e._v("yml")]),e._v(" or "),s("code",{staticClass:"inline-code-block"},[e._v("toml")]),e._v(".")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/README.md")]),e._v(": The first document for the site which will be used as the homepage (same file described in the current directory structure section).")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("docs/example-page/README.md")]),e._v(": An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., "),s("code",{staticClass:"inline-code-block"},[e._v("/example-page/")]),e._v(".")]),e._v(" "),s("li",[s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(": Describes metadata about your site (same file described in the current directory structure section).")])]),e._v(" "),s("p",[e._v("We'll be discussing themes in more detail as we continue to develop the blog. If you want to learn more now though or have any questions, then check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Theme"),s("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),s("h2",{attrs:{id:"default-page-routing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#default-page-routing"}},[e._v("#")]),e._v(" Default Page Routing")]),e._v(" "),s("p",[e._v("In the directory structure above we used the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory as the "),s("code",{staticClass:"inline-code-block"},[e._v("targetDir")]),e._v(". If you want to learn more about how the "),s("code",{staticClass:"inline-code-block"},[e._v("targetDir")]),e._v(" is used, then take a look at the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/api/cli.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Command-line Interface"),s("OutboundLink")],1),e._v(" documentation.")]),e._v(" "),s("p",[e._v("To see an example of the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory being used as the "),s("code",{staticClass:"inline-code-block"},[e._v("targetDir")]),e._v(" we can take a look at the "),s("code",{staticClass:"inline-code-block"},[e._v("scripts")]),e._v(" object we defined in the "),s("code",{staticClass:"inline-code-block"},[e._v("package.json")]),e._v(" file which is in the root directory of the project. Notice the "),s("code",{staticClass:"inline-code-block"},[e._v("targetDir")]),e._v(" gets set as the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory for the "),s("code",{staticClass:"inline-code-block"},[e._v("docs:dev")]),e._v(" and "),s("code",{staticClass:"inline-code-block"},[e._v("docs:build")]),e._v(" scripts:")]),e._v(" "),s("code-group",[s("code-block",{attrs:{title:"Scripts Object"}},[s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:dev"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress dev docs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"docs:build"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build docs"')]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br")])])])],1),e._v(" "),s("p",[e._v("All the relative paths are relative to the "),s("code",{staticClass:"inline-code-block"},[e._v("docs")]),e._v(" directory. Here are the relative paths and the default page routing paths for the directory structure described above:")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[e._v("Relative Path")]),e._v(" "),s("th",{staticStyle:{"text-align":"center"}},[e._v("Page Routing")])])]),e._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[s("code",{staticClass:"inline-code-block"},[e._v("/README.md")])]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",{staticClass:"inline-code-block"},[e._v("/")])])]),e._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[s("code",{staticClass:"inline-code-block"},[e._v("/example-page/README.md")])]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[s("code",{staticClass:"inline-code-block"},[e._v("/example-page/")])])])])]),e._v(" "),s("p",[e._v("From the table we can see the relative path for the homepage is "),s("code",{staticClass:"inline-code-block"},[e._v("/README.md")]),e._v(" and the default page routing path for the homepage is "),s("code",{staticClass:"inline-code-block"},[e._v("/")]),e._v(". We can also see the relative path for the example page is "),s("code",{staticClass:"inline-code-block"},[e._v("/example-page/README.md")]),e._v(", and the default page routing path for the example page is "),s("code",{staticClass:"inline-code-block"},[e._v("/example-page/")]),e._v(".")]),e._v(" "),s("h2",{attrs:{id:"next-steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[e._v("#")]),e._v(" Next Steps")]),e._v(" "),s("p",[e._v("In the next tutorial we'll discuss the basics of "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/basic-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Configuration"),s("OutboundLink")],1),e._v(".")])],1)}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/48.64f74787.js b/assets/js/48.64f74787.js new file mode 100644 index 00000000..0f044db3 --- /dev/null +++ b/assets/js/48.64f74787.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{560:function(t,e,s){"use strict";s.r(e);var a=s(18),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[s("h1",{attrs:{id:"vuepress-tutorial-5-configuration-basics"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-5-configuration-basics"}},[t._v("#")]),t._v(" VuePress Tutorial 5 - Configuration Basics")])]},proxy:!0}])},[s("h2",{attrs:{id:"adding-a-config-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-config-file"}},[t._v("#")]),t._v(" Adding a Config File")]),t._v(" "),s("p",[t._v('Currently, the site consists of a homepage with a title saying "Hello VuePress" and a search box provided by the '),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(" which builds an index from all "),s("code",{staticClass:"inline-code-block"},[t._v("h2")]),t._v(" and "),s("code",{staticClass:"inline-code-block"},[t._v("h3")]),t._v(" "),s("a",{attrs:{href:"https://vuepress.vuejs.org/config/#markdown",target:"_blank",rel:"noopener noreferrer"}},[t._v("markdown"),s("OutboundLink")],1),t._v(" headers and from the "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" and "),s("code",{staticClass:"inline-code-block"},[t._v("tags")]),t._v(" included in the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("frontmatter"),s("OutboundLink")],1),t._v(" of pages.")]),t._v(" "),s("p",[t._v("We'll be discussing the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(", "),s("a",{attrs:{href:"https://vuepress.vuejs.org/config/#markdown",target:"_blank",rel:"noopener noreferrer"}},[t._v("markdown"),s("OutboundLink")],1),t._v(", and "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("frontmatter"),s("OutboundLink")],1),t._v(" in more detail in future tutorials.")]),t._v(" "),s("p",[t._v("To see your site be sure to start the local development server which should be running at "),s("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("The site is working, but it doesn't have a lot of functionality or customization. To add more functionality and customization like site navigation with a navbar, a site title, a site description, favicons, etc. we need to add a config file.")]),t._v(" "),s("p",[t._v("Before adding the config file, let's first create a "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress")]),t._v(" directory in the "),s("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory. The "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress")]),t._v(" directory will be used to store all "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" specific directories and files.")]),t._v(" "),s("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[t._v(".\n├── "),s("code",[t._v(".yarn")]),t._v(" "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n│ ├── "),s("code",[t._v("releases")]),t._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),s("code",[t._v("docs")]),t._v("\n│ ├── "),s("code",[t._v(".vuepress")]),t._v("\n│ └── README.md\n├── "),s("code",[t._v("node_modules")]),t._v("\n├── .gitattributes "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── .gitignore\n├── .yarnrc "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),t._v("\n")])]),s("p",[t._v("Now inside of the "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress")]),t._v(" directory, let's add a "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),s("p",[t._v("After adding the "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file, the directory structure for your site should now look something like this:")]),t._v(" "),s("pre",{staticClass:"vue-container"},[s("code",[s("p",[t._v(".\n├── "),s("code",[t._v(".yarn")]),t._v(" "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n│ ├── "),s("code",[t._v("releases")]),t._v("\n│ │ └── yarn-1.22.17.cjs\n├── "),s("code",[t._v("docs")]),t._v("\n│ ├── "),s("code",[t._v(".vuepress")]),t._v("\n│ │ └── "),s("code",[t._v("config.js")]),t._v("\n│ └── README.md\n├── "),s("code",[t._v("node_modules")]),t._v("\n├── .gitattributes "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── .gitignore\n├── .yarnrc "),s("em",[t._v("("),s("strong",[t._v("Optional")]),t._v(")")]),t._v("\n├── LICENSE\n├── package.json\n├── README.md\n└── yarn.lock")]),t._v("\n")])]),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file should export a JavaScript object like the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"config.js File"}},[s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])])])],1),t._v(" "),s("p",[t._v("If you run into any issues when adding the directory and file above, then be sure to check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/basic-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Configuration"),s("OutboundLink")],1),t._v(" documentaion.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Alternative Config Formats")]),t._v(" "),s("p",[t._v("In this series we'll be using a JS config file format, i.e., "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress/config.js")]),t._v(". However, "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" also supports the following config file formats: YAML - "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress/config.yml")]),t._v(", TOML - "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress/config.toml")]),t._v(", and TS - "),s("code",{staticClass:"inline-code-block"},[t._v(".vuepress/config.ts")]),t._v(". If you want to use TS, then you need to have a "),s("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),s("OutboundLink")],1),t._v(" version of "),s("code",{staticClass:"inline-code-block"},[t._v("1.9.0+")]),t._v(" installed. See the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/guide/typescript-as-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("TypeScript as Config"),s("OutboundLink")],1),t._v(" documentation for more details.")])]),t._v(" "),s("h2",{attrs:{id:"config-file-properties"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#config-file-properties"}},[t._v("#")]),t._v(" Config File Properties")]),t._v(" "),s("p",[t._v("Now that we have added a "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file, we can begin to add more functionality and customization to the site by setting some of the basic config file properties.")]),t._v(" "),s("p",[t._v("The properties we'll be setting will be using the "),s("code",{staticClass:"inline-code-block"},[t._v("")]),t._v(", "),s("code",{staticClass:"inline-code-block"},[t._v("")]),t._v(", and "),s("code",{staticClass:"inline-code-block"},[t._v("")]),t._v(" tags. To learn more about these tags check out the following references: "),s("a",{attrs:{href:"https://www.w3schools.com/tags/tag_head.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("HTML <head> Tag"),s("OutboundLink")],1),t._v(", "),s("a",{attrs:{href:"https://www.w3schools.com/tags/tag_meta.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("HTML <meta> Tag"),s("OutboundLink")],1),t._v(", and "),s("a",{attrs:{href:"https://www.w3schools.com/tags/tag_title.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("HTML <title> Tag"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("As we develop the site we'll be adding more config file properties as needed. For a full list of the available config file properties check out the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/config/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Config Reference"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h3",{attrs:{id:"title"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#title"}},[t._v("#")]),t._v(" Title")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" property is used to define the title for the site. The provided value is used to prefix all page titles, and it gets shown in the navbar when using the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(" as a link to the homepage.")]),t._v(" "),s("p",[t._v("The expected type is a "),s("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(", and the default value is "),s("code",{staticClass:"inline-code-block"},[t._v("undefined")]),t._v(".")]),t._v(" "),s("p",[t._v("Now let's set the "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" of the site:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Site Title"}},[s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])])])],1),t._v(" "),s("p",[t._v("After adding the "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" and saving the file, you should see "),s("code",{staticClass:"inline-code-block"},[t._v("Code Monkeys")]),t._v(" or whatever value you set as your site's "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" in the top left of the navbar as a link to the homepage.")]),t._v(" "),s("p",[t._v("You can also inspect the page, go to the Elements tab, open the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag, and you'll see the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Viewing the Title"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Hello VuePress | Code Monkeys"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("The value of the "),s("code",{staticClass:"inline-code-block"},[t._v("<title>")]),t._v(" tag will be whatever you set as the value for the "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(" of your site.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Removing Hello VuePress")]),t._v(" "),s("p",[t._v("When we update the homepage in the next tutorial, we'll remove the "),s("code",{staticClass:"inline-code-block"},[t._v("Hello VuePress |")]),t._v(" from the "),s("code",{staticClass:"inline-code-block"},[t._v("<title>")]),t._v(" tag.")])]),t._v(" "),s("h3",{attrs:{id:"description"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#description"}},[t._v("#")]),t._v(" Description")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" property is used to define the description for the site. The provided value is used in a "),s("code",{staticClass:"inline-code-block"},[t._v("<meta>")]),t._v(" tag in the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag of the site.")]),t._v(" "),s("p",[t._v("The expected type is a "),s("code",{staticClass:"inline-code-block"},[t._v("string")]),t._v(", and the default value is "),s("code",{staticClass:"inline-code-block"},[t._v("undefined")]),t._v(".")]),t._v(" "),s("p",[t._v("Now let's set the "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" of the site:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding a Description"}},[s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n description"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])])])],1),t._v(" "),s("p",[t._v("After adding the "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" and saving the file, you can inspect the page, go to the Elements tab, open the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag, and you'll see the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Viewing the Description"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("description"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("The value of the "),s("code",{staticClass:"inline-code-block"},[t._v("content")]),t._v(" attribute will be whatever you set as the value for the "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(" of your site.")]),t._v(" "),s("h3",{attrs:{id:"head"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#head"}},[t._v("#")]),t._v(" Head")]),t._v(" "),s("p",[t._v("The "),s("code",{staticClass:"inline-code-block"},[t._v("head")]),t._v(" property is used to inject extra tags into the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag of the site.")]),t._v(" "),s("p",[t._v("The expected type is an "),s("code",{staticClass:"inline-code-block"},[t._v("array")]),t._v(", and the default value is "),s("code",{staticClass:"inline-code-block"},[t._v("[]")]),t._v(".")]),t._v(" "),s("p",[t._v("You can specify a tag to inject into the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag by using the following form: "),s("code",{staticClass:"inline-code-block"},[t._v("[tagName, { attr1Name: attr1Value, attr2Name: attr2Value, ... }]")]),t._v(".")]),t._v(" "),s("p",[t._v("Here are some examples of what can be injected into the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag:")]),t._v(" "),s("ul",[s("li",[t._v("Author of the Site")]),t._v(" "),s("li",[t._v("Favicons")]),t._v(" "),s("li",[t._v("Social Media Metadata")]),t._v(" "),s("li",[t._v("Links to External Style Sheets")]),t._v(" "),s("li",[t._v("Client-Side Scripts")])]),t._v(" "),s("p",[t._v("To start we'll set an "),s("code",{staticClass:"inline-code-block"},[t._v("author")]),t._v(" by using a "),s("code",{staticClass:"inline-code-block"},[t._v("<meta>")]),t._v(" tag in the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Adding an Author to the Head Tag"}},[s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n head"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])])])],1),t._v(" "),s("p",[t._v("After adding the "),s("code",{staticClass:"inline-code-block"},[t._v("author")]),t._v(" and saving the file, you can inspect the page, go to the Elements tab, open the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag, and you'll see the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Viewing the Author"}},[s("div",{staticClass:"language-html line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("author"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("J the Code Monkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br")])])])],1),t._v(" "),s("p",[t._v("To change the "),s("code",{staticClass:"inline-code-block"},[t._v("author")]),t._v(" for your site you can use a different value for the "),s("code",{staticClass:"inline-code-block"},[t._v("content")]),t._v(" attribute.")]),t._v(" "),s("p",[t._v("We'll be injecting more tags into the "),s("code",{staticClass:"inline-code-block"},[t._v("<head>")]),t._v(" tag as we develop the site.")]),t._v(" "),s("h2",{attrs:{id:"updated-config-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#updated-config-file"}},[t._v("#")]),t._v(" Updated Config File")]),t._v(" "),s("p",[t._v("Here's the content of the "),s("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file after adding the "),s("code",{staticClass:"inline-code-block"},[t._v("title")]),t._v(", "),s("code",{staticClass:"inline-code-block"},[t._v("description")]),t._v(", and "),s("code",{staticClass:"inline-code-block"},[t._v("author")]),t._v(":")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Updated Config File"}},[s("div",{staticClass:"language-js line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Code Monkeys'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n head"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'meta'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'author'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n content"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'J the Code Monkey'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br")])])])],1),t._v(" "),s("p",[t._v("Be sure to substitute the values with the preferred values for your site.")]),t._v(" "),s("h2",{attrs:{id:"next-steps"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),s("p",[t._v("In the next tutorial we'll discuss the homepage layout provided by the "),s("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),s("OutboundLink")],1),t._v(".")])],1)}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/49.0ff426b4.js b/assets/js/49.0ff426b4.js new file mode 100644 index 00000000..ccc133cc --- /dev/null +++ b/assets/js/49.0ff426b4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{559:function(t,s,a){"use strict";a.r(s);var e=a(18),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-8-custom-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-8-custom-footer"}},[t._v("#")]),t._v(" VuePress Tutorial 8 - Custom Footer")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-is-a-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-footer"}},[t._v("#")]),t._v(" What is a Footer?")]),t._v(" "),a("p",[t._v("Now it's time to start building the custom footer component for the site. Before creating the footer component, we're going to first describe what a footer is then we'll mention some other options for footers provided by "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" and the "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/config/#footer",target:"_blank",rel:"noopener noreferrer"}},[t._v("@vuepress/theme-blog"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("A footer is located at the bottom of a page, and it typically contains:")]),t._v(" "),a("ul",[a("li",[t._v("Authorship Information")]),t._v(" "),a("li",[t._v("Copyright Information")]),t._v(" "),a("li",[t._v("Contact Information")]),t._v(" "),a("li",[t._v("Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)")])]),t._v(" "),a("p",[t._v("For the "),a("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(" we'll be building a footer that consists of links to various social media platforms. This gives the user an easy way to interact with various content and the community.")],1),t._v(" "),a("p",[t._v("Take a look at the footer on this page to see what we'll be designing for the blog. To see another example you can check out the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" site footer as well.")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("h2",{attrs:{id:"homepage-layout-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#homepage-layout-footer"}},[t._v("#")]),t._v(" Homepage Layout Footer")]),t._v(" "),a("p",[t._v("If you remember from the previous post "),a("RouterLink",{attrs:{to:"/vuepress-tutorial-6/#adding-a-footer"}},[t._v("VuePress Tutorial 6 - Homepage Layout")]),t._v(", "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" provides a way to add a footer to the homepage by adding the following to the homepage layout which is located in "),a("code",{staticClass:"inline-code-block"},[t._v("docs/README.md")]),t._v(":")],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding a Homepage Footer"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[t._v("home: true\nheroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png\ntagline: Let's get down to Monkey Business\nactionText: Learn to Code like a Monkey →\nactionLink: /topics/\nfeatures:\n - title: Learn\n - title: Code\n - title: Crush\nfooter: Your Site's License | Copyright © 2022-present Your Name")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])])],1),t._v(" "),a("p",[t._v("If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"HTML After Adding a Homepage Footer"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en-US"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-container no-sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("navbar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("header")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar-mask"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("aside")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sidebar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("aside")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("main")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-labelledby")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("main-title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hero"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("header")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("features"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content custom content__default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Your Site's License | Copyright © 2022-present Your Name\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"rich-text-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rich-text-footer"}},[t._v("#")]),t._v(" Rich-text Footer")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" also provides a "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#rich-text-footer",target:"_blank",rel:"noopener noreferrer"}},[t._v("rich-text footer"),a("OutboundLink")],1),t._v(" which gives you the ability to easily add more functionality to your footer like links. To set this type of footer you need to use "),a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/markdown-slot.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("markdown slot syntax"),a("OutboundLink")],1),t._v(" which we won't discuss in detail here.")]),t._v(" "),a("p",[t._v("Since the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#rich-text-footer",target:"_blank",rel:"noopener noreferrer"}},[t._v("rich-text footer"),a("OutboundLink")],1),t._v(" uses "),a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/markdown-slot.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("markdown slot syntax"),a("OutboundLink")],1),t._v(", you can only add it to markdown files, and it needs to be manaully added to each markdown file to be displayed.")]),t._v(" "),a("p",[t._v("These limitations are why we'll be creating a custom footer component. If you only want to show the footer on one or a few markdown pages, then this option should work fine for you.")]),t._v(" "),a("h2",{attrs:{id:"vuepress-blog-theme-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-blog-theme-footer"}},[t._v("#")]),t._v(" VuePress Blog Theme Footer")]),t._v(" "),a("p",[t._v("The "),a("RouterLink",{attrs:{to:"/"}},[t._v("Code Monkeys Blog")]),t._v(" uses the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(", but if you're interested in using "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("@vuepress/theme-blog"),a("OutboundLink")],1),t._v(" be sure to take a look at the "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/config/#footer",target:"_blank",rel:"noopener noreferrer"}},[t._v("footer option"),a("OutboundLink")],1),t._v(".")],1),t._v(" "),a("p",[t._v("Here are some examples of sites that use the "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("@vuepress/theme-blog"),a("OutboundLink")],1),t._v(" footer:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://example.vuepress-theme-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress Blog Example"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Billy Chin's Blog"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("Since we'll be using social media sites that are not currently supported by the "),a("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/config/#footer-contact",target:"_blank",rel:"noopener noreferrer"}},[t._v("footer.contact"),a("OutboundLink")],1),t._v(" option, we won't be using this footer. You can contribute social media contact types by making a pull request to the "),a("a",{attrs:{href:"https://github.com/vuepress/vuepress-theme-blog",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-theme-blog"),a("OutboundLink")],1),t._v(" repository though if you're interested.")]),t._v(" "),a("h2",{attrs:{id:"custom-footer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-footer"}},[t._v("#")]),t._v(" Custom Footer")]),t._v(" "),a("p",[t._v("Before designing the custom footer component, we need to have an understanding of the following topics:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/writing-a-theme.html#writing-a-theme",target:"_blank",rel:"noopener noreferrer"}},[t._v("Writing a Theme"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/plugin/#plugin",target:"_blank",rel:"noopener noreferrer"}},[t._v("Plugins"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Theme Inheritance"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/option-api.html#globallayout",target:"_blank",rel:"noopener noreferrer"}},[t._v("globalLayout"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("We won't be describing every detail about each topic above since we only need to understand how to create our custom footer component. If you're interested in learning more now, then check out the links above.")]),t._v(" "),a("h3",{attrs:{id:"writing-a-theme"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-a-theme"}},[t._v("#")]),t._v(" Writing a Theme")]),t._v(" "),a("p",[t._v("In "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" you have the ability to make your site into a theme. This gives you the option to publish your site as an "),a("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("npm"),a("OutboundLink")],1),t._v(" package which allows other developers to easily install and use your theme.")]),t._v(" "),a("p",[t._v("To write your own theme you need to create a "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory in the "),a("code",{staticClass:"inline-code-block"},[t._v(".vuepress")]),t._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("docs")]),t._v("\n│ ├── "),a("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),a("code",[t._v("public")]),t._v("\n│ │ ├── "),a("code",[t._v("theme")]),t._v("\n│ │ └── config.js\n│ └── README.md")]),t._v("\n")])]),a("p",[t._v("After creating the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory, all you need to do is create a "),a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(" file inside of it like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("docs")]),t._v("\n│ ├── "),a("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),a("code",[t._v("public")]),t._v("\n│ │ ├── "),a("code",[t._v("theme")]),t._v("\n│ │ │ └── Layout.vue\n│ │ └── config.js\n│ └── README.md")]),t._v("\n")])]),a("p",[t._v("From here you can develop your site like any other "),a("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Vue"),a("OutboundLink")],1),t._v(" application by organizing your theme however you want. Being able to organize your theme however you want provides a lot of flexibility when creating your site, but it's recommended to use the directory structure below when designing your theme:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[a("code",[t._v("theme")]),t._v("\n├── "),a("code",[t._v("components")]),t._v("\n│ └── xxx.vue\n├── "),a("code",[t._v("global-components")]),t._v("\n│ └── xxx.vue\n├── "),a("code",[t._v("layouts")]),t._v("\n│ ├── Layout.vue "),a("em",[t._v("("),a("strong",[t._v("Mandatory")]),t._v(")")]),t._v("\n│ └── xxx.vue\n├── "),a("code",[t._v("styles")]),t._v("\n│ ├── index.styl\n│ └── palette.styl\n├── "),a("code",[t._v("templates")]),t._v("\n│ ├── dev.html\n│ └── ssr.html\n├── enhanceApp.js\n└── index.js")]),t._v("\n")])]),a("p",[t._v("Here's a description for each directory and file in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("components")]),t._v(": Local components used in your theme.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(": Components in this directory automatically get registered as global, so you don't need to explicitly import them in a file when using them.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(": Layout components used in your theme.\n"),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(": A mandatory layout file for every theme.")])])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("styles")]),t._v(": Stores files related to styling your theme.\n"),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(": Overrides any default styling and allows you to globally style your site.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(": Overrides any default styling variables and allows you to add any global styling variables.")])])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("templates")]),t._v(": Stores HTML template files.\n"),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("dev.html")]),t._v(": HTML template file for development environment.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("ssr.html")]),t._v(": HTML template file used in the build time.")])])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("enhanceApp.js")]),t._v(": Enhances the theme of your site by giving you the ability to install Vue plugins, add router hooks, etc.")]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("index.js")]),t._v(": Entry file for for theme configuration.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Reviewing the Recommended Directory Structure for Themes")]),t._v(" "),a("p",[t._v("You may have recognized this directory structure from the "),a("RouterLink",{attrs:{to:"/vuepress-tutorial-4/"}},[t._v("VuePress Tutorial 4 - Directory Structure")]),t._v(" post.")],1)]),t._v(" "),a("p",[t._v("When creating the custom footer component we'll use the "),a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(" directory, the "),a("code",{staticClass:"inline-code-block"},[t._v("index.js")]),t._v(" file, and the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(" directory will be where we add the custom footer component since we want the footer to be available globally. The "),a("code",{staticClass:"inline-code-block"},[t._v("index.js")]),t._v(" file will be used to inherit the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(" using "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("theme inheritance"),a("OutboundLink")],1),t._v(". Finally, the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory will be where we add the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file which allows us to add our custom footer component to the global layout of the site.")]),t._v(" "),a("p",[t._v("Since we'll be using the "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" to add social media icons to our footer, let's go over what "),a("a",{attrs:{href:"https://vuepress.vuejs.org/plugin/#plugin",target:"_blank",rel:"noopener noreferrer"}},[t._v("plugins"),a("OutboundLink")],1),t._v(" are, how to install them, and how to configure them.")]),t._v(" "),a("h3",{attrs:{id:"basics-of-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basics-of-plugins"}},[t._v("#")]),t._v(" Basics of Plugins")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Plugins"),a("OutboundLink")],1),t._v(" allow you to add global-level functionality to "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(". You can configure them by passing in options. It's also possible to write your own and publish them as "),a("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("npm"),a("OutboundLink")],1),t._v(" packages.")]),t._v(" "),a("p",[t._v("To use a plugin you need to first install it by using either "),a("code",{staticClass:"inline-code-block"},[t._v("yarn")]),t._v(" or "),a("code",{staticClass:"inline-code-block"},[t._v("npm")]),t._v(". We'll be using "),a("code",{staticClass:"inline-code-block"},[t._v("yarn")]),t._v(" to install all of the plugins for the blog, but the commands for installing the plugins with "),a("code",{staticClass:"inline-code-block"},[t._v("npm")]),t._v(" will also be provided. After installing a plugin, you can configure it by adding it to the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file.")]),t._v(" "),a("h3",{attrs:{id:"vuepress-plugin-svg-icons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-plugin-svg-icons"}},[t._v("#")]),t._v(" VuePress Plugin - SVG Icons")]),t._v(" "),a("p",[t._v("Now that we know the basics, we're ready to install and configure "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h4",{attrs:{id:"using-the-tutorials-repo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-tutorials-repo"}},[t._v("#")]),t._v(" Using the Tutorials Repo")]),t._v(" "),a("p",[t._v("If you're following along with the tutorials, then when you switch to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-8")]),t._v(" branch you can run the following command to install the package instead of running the installation command:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])]),t._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("p",[t._v("This will ensure you have the same version used in the blog since the command uses the version specified in the "),a("code",{staticClass:"inline-code-block"},[t._v("yarn.lock")]),t._v(" file during the installation.")]),t._v(" "),a("h4",{attrs:{id:"using-the-installation-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-installation-command"}},[t._v("#")]),t._v(" Using the Installation Command")]),t._v(" "),a("p",[t._v("To install the plugin in your own project you can run the following command:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"yarn"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @goy/vuepress-plugin-svg-icons -D\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])]),t._v(" "),a("code-block",{attrs:{title:"npm"}},[a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @goy/vuepress-plugin-svg-icons -D\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Installing the Same Plugin Version")]),t._v(" "),a("p",[t._v("If you want to ensure you're installing the same version being used in the tutorials and blog, then run "),a("code",{staticClass:"inline-code-block"},[t._v("yarn upgrade @goy/vuepress-plugin-svg-icons@4.2.3")]),t._v(".")])]),t._v(" "),a("p",[t._v("After installing the plugin, the "),a("code",{staticClass:"inline-code-block"},[t._v("package.json")]),t._v(" file should look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"package.json"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"devDependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@goy/vuepress-plugin-svg-icons"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^4.2.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vuepress"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1.8.2"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Next we need to configure the plugin by editing the "),a("code",{staticClass:"inline-code-block"},[t._v("config.js")]),t._v(" file:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"config.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n themeConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@goy/svg-icons'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])])])],1),t._v(" "),a("p",[t._v("To add the social media icons to the site we need to create an "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory in the "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("docs")]),t._v(" directory should look like after adding the "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("docs")]),t._v("\n│ ├── "),a("code",[t._v(".vuepress")]),t._v("\n│ ├── "),a("code",[t._v("icons")]),t._v("\n│ └── README.md")]),t._v("\n")])]),a("p",[t._v("The plugin recommends using "),a("a",{attrs:{href:"https://www.iconfont.cn/collections/index",target:"_blank",rel:"noopener noreferrer"}},[t._v("iconfont"),a("OutboundLink")],1),t._v(" to find "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/SVG",target:"_blank",rel:"noopener noreferrer"}},[t._v("Scalable Vector Graphics (SVGs)"),a("OutboundLink")],1),t._v(" for your site. After creating an account, you can search for icons and download them. When downloading the icons you have the option to specify a color and size for the icon. For the blog we'll be using a color of "),a("code",{staticClass:"inline-code-block"},[t._v("#e6e6e6")]),t._v(" and a size of "),a("code",{staticClass:"inline-code-block"},[t._v("200")]),t._v(" which is the default size.")]),t._v(" "),a("p",[t._v("You can download the icons from the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-8")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-8",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Using SVG Export")]),t._v(" "),a("p",[t._v("To easily download the icons used in the footer you can also install the browser extension "),a("a",{attrs:{href:"https://svgexport.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("SVG Export"),a("OutboundLink")],1),t._v(". After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.")])]),t._v(" "),a("p",[t._v("We'll be using icons for these social media sites as well as to an RSS feed for Code Monkeys in the footer:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.youtube.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YouTube"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://gab.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Gab"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://telegram.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Telegram"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://twitter.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Twitter"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.rssboard.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("RSS"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://keybase.io/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Keybase"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("After downloading the icons the "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory should look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v("├── "),a("code",[t._v("icons")]),t._v("\n│ ├── Gab.svg\n│ ├── GitHub.svg\n│ ├── RSS.svg\n│ ├── Keybase.svg\n│ ├── Telegram.svg\n│ ├── Twitter.svg\n│ └── YouTube.svg")]),t._v("\n")])]),a("p",[t._v("After adding the icons to "),a("code",{staticClass:"inline-code-block"},[t._v("icons")]),t._v(" directory, the plugin will automically load the icons and will provide a global component named "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(". To use the "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" component you need to pass a "),a("code",{staticClass:"inline-code-block"},[t._v("name")]),t._v(" attribute to it where the value is the name of the SVG file you want to use.")]),t._v(" "),a("p",[t._v("If you're interested in learning more about the plugin, then check out the "),a("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("vuepress-plugin-svg-icons"),a("OutboundLink")],1),t._v(" documentation which contains more information about configuration options, component props, and command-line interface (CLI) commands.")]),t._v(" "),a("p",[t._v("We're now ready to create the custom footer component.")]),t._v(" "),a("h3",{attrs:{id:"footer-component"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#footer-component"}},[t._v("#")]),t._v(" Footer Component")]),t._v(" "),a("p",[t._v("The custom footer component will be added to the "),a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(" directory. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory will look like after adding the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v("├── "),a("code",[t._v("theme")]),t._v("\n│ ├── "),a("code",[t._v("global-components")]),t._v("\n│ │ └── Footer.vue")]),t._v("\n")])]),a("p",[t._v("Here we're creating a "),a("code",{staticClass:"inline-code-block"},[t._v("*.vue")]),t._v(" file which is known as a "),a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/single-file-components.html?redirect=true",target:"_blank",rel:"noopener noreferrer"}},[t._v("Single-File Component (SFC)"),a("OutboundLink")],1),t._v(". This is a special file format that allows you to encapsulate the HTML in a "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag, the JavaScript in a "),a("code",{staticClass:"inline-code-block"},[t._v("script")]),t._v(" tag, and the CSS in a "),a("code",{staticClass:"inline-code-block"},[t._v("style")]),t._v(" tag for the component.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file looks like after adding these three main sections:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Main Sections"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])],1),t._v(" "),a("p",[t._v("To start we'll add the HTML to the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag. The contents of the footer will be wrapped in a "),a("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag containing two child tags a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and a "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag. The "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag will contain seven child "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tags one for each of the social media icons. The "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag will contain authorship information for the blog.")]),t._v(" "),a("p",[t._v("Each "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag will have the following attributes: "),a("code",{staticClass:"inline-code-block"},[t._v("href")]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(". The "),a("code",{staticClass:"inline-code-block"},[t._v("href")]),t._v(" specifies the URL of the page the link goes to, the "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" specifies where to open the link, and the "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" specifies the relationship between the current page and the link. Each "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag will also have a child "),a("code",{staticClass:"inline-code-block"},[t._v("vp-icon")]),t._v(" tag which will have the "),a("code",{staticClass:"inline-code-block"},[t._v("name")]),t._v(" attribute discussed earlier.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file looks like after adding the HTML to the "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Adding the HTML to the Template Tag"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://github.com/codemonkeysio"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("GitHub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://www.youtube.com/@codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("YouTube"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://gab.com/codemonkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Gab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://t.me/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Telegram"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://twitter.com/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Twitter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://codemonkeys.tech/rss.xml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("RSS"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://keybase.io/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Keybase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Made by & for Code Monkeys 🐵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Each "),a("code",{staticClass:"inline-code-block"},[t._v("href")]),t._v(" has a value of the related URL for the social media site. Each "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" has a value of "),a("code",{staticClass:"inline-code-block"},[t._v("_blank")]),t._v(", and each "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" has a value of "),a("code",{staticClass:"inline-code-block"},[t._v("noopener noreferrer")]),t._v(".")]),t._v(" "),a("p",[t._v("As mentioned in the previous post these values for the "),a("code",{staticClass:"inline-code-block"},[t._v("target")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("rel")]),t._v(" attributes are used to prevent a vulnerability known as "),a("a",{attrs:{href:"https://owasp.org/www-community/attacks/Reverse_Tabnabbing",target:"_blank",rel:"noopener noreferrer"}},[t._v("reverse tabnabbing"),a("OutboundLink")],1),t._v(" which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.")]),t._v(" "),a("p",[t._v("Each "),a("code",{staticClass:"inline-code-block"},[t._v("name")]),t._v(" attribute has a value of the name of the related SVG file with the "),a("code",{staticClass:"inline-code-block"},[t._v(".svg")]),t._v(" extension omitted.")]),t._v(" "),a("p",[t._v("Next we'll export the JavaScript in the "),a("code",{staticClass:"inline-code-block"},[t._v("script")]),t._v(" tag and give the component a name. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file looks like after updating the "),a("code",{staticClass:"inline-code-block"},[t._v("script")]),t._v(" tag:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Exporting and Naming the Component"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Footer'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Finally, we'll style the component by adding the following CSS classes: "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(", "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(", and "),a("code",{staticClass:"inline-code-block"},[t._v('"made-by"')]),t._v(". We'll be adding the "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class to the "),a("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag, the "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(" class to the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag, and the "),a("code",{staticClass:"inline-code-block"},[t._v('"made-by"')]),t._v(" class to the "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag. Then we'll add styling for each of the CSS classes in the "),a("code",{staticClass:"inline-code-block"},[t._v("style")]),t._v(" tag. Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file looks like after styling:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Styling the Component"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icons"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("made-by"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Made by & for Code Monkeys 🐵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.footer\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("flex-direction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" column\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2.5rem 2.5rem 2rem\n .icons\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1.75rem\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n .icons > "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("not")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("last-child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 4.6875rem\n .made-by\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])])])],1),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("lang")]),t._v(" attribute used in the "),a("code",{staticClass:"inline-code-block"},[t._v("style")]),t._v(" tag is used to specify which pre-processor we want to use in the component. Here we're using "),a("a",{attrs:{href:"https://stylus-lang.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Stylus"),a("OutboundLink")],1),t._v(" which is the default pre-processor used by "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(". If you want to learn how to use a different pre-processor, then check out "),a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/using-vue.html#using-pre-processors",target:"_blank",rel:"noopener noreferrer"}},[t._v("Using Pre-processors"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("A "),a("code",{staticClass:"inline-code-block"},[t._v("scoped")]),t._v(" attribute is also used in the "),a("code",{staticClass:"inline-code-block"},[t._v("style")]),t._v(" tag which means all of the styling only applies to the current component. Take a look at "),a("a",{attrs:{href:"https://vue-loader.vuejs.org/guide/scoped-css.html#scoped-css",target:"_blank",rel:"noopener noreferrer"}},[t._v("Scoped CSS"),a("OutboundLink")],1),t._v(" to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("scoped")]),t._v(" attribute.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class is given "),a("code",{staticClass:"inline-code-block"},[t._v("display: flex")]),t._v(" which defines a flex container for all of the direct children of the tag where the "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class is used. In this case the "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class is used on the "),a("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag which means the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag will be in a flex container. The "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class is also given "),a("code",{staticClass:"inline-code-block"},[t._v("flex-direction: column")]),t._v(" which means the flex items in the flex container, i.e., the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag and the "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag will be stacked on top of each other in a column as opposed to the default row setting. The flex items are then given "),a("code",{staticClass:"inline-code-block"},[t._v("align-items: center")]),t._v(" which will horizontally center the flex items since the flex direction is set to column. The "),a("code",{staticClass:"inline-code-block"},[t._v('"footer"')]),t._v(" class is then given "),a("code",{staticClass:"inline-code-block"},[t._v("padding: 2.5rem 2.5rem 2rem")]),t._v(" which will set a padding of "),a("code",{staticClass:"inline-code-block"},[t._v("2.5rem")]),t._v(" for the top, "),a("code",{staticClass:"inline-code-block"},[t._v("2.5rem")]),t._v(" for the left and right, and "),a("code",{staticClass:"inline-code-block"},[t._v("2rem")]),t._v(" for the bottom.")]),t._v(" "),a("p",[t._v("If you're unfamiliar with flexbox, then check out "),a("a",{attrs:{href:"https://css-tricks.com/snippets/css/a-guide-to-flexbox/",target:"_blank",rel:"noopener noreferrer"}},[t._v("A Complete Guide to Flexbox"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox",target:"_blank",rel:"noopener noreferrer"}},[t._v("Basic Concepts of Flexbox"),a("OutboundLink")],1),t._v(". Also, if you're unfamiliar with CSS units like "),a("code",{staticClass:"inline-code-block"},[t._v("rem")]),t._v(", then check out "),a("a",{attrs:{href:"https://www.w3schools.com/cssref/css_units.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Units"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(" class is also given "),a("code",{staticClass:"inline-code-block"},[t._v("display: flex")]),t._v(" which means each "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag will be in a flex container since they're all direct children of the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag which has the "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(" class. The "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(" class is also given "),a("code",{staticClass:"inline-code-block"},[t._v("margin-bottom: 1.75rem")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("font-size: 2rem")]),t._v(" which increases the size of the icons. The CSS selector "),a("code",{staticClass:"inline-code-block"},[t._v(".icons > a:not(:last-child)")]),t._v(" is then used which selects all "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tags where the parent tag has a class of "),a("code",{staticClass:"inline-code-block"},[t._v('"icons"')]),t._v(" except for the last "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag. Each "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag that is selected is given "),a("code",{staticClass:"inline-code-block"},[t._v("margin-right: 4.6875rem")]),t._v(".")]),t._v(" "),a("p",[t._v("If you're unfamiliar with CSS selectors, then check out the "),a("a",{attrs:{href:"https://www.w3schools.com/cssref/css_selectors.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Selector Reference"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("Finally, the "),a("code",{staticClass:"inline-code-block"},[t._v('"made-by"')]),t._v(" class is given "),a("code",{staticClass:"inline-code-block"},[t._v("margin: 0")]),t._v(" which removes the margin from the "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("If you didn't feel comfortable with the CSS discussed above, then here's a good resource to go through "),a("a",{attrs:{href:"https://www.w3schools.com/css/default.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("CSS Tutorial"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("As we continue to develop the blog, we'll add more styling to the footer to make it look presentable in different scenarios like on smaller screen sizes, when a sidebar is present, etc.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("Footer.vue")]),t._v(" file should look like:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Footer.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("icons"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://github.com/codemonkeysio"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("GitHub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://www.youtube.com/@codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("YouTube"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://gab.com/codemonkeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Gab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://t.me/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Telegram"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://twitter.com/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Twitter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://codemonkeys.tech/rss.xml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("RSS"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://keybase.io/codemonkeystech"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("noopener noreferrer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("vp-icon")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Keybase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("vp-icon")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("made-by"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Made by & for Code Monkeys 🐵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Footer'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("scoped")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}},[a("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n.footer\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("flex-direction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" column\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("align-items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2.5rem 2.5rem 2rem\n .icons\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" flex\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1.75rem\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2rem\n .icons > "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("not")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("last-child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 4.6875rem\n .made-by\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br"),a("span",{staticClass:"line-number"},[t._v("61")]),a("br"),a("span",{staticClass:"line-number"},[t._v("62")]),a("br"),a("span",{staticClass:"line-number"},[t._v("63")]),a("br"),a("span",{staticClass:"line-number"},[t._v("64")]),a("br"),a("span",{staticClass:"line-number"},[t._v("65")]),a("br"),a("span",{staticClass:"line-number"},[t._v("66")]),a("br"),a("span",{staticClass:"line-number"},[t._v("67")]),a("br"),a("span",{staticClass:"line-number"},[t._v("68")]),a("br"),a("span",{staticClass:"line-number"},[t._v("69")]),a("br"),a("span",{staticClass:"line-number"},[t._v("70")]),a("br"),a("span",{staticClass:"line-number"},[t._v("71")]),a("br"),a("span",{staticClass:"line-number"},[t._v("72")]),a("br"),a("span",{staticClass:"line-number"},[t._v("73")]),a("br"),a("span",{staticClass:"line-number"},[t._v("74")]),a("br"),a("span",{staticClass:"line-number"},[t._v("75")]),a("br"),a("span",{staticClass:"line-number"},[t._v("76")]),a("br"),a("span",{staticClass:"line-number"},[t._v("77")]),a("br"),a("span",{staticClass:"line-number"},[t._v("78")]),a("br")])])])],1),t._v(" "),a("p",[t._v("After adding the "),a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(" directory to the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory, you may have noticed the site is rendering a blank page. This is because we created a directory in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory, so "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" is now looking for a "),a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(" file in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("We have the option of creating a "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory and placing our own "),a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(" file inside of it, but as previously mentioned we're going to use "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("theme inheritance"),a("OutboundLink")],1),t._v(" to inherit the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"theme-inheritance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#theme-inheritance"}},[t._v("#")]),t._v(" Theme Inheritance")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Theme inheritance"),a("OutboundLink")],1),t._v(" allows you to pass all of the capabilities from a parent theme to a child theme. In our case the parent theme is the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(", and we'll be creating the child theme as we develop the blog.")]),t._v(" "),a("p",[t._v("To create the child theme from the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(", we need to configure the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/option-api.html#extend",target:"_blank",rel:"noopener noreferrer"}},[t._v("extend"),a("OutboundLink")],1),t._v(" option in the "),a("code",{staticClass:"inline-code-block"},[t._v("index.js")]),t._v(" file.")]),t._v(" "),a("p",[t._v("First, we need to create the "),a("code",{staticClass:"inline-code-block"},[t._v("index.js")]),t._v(" file in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory which should now look like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v("├── "),a("code",[t._v("theme")]),t._v("\n│ ├── "),a("code",[t._v("global-components")]),t._v("\n│ └── index.js")]),t._v("\n")])]),a("p",[t._v("We can now configure the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/option-api.html#extend",target:"_blank",rel:"noopener noreferrer"}},[t._v("extend"),a("OutboundLink")],1),t._v(" option:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Configuring the Extend Option"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n extend"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@vuepress/theme-default'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])])])],1),t._v(" "),a("p",[t._v("The inherited "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(" should now be rendering alongside the child theme instead of the blank page.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Missing Layout.vue File")]),t._v(" "),a("p",[t._v("You may have noticed that the "),a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(" file is listed as a mandatory file, but we didn't need to create one in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory. This is because you don't need to explicitly create the "),a("code",{staticClass:"inline-code-block"},[t._v("Layout.vue")]),t._v(" file when you're inheriting it from the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("p",[t._v("The child theme is also able to override files in the parent theme by creating a file with the same name in the same location. We'll go over how to override parent theme files in more detail in future tutorials. You can also override some parent theme files by just using the same name as the parent theme file in the child theme. For example, we're going to override the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file by using the same name for the file in the child theme and the code provided by the documentation.")]),t._v(" "),a("p",[t._v("Now let's create the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory. This is where we'll be adding the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file which again allows us to add our custom footer component to the global layout of the site.")]),t._v(" "),a("h3",{attrs:{id:"using-the-global-layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-global-layout"}},[t._v("#")]),t._v(" Using the Global Layout")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory will look like after creating the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file in the "),a("code",{staticClass:"inline-code-block"},[t._v("layouts")]),t._v(" directory:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v("├── "),a("code",[t._v("theme")]),t._v("\n│ ├── "),a("code",[t._v("global-components")]),t._v("\n│ ├── "),a("code",[t._v("layouts")]),t._v("\n│ │ └── GlobalLayout.vue\n│ └── index.js")]),t._v("\n")])]),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file is responsible for handling the global layout of the site. Here's the path to the default "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file provided by "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" "),a("code",{staticClass:"inline-code-block"},[t._v("node_modules/@vuepress/core/lib/client/components")]),t._v(". You can also view the code for the default global layout "),a("a",{attrs:{href:"https://github.com/vuejs/vuepress/blob/master/packages/%40vuepress/core/lib/client/components/GlobalLayout.vue",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The default global layout gives you the ability to render different layouts depending on if "),a("code",{staticClass:"inline-code-block"},[t._v("$page.path")]),t._v(" is defined, i.e., the URL of the page is valid and if "),a("code",{staticClass:"inline-code-block"},[t._v("$page.frontmatter.layout")]),t._v(" is defined. If only the "),a("code",{staticClass:"inline-code-block"},[t._v("$page.path")]),t._v(" is defined, then the default layout will be used which is "),a("code",{staticClass:"inline-code-block"},[t._v("Layout")]),t._v(". If "),a("code",{staticClass:"inline-code-block"},[t._v("$page.frontmatter.layout")]),t._v(" is defined, then the specific layout for that page will be used. If "),a("code",{staticClass:"inline-code-block"},[t._v("$page.path")]),t._v(" is not defined, then the "),a("code",{staticClass:"inline-code-block"},[t._v("NotFound")]),t._v(" layout is used which is the layout for the 404 page provided by "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(". In most scenarios you don't need to edit the default global layout, but if you want to add a global header or a global footer to your site, then this is a good place to add it.")]),t._v(" "),a("p",[t._v("To override and edit the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file we're going to use the code provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/option-api.html#globallayout",target:"_blank",rel:"noopener noreferrer"}},[t._v("globalLayout"),a("OutboundLink")],1),t._v(" section from the documentation. The code provided by the documentation basically uses a "),a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/computed.html?redirect=true",target:"_blank",rel:"noopener noreferrer"}},[t._v("computed property"),a("OutboundLink")],1),t._v(" to determine the layout for a page based on if the URL of the page is defined and if the page uses a specific layout provided by the frontmatter. This is similar to the logic previously described when discussing the default global layout.")]),t._v(" "),a("p",[t._v("Here's the code from the documentation:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"GlobalLayout.vue from Docs"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("header")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Header"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("header")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":is")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Footer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n computed"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("layout")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$frontmatter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also check whether layout exists first as the default global layout does.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$frontmatter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("layout\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Layout'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'NotFound'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])])],1),t._v(" "),a("p",[t._v("We're going to remove the example "),a("code",{staticClass:"inline-code-block"},[t._v("header")]),t._v(" tag and replace the example "),a("code",{staticClass:"inline-code-block"},[t._v("footer")]),t._v(" tag with our previously created footer component.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("GlobalLayout.vue")]),t._v(" file should look like after the changes:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"GlobalLayout.vue"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":is")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n computed"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("layout")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$frontmatter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also check whether layout exists first as the default global layout does.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$frontmatter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("layout\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Layout'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'NotFound'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Importing the Footer Component")]),t._v(" "),a("p",[t._v("Notice that we don't need to explicitly import the footer component since we made it a global component by adding it to the "),a("code",{staticClass:"inline-code-block"},[t._v("global-components")]),t._v(" directory in the "),a("code",{staticClass:"inline-code-block"},[t._v("theme")]),t._v(" directory.")])]),t._v(" "),a("h3",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll discuss how to override the "),a("code",{staticClass:"inline-code-block"},[t._v("index.styl")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("palette.styl")]),t._v(" files to add our own global styling to the site. The global styling will include background color, accent color, text color, etc.")])],1)}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/5.87c035ba.js b/assets/js/5.87c035ba.js new file mode 100644 index 00000000..dff00eba --- /dev/null +++ b/assets/js/5.87c035ba.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{406:function(t,e,o){"use strict";o.d(e,"a",(function(){return a}));const a={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let e=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,e]:[e]):e},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},444:function(t,e,o){},445:function(t,e,o){},446:function(t,e,o){},447:function(t,e,o){},503:function(t,e,o){"use strict";o(444)},504:function(t,e,o){"use strict";o(445)},505:function(t,e,o){"use strict";o(446)},506:function(t,e,o){"use strict";o(447)},521:function(t,e,o){"use strict";o.r(e);o(38);var a=o(406),s={name:"Modal",props:{title:{type:String,required:!1,default:"Donation"},qrCode:{type:String,required:!0,default:null},qrCodeAlt:{type:String,required:!1,default:"Donation QR Code"}}},r=(o(503),o(18)),n=Object(r.a)(s,(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{staticClass:"modal-overlay",on:{click:function(e){return t.$emit("close-modal")}}},[o("div",{staticClass:"modal",on:{click:function(t){t.stopPropagation()}}},[o("div",{staticClass:"close",on:{click:function(e){return t.$emit("close-modal")}}},[o("vp-icon",{staticClass:"icon",attrs:{name:"cross"}})],1),t._v(" "),o("h4",{staticClass:"name"},[t._v(t._s(t.title))]),t._v(" "),o("img",{staticClass:"qr-code",attrs:{src:t.$withBase("/images/donate/qr-codes/"+t.qrCode),alt:t.qrCodeAlt}})])])}),[],!1,null,"c98ceaec",null).exports,i={name:"PayNymDonation",components:{VLazyImage:a.a,Modal:n},data:function(){return{paymentCode:"PM8TJf7wdgnWbAdnwbgTMY8ic3UZ2LFvkSJxuFtK4JwXSKFmqys1iL964UX55fGKfqZXfTdVjK1Z3FwbgTPbmEp2ErGPVaXZds8v9YUBxgfqvoQUBF2X",formattedPaymentCode:{leftPart:"",rightPart:""},showModal:!1}},created:function(){this.formatPaymentCode(this.paymentCode)},methods:{onCopy:function(t){alert("Payment code:\n\n".concat(t.text,"\n\ncopied to clipboard!"))},onError:function(t){alert("Failed copying payment code to clipboard: ",t)},formatPaymentCode:function(t){var e=t.length,o=e-10;this.formattedPaymentCode.leftPart=t.slice(0,o),this.formattedPaymentCode.rightPart=t.slice(o,e)},displayQRCode:function(){this.showModal=!0}}},c=(o(504),Object(r.a)(i,(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{staticClass:"payment-codes-wrapper"},[o("div",{staticClass:"paynym-bot-and-name"},[o("div",{staticClass:"bot"},[o("v-lazy-image",{attrs:{src:t.$withBase("/images/donate/logos/paynym-bot-300w.png"),"src-placeholder":t.$withBase("/images/donate/logos/paynym-bot-86w.png"),alt:"Code Monkeys PayNym Bot"}})],1),t._v(" "),o("a",{staticClass:"name",attrs:{href:"https://paynym.is/+blackviolet838",target:"_blank",rel:"noopener noreferrer"}},[t._v("\n +blackviolet838\n "),o("VueCustomTooltip",{attrs:{label:"Verified owner of this payment code",position:"is-bottom"}},[o("vp-icon",{attrs:{name:"verifiedUser"}})],1)],1)]),t._v(" "),o("div",{staticClass:"payment-code-wrapper"},[t._m(0),t._v(" "),o("div",{staticClass:"payment-code-break"}),t._v(" "),o("div",{staticClass:"payment-code"},[o("span",{staticClass:"left-payment-code"},[t._v(t._s(t.formattedPaymentCode.leftPart))]),t._v(" "),o("span",{staticClass:"right-payment-code"},[t._v(t._s(t.formattedPaymentCode.rightPart))])]),t._v(" "),o("div",{staticClass:"copy-and-qr-code-break"}),t._v(" "),o("div",{staticClass:"copy-and-qr-code-wrapper"},[o("button",{directives:[{name:"clipboard",rawName:"v-clipboard:copy",value:t.paymentCode,expression:"paymentCode",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:t.onCopy,expression:"onCopy",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:t.onError,expression:"onError",arg:"error"}],staticClass:"copy",attrs:{type:"button"}},[t._v("\n Copy\n ")]),t._v(" "),o("button",{staticClass:"qr-code",attrs:{type:"button"},on:{click:t.displayQRCode}},[o("vp-icon",{attrs:{name:"qr-code"}})],1)])]),t._v(" "),o("Modal",{directives:[{name:"show",rawName:"v-show",value:t.showModal,expression:"showModal"}],attrs:{title:"PayNym",qrCode:"paynym-donation-qr-code.png",qrCodeAlt:"PayNym Donation QR Code"},on:{"close-modal":function(e){t.showModal=!1}}})],1)}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"payment-code-text"},[e("span",[this._v("Payment Code")])])}],!1,null,"74cd145a",null).exports),d=(o(46),o(47),{cryptoDonations:[{name:"Bitcoin",abbr:"BTC",address:"bc1q5rsnx4d320jtuvdf0k8kkmgjzfnac95gphyznn",qrCode:"bitcoin-donation-qr-code.png",qrCodeAlt:"Bitcoin Donation QR Code",logo:"donate/logos/bitcoin-donate-logo-256w.png",placeholder:"donate/logos/bitcoin-donate-logo-28w.png",alt:"Bitcoin Donate Logo",showQRCode:!1},{name:"Monero",abbr:"XMR",address:"89DRhZtKrfPS5yuMcFoivqBCuXs19qRnChXn5VKGeYDG457WHFcGoWbQXqW92Gah2mZFChLCkV5Cfc6zcwFwmz9zN8GRuDF",qrCode:"monero-donation-qr-code.png",qrCodeAlt:"Monero Donation QR Code",logo:"donate/logos/monero-donate-logo-256w.png",placeholder:"donate/logos/monero-donate-logo-28w.png",alt:"Monero Donate Logo",showQRCode:!1}]}),l={name:"cryptoDonations",components:{VLazyImage:a.a,Modal:n},data:function(){return{cryptoDonations:d.cryptoDonations,formattedAddresses:[]}},created:function(){this.formatAddress(this.cryptoDonations)},methods:{onCopy:function(t){alert("Address:\n\n".concat(t.text,"\n\ncopied to clipboard!"))},onError:function(t){alert("Failed copying address to clipboard: ",t)},formatAddress:function(t){var e,o,a=this;t.forEach((function(t){e=t.address.length,o=e-10,a.formattedAddresses.push({leftPart:t.address.slice(0,o),rightPart:t.address.slice(o,e)})}))},displayQRCode:function(t){this.cryptoDonations[t].showQRCode=!0}}},p=(o(505),{components:{CryptoDonations:Object(r.a)(l,(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{staticClass:"crypto-donations-wrapper"},t._l(t.cryptoDonations,(function(e,a){return o("div",{key:e.name,staticClass:"donation"},[o("div",{staticClass:"logo-name-and-abbreviation-wrapper"},[o("div",{staticClass:"logo"},[o("v-lazy-image",{attrs:{src:t.$withBase("/images/"+e.logo),"src-placeholder":t.$withBase("/images/"+e.placeholder),alt:e.alt||"Donation Logo"}})],1),t._v(" "),o("div",{staticClass:"name-and-abbreviation"},[o("span",[t._v(t._s(e.name))]),t._v(" "),o("span",{staticClass:"abbreviation"},[t._v(t._s(e.abbr))])])]),t._v(" "),o("div",{staticClass:"address-break"}),t._v(" "),o("div",{staticClass:"address-wrapper"},[o("span",{staticClass:"left-address"},[t._v(t._s(t.formattedAddresses[a].leftPart))]),t._v(" "),o("span",{staticClass:"right-address"},[t._v(t._s(t.formattedAddresses[a].rightPart))])]),t._v(" "),o("div",{staticClass:"copy-and-qr-code-break"}),t._v(" "),o("div",{staticClass:"copy-and-qr-code-wrapper"},[o("button",{directives:[{name:"clipboard",rawName:"v-clipboard:copy",value:e.address,expression:"donation.address",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:t.onCopy,expression:"onCopy",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:t.onError,expression:"onError",arg:"error"}],staticClass:"copy",attrs:{type:"button"}},[t._v("\n Copy\n ")]),t._v(" "),o("button",{staticClass:"qr-code",attrs:{type:"button"},on:{click:function(e){return t.displayQRCode(a)}}},[o("vp-icon",{attrs:{name:"qr-code"}})],1)]),t._v(" "),o("Modal",{directives:[{name:"show",rawName:"v-show",value:e.showQRCode,expression:"donation.showQRCode"}],attrs:{title:e.name,qrCode:e.qrCode,qrCodeAlt:e.qrCodeAlt},on:{"close-modal":function(t){e.showQRCode=!1}}})],1)})),0)}),[],!1,null,"40044d4a",null).exports,PayNymDonation:c}}),m=(o(506),Object(r.a)(p,(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[o("h1",{attrs:{id:"thanks-for-the-bananas-🍌"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#thanks-for-the-bananas-🍌"}},[t._v("#")]),t._v(" Thanks for the "),o("div",{staticClass:"emoji-wrap"},[t._v("Bananas!!! 🍌")])])]},proxy:!0}])},[o("div",{staticClass:"topic-card"},[o("h2",{attrs:{id:"crypto-🔗"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#crypto-🔗"}},[t._v("#")]),t._v(" Crypto 🔗")]),t._v(" "),o("p",[t._v("⚠️ Sending Crypto to the Wrong Address will Result in Loss of "),o("span",{staticClass:"emoji-wrap"},[t._v("Funds! ⚠️")])]),t._v(" "),o("p",[t._v("✅ Always double check the address & amount before "),o("span",{staticClass:"emoji-wrap"},[t._v("sending! ✅")])]),t._v(" "),o("p",[t._v("🤖 Instead of using the static Bitcoin address below, improve your privacy by using a "),o("span",{staticClass:"emoji-wrap"},[o("a",{attrs:{href:"https://paynym.is/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PayNym!"),o("OutboundLink")],1),t._v(" 🤖")])]),t._v(" "),o("PayNymDonation"),t._v(" "),o("CryptoDonations")],1),t._v(" "),o("div",{staticClass:"topic-card fiat-card"},[o("h2",{attrs:{id:"fiat-💵"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#fiat-💵"}},[t._v("#")]),t._v(" Fiat 💵")]),t._v(" "),o("p",[t._v("Subscribe for more monkey business on "),o("a",{attrs:{href:"https://www.subscribestar.com/code-monkeys",target:"_blank",rel:"noopener noreferrer"}},[t._v("SubscribeStar!"),o("OutboundLink")],1)]),t._v(" "),o("p",[t._v("Become a "),o("a",{attrs:{href:"https://github.com/sponsors/codemonkeysio",target:"_blank",rel:"noopener noreferrer"}},[t._v("Code Monkeys Sponsor!"),o("OutboundLink")],1)]),t._v(" "),o("p",[t._v("Sponsor J the Code Monkey on "),o("a",{attrs:{href:"https://github.com/sponsors/jchiarulli",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub!"),o("OutboundLink")],1)])])])}),[],!1,null,"7ed46e05",null));e.default=m.exports}}]); \ No newline at end of file diff --git a/assets/js/50.fe3bfe20.js b/assets/js/50.fe3bfe20.js new file mode 100644 index 00000000..d3178e5a --- /dev/null +++ b/assets/js/50.fe3bfe20.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{561:function(s,t,e){"use strict";e.r(t);var a=e(18),n=Object(a.a)({},(function(){var s=this,t=s.$createElement,e=s._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey},scopedSlots:s._u([{key:"header",fn:function(){return[e("h1",{attrs:{id:"vuepress-tutorial-9-styling-the-homepage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-9-styling-the-homepage"}},[s._v("#")]),s._v(" VuePress Tutorial 9 - Styling the Homepage")])]},proxy:!0}])},[e("h2",{attrs:{id:"styling-files"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#styling-files"}},[s._v("#")]),s._v(" Styling Files")]),s._v(" "),e("p",[s._v("The next step we'll be taking in developing the blog is learning how to override the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" files which will allow us to add our own global styling to the blog.")]),s._v(" "),e("p",[s._v("To do this we're going to first discuss what the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" files are used for. Then we'll take a look at the predefined styling files provided by the "),e("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),e("OutboundLink")],1),s._v(", and we'll discuss the overriding priority of the files. Finally, we'll implement what we leaned about by styling the homepage of the blog.")]),s._v(" "),e("p",[s._v("Make sure you start the local development server which should be running at "),e("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[s._v("http://localhost:8080/"),e("OutboundLink")],1),s._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),s._v(" "),e("h3",{attrs:{id:"palette-styl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#palette-styl"}},[s._v("#")]),s._v(" palette.styl")]),s._v(" "),e("p",[s._v("The "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file is used to define global styling variables and override the predefined styling variables which in our case are being provided by the "),e("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),e("OutboundLink")],1),s._v(".")]),s._v(" "),e("p",[s._v("Here are some of the predefined styling variables available to use and override in your site:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Predefined palette.styl File"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// colors")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$accentColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#3eaf7c")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$textColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#2c3e50")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$borderColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#eaecef")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$codeBgColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#282c34")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$arrowBgColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ccc")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$badgeTipColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#42b983")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$badgeWarningColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token func"}},[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("darken")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ffe564")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("35")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("%")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")])])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$badgeErrorColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#DA5961")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// layout")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$navbarHeight")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("3.6")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$sidebarWidth")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$contentWidth")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("740")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$homePageWidth")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("960")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// responsive breakpoints")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$MQNarrow")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("959")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$MQMobile")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("719")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$MQMobileNarrow")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("419")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br"),e("span",{staticClass:"line-number"},[s._v("10")]),e("br"),e("span",{staticClass:"line-number"},[s._v("11")]),e("br"),e("span",{staticClass:"line-number"},[s._v("12")]),e("br"),e("span",{staticClass:"line-number"},[s._v("13")]),e("br"),e("span",{staticClass:"line-number"},[s._v("14")]),e("br"),e("span",{staticClass:"line-number"},[s._v("15")]),e("br"),e("span",{staticClass:"line-number"},[s._v("16")]),e("br"),e("span",{staticClass:"line-number"},[s._v("17")]),e("br"),e("span",{staticClass:"line-number"},[s._v("18")]),e("br"),e("span",{staticClass:"line-number"},[s._v("19")]),e("br"),e("span",{staticClass:"line-number"},[s._v("20")]),e("br")])])])],1),s._v(" "),e("p",[s._v("We'll be using and overriding some of these predefined styling variables as well as defining our own styling variables as we develop the blog.")]),s._v(" "),e("p",[s._v("Here's a link to the full "),e("a",{attrs:{href:"https://github.com/vuejs/vuepress/blob/master/packages/@vuepress/core/lib/client/style/config.styl",target:"_blank",rel:"noopener noreferrer"}},[s._v("palette.styl file"),e("OutboundLink")],1),s._v(" if you're interested. You can also view the full file by navigating to "),e("code",{staticClass:"inline-code-block"},[s._v("node_modules/@vuepress/core/lib/client/style/config.styl")]),s._v(" in your project.")]),s._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[s._v("Only Define Variables in palette.styl")]),s._v(" "),e("p",[s._v("You should ONLY define variables in the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file because it will be imported at the end of the root Stylus config file. This means several files will use it, so once you define your styling variables here they will be duplicated multiple times")])]),s._v(" "),e("h3",{attrs:{id:"creating-the-palette-styl-file"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-palette-styl-file"}},[s._v("#")]),s._v(" Creating the palette.styl File")]),s._v(" "),e("p",[s._v("Now that we have a good understanding of the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file, we're going to create the file by first creating a "),e("code",{staticClass:"inline-code-block"},[s._v("styles")]),s._v(" directory in the "),e("code",{staticClass:"inline-code-block"},[s._v("theme")]),s._v(" directory. The "),e("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory for your site should now look something like this:")]),s._v(" "),e("pre",{staticClass:"vue-container"},[e("code",[e("p",[s._v(".\n├── "),e("code",[s._v("docs")]),s._v("\n│ ├── "),e("code",[s._v(".vuepress")]),s._v("\n│ │ ├── "),e("code",[s._v("public")]),s._v("\n│ │ ├── "),e("code",[s._v("theme")]),s._v("\n│ │ │ ├── "),e("code",[s._v("global-components")]),s._v("\n│ │ │ ├── "),e("code",[s._v("layouts")]),s._v("\n│ │ │ ├── "),e("code",[s._v("styles")]),s._v("\n│ │ │ └── index.js\n│ │ │\n│ │ └── config.js\n│ │\n│ ├── "),e("code",[s._v("icons")]),s._v("\n│ └── README.md")]),s._v("\n")])]),e("p",[s._v("After creating the "),e("code",{staticClass:"inline-code-block"},[s._v("styles")]),s._v(" directory, we can now create the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file inside of it like this:")]),s._v(" "),e("pre",{staticClass:"vue-container"},[e("code",[e("p",[s._v(".\n├── "),e("code",[s._v("docs")]),s._v("\n│ ├── "),e("code",[s._v(".vuepress")]),s._v("\n│ │ ├── "),e("code",[s._v("public")]),s._v("\n│ │ ├── "),e("code",[s._v("theme")]),s._v("\n│ │ │ ├── "),e("code",[s._v("global-components")]),s._v("\n│ │ │ ├── "),e("code",[s._v("layouts")]),s._v("\n│ │ │ ├── "),e("code",[s._v("styles")]),s._v("\n│ │ │ │ └── palette.styl\n│ │ │ └── index.js\n│ │ │\n│ │ └── config.js\n│ │\n│ ├── "),e("code",[s._v("icons")]),s._v("\n│ └── README.md")]),s._v("\n")])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[s._v("Alternative Directory Structure")]),s._v(" "),e("p",[s._v("If you recall from the "),e("RouterLink",{attrs:{to:"/vuepress-tutorial-4/"}},[s._v("VuePress Tutorial 4 - Directory Structure")]),s._v(" post, you also have the option of creating your "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file in the following location "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/palette.styl")]),s._v(".")],1)]),s._v(" "),e("p",[s._v("We'll be updating the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file later on in this post, but first we're going to take a look at the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file.")]),s._v(" "),e("h3",{attrs:{id:"index-styl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#index-styl"}},[s._v("#")]),s._v(" index.styl")]),s._v(" "),e("p",[s._v("The "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file is used to add global styles as well as override predefined styles which in our case are being provided by the "),e("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),e("OutboundLink")],1),s._v(".")]),s._v(" "),e("p",[s._v("Even though it's a "),e("a",{attrs:{href:"https://stylus-lang.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Stylus"),e("OutboundLink")],1),s._v(" file, you can also use normal "),e("code",{staticClass:"inline-code-block"},[s._v("CSS")]),s._v(" syntax if you prefer.")]),s._v(" "),e("p",[s._v("We won't discuss the predefined "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file in detail right now. It's just meant to be a reference in case you want to look for a specific style you want to override, or if you're interested in learning more about the predefined styling.")]),s._v(" "),e("p",[s._v("Here's the predefined "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" which you can override and add your own styles to:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Predefined index.styl File"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./config'")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./code'")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./custom-blocks'")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./arrow'")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./wrapper'")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'./toc'")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#fff")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-family")]),s._v(" -apple-system"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BlinkMacSystemFont"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Segoe UI"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Roboto"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Oxygen"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Ubuntu"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Cantarell"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Fira Sans"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Droid Sans"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Helvetica Neue"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" sans-serif")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("-webkit-font-smoothing")]),s._v(" antialiased")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("-moz-osx-font-smoothing")]),s._v(" grayscale")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("color")]),s._v(" $textColor")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".page")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-left")]),s._v(" $sidebarWidth")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".navbar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("position")]),s._v(" fixed")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("z-index")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("right")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("height")]),s._v(" $navbarHeight")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#fff")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("box-sizing")]),s._v(" border-box")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid $borderColor")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".sidebar-mask")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("position")]),s._v(" fixed")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("z-index")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("9")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("width")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("vw")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("height")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("vh")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("display")]),s._v(" none")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".sidebar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#fff")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("width")]),s._v(" $sidebarWidth")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("position")]),s._v(" fixed")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("z-index")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("top")]),s._v(" $navbarHeight")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("box-sizing")]),s._v(" border-box")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-right")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid $borderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("overflow-y")]),s._v(" auto")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token interpolation variable"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("{")]),s._v("$contentClass"),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("}")])]),s._v(":not(.custom)")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@extend")]),s._v(" $wrapper")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("> *:first-child")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" $navbarHeight")]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("a:hover")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("text-decoration")]),s._v(" underline")]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("p.demo")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ddd")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-radius")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("img")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("max-width")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("%")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token interpolation variable"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("{")]),s._v("$contentClass"),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("}")])]),s._v(".custom")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("img")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("max-width")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("%")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("a")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-weight")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("500")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("color")]),s._v(" $accentColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("text-decoration")]),s._v(" none")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("p a code")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-weight")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("400")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("color")]),s._v(" $accentColor")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("kbd")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#eee")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.15")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ddd")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-bottom")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.25")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ddd")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-radius")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.15")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.15")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("blockquote")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("color")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#999")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v(".2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#dfe2e5")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v(".25")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v(".25")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("& > p")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("ul"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ol")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("strong")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-weight")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("h1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h2"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h3"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h4"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h5"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h6")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-weight")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("600")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("line-height")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.25")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token interpolation variable"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("{")]),s._v("$contentClass"),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("}")])]),s._v(":not(.custom) > &")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v(" $navbarHeight"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$navbarHeight "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&:first-child")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("-1.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("+ p"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" + pre"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" + .custom-block")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&:focus .header-anchor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n &:hover .header-anchor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("opacity")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("h1")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2.2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("h2")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.65")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v(".3")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-bottom")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid $borderColor")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("h3")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.35")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("a.header-anchor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.85")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("float")]),s._v(" left")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("-0.87")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-right")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.23")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("opacity")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&:focus"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n &:hover")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("text-decoration")]),s._v(" none")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" kbd"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" .line-number")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-family")]),s._v(" source-code-pro"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Menlo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Monaco"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Consolas"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Courier New"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" monospace")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("p"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ul"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ol")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("line-height")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.7")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("hr")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid $borderColor")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("table")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-collapse")]),s._v(" collapse")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("display")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" block")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("overflow-x")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" auto")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("tr")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#dfe2e5")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&:nth-child(2n)")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#f6f8fa")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("th"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" td")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),s._v(" solid "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#dfe2e5")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v(".6")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("em")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".theme-container")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&.sidebar-open")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".sidebar-mask")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("display")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" block")]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("&.no-navbar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token interpolation variable"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("{")]),s._v("$contentClass"),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[s._v("}")])]),s._v(":not(.custom) > h1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h2"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h3"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h4"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h5"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" h6")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".sidebar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("top")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@media")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("min-width"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$MQMobile "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("px")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".theme-container.no-sidebar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".sidebar")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("display")]),s._v(" none")]),s._v("\n\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".page")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding-left")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token atrule-declaration"}},[e("span",{pre:!0,attrs:{class:"token atrule"}},[s._v("@require")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[s._v("'mobile.styl'")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br"),e("span",{staticClass:"line-number"},[s._v("10")]),e("br"),e("span",{staticClass:"line-number"},[s._v("11")]),e("br"),e("span",{staticClass:"line-number"},[s._v("12")]),e("br"),e("span",{staticClass:"line-number"},[s._v("13")]),e("br"),e("span",{staticClass:"line-number"},[s._v("14")]),e("br"),e("span",{staticClass:"line-number"},[s._v("15")]),e("br"),e("span",{staticClass:"line-number"},[s._v("16")]),e("br"),e("span",{staticClass:"line-number"},[s._v("17")]),e("br"),e("span",{staticClass:"line-number"},[s._v("18")]),e("br"),e("span",{staticClass:"line-number"},[s._v("19")]),e("br"),e("span",{staticClass:"line-number"},[s._v("20")]),e("br"),e("span",{staticClass:"line-number"},[s._v("21")]),e("br"),e("span",{staticClass:"line-number"},[s._v("22")]),e("br"),e("span",{staticClass:"line-number"},[s._v("23")]),e("br"),e("span",{staticClass:"line-number"},[s._v("24")]),e("br"),e("span",{staticClass:"line-number"},[s._v("25")]),e("br"),e("span",{staticClass:"line-number"},[s._v("26")]),e("br"),e("span",{staticClass:"line-number"},[s._v("27")]),e("br"),e("span",{staticClass:"line-number"},[s._v("28")]),e("br"),e("span",{staticClass:"line-number"},[s._v("29")]),e("br"),e("span",{staticClass:"line-number"},[s._v("30")]),e("br"),e("span",{staticClass:"line-number"},[s._v("31")]),e("br"),e("span",{staticClass:"line-number"},[s._v("32")]),e("br"),e("span",{staticClass:"line-number"},[s._v("33")]),e("br"),e("span",{staticClass:"line-number"},[s._v("34")]),e("br"),e("span",{staticClass:"line-number"},[s._v("35")]),e("br"),e("span",{staticClass:"line-number"},[s._v("36")]),e("br"),e("span",{staticClass:"line-number"},[s._v("37")]),e("br"),e("span",{staticClass:"line-number"},[s._v("38")]),e("br"),e("span",{staticClass:"line-number"},[s._v("39")]),e("br"),e("span",{staticClass:"line-number"},[s._v("40")]),e("br"),e("span",{staticClass:"line-number"},[s._v("41")]),e("br"),e("span",{staticClass:"line-number"},[s._v("42")]),e("br"),e("span",{staticClass:"line-number"},[s._v("43")]),e("br"),e("span",{staticClass:"line-number"},[s._v("44")]),e("br"),e("span",{staticClass:"line-number"},[s._v("45")]),e("br"),e("span",{staticClass:"line-number"},[s._v("46")]),e("br"),e("span",{staticClass:"line-number"},[s._v("47")]),e("br"),e("span",{staticClass:"line-number"},[s._v("48")]),e("br"),e("span",{staticClass:"line-number"},[s._v("49")]),e("br"),e("span",{staticClass:"line-number"},[s._v("50")]),e("br"),e("span",{staticClass:"line-number"},[s._v("51")]),e("br"),e("span",{staticClass:"line-number"},[s._v("52")]),e("br"),e("span",{staticClass:"line-number"},[s._v("53")]),e("br"),e("span",{staticClass:"line-number"},[s._v("54")]),e("br"),e("span",{staticClass:"line-number"},[s._v("55")]),e("br"),e("span",{staticClass:"line-number"},[s._v("56")]),e("br"),e("span",{staticClass:"line-number"},[s._v("57")]),e("br"),e("span",{staticClass:"line-number"},[s._v("58")]),e("br"),e("span",{staticClass:"line-number"},[s._v("59")]),e("br"),e("span",{staticClass:"line-number"},[s._v("60")]),e("br"),e("span",{staticClass:"line-number"},[s._v("61")]),e("br"),e("span",{staticClass:"line-number"},[s._v("62")]),e("br"),e("span",{staticClass:"line-number"},[s._v("63")]),e("br"),e("span",{staticClass:"line-number"},[s._v("64")]),e("br"),e("span",{staticClass:"line-number"},[s._v("65")]),e("br"),e("span",{staticClass:"line-number"},[s._v("66")]),e("br"),e("span",{staticClass:"line-number"},[s._v("67")]),e("br"),e("span",{staticClass:"line-number"},[s._v("68")]),e("br"),e("span",{staticClass:"line-number"},[s._v("69")]),e("br"),e("span",{staticClass:"line-number"},[s._v("70")]),e("br"),e("span",{staticClass:"line-number"},[s._v("71")]),e("br"),e("span",{staticClass:"line-number"},[s._v("72")]),e("br"),e("span",{staticClass:"line-number"},[s._v("73")]),e("br"),e("span",{staticClass:"line-number"},[s._v("74")]),e("br"),e("span",{staticClass:"line-number"},[s._v("75")]),e("br"),e("span",{staticClass:"line-number"},[s._v("76")]),e("br"),e("span",{staticClass:"line-number"},[s._v("77")]),e("br"),e("span",{staticClass:"line-number"},[s._v("78")]),e("br"),e("span",{staticClass:"line-number"},[s._v("79")]),e("br"),e("span",{staticClass:"line-number"},[s._v("80")]),e("br"),e("span",{staticClass:"line-number"},[s._v("81")]),e("br"),e("span",{staticClass:"line-number"},[s._v("82")]),e("br"),e("span",{staticClass:"line-number"},[s._v("83")]),e("br"),e("span",{staticClass:"line-number"},[s._v("84")]),e("br"),e("span",{staticClass:"line-number"},[s._v("85")]),e("br"),e("span",{staticClass:"line-number"},[s._v("86")]),e("br"),e("span",{staticClass:"line-number"},[s._v("87")]),e("br"),e("span",{staticClass:"line-number"},[s._v("88")]),e("br"),e("span",{staticClass:"line-number"},[s._v("89")]),e("br"),e("span",{staticClass:"line-number"},[s._v("90")]),e("br"),e("span",{staticClass:"line-number"},[s._v("91")]),e("br"),e("span",{staticClass:"line-number"},[s._v("92")]),e("br"),e("span",{staticClass:"line-number"},[s._v("93")]),e("br"),e("span",{staticClass:"line-number"},[s._v("94")]),e("br"),e("span",{staticClass:"line-number"},[s._v("95")]),e("br"),e("span",{staticClass:"line-number"},[s._v("96")]),e("br"),e("span",{staticClass:"line-number"},[s._v("97")]),e("br"),e("span",{staticClass:"line-number"},[s._v("98")]),e("br"),e("span",{staticClass:"line-number"},[s._v("99")]),e("br"),e("span",{staticClass:"line-number"},[s._v("100")]),e("br"),e("span",{staticClass:"line-number"},[s._v("101")]),e("br"),e("span",{staticClass:"line-number"},[s._v("102")]),e("br"),e("span",{staticClass:"line-number"},[s._v("103")]),e("br"),e("span",{staticClass:"line-number"},[s._v("104")]),e("br"),e("span",{staticClass:"line-number"},[s._v("105")]),e("br"),e("span",{staticClass:"line-number"},[s._v("106")]),e("br"),e("span",{staticClass:"line-number"},[s._v("107")]),e("br"),e("span",{staticClass:"line-number"},[s._v("108")]),e("br"),e("span",{staticClass:"line-number"},[s._v("109")]),e("br"),e("span",{staticClass:"line-number"},[s._v("110")]),e("br"),e("span",{staticClass:"line-number"},[s._v("111")]),e("br"),e("span",{staticClass:"line-number"},[s._v("112")]),e("br"),e("span",{staticClass:"line-number"},[s._v("113")]),e("br"),e("span",{staticClass:"line-number"},[s._v("114")]),e("br"),e("span",{staticClass:"line-number"},[s._v("115")]),e("br"),e("span",{staticClass:"line-number"},[s._v("116")]),e("br"),e("span",{staticClass:"line-number"},[s._v("117")]),e("br"),e("span",{staticClass:"line-number"},[s._v("118")]),e("br"),e("span",{staticClass:"line-number"},[s._v("119")]),e("br"),e("span",{staticClass:"line-number"},[s._v("120")]),e("br"),e("span",{staticClass:"line-number"},[s._v("121")]),e("br"),e("span",{staticClass:"line-number"},[s._v("122")]),e("br"),e("span",{staticClass:"line-number"},[s._v("123")]),e("br"),e("span",{staticClass:"line-number"},[s._v("124")]),e("br"),e("span",{staticClass:"line-number"},[s._v("125")]),e("br"),e("span",{staticClass:"line-number"},[s._v("126")]),e("br"),e("span",{staticClass:"line-number"},[s._v("127")]),e("br"),e("span",{staticClass:"line-number"},[s._v("128")]),e("br"),e("span",{staticClass:"line-number"},[s._v("129")]),e("br"),e("span",{staticClass:"line-number"},[s._v("130")]),e("br"),e("span",{staticClass:"line-number"},[s._v("131")]),e("br"),e("span",{staticClass:"line-number"},[s._v("132")]),e("br"),e("span",{staticClass:"line-number"},[s._v("133")]),e("br"),e("span",{staticClass:"line-number"},[s._v("134")]),e("br"),e("span",{staticClass:"line-number"},[s._v("135")]),e("br"),e("span",{staticClass:"line-number"},[s._v("136")]),e("br"),e("span",{staticClass:"line-number"},[s._v("137")]),e("br"),e("span",{staticClass:"line-number"},[s._v("138")]),e("br"),e("span",{staticClass:"line-number"},[s._v("139")]),e("br"),e("span",{staticClass:"line-number"},[s._v("140")]),e("br"),e("span",{staticClass:"line-number"},[s._v("141")]),e("br"),e("span",{staticClass:"line-number"},[s._v("142")]),e("br"),e("span",{staticClass:"line-number"},[s._v("143")]),e("br"),e("span",{staticClass:"line-number"},[s._v("144")]),e("br"),e("span",{staticClass:"line-number"},[s._v("145")]),e("br"),e("span",{staticClass:"line-number"},[s._v("146")]),e("br"),e("span",{staticClass:"line-number"},[s._v("147")]),e("br"),e("span",{staticClass:"line-number"},[s._v("148")]),e("br"),e("span",{staticClass:"line-number"},[s._v("149")]),e("br"),e("span",{staticClass:"line-number"},[s._v("150")]),e("br"),e("span",{staticClass:"line-number"},[s._v("151")]),e("br"),e("span",{staticClass:"line-number"},[s._v("152")]),e("br"),e("span",{staticClass:"line-number"},[s._v("153")]),e("br"),e("span",{staticClass:"line-number"},[s._v("154")]),e("br"),e("span",{staticClass:"line-number"},[s._v("155")]),e("br"),e("span",{staticClass:"line-number"},[s._v("156")]),e("br"),e("span",{staticClass:"line-number"},[s._v("157")]),e("br"),e("span",{staticClass:"line-number"},[s._v("158")]),e("br"),e("span",{staticClass:"line-number"},[s._v("159")]),e("br"),e("span",{staticClass:"line-number"},[s._v("160")]),e("br"),e("span",{staticClass:"line-number"},[s._v("161")]),e("br"),e("span",{staticClass:"line-number"},[s._v("162")]),e("br"),e("span",{staticClass:"line-number"},[s._v("163")]),e("br"),e("span",{staticClass:"line-number"},[s._v("164")]),e("br"),e("span",{staticClass:"line-number"},[s._v("165")]),e("br"),e("span",{staticClass:"line-number"},[s._v("166")]),e("br"),e("span",{staticClass:"line-number"},[s._v("167")]),e("br"),e("span",{staticClass:"line-number"},[s._v("168")]),e("br"),e("span",{staticClass:"line-number"},[s._v("169")]),e("br"),e("span",{staticClass:"line-number"},[s._v("170")]),e("br"),e("span",{staticClass:"line-number"},[s._v("171")]),e("br"),e("span",{staticClass:"line-number"},[s._v("172")]),e("br"),e("span",{staticClass:"line-number"},[s._v("173")]),e("br"),e("span",{staticClass:"line-number"},[s._v("174")]),e("br"),e("span",{staticClass:"line-number"},[s._v("175")]),e("br"),e("span",{staticClass:"line-number"},[s._v("176")]),e("br"),e("span",{staticClass:"line-number"},[s._v("177")]),e("br"),e("span",{staticClass:"line-number"},[s._v("178")]),e("br"),e("span",{staticClass:"line-number"},[s._v("179")]),e("br"),e("span",{staticClass:"line-number"},[s._v("180")]),e("br"),e("span",{staticClass:"line-number"},[s._v("181")]),e("br"),e("span",{staticClass:"line-number"},[s._v("182")]),e("br"),e("span",{staticClass:"line-number"},[s._v("183")]),e("br"),e("span",{staticClass:"line-number"},[s._v("184")]),e("br"),e("span",{staticClass:"line-number"},[s._v("185")]),e("br"),e("span",{staticClass:"line-number"},[s._v("186")]),e("br"),e("span",{staticClass:"line-number"},[s._v("187")]),e("br"),e("span",{staticClass:"line-number"},[s._v("188")]),e("br"),e("span",{staticClass:"line-number"},[s._v("189")]),e("br"),e("span",{staticClass:"line-number"},[s._v("190")]),e("br"),e("span",{staticClass:"line-number"},[s._v("191")]),e("br"),e("span",{staticClass:"line-number"},[s._v("192")]),e("br"),e("span",{staticClass:"line-number"},[s._v("193")]),e("br"),e("span",{staticClass:"line-number"},[s._v("194")]),e("br"),e("span",{staticClass:"line-number"},[s._v("195")]),e("br"),e("span",{staticClass:"line-number"},[s._v("196")]),e("br"),e("span",{staticClass:"line-number"},[s._v("197")]),e("br"),e("span",{staticClass:"line-number"},[s._v("198")]),e("br"),e("span",{staticClass:"line-number"},[s._v("199")]),e("br"),e("span",{staticClass:"line-number"},[s._v("200")]),e("br"),e("span",{staticClass:"line-number"},[s._v("201")]),e("br"),e("span",{staticClass:"line-number"},[s._v("202")]),e("br")])])])],1),s._v(" "),e("p",[s._v("Here's a link to the "),e("a",{attrs:{href:"https://github.com/vuejs/vuepress/blob/master/packages/%40vuepress/theme-default/styles/index.styl",target:"_blank",rel:"noopener noreferrer"}},[s._v("index.styl file"),e("OutboundLink")],1),s._v(" as well and the path to the file in your project "),e("code",{staticClass:"inline-code-block"},[s._v("node_modules/@vuepress/theme-default/styles/index.styl")]),s._v(".")]),s._v(" "),e("p",[s._v("As we develop the blog we'll be using and overriding some of these predefined styles as well as defining our own styles.")]),s._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[s._v("Importing and Requiring Stylus and CSS Files")]),s._v(" "),e("p",[s._v("You may have noticed in the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file that we're requiring other files, e.g., "),e("code",{staticClass:"inline-code-block"},[s._v("@require './config'")]),s._v(". We'll discuss how to import and require "),e("code",{staticClass:"inline-code-block"},[s._v(".styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v(".css")]),s._v(" files in a future post.")])]),s._v(" "),e("h3",{attrs:{id:"creating-the-index-styl-file"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-index-styl-file"}},[s._v("#")]),s._v(" Creating the index.styl File")]),s._v(" "),e("p",[s._v("Now that we have a good understanding of the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file, we're going to create the file for the blog inside of the "),e("code",{staticClass:"inline-code-block"},[s._v("styles")]),s._v(" directory that we previously created. The "),e("code",{staticClass:"inline-code-block"},[s._v("docs")]),s._v(" directory for your site should now look something like this:")]),s._v(" "),e("pre",{staticClass:"vue-container"},[e("code",[e("p",[s._v(".\n├── "),e("code",[s._v("docs")]),s._v("\n│ ├── "),e("code",[s._v(".vuepress")]),s._v("\n│ │ ├── "),e("code",[s._v("public")]),s._v("\n│ │ ├── "),e("code",[s._v("theme")]),s._v("\n│ │ │ ├── "),e("code",[s._v("global-components")]),s._v("\n│ │ │ ├── "),e("code",[s._v("layouts")]),s._v("\n│ │ │ ├── "),e("code",[s._v("styles")]),s._v("\n│ │ │ │ ├── index.styl\n│ │ │ │ └── palette.styl\n│ │ │ └── index.js\n│ │ │\n│ │ └── config.js\n│ │\n│ ├── "),e("code",[s._v("icons")]),s._v("\n│ └── README.md")]),s._v("\n")])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[s._v("Alternative Directory Structure")]),s._v(" "),e("p",[s._v("If you recall from the "),e("RouterLink",{attrs:{to:"/vuepress-tutorial-4/"}},[s._v("VuePress Tutorial 4 - Directory Structure")]),s._v(" post, you also have the option of creating your "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file in the following location "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/index.styl")]),s._v(".")],1)]),s._v(" "),e("p",[s._v("We'll be updating the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file we just created later on in this post, but first we're going to take a look at the overriding priority.")]),s._v(" "),e("h2",{attrs:{id:"overriding"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overriding"}},[s._v("#")]),s._v(" Overriding")]),s._v(" "),e("p",[s._v("Both the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" files follow a certain overriding priority.")]),s._v(" "),e("h3",{attrs:{id:"palette-styl-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#palette-styl-2"}},[s._v("#")]),s._v(" palette.styl")]),s._v(" "),e("p",[s._v("The user's "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/palette.styl")]),s._v(" has a higher priority than the theme's "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v("theme/styles/palette.styl")]),s._v(". The theme's "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file has a higher priority than any predefined "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v("node_modules/@vuepress/core/lib/client/style/config.styl")]),s._v(" in the case of the "),e("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),e("OutboundLink")],1),s._v(".")]),s._v(" "),e("p",[s._v("This means a theme can define it's own global styling variables and a user can override them as they see fit.")]),s._v(" "),e("p",[s._v("Here's an example of a global styling variable defined in each type of "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file to make this concept clearer:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Predefined Variable"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// node_modules/@vuepress/core/lib/client/style/config.styl")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$accentColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#0099ff")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])])])],1),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Theme Variable"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// theme/styles/palette.styl")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$accentColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#cc99ff")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])])])],1),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"User Variable"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// .vuepress/styles/palette.styl")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$accentColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#ccff33")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])])])],1),s._v(" "),e("p",[s._v("Here, the final value for "),e("code",{staticClass:"inline-code-block"},[s._v("$accentColor")]),s._v(" will be "),e("code",{staticClass:"inline-code-block"},[s._v("#ccff33")]),s._v(".")]),s._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[s._v("Absence of User palette.styl File")]),s._v(" "),e("p",[s._v("As we develop the blog we won't be using the user's "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file located in "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/palette.styl")]),s._v(" We'll just be using the theme's "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file located in "),e("code",{staticClass:"inline-code-block"},[s._v("theme/styles/palette.styl")]),s._v(" which will allow us to override any predefined variables.")])]),s._v(" "),e("h3",{attrs:{id:"index-styl-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#index-styl-2"}},[s._v("#")]),s._v(" index.styl")]),s._v(" "),e("p",[s._v("The same overriding priority applies to the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file as well. So, a user's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/index.styl")]),s._v(" has a higher priority than the theme's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v("theme/styles/index.styl")]),s._v(". The theme's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file has a higher priority than any predefined "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file which is located in "),e("code",{staticClass:"inline-code-block"},[s._v("node_modules/@vuepress/theme-default/styles/index.styl")]),s._v(" in the case of the "),e("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("default theme"),e("OutboundLink")],1),s._v(".")]),s._v(" "),e("p",[s._v("This means a theme can define it's own global styles and a user can override them as they see fit.")]),s._v(" "),e("p",[s._v("Both the user's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file and the theme's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file will get generated into the final "),e("code",{staticClass:"inline-code-block"},[s._v("CSS")]),s._v(" file used in the site, but the user's style gets generated later which is what gives it a higher priority than the theme's style.")]),s._v(" "),e("p",[s._v("Here's an example of a style defined in a user's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" and a style defined in a theme's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file to make this concept clearer:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Theme Style"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// theme/styles/index.styl")]),s._v("\n.example-style")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br")])])])],1),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"User Style"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// .vuepress/styles/index.styl")]),s._v("\n.example-style")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.25")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br")])])])],1),s._v(" "),e("p",[s._v("Here's the final "),e("code",{staticClass:"inline-code-block"},[s._v("CSS")]),s._v(" file generated for the site:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"Final CSS File"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* theme/styles/index.styl */")]),s._v("\n.example-style "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token selector"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* .vuepress/styles/index.styl */")]),s._v("\n.example-style "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.25")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br")])])])],1),s._v(" "),e("p",[s._v("Notice how the user's style comes after the theme's style in the final "),e("code",{staticClass:"inline-code-block"},[s._v("CSS")]),s._v(" file. This is what gives the user's style a higher priority than the theme's style.")]),s._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[s._v("Absence of User index.styl File")]),s._v(" "),e("p",[s._v("As we develop the blog we won't be using the user's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file located in "),e("code",{staticClass:"inline-code-block"},[s._v(".vuepress/styles/index.styl")]),s._v(". Instead we'll just be using the theme's "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file located in "),e("code",{staticClass:"inline-code-block"},[s._v("theme/styles/index.styl")]),s._v(" which will allow us to override any predefined styles.")])]),s._v(" "),e("p",[s._v("Now that we have a good understanding of how overriding works for both the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" files, we're now ready to override some predefined styling and add our own styling to the homepage of the blog.")]),s._v(" "),e("h2",{attrs:{id:"homepage-styles"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#homepage-styles"}},[s._v("#")]),s._v(" Homepage Styles")]),s._v(" "),e("p",[s._v("To start the homepage styling we'll be overriding and adding global styling variables to the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file. These global styling variables will then be used in the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file as well as other files as we continue the development of the blog.")]),s._v(" "),e("p",[s._v("When overriding and adding styles to your site you can look at the predefined styling files to determine what properties you need to override. Along with looking at the predefined styling files you can also inspect your browser, go to the "),e("code",{staticClass:"inline-code-block"},[s._v("Elements")]),s._v(" tab, and then locate a tag or class that you want to override.")]),s._v(" "),e("p",[s._v("Be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.")]),s._v(" "),e("p",[s._v("If you're developing your own site, then you can check out these useful resources for coming up with color schemes and palettes for your site:")]),s._v(" "),e("ul",[e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://coolors.co/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Coolors"),e("OutboundLink")],1)])]),s._v(" "),e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://www.canva.com/colors/color-palettes/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Canva Color Palettes"),e("OutboundLink")],1)])]),s._v(" "),e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://www.w3schools.com/colors/default.asp",target:"_blank",rel:"noopener noreferrer"}},[s._v("Colors Tutorial"),e("OutboundLink")],1)])]),s._v(" "),e("li",[e("span",{staticClass:"external-link-wrap"},[e("a",{attrs:{href:"https://www.w3schools.com/colors/colors_picker.asp",target:"_blank",rel:"noopener noreferrer"}},[s._v("HTML Color Picker"),e("OutboundLink")],1)])])]),s._v(" "),e("p",[s._v("If you don't feel comfortable with the CSS discussed below, then here's a good resource to go through "),e("a",{attrs:{href:"https://www.w3schools.com/css/",target:"_blank",rel:"noopener noreferrer"}},[s._v("CSS Tutorial"),e("OutboundLink")],1),s._v(".")]),s._v(" "),e("p",[s._v("You can also view the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" and "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" files in the "),e("code",{staticClass:"inline-code-block"},[s._v("tutorial-9")]),s._v(" branch of the "),e("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-9",target:"_blank",rel:"noopener noreferrer"}},[s._v("code-monkeys-blog-tutorials"),e("OutboundLink")],1),s._v(" repository.")]),s._v(" "),e("p",[s._v("Now let's override and add some global styling variables to the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file.")]),s._v(" "),e("h3",{attrs:{id:"palette-styl-3"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#palette-styl-3"}},[s._v("#")]),s._v(" palette.styl")]),s._v(" "),e("p",[s._v("Here's what the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file looks like after overriding some predefined global styling variables and adding our own global styling variables:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"palette.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$backgroundColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#1f2229")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$accentColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#eb7132")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$textColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#e6e6e6")])]),s._v("\n\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$borderColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#754d34")])]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token variable-declaration"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$darkBorderColor")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token hexcode"}},[s._v("#16181d")])]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[e("code",{staticClass:"inline-code-block"},[s._v("$backgroundColor")]),s._v(" is used as the background color of the homepage as well as the whole blog.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("$accentColor")]),s._v(" is used to color the action button on the homepage and to add styling to internal and external links.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("$textColor")]),s._v(" is used to color the text on the homepage as well as the navbar text and other text throughout the blog.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("$borderColor")]),s._v(" is used to style the border in the features section as well as the border in the navbar and other borders throughout the blog.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("$darkBorderColor")]),s._v(" will be used to style the border and box shadow around the main card on the homepage.")])]),s._v(" "),e("p",[s._v("Now let's take a look at overriding and adding some styles to the "),e("code",{staticClass:"inline-code-block"},[s._v("index.styl")]),s._v(" file.")]),s._v(" "),e("h3",{attrs:{id:"index-styl-3"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#index-styl-3"}},[s._v("#")]),s._v(" index.styl")]),s._v(" "),e("p",[s._v("We're going to start by overriding the "),e("code",{staticClass:"inline-code-block"},[s._v("background-color")]),s._v(" in the "),e("code",{staticClass:"inline-code-block"},[s._v("html")]),s._v(" tag:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n")])]),s._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[s._v("Updates the "),e("code",{staticClass:"inline-code-block"},[s._v("background-color")]),s._v(" of the content below the "),e("code",{staticClass:"inline-code-block"},[s._v("Footer")]),s._v(" component to be the color specified by the "),e("code",{staticClass:"inline-code-block"},[s._v("$backgroundColor")]),s._v(" global styling variable we just added in the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file.")])]),s._v(" "),e("p",[s._v("Next we'll override the "),e("code",{staticClass:"inline-code-block"},[s._v("background-color")]),s._v(" in the "),e("code",{staticClass:"inline-code-block"},[s._v("body")]),s._v(" tag:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("br")]),e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[s._v("Updates the "),e("code",{staticClass:"inline-code-block"},[s._v("background-color")]),s._v(" of the "),e("code",{staticClass:"inline-code-block"},[s._v("body")]),s._v(" of the site to be the color specified by the "),e("code",{staticClass:"inline-code-block"},[s._v("$backgroundColor")]),s._v(" global styling variable.")])]),s._v(" "),e("p",[s._v("Now we're going to update the "),e("code",{staticClass:"inline-code-block"},[s._v("padding")]),s._v(" around the "),e("code",{staticClass:"inline-code-block"},[s._v("main")]),s._v(" tag which we'll select using the "),e("code",{staticClass:"inline-code-block"},[s._v("home")]),s._v(" class:")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("br")]),e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".home")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[s._v("Updates the "),e("code",{staticClass:"inline-code-block"},[s._v("padding")]),s._v(" of the "),e("code",{staticClass:"inline-code-block"},[s._v("main")]),s._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[s._v("home")]),s._v(" to be zero on all sides.")])]),s._v(" "),e("p",[s._v("We're now going to update the styles for the "),e("code",{staticClass:"inline-code-block"},[s._v("hero")]),s._v(" class which is given to the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag inside of the "),e("code",{staticClass:"inline-code-block"},[s._v("main")]),s._v(" tag and contains the logo, the title, the description, and the action button.")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("br")]),e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".home")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".hero")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-left")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-right")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" solid $darkBorderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("box-shadow")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" $darkBorderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-radius")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("5.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-bottom")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br"),e("span",{staticClass:"line-number"},[s._v("10")]),e("br"),e("span",{staticClass:"line-number"},[s._v("11")]),e("br"),e("span",{staticClass:"line-number"},[s._v("12")]),e("br"),e("span",{staticClass:"line-number"},[s._v("13")]),e("br"),e("span",{staticClass:"line-number"},[s._v("14")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[e("code",{staticClass:"inline-code-block"},[s._v("margin-left: 2rem")]),s._v(" adds a margin of "),e("code",{staticClass:"inline-code-block"},[s._v("2rem")]),s._v(" to the left of the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("margin-right: 2rem")]),s._v(" adds a margin of "),e("code",{staticClass:"inline-code-block"},[s._v("2rem")]),s._v(" to the right of the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("border: 0.125rem solid $darkBorderColor")]),s._v(" adds a border around the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag with a thickness of "),e("code",{staticClass:"inline-code-block"},[s._v("0.125rem")]),s._v(", with a style of "),e("code",{staticClass:"inline-code-block"},[s._v("solid")]),s._v(", and has a color of "),e("code",{staticClass:"inline-code-block"},[s._v("$darkBorderColor")]),s._v(" which was defined in the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("box-shadow: 0 0.5rem 1rem 0 $darkBorderColor")]),s._v(" adds a box shadow around the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("border-radius: 5.625rem")]),s._v(" adds a border radius to the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag border.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("margin-bottom: 0.625rem")]),s._v(" adds a margin of "),e("code",{staticClass:"inline-code-block"},[s._v("0.625rem")]),s._v(" to the bottom of the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("padding: 2rem")]),s._v(" adds padding of "),e("code",{staticClass:"inline-code-block"},[s._v("2rem")]),s._v(" around the "),e("code",{staticClass:"inline-code-block"},[s._v("header")]),s._v(" tag.")])]),s._v(" "),e("p",[s._v("Here's a resource for the "),e("a",{attrs:{href:"https://www.w3schools.com/cssref/css3_pr_box-shadow.asp",target:"_blank",rel:"noopener noreferrer"}},[s._v("CSS box-shadow Property"),e("OutboundLink")],1),s._v(" if you are interested in learning more about how it works.")]),s._v(" "),e("p",[s._v("Finally, we're going to update the styles for the "),e("code",{staticClass:"inline-code-block"},[s._v("features")]),s._v(" class which is given to the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag inside of the "),e("code",{staticClass:"inline-code-block"},[s._v("main")]),s._v(" tag and contains the Learn, Code, and Crush text.")]),s._v(" "),e("code-group",[e("code-block",{attrs:{title:"index.styl"}},[e("div",{staticClass:"language-stylus line-numbers-mode"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("div",{staticClass:"highlighted"},[s._v(" ")]),e("br")]),e("pre",{pre:!0,attrs:{class:"language-stylus"}},[e("code",[e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("html")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("body")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("background-color")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" $backgroundColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".home")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".hero")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-left")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-right")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" solid $darkBorderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("box-shadow")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.5")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" $darkBorderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-radius")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("5.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-bottom")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.625")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".features")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-left")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("margin-right")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-top")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" solid $borderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("border-bottom")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.125")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")]),s._v(" solid $borderColor")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v(".feature")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("text-align")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" center")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token selector"}},[s._v("h2")]),s._v("\n "),e("span",{pre:!0,attrs:{class:"token property-declaration"}},[e("span",{pre:!0,attrs:{class:"token property"}},[s._v("font-size")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.4")]),e("span",{pre:!0,attrs:{class:"token unit"}},[s._v("rem")])]),s._v("\n")])]),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[s._v("1")]),e("br"),e("span",{staticClass:"line-number"},[s._v("2")]),e("br"),e("span",{staticClass:"line-number"},[s._v("3")]),e("br"),e("span",{staticClass:"line-number"},[s._v("4")]),e("br"),e("span",{staticClass:"line-number"},[s._v("5")]),e("br"),e("span",{staticClass:"line-number"},[s._v("6")]),e("br"),e("span",{staticClass:"line-number"},[s._v("7")]),e("br"),e("span",{staticClass:"line-number"},[s._v("8")]),e("br"),e("span",{staticClass:"line-number"},[s._v("9")]),e("br"),e("span",{staticClass:"line-number"},[s._v("10")]),e("br"),e("span",{staticClass:"line-number"},[s._v("11")]),e("br"),e("span",{staticClass:"line-number"},[s._v("12")]),e("br"),e("span",{staticClass:"line-number"},[s._v("13")]),e("br"),e("span",{staticClass:"line-number"},[s._v("14")]),e("br"),e("span",{staticClass:"line-number"},[s._v("15")]),e("br"),e("span",{staticClass:"line-number"},[s._v("16")]),e("br"),e("span",{staticClass:"line-number"},[s._v("17")]),e("br"),e("span",{staticClass:"line-number"},[s._v("18")]),e("br"),e("span",{staticClass:"line-number"},[s._v("19")]),e("br"),e("span",{staticClass:"line-number"},[s._v("20")]),e("br"),e("span",{staticClass:"line-number"},[s._v("21")]),e("br"),e("span",{staticClass:"line-number"},[s._v("22")]),e("br"),e("span",{staticClass:"line-number"},[s._v("23")]),e("br")])])])],1),s._v(" "),e("ul",[e("li",[e("code",{staticClass:"inline-code-block"},[s._v("margin-left: 2rem")]),s._v(" adds a margin of "),e("code",{staticClass:"inline-code-block"},[s._v("2rem")]),s._v(" to the left of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("margin-right: 2rem")]),s._v(" adds a margin of "),e("code",{staticClass:"inline-code-block"},[s._v("2rem")]),s._v(" to the right of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("border-top: 0.125rem solid $borderColor")]),s._v(" adds a border to the top of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag with a thickness of "),e("code",{staticClass:"inline-code-block"},[s._v("0.125rem")]),s._v(", with a style of "),e("code",{staticClass:"inline-code-block"},[s._v("solid")]),s._v(", and has a color of "),e("code",{staticClass:"inline-code-block"},[s._v("$borderColor")]),s._v(" which was defined in the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("border-bottom: 0.125rem solid $borderColor")]),s._v(" adds a border to the bottom of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag with a thickness of "),e("code",{staticClass:"inline-code-block"},[s._v("0.125rem")]),s._v(", with a style of "),e("code",{staticClass:"inline-code-block"},[s._v("solid")]),s._v(", and has a color of "),e("code",{staticClass:"inline-code-block"},[s._v("$borderColor")]),s._v(" which was defined in the "),e("code",{staticClass:"inline-code-block"},[s._v("palette.styl")]),s._v(" file.")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("text-align: center")]),s._v(" horizontally aligns the text in each "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[s._v("feature")]),s._v(" that are inside of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[s._v("features")]),s._v(".")]),s._v(" "),e("li",[e("code",{staticClass:"inline-code-block"},[s._v("font-size: 1.4rem")]),s._v(" sets a font size of "),e("code",{staticClass:"inline-code-block"},[s._v("1.4rem")]),s._v(" for the "),e("code",{staticClass:"inline-code-block"},[s._v("h2")]),s._v(" tags that are inside of the "),e("code",{staticClass:"inline-code-block"},[s._v("div")]),s._v(" tag with a class of "),e("code",{staticClass:"inline-code-block"},[s._v("feature")]),s._v(".")])]),s._v(" "),e("h2",{attrs:{id:"next-steps"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[s._v("#")]),s._v(" Next Steps")]),s._v(" "),e("p",[s._v("You may have noticed the main card on the homepage is being covered by the navbar. In the next tutorial we'll be fixing this issue as well as applying some hover effects to the logo and to the box shadow around the main card on the homepage.")])],1)}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/51.e8346319.js b/assets/js/51.e8346319.js new file mode 100644 index 00000000..8a274a0d --- /dev/null +++ b/assets/js/51.e8346319.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{562:function(t,e,n){"use strict";n.r(e);var s=n(18),l=Object(s.a)({},(function(){var t=this.$createElement;return(this._self._c||t)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/52.f6c5e3ae.js b/assets/js/52.f6c5e3ae.js new file mode 100644 index 00000000..07b58367 --- /dev/null +++ b/assets/js/52.f6c5e3ae.js @@ -0,0 +1,33 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{520:function(t,e,n){"undefined"!=typeof self&&self,t.exports=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=390)}([function(t,e,n){"use strict";n.r(e),n.d(e,"version",(function(){return r})),n.d(e,"bisect",(function(){return u})),n.d(e,"bisectRight",(function(){return s})),n.d(e,"bisectLeft",(function(){return c})),n.d(e,"ascending",(function(){return i})),n.d(e,"bisector",(function(){return a})),n.d(e,"cross",(function(){return f})),n.d(e,"descending",(function(){return d})),n.d(e,"deviation",(function(){return g})),n.d(e,"extent",(function(){return m})),n.d(e,"histogram",(function(){return N})),n.d(e,"thresholdFreedmanDiaconis",(function(){return D})),n.d(e,"thresholdScott",(function(){return L})),n.d(e,"thresholdSturges",(function(){return O})),n.d(e,"max",(function(){return I})),n.d(e,"mean",(function(){return R})),n.d(e,"median",(function(){return F})),n.d(e,"merge",(function(){return P})),n.d(e,"min",(function(){return j})),n.d(e,"pairs",(function(){return l})),n.d(e,"permute",(function(){return Y})),n.d(e,"quantile",(function(){return B})),n.d(e,"range",(function(){return w})),n.d(e,"scan",(function(){return z})),n.d(e,"shuffle",(function(){return U})),n.d(e,"sum",(function(){return $})),n.d(e,"ticks",(function(){return S})),n.d(e,"tickIncrement",(function(){return A})),n.d(e,"tickStep",(function(){return M})),n.d(e,"transpose",(function(){return q})),n.d(e,"variance",(function(){return y})),n.d(e,"zip",(function(){return V})),n.d(e,"axisTop",(function(){return et})),n.d(e,"axisRight",(function(){return nt})),n.d(e,"axisBottom",(function(){return rt})),n.d(e,"axisLeft",(function(){return it})),n.d(e,"brush",(function(){return Ti})),n.d(e,"brushX",(function(){return wi})),n.d(e,"brushY",(function(){return Ei})),n.d(e,"brushSelection",(function(){return ki})),n.d(e,"chord",(function(){return Li})),n.d(e,"ribbon",(function(){return Gi})),n.d(e,"nest",(function(){return Qi})),n.d(e,"set",(function(){return oa})),n.d(e,"map",(function(){return Ki})),n.d(e,"keys",(function(){return sa})),n.d(e,"values",(function(){return ca})),n.d(e,"entries",(function(){return ua})),n.d(e,"color",(function(){return qe})),n.d(e,"rgb",(function(){return Ge})),n.d(e,"hsl",(function(){return en})),n.d(e,"lab",(function(){return pa})),n.d(e,"hcl",(function(){return ka})),n.d(e,"lch",(function(){return _a})),n.d(e,"gray",(function(){return da})),n.d(e,"cubehelix",(function(){return Ma})),n.d(e,"contours",(function(){return ja})),n.d(e,"contourDensity",(function(){return Wa})),n.d(e,"dispatch",(function(){return ht})),n.d(e,"drag",(function(){return Qa})),n.d(e,"dragDisable",(function(){return Ce})),n.d(e,"dragEnable",(function(){return Se})),n.d(e,"dsvFormat",(function(){return io})),n.d(e,"csvParse",(function(){return oo})),n.d(e,"csvParseRows",(function(){return so})),n.d(e,"csvFormat",(function(){return co})),n.d(e,"csvFormatBody",(function(){return uo})),n.d(e,"csvFormatRows",(function(){return lo})),n.d(e,"csvFormatRow",(function(){return ho})),n.d(e,"csvFormatValue",(function(){return fo})),n.d(e,"tsvParse",(function(){return yo})),n.d(e,"tsvParseRows",(function(){return go})),n.d(e,"tsvFormat",(function(){return mo})),n.d(e,"tsvFormatBody",(function(){return vo})),n.d(e,"tsvFormatRows",(function(){return bo})),n.d(e,"tsvFormatRow",(function(){return xo})),n.d(e,"tsvFormatValue",(function(){return _o})),n.d(e,"autoType",(function(){return ko})),n.d(e,"easeLinear",(function(){return Eo})),n.d(e,"easeQuad",(function(){return So})),n.d(e,"easeQuadIn",(function(){return To})),n.d(e,"easeQuadOut",(function(){return Co})),n.d(e,"easeQuadInOut",(function(){return So})),n.d(e,"easeCubic",(function(){return Vr})),n.d(e,"easeCubicIn",(function(){return qr})),n.d(e,"easeCubicOut",(function(){return Wr})),n.d(e,"easeCubicInOut",(function(){return Vr})),n.d(e,"easePoly",(function(){return Oo})),n.d(e,"easePolyIn",(function(){return Ao})),n.d(e,"easePolyOut",(function(){return Mo})),n.d(e,"easePolyInOut",(function(){return Oo})),n.d(e,"easeSin",(function(){return Io})),n.d(e,"easeSinIn",(function(){return Do})),n.d(e,"easeSinOut",(function(){return Lo})),n.d(e,"easeSinInOut",(function(){return Io})),n.d(e,"easeExp",(function(){return jo})),n.d(e,"easeExpIn",(function(){return Fo})),n.d(e,"easeExpOut",(function(){return Po})),n.d(e,"easeExpInOut",(function(){return jo})),n.d(e,"easeCircle",(function(){return Uo})),n.d(e,"easeCircleIn",(function(){return Yo})),n.d(e,"easeCircleOut",(function(){return zo})),n.d(e,"easeCircleInOut",(function(){return Uo})),n.d(e,"easeBounce",(function(){return qo})),n.d(e,"easeBounceIn",(function(){return $o})),n.d(e,"easeBounceOut",(function(){return qo})),n.d(e,"easeBounceInOut",(function(){return Wo})),n.d(e,"easeBack",(function(){return Go})),n.d(e,"easeBackIn",(function(){return Vo})),n.d(e,"easeBackOut",(function(){return Ho})),n.d(e,"easeBackInOut",(function(){return Go})),n.d(e,"easeElastic",(function(){return Ko})),n.d(e,"easeElasticIn",(function(){return Zo})),n.d(e,"easeElasticOut",(function(){return Ko})),n.d(e,"easeElasticInOut",(function(){return Qo})),n.d(e,"blob",(function(){return ts})),n.d(e,"buffer",(function(){return ns})),n.d(e,"dsv",(function(){return os})),n.d(e,"csv",(function(){return ss})),n.d(e,"tsv",(function(){return cs})),n.d(e,"image",(function(){return us})),n.d(e,"json",(function(){return hs})),n.d(e,"text",(function(){return is})),n.d(e,"xml",(function(){return ds})),n.d(e,"html",(function(){return ps})),n.d(e,"svg",(function(){return ys})),n.d(e,"forceCenter",(function(){return gs})),n.d(e,"forceCollide",(function(){return Ms})),n.d(e,"forceLink",(function(){return Bs})),n.d(e,"forceManyBody",(function(){return Fs})),n.d(e,"forceRadial",(function(){return Ps})),n.d(e,"forceSimulation",(function(){return Rs})),n.d(e,"forceX",(function(){return js})),n.d(e,"forceY",(function(){return Ys})),n.d(e,"formatDefaultLocale",(function(){return nc})),n.d(e,"format",(function(){return Gs})),n.d(e,"formatPrefix",(function(){return Xs})),n.d(e,"formatLocale",(function(){return ec})),n.d(e,"formatSpecifier",(function(){return qs})),n.d(e,"FormatSpecifier",(function(){return Ws})),n.d(e,"precisionFixed",(function(){return rc})),n.d(e,"precisionPrefix",(function(){return ic})),n.d(e,"precisionRound",(function(){return ac})),n.d(e,"geoArea",(function(){return Zc})),n.d(e,"geoBounds",(function(){return Uu})),n.d(e,"geoCentroid",(function(){return tl})),n.d(e,"geoCircle",(function(){return hl})),n.d(e,"geoClipAntimeridian",(function(){return wl})),n.d(e,"geoClipCircle",(function(){return El})),n.d(e,"geoClipExtent",(function(){return Ml})),n.d(e,"geoClipRectangle",(function(){return Tl})),n.d(e,"geoContains",(function(){return Hl})),n.d(e,"geoDistance",(function(){return Pl})),n.d(e,"geoGraticule",(function(){return Zl})),n.d(e,"geoGraticule10",(function(){return Kl})),n.d(e,"geoInterpolate",(function(){return nh})),n.d(e,"geoLength",(function(){return Il})),n.d(e,"geoPath",(function(){return tf})),n.d(e,"geoAlbers",(function(){return xf})),n.d(e,"geoAlbersUsa",(function(){return _f})),n.d(e,"geoAzimuthalEqualArea",(function(){return Tf})),n.d(e,"geoAzimuthalEqualAreaRaw",(function(){return Ef})),n.d(e,"geoAzimuthalEquidistant",(function(){return Sf})),n.d(e,"geoAzimuthalEquidistantRaw",(function(){return Cf})),n.d(e,"geoConicConformal",(function(){return Df})),n.d(e,"geoConicConformalRaw",(function(){return Bf})),n.d(e,"geoConicEqualArea",(function(){return bf})),n.d(e,"geoConicEqualAreaRaw",(function(){return vf})),n.d(e,"geoConicEquidistant",(function(){return Ff})),n.d(e,"geoConicEquidistantRaw",(function(){return Rf})),n.d(e,"geoEqualEarth",(function(){return qf})),n.d(e,"geoEqualEarthRaw",(function(){return $f})),n.d(e,"geoEquirectangular",(function(){return If})),n.d(e,"geoEquirectangularRaw",(function(){return Lf})),n.d(e,"geoGnomonic",(function(){return Vf})),n.d(e,"geoGnomonicRaw",(function(){return Wf})),n.d(e,"geoIdentity",(function(){return Hf})),n.d(e,"geoProjection",(function(){return yf})),n.d(e,"geoProjectionMutator",(function(){return gf})),n.d(e,"geoMercator",(function(){return Mf})),n.d(e,"geoMercatorRaw",(function(){return Af})),n.d(e,"geoNaturalEarth1",(function(){return Xf})),n.d(e,"geoNaturalEarth1Raw",(function(){return Gf})),n.d(e,"geoOrthographic",(function(){return Kf})),n.d(e,"geoOrthographicRaw",(function(){return Zf})),n.d(e,"geoStereographic",(function(){return Jf})),n.d(e,"geoStereographicRaw",(function(){return Qf})),n.d(e,"geoTransverseMercator",(function(){return ed})),n.d(e,"geoTransverseMercatorRaw",(function(){return td})),n.d(e,"geoRotation",(function(){return cl})),n.d(e,"geoStream",(function(){return Uc})),n.d(e,"geoTransform",(function(){return ef})),n.d(e,"cluster",(function(){return ad})),n.d(e,"hierarchy",(function(){return sd})),n.d(e,"pack",(function(){return Bd})),n.d(e,"packSiblings",(function(){return Cd})),n.d(e,"packEnclose",(function(){return dd})),n.d(e,"partition",(function(){return Pd})),n.d(e,"stratify",(function(){return $d})),n.d(e,"tree",(function(){return Zd})),n.d(e,"treemap",(function(){return ep})),n.d(e,"treemapBinary",(function(){return np})),n.d(e,"treemapDice",(function(){return Fd})),n.d(e,"treemapSlice",(function(){return Kd})),n.d(e,"treemapSliceDice",(function(){return rp})),n.d(e,"treemapSquarify",(function(){return tp})),n.d(e,"treemapResquarify",(function(){return ip})),n.d(e,"interpolate",(function(){return An})),n.d(e,"interpolateArray",(function(){return vn})),n.d(e,"interpolateBasis",(function(){return on})),n.d(e,"interpolateBasisClosed",(function(){return sn})),n.d(e,"interpolateDate",(function(){return kn})),n.d(e,"interpolateDiscrete",(function(){return ap})),n.d(e,"interpolateHue",(function(){return op})),n.d(e,"interpolateNumber",(function(){return wn})),n.d(e,"interpolateNumberArray",(function(){return gn})),n.d(e,"interpolateObject",(function(){return En})),n.d(e,"interpolateRound",(function(){return sp})),n.d(e,"interpolateString",(function(){return Sn})),n.d(e,"interpolateTransformCss",(function(){return hr})),n.d(e,"interpolateTransformSvg",(function(){return fr})),n.d(e,"interpolateZoom",(function(){return lp})),n.d(e,"interpolateRgb",(function(){return fn})),n.d(e,"interpolateRgbBasis",(function(){return pn})),n.d(e,"interpolateRgbBasisClosed",(function(){return yn})),n.d(e,"interpolateHsl",(function(){return fp})),n.d(e,"interpolateHslLong",(function(){return dp})),n.d(e,"interpolateLab",(function(){return pp})),n.d(e,"interpolateHcl",(function(){return gp})),n.d(e,"interpolateHclLong",(function(){return mp})),n.d(e,"interpolateCubehelix",(function(){return bp})),n.d(e,"interpolateCubehelixLong",(function(){return xp})),n.d(e,"piecewise",(function(){return _p})),n.d(e,"quantize",(function(){return kp})),n.d(e,"path",(function(){return Ui})),n.d(e,"polygonArea",(function(){return wp})),n.d(e,"polygonCentroid",(function(){return Ep})),n.d(e,"polygonHull",(function(){return Sp})),n.d(e,"polygonContains",(function(){return Ap})),n.d(e,"polygonLength",(function(){return Mp})),n.d(e,"quadtree",(function(){return ws})),n.d(e,"randomUniform",(function(){return Np})),n.d(e,"randomNormal",(function(){return Bp})),n.d(e,"randomLogNormal",(function(){return Dp})),n.d(e,"randomBates",(function(){return Ip})),n.d(e,"randomIrwinHall",(function(){return Lp})),n.d(e,"randomExponential",(function(){return Rp})),n.d(e,"scaleBand",(function(){return qp})),n.d(e,"scalePoint",(function(){return Vp})),n.d(e,"scaleIdentity",(function(){return oy})),n.d(e,"scaleLinear",(function(){return ay})),n.d(e,"scaleLog",(function(){return yy})),n.d(e,"scaleSymlog",(function(){return by})),n.d(e,"scaleOrdinal",(function(){return $p})),n.d(e,"scaleImplicit",(function(){return Up})),n.d(e,"scalePow",(function(){return Ey})),n.d(e,"scaleSqrt",(function(){return Ty})),n.d(e,"scaleQuantile",(function(){return Cy})),n.d(e,"scaleQuantize",(function(){return Sy})),n.d(e,"scaleThreshold",(function(){return Ay})),n.d(e,"scaleTime",(function(){return hv})),n.d(e,"scaleUtc",(function(){return _v})),n.d(e,"scaleSequential",(function(){return Ev})),n.d(e,"scaleSequentialLog",(function(){return Tv})),n.d(e,"scaleSequentialPow",(function(){return Sv})),n.d(e,"scaleSequentialSqrt",(function(){return Av})),n.d(e,"scaleSequentialSymlog",(function(){return Cv})),n.d(e,"scaleSequentialQuantile",(function(){return Mv})),n.d(e,"scaleDiverging",(function(){return Nv})),n.d(e,"scaleDivergingLog",(function(){return Bv})),n.d(e,"scaleDivergingPow",(function(){return Lv})),n.d(e,"scaleDivergingSqrt",(function(){return Iv})),n.d(e,"scaleDivergingSymlog",(function(){return Dv})),n.d(e,"tickFormat",(function(){return ry})),n.d(e,"schemeCategory10",(function(){return Fv})),n.d(e,"schemeAccent",(function(){return Pv})),n.d(e,"schemeDark2",(function(){return jv})),n.d(e,"schemePaired",(function(){return Yv})),n.d(e,"schemePastel1",(function(){return zv})),n.d(e,"schemePastel2",(function(){return Uv})),n.d(e,"schemeSet1",(function(){return $v})),n.d(e,"schemeSet2",(function(){return qv})),n.d(e,"schemeSet3",(function(){return Wv})),n.d(e,"schemeTableau10",(function(){return Vv})),n.d(e,"interpolateBrBG",(function(){return Xv})),n.d(e,"schemeBrBG",(function(){return Gv})),n.d(e,"interpolatePRGn",(function(){return Kv})),n.d(e,"schemePRGn",(function(){return Zv})),n.d(e,"interpolatePiYG",(function(){return Jv})),n.d(e,"schemePiYG",(function(){return Qv})),n.d(e,"interpolatePuOr",(function(){return eb})),n.d(e,"schemePuOr",(function(){return tb})),n.d(e,"interpolateRdBu",(function(){return rb})),n.d(e,"schemeRdBu",(function(){return nb})),n.d(e,"interpolateRdGy",(function(){return ab})),n.d(e,"schemeRdGy",(function(){return ib})),n.d(e,"interpolateRdYlBu",(function(){return sb})),n.d(e,"schemeRdYlBu",(function(){return ob})),n.d(e,"interpolateRdYlGn",(function(){return ub})),n.d(e,"schemeRdYlGn",(function(){return cb})),n.d(e,"interpolateSpectral",(function(){return hb})),n.d(e,"schemeSpectral",(function(){return lb})),n.d(e,"interpolateBuGn",(function(){return db})),n.d(e,"schemeBuGn",(function(){return fb})),n.d(e,"interpolateBuPu",(function(){return yb})),n.d(e,"schemeBuPu",(function(){return pb})),n.d(e,"interpolateGnBu",(function(){return mb})),n.d(e,"schemeGnBu",(function(){return gb})),n.d(e,"interpolateOrRd",(function(){return bb})),n.d(e,"schemeOrRd",(function(){return vb})),n.d(e,"interpolatePuBuGn",(function(){return _b})),n.d(e,"schemePuBuGn",(function(){return xb})),n.d(e,"interpolatePuBu",(function(){return wb})),n.d(e,"schemePuBu",(function(){return kb})),n.d(e,"interpolatePuRd",(function(){return Tb})),n.d(e,"schemePuRd",(function(){return Eb})),n.d(e,"interpolateRdPu",(function(){return Sb})),n.d(e,"schemeRdPu",(function(){return Cb})),n.d(e,"interpolateYlGnBu",(function(){return Mb})),n.d(e,"schemeYlGnBu",(function(){return Ab})),n.d(e,"interpolateYlGn",(function(){return Nb})),n.d(e,"schemeYlGn",(function(){return Ob})),n.d(e,"interpolateYlOrBr",(function(){return Db})),n.d(e,"schemeYlOrBr",(function(){return Bb})),n.d(e,"interpolateYlOrRd",(function(){return Ib})),n.d(e,"schemeYlOrRd",(function(){return Lb})),n.d(e,"interpolateBlues",(function(){return Fb})),n.d(e,"schemeBlues",(function(){return Rb})),n.d(e,"interpolateGreens",(function(){return jb})),n.d(e,"schemeGreens",(function(){return Pb})),n.d(e,"interpolateGreys",(function(){return zb})),n.d(e,"schemeGreys",(function(){return Yb})),n.d(e,"interpolatePurples",(function(){return $b})),n.d(e,"schemePurples",(function(){return Ub})),n.d(e,"interpolateReds",(function(){return Wb})),n.d(e,"schemeReds",(function(){return qb})),n.d(e,"interpolateOranges",(function(){return Hb})),n.d(e,"schemeOranges",(function(){return Vb})),n.d(e,"interpolateCividis",(function(){return Gb})),n.d(e,"interpolateCubehelixDefault",(function(){return Xb})),n.d(e,"interpolateRainbow",(function(){return Jb})),n.d(e,"interpolateWarm",(function(){return Zb})),n.d(e,"interpolateCool",(function(){return Kb})),n.d(e,"interpolateSinebow",(function(){return rx})),n.d(e,"interpolateTurbo",(function(){return ix})),n.d(e,"interpolateViridis",(function(){return ox})),n.d(e,"interpolateMagma",(function(){return sx})),n.d(e,"interpolateInferno",(function(){return cx})),n.d(e,"interpolatePlasma",(function(){return ux})),n.d(e,"create",(function(){return lx})),n.d(e,"creator",(function(){return re})),n.d(e,"local",(function(){return fx})),n.d(e,"matcher",(function(){return gt})),n.d(e,"mouse",(function(){return Bn})),n.d(e,"namespace",(function(){return Et})),n.d(e,"namespaces",(function(){return wt})),n.d(e,"clientPoint",(function(){return On})),n.d(e,"select",(function(){return we})),n.d(e,"selectAll",(function(){return px})),n.d(e,"selection",(function(){return ke})),n.d(e,"selector",(function(){return dt})),n.d(e,"selectorAll",(function(){return yt})),n.d(e,"style",(function(){return It})),n.d(e,"touch",(function(){return Nn})),n.d(e,"touches",(function(){return yx})),n.d(e,"window",(function(){return Nt})),n.d(e,"event",(function(){return ue})),n.d(e,"customEvent",(function(){return ye})),n.d(e,"arc",(function(){return Rx})),n.d(e,"area",(function(){return Ux})),n.d(e,"line",(function(){return zx})),n.d(e,"pie",(function(){return Wx})),n.d(e,"areaRadial",(function(){return Kx})),n.d(e,"radialArea",(function(){return Kx})),n.d(e,"lineRadial",(function(){return Zx})),n.d(e,"radialLine",(function(){return Zx})),n.d(e,"pointRadial",(function(){return Qx})),n.d(e,"linkHorizontal",(function(){return o_})),n.d(e,"linkVertical",(function(){return s_})),n.d(e,"linkRadial",(function(){return c_})),n.d(e,"symbol",(function(){return C_})),n.d(e,"symbols",(function(){return T_})),n.d(e,"symbolCircle",(function(){return u_})),n.d(e,"symbolCross",(function(){return l_})),n.d(e,"symbolDiamond",(function(){return d_})),n.d(e,"symbolSquare",(function(){return v_})),n.d(e,"symbolStar",(function(){return m_})),n.d(e,"symbolTriangle",(function(){return x_})),n.d(e,"symbolWye",(function(){return E_})),n.d(e,"curveBasisClosed",(function(){return B_})),n.d(e,"curveBasisOpen",(function(){return L_})),n.d(e,"curveBasis",(function(){return O_})),n.d(e,"curveBundle",(function(){return R_})),n.d(e,"curveCardinalClosed",(function(){return z_})),n.d(e,"curveCardinalOpen",(function(){return $_})),n.d(e,"curveCardinal",(function(){return j_})),n.d(e,"curveCatmullRomClosed",(function(){return G_})),n.d(e,"curveCatmullRomOpen",(function(){return Z_})),n.d(e,"curveCatmullRom",(function(){return V_})),n.d(e,"curveLinearClosed",(function(){return Q_})),n.d(e,"curveLinear",(function(){return Px})),n.d(e,"curveMonotoneX",(function(){return ok})),n.d(e,"curveMonotoneY",(function(){return sk})),n.d(e,"curveNatural",(function(){return lk})),n.d(e,"curveStep",(function(){return fk})),n.d(e,"curveStepAfter",(function(){return pk})),n.d(e,"curveStepBefore",(function(){return dk})),n.d(e,"stack",(function(){return vk})),n.d(e,"stackOffsetExpand",(function(){return bk})),n.d(e,"stackOffsetDiverging",(function(){return xk})),n.d(e,"stackOffsetNone",(function(){return yk})),n.d(e,"stackOffsetSilhouette",(function(){return _k})),n.d(e,"stackOffsetWiggle",(function(){return kk})),n.d(e,"stackOrderAppearance",(function(){return wk})),n.d(e,"stackOrderAscending",(function(){return Tk})),n.d(e,"stackOrderDescending",(function(){return Sk})),n.d(e,"stackOrderInsideOut",(function(){return Ak})),n.d(e,"stackOrderNone",(function(){return gk})),n.d(e,"stackOrderReverse",(function(){return Mk})),n.d(e,"timeInterval",(function(){return Ny})),n.d(e,"timeMillisecond",(function(){return fg})),n.d(e,"timeMilliseconds",(function(){return dg})),n.d(e,"utcMillisecond",(function(){return fg})),n.d(e,"utcMilliseconds",(function(){return dg})),n.d(e,"timeSecond",(function(){return ug})),n.d(e,"timeSeconds",(function(){return lg})),n.d(e,"utcSecond",(function(){return ug})),n.d(e,"utcSeconds",(function(){return lg})),n.d(e,"timeMinute",(function(){return og})),n.d(e,"timeMinutes",(function(){return sg})),n.d(e,"timeHour",(function(){return rg})),n.d(e,"timeHours",(function(){return ig})),n.d(e,"timeDay",(function(){return tg})),n.d(e,"timeDays",(function(){return eg})),n.d(e,"timeWeek",(function(){return jy})),n.d(e,"timeWeeks",(function(){return Vy})),n.d(e,"timeSunday",(function(){return jy})),n.d(e,"timeSundays",(function(){return Vy})),n.d(e,"timeMonday",(function(){return Yy})),n.d(e,"timeMondays",(function(){return Hy})),n.d(e,"timeTuesday",(function(){return zy})),n.d(e,"timeTuesdays",(function(){return Gy})),n.d(e,"timeWednesday",(function(){return Uy})),n.d(e,"timeWednesdays",(function(){return Xy})),n.d(e,"timeThursday",(function(){return $y})),n.d(e,"timeThursdays",(function(){return Zy})),n.d(e,"timeFriday",(function(){return qy})),n.d(e,"timeFridays",(function(){return Ky})),n.d(e,"timeSaturday",(function(){return Wy})),n.d(e,"timeSaturdays",(function(){return Qy})),n.d(e,"timeMonth",(function(){return Ry})),n.d(e,"timeMonths",(function(){return Fy})),n.d(e,"timeYear",(function(){return Dy})),n.d(e,"timeYears",(function(){return Ly})),n.d(e,"utcMinute",(function(){return bv})),n.d(e,"utcMinutes",(function(){return xv})),n.d(e,"utcHour",(function(){return gv})),n.d(e,"utcHours",(function(){return mv})),n.d(e,"utcDay",(function(){return Og})),n.d(e,"utcDays",(function(){return Ng})),n.d(e,"utcWeek",(function(){return yg})),n.d(e,"utcWeeks",(function(){return kg})),n.d(e,"utcSunday",(function(){return yg})),n.d(e,"utcSundays",(function(){return kg})),n.d(e,"utcMonday",(function(){return gg})),n.d(e,"utcMondays",(function(){return wg})),n.d(e,"utcTuesday",(function(){return mg})),n.d(e,"utcTuesdays",(function(){return Eg})),n.d(e,"utcWednesday",(function(){return vg})),n.d(e,"utcWednesdays",(function(){return Tg})),n.d(e,"utcThursday",(function(){return bg})),n.d(e,"utcThursdays",(function(){return Cg})),n.d(e,"utcFriday",(function(){return xg})),n.d(e,"utcFridays",(function(){return Sg})),n.d(e,"utcSaturday",(function(){return _g})),n.d(e,"utcSaturdays",(function(){return Ag})),n.d(e,"utcMonth",(function(){return dv})),n.d(e,"utcMonths",(function(){return pv})),n.d(e,"utcYear",(function(){return Dg})),n.d(e,"utcYears",(function(){return Lg})),n.d(e,"timeFormatDefaultLocale",(function(){return sv})),n.d(e,"timeFormat",(function(){return Yg})),n.d(e,"timeParse",(function(){return zg})),n.d(e,"utcFormat",(function(){return Ug})),n.d(e,"utcParse",(function(){return $g})),n.d(e,"timeFormatLocale",(function(){return Pg})),n.d(e,"isoFormat",(function(){return Ok})),n.d(e,"isoParse",(function(){return Nk})),n.d(e,"now",(function(){return zn})),n.d(e,"timer",(function(){return qn})),n.d(e,"timerFlush",(function(){return Wn})),n.d(e,"timeout",(function(){return Xn})),n.d(e,"interval",(function(){return Bk})),n.d(e,"transition",(function(){return zr})),n.d(e,"active",(function(){return Zr})),n.d(e,"interrupt",(function(){return or})),n.d(e,"voronoi",(function(){return mw})),n.d(e,"zoom",(function(){return Nw})),n.d(e,"zoomTransform",(function(){return kw})),n.d(e,"zoomIdentity",(function(){return _w}));var r="5.16.0",i=function(t,e){return t<e?-1:t>e?1:t>=e?0:NaN},a=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return i(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}}},o=a(i),s=o.right,c=o.left,u=s,l=function(t,e){null==e&&(e=h);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);n<r;)a[n]=e(i,i=t[++n]);return a};function h(t,e){return[t,e]}var f=function(t,e,n){var r,i,a,o,s=t.length,c=e.length,u=new Array(s*c);for(null==n&&(n=h),r=a=0;r<s;++r)for(o=t[r],i=0;i<c;++i,++a)u[a]=n(o,e[i]);return u},d=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},p=function(t){return null===t?NaN:+t},y=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o<i;)isNaN(n=p(t[o]))||(c+=(r=n-s)*(n-(s+=r/++a)));else for(;++o<i;)isNaN(n=p(e(t[o],o,t)))||(c+=(r=n-s)*(n-(s+=r/++a)));if(a>1)return c/(a-1)},g=function(t,e){var n=y(t,e);return n?Math.sqrt(n):n},m=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o<a;)if(null!=(n=t[o])&&n>=n)for(r=i=n;++o<a;)null!=(n=t[o])&&(r>n&&(r=n),i<n&&(i=n))}else for(;++o<a;)if(null!=(n=e(t[o],o,t))&&n>=n)for(r=i=n;++o<a;)null!=(n=e(t[o],o,t))&&(r>n&&(r=n),i<n&&(i=n));return[r,i]},v=Array.prototype,b=v.slice,x=v.map,_=function(t){return function(){return t}},k=function(t){return t},w=function(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a},E=Math.sqrt(50),T=Math.sqrt(10),C=Math.sqrt(2),S=function(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(i=t,t=e,e=i),0===(o=A(t,e,n))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s<i;)a[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),a=new Array(i=Math.ceil(t-e+1));++s<i;)a[s]=(t-s)/o;return r&&a.reverse(),a};function A(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=E?10:a>=T?5:a>=C?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=E?10:a>=T?5:a>=C?2:1)}function M(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=E?i*=10:a>=T?i*=5:a>=C&&(i*=2),e<t?-i:i}var O=function(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1},N=function(){var t=k,e=m,n=O;function r(r){var i,a,o=r.length,s=new Array(o);for(i=0;i<o;++i)s[i]=t(r[i],i,r);var c=e(s),l=c[0],h=c[1],f=n(s,l,h);Array.isArray(f)||(f=M(l,h,f),f=w(Math.ceil(l/f)*f,h,f));for(var d=f.length;f[0]<=l;)f.shift(),--d;for(;f[d-1]>h;)f.pop(),--d;var p,y=new Array(d+1);for(i=0;i<=d;++i)(p=y[i]=[]).x0=i>0?f[i-1]:l,p.x1=i<d?f[i]:h;for(i=0;i<o;++i)l<=(a=s[i])&&a<=h&&y[u(f,a,0,d)].push(r[i]);return y}return r.value=function(e){return arguments.length?(t="function"==typeof e?e:_(e),r):t},r.domain=function(t){return arguments.length?(e="function"==typeof t?t:_([t[0],t[1]]),r):e},r.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?_(b.call(t)):_(t),r):n},r},B=function(t,e,n){if(null==n&&(n=p),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},D=function(t,e,n){return t=x.call(t,p).sort(i),Math.ceil((n-e)/(2*(B(t,.75)-B(t,.25))*Math.pow(t.length,-1/3)))},L=function(t,e,n){return Math.ceil((n-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},I=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&n>r&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&n>r&&(r=n);return r},R=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a<r;)isNaN(n=p(t[a]))?--i:o+=n;else for(;++a<r;)isNaN(n=p(e(t[a],a,t)))?--i:o+=n;if(i)return o/i},F=function(t,e){var n,r=t.length,a=-1,o=[];if(null==e)for(;++a<r;)isNaN(n=p(t[a]))||o.push(n);else for(;++a<r;)isNaN(n=p(e(t[a],a,t)))||o.push(n);return B(o.sort(i),.5)},P=function(t){for(var e,n,r,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(n=new Array(o);--i>=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&r>n&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&r>n&&(r=n);return r},Y=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},z=function(t,e){if(n=t.length){var n,r,a=0,o=0,s=t[o];for(null==e&&(e=i);++a<n;)(e(r=t[a],s)<0||0!==e(s,s))&&(s=r,o=a);return 0===e(s,s)?o:void 0}},U=function(t,e,n){for(var r,i,a=(null==n?t.length:n)-(e=null==e?0:+e);a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},$=function(t,e){var n,r=t.length,i=-1,a=0;if(null==e)for(;++i<r;)(n=+t[i])&&(a+=n);else for(;++i<r;)(n=+e(t[i],i,t))&&(a+=n);return a},q=function(t){if(!(i=t.length))return[];for(var e=-1,n=j(t,W),r=new Array(n);++e<n;)for(var i,a=-1,o=r[e]=new Array(i);++a<i;)o[a]=t[a][e];return r};function W(t){return t.length}var V=function(){return q(arguments)},H=Array.prototype.slice,G=function(t){return t};function X(t){return"translate("+(t+.5)+",0)"}function Z(t){return"translate(0,"+(t+.5)+")"}function K(t){return function(e){return+t(e)}}function Q(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}function J(){return!this.__axis}function tt(t,e){var n=[],r=null,i=null,a=6,o=6,s=3,c=1===t||4===t?-1:1,u=4===t||2===t?"x":"y",l=1===t||3===t?X:Z;function h(h){var f=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,d=null==i?e.tickFormat?e.tickFormat.apply(e,n):G:i,p=Math.max(a,0)+s,y=e.range(),g=+y[0]+.5,m=+y[y.length-1]+.5,v=(e.bandwidth?Q:K)(e.copy()),b=h.selection?h.selection():h,x=b.selectAll(".domain").data([null]),_=b.selectAll(".tick").data(f,e).order(),k=_.exit(),w=_.enter().append("g").attr("class","tick"),E=_.select("line"),T=_.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),_=_.merge(w),E=E.merge(w.append("line").attr("stroke","currentColor").attr(u+"2",c*a)),T=T.merge(w.append("text").attr("fill","currentColor").attr(u,c*p).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),h!==b&&(x=x.transition(h),_=_.transition(h),E=E.transition(h),T=T.transition(h),k=k.transition(h).attr("opacity",1e-6).attr("transform",(function(t){return isFinite(t=v(t))?l(t):this.getAttribute("transform")})),w.attr("opacity",1e-6).attr("transform",(function(t){var e=this.parentNode.__axis;return l(e&&isFinite(e=e(t))?e:v(t))}))),k.remove(),x.attr("d",4===t||2==t?o?"M"+c*o+","+g+"H0.5V"+m+"H"+c*o:"M0.5,"+g+"V"+m:o?"M"+g+","+c*o+"V0.5H"+m+"V"+c*o:"M"+g+",0.5H"+m),_.attr("opacity",1).attr("transform",(function(t){return l(v(t))})),E.attr(u+"2",c*a),T.attr(u,c*p).text(d),b.filter(J).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),b.each((function(){this.__axis=v}))}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=H.call(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:H.call(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:H.call(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(a=o=+t,h):a},h.tickSizeInner=function(t){return arguments.length?(a=+t,h):a},h.tickSizeOuter=function(t){return arguments.length?(o=+t,h):o},h.tickPadding=function(t){return arguments.length?(s=+t,h):s},h}function et(t){return tt(1,t)}function nt(t){return tt(2,t)}function rt(t){return tt(3,t)}function it(t){return tt(4,t)}var at={value:function(){}};function ot(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new st(r)}function st(t){this._=t}function ct(t,e){return t.trim().split(/^|\s+/).map((function(t){var n="",r=t.indexOf(".");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ut(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function lt(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=at,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}st.prototype=ot.prototype={constructor:st,on:function(t,e){var n,r=this._,i=ct(t+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<o;)if(n=(t=i[a]).type)r[n]=lt(r[n],t.name,e);else if(null==e)for(n in r)r[n]=lt(r[n],t.name,null);return this}for(;++a<o;)if((n=(t=i[a]).type)&&(n=ut(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new st(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};var ht=ot;function ft(){}var dt=function(t){return null==t?ft:function(){return this.querySelector(t)}};function pt(){return[]}var yt=function(t){return null==t?pt:function(){return this.querySelectorAll(t)}},gt=function(t){return function(){return this.matches(t)}},mt=function(t){return new Array(t.length)};function vt(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function bt(t,e,n,r,i,a){for(var o,s=0,c=e.length,u=a.length;s<u;++s)(o=e[s])?(o.__data__=a[s],r[s]=o):n[s]=new vt(t,a[s]);for(;s<c;++s)(o=e[s])&&(i[s]=o)}function xt(t,e,n,r,i,a,o){var s,c,u,l={},h=e.length,f=a.length,d=new Array(h);for(s=0;s<h;++s)(c=e[s])&&(d[s]=u="$"+o.call(c,c.__data__,s,e),u in l?i[s]=c:l[u]=c);for(s=0;s<f;++s)(c=l[u="$"+o.call(t,a[s],s,a)])?(r[s]=c,c.__data__=a[s],l[u]=null):n[s]=new vt(t,a[s]);for(s=0;s<h;++s)(c=e[s])&&l[d[s]]===c&&(i[s]=c)}function _t(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}vt.prototype={constructor:vt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var kt="http://www.w3.org/1999/xhtml",wt={svg:"http://www.w3.org/2000/svg",xhtml:kt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},Et=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),wt.hasOwnProperty(e)?{space:wt[e],local:t}:t};function Tt(t){return function(){this.removeAttribute(t)}}function Ct(t){return function(){this.removeAttributeNS(t.space,t.local)}}function St(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Ot(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Nt=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Bt(t){return function(){this.style.removeProperty(t)}}function Dt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Lt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function It(t,e){return t.style.getPropertyValue(e)||Nt(t).getComputedStyle(t,null).getPropertyValue(e)}function Rt(t){return function(){delete this[t]}}function Ft(t,e){return function(){this[t]=e}}function Pt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Yt(t){return t.classList||new zt(t)}function zt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function Ut(t,e){for(var n=Yt(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function $t(t,e){for(var n=Yt(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function qt(t){return function(){Ut(this,t)}}function Wt(t){return function(){$t(this,t)}}function Vt(t,e){return function(){(e.apply(this,arguments)?Ut:$t)(this,t)}}function Ht(){this.textContent=""}function Gt(t){return function(){this.textContent=t}}function Xt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Zt(){this.innerHTML=""}function Kt(t){return function(){this.innerHTML=t}}function Qt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Jt(){this.nextSibling&&this.parentNode.appendChild(this)}function te(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ee(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===kt&&e.documentElement.namespaceURI===kt?e.createElement(t):e.createElementNS(n,t)}}function ne(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}zt.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var re=function(t){var e=Et(t);return(e.local?ne:ee)(e)};function ie(){return null}function ae(){var t=this.parentNode;t&&t.removeChild(this)}function oe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function se(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var ce={},ue=null;function le(t,e,n){return t=he(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function he(t,e,n){return function(r){var i=ue;ue=r;try{t.call(this,this.__data__,e,n)}finally{ue=i}}}function fe(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function de(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.capture);++i?e.length=i:delete this.__on}}}function pe(t,e,n){var r=ce.hasOwnProperty(t.type)?le:he;return function(i,a,o){var s,c=this.__on,u=r(e,a,o);if(c)for(var l=0,h=c.length;l<h;++l)if((s=c[l]).type===t.type&&s.name===t.name)return this.removeEventListener(s.type,s.listener,s.capture),this.addEventListener(s.type,s.listener=u,s.capture=n),void(s.value=e);this.addEventListener(t.type,u,n),s={type:t.type,name:t.name,value:e,listener:u,capture:n},c?c.push(s):this.__on=[s]}}function ye(t,e,n,r){var i=ue;t.sourceEvent=ue,ue=t;try{return e.apply(n,r)}finally{ue=i}}function ge(t,e,n){var r=Nt(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function me(t,e){return function(){return ge(this,t,e)}}function ve(t,e){return function(){return ge(this,t,e.apply(this,arguments))}}"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(ce={mouseenter:"mouseover",mouseleave:"mouseout"}));var be=[null];function xe(t,e){this._groups=t,this._parents=e}function _e(){return new xe([[document.documentElement]],be)}xe.prototype=_e.prototype={constructor:xe,select:function(t){"function"!=typeof t&&(t=dt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o,s=e[i],c=s.length,u=r[i]=new Array(c),l=0;l<c;++l)(a=s[l])&&(o=t.call(a,a.__data__,l,s))&&("__data__"in a&&(o.__data__=a.__data__),u[l]=o);return new xe(r,this._parents)},selectAll:function(t){"function"!=typeof t&&(t=yt(t));for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var o,s=e[a],c=s.length,u=0;u<c;++u)(o=s[u])&&(r.push(t.call(o,o.__data__,u,s)),i.push(o));return new xe(r,i)},filter:function(t){"function"!=typeof t&&(t=gt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,c=r[i]=[],u=0;u<s;++u)(a=o[u])&&t.call(a,a.__data__,u,o)&&c.push(a);return new xe(r,this._parents)},data:function(t,e){if(!t)return p=new Array(this.size()),l=-1,this.each((function(t){p[++l]=t})),p;var n,r=e?xt:bt,i=this._parents,a=this._groups;"function"!=typeof t&&(n=t,t=function(){return n});for(var o=a.length,s=new Array(o),c=new Array(o),u=new Array(o),l=0;l<o;++l){var h=i[l],f=a[l],d=f.length,p=t.call(h,h&&h.__data__,l,i),y=p.length,g=c[l]=new Array(y),m=s[l]=new Array(y);r(h,f,g,m,u[l]=new Array(d),p,e);for(var v,b,x=0,_=0;x<y;++x)if(v=g[x]){for(x>=_&&(_=x+1);!(b=m[_])&&++_<y;);v._next=b||null}}return(s=new xe(s,i))._enter=c,s._exit=u,s},enter:function(){return new xe(this._enter||this._groups.map(mt),this._parents)},exit:function(){return new xe(this._exit||this._groups.map(mt),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return r="function"==typeof t?t(r):r.append(t+""),null!=e&&(i=e(i)),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s<a;++s)for(var c,u=e[s],l=n[s],h=u.length,f=o[s]=new Array(h),d=0;d<h;++d)(c=u[d]||l[d])&&(f[d]=c);for(;s<r;++s)o[s]=e[s];return new xe(o,this._parents)},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,o=i[a];--a>=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=_t);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var o,s=n[a],c=s.length,u=i[a]=new Array(c),l=0;l<c;++l)(o=s[l])&&(u[l]=o);u.sort(e)}return new xe(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){var t=new Array(this.size()),e=-1;return this.each((function(){t[++e]=this})),t},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null},size:function(){var t=0;return this.each((function(){++t})),t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],o=0,s=a.length;o<s;++o)(i=a[o])&&t.call(i,i.__data__,o,a);return this},attr:function(t,e){var n=Et(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?Ct:Tt:"function"==typeof e?n.local?Ot:Mt:n.local?At:St)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?Bt:"function"==typeof e?Lt:Dt)(t,e,null==n?"":n)):It(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Rt:"function"==typeof e?Pt:Ft)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Yt(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?Vt:e?qt:Wt)(n,e))},text:function(t){return arguments.length?this.each(null==t?Ht:("function"==typeof t?Xt:Gt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?Zt:("function"==typeof t?Qt:Kt)(t)):this.node().innerHTML},raise:function(){return this.each(Jt)},lower:function(){return this.each(te)},append:function(t){var e="function"==typeof t?t:re(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:re(t),r=null==e?ie:"function"==typeof e?e:dt(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(ae)},clone:function(t){return this.select(t?se:oe)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=fe(t+""),o=a.length;if(!(arguments.length<2)){for(s=e?pe:de,null==n&&(n=!1),r=0;r<o;++r)this.each(s(a[r],e,n));return this}var s=this.node().__on;if(s)for(var c,u=0,l=s.length;u<l;++u)for(r=0,c=s[u];r<o;++r)if((i=a[r]).type===c.type&&i.name===c.name)return c.value},dispatch:function(t,e){return this.each(("function"==typeof e?ve:me)(t,e))}};var ke=_e,we=function(t){return"string"==typeof t?new xe([[document.querySelector(t)]],[document.documentElement]):new xe([[t]],be)};function Ee(){ue.stopImmediatePropagation()}var Te=function(){ue.preventDefault(),ue.stopImmediatePropagation()},Ce=function(t){var e=t.document.documentElement,n=we(t).on("dragstart.drag",Te,!0);"onselectstart"in e?n.on("selectstart.drag",Te,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")};function Se(t,e){var n=t.document.documentElement,r=we(t).on("dragstart.drag",null);e&&(r.on("click.drag",Te,!0),setTimeout((function(){r.on("click.drag",null)}),0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var Ae=function(t,e,n){t.prototype=e.prototype=n,n.constructor=t};function Me(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Oe(){}var Ne="\\s*([+-]?\\d+)\\s*",Be="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",De="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Le=/^#([0-9a-f]{3,8})$/,Ie=new RegExp("^rgb\\("+[Ne,Ne,Ne]+"\\)$"),Re=new RegExp("^rgb\\("+[De,De,De]+"\\)$"),Fe=new RegExp("^rgba\\("+[Ne,Ne,Ne,Be]+"\\)$"),Pe=new RegExp("^rgba\\("+[De,De,De,Be]+"\\)$"),je=new RegExp("^hsl\\("+[Be,De,De]+"\\)$"),Ye=new RegExp("^hsla\\("+[Be,De,De,Be]+"\\)$"),ze={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Ue(){return this.rgb().formatHex()}function $e(){return this.rgb().formatRgb()}function qe(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Le.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?We(e):3===n?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Ve(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Ve(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=Re.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Fe.exec(t))?Ve(e[1],e[2],e[3],e[4]):(e=Pe.exec(t))?Ve(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Je(e[1],e[2]/100,e[3]/100,1):(e=Ye.exec(t))?Je(e[1],e[2]/100,e[3]/100,e[4]):ze.hasOwnProperty(t)?We(ze[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function We(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ve(t,e,n,r){return r<=0&&(t=e=n=NaN),new Xe(t,e,n,r)}function He(t){return t instanceof Oe||(t=qe(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,n,r){return 1===arguments.length?He(t):new Xe(t,e,n,null==r?1:r)}function Xe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Ze(){return"#"+Qe(this.r)+Qe(this.g)+Qe(this.b)}function Ke(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Qe(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Je(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new nn(t,e,n,r)}function tn(t){if(t instanceof nn)return new nn(t.h,t.s,t.l,t.opacity);if(t instanceof Oe||(t=qe(t)),!t)return new nn;if(t instanceof nn)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n<r):n===a?(r-e)/s+2:(e-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new nn(o,s,c,t.opacity)}function en(t,e,n,r){return 1===arguments.length?tn(t):new nn(t,e,n,null==r?1:r)}function nn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function rn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function an(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Oe,qe,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Ue,formatHex:Ue,formatHsl:function(){return tn(this).formatHsl()},formatRgb:$e,toString:$e}),Ae(Xe,Ge,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ze,formatHex:Ze,formatRgb:Ke,toString:Ke})),Ae(nn,en,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Xe(rn(t>=240?t-240:t+120,i,r),rn(t,i,r),rn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var on=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r<e-1?t[r+2]:2*a-i;return an((n-r/e)*e,o,i,a,s)}},sn=function(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],a=t[r%e],o=t[(r+1)%e],s=t[(r+2)%e];return an((n-r/e)*e,i,a,o,s)}},cn=function(t){return function(){return t}};function un(t,e){return function(n){return t+n*e}}function ln(t,e){var n=e-t;return n?un(t,n>180||n<-180?n-360*Math.round(n/360):n):cn(isNaN(t)?e:t)}function hn(t,e){var n=e-t;return n?un(t,n):cn(isNaN(t)?e:t)}var fn=function t(e){var n=function(t){return 1==(t=+t)?hn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):cn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=hn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function dn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n<i;++n)r=Ge(e[n]),a[n]=r.r||0,o[n]=r.g||0,s[n]=r.b||0;return a=t(a),o=t(o),s=t(s),r.opacity=1,function(t){return r.r=a(t),r.g=o(t),r.b=s(t),r+""}}}var pn=dn(on),yn=dn(sn),gn=function(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}};function mn(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var vn=function(t,e){return(mn(e)?gn:bn)(t,e)};function bn(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),o=new Array(r);for(n=0;n<i;++n)a[n]=An(t[n],e[n]);for(;n<r;++n)o[n]=e[n];return function(t){for(n=0;n<i;++n)o[n]=a[n](t);return o}}var xn,_n,kn=function(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}},wn=function(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}},En=function(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=An(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}},Tn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Cn=new RegExp(Tn.source,"g"),Sn=function(t,e){var n,r,i,a=Tn.lastIndex=Cn.lastIndex=0,o=-1,s=[],c=[];for(t+="",e+="";(n=Tn.exec(t))&&(r=Cn.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:wn(n,r)})),a=Cn.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?c[0]?function(t){return function(e){return t(e)+""}}(c[0].x):function(t){return function(){return t}}(e):(e=c.length,function(t){for(var n,r=0;r<e;++r)s[(n=c[r]).i]=n.x(t);return s.join("")})},An=function(t,e){var n,r=typeof e;return null==e||"boolean"===r?cn(e):("number"===r?wn:"string"===r?(n=qe(e))?(e=n,fn):Sn:e instanceof qe?fn:e instanceof Date?kn:mn(e)?gn:Array.isArray(e)?bn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?En:wn)(t,e)},Mn=function(){for(var t,e=ue;t=e.sourceEvent;)e=t;return e},On=function(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,[(r=r.matrixTransform(t.getScreenCTM().inverse())).x,r.y]}var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]},Nn=function(t,e,n){arguments.length<3&&(n=e,e=Mn().changedTouches);for(var r,i=0,a=e?e.length:0;i<a;++i)if((r=e[i]).identifier===n)return On(t,r);return null},Bn=function(t){var e=Mn();return e.changedTouches&&(e=e.changedTouches[0]),On(t,e)},Dn=0,Ln=0,In=0,Rn=0,Fn=0,Pn=0,jn="object"==typeof performance&&performance.now?performance:Date,Yn="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function zn(){return Fn||(Yn(Un),Fn=jn.now()+Pn)}function Un(){Fn=0}function $n(){this._call=this._time=this._next=null}function qn(t,e,n){var r=new $n;return r.restart(t,e,n),r}function Wn(){zn(),++Dn;for(var t,e=xn;e;)(t=Fn-e._time)>=0&&e._call.call(null,t),e=e._next;--Dn}function Vn(){Fn=(Rn=jn.now())+Pn,Dn=Ln=0;try{Wn()}finally{Dn=0,function(){for(var t,e,n=xn,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:xn=e);_n=t,Gn(r)}(),Fn=0}}function Hn(){var t=jn.now(),e=t-Rn;e>1e3&&(Pn-=e,Rn=t)}function Gn(t){Dn||(Ln&&(Ln=clearTimeout(Ln)),t-Fn>24?(t<1/0&&(Ln=setTimeout(Vn,t-jn.now()-Pn)),In&&(In=clearInterval(In))):(In||(Rn=jn.now(),In=setInterval(Hn,1e3)),Dn=1,Yn(Vn)))}$n.prototype=qn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?zn():+n)+(null==e?0:+e),this._next||_n===this||(_n?_n._next=this:xn=this,_n=this),this._call=t,this._time=n,Gn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Gn())}};var Xn=function(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Zn=ht("start","end","cancel","interrupt"),Kn=[],Qn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Xn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u<e&&(f.state=6,f.timer.stop(),f.on.call("cancel",t,t.__data__,f.index,f.group),delete i[u])}if(Xn((function(){3===n.state&&(n.state=4,n.timer.restart(o,n.delay,n.time),o(c))})),n.state=2,n.on.call("start",t,t.__data__,n.index,n.group),2===n.state){for(n.state=3,r=new Array(h=n.tween.length),u=0,l=-1;u<h;++u)(f=n.tween[u].value.call(t,t.__data__,n.index,n.group))&&(r[++l]=f);r.length=l+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(s),n.state=5,1),a=-1,o=r.length;++a<o;)r[a].call(t,i);5===n.state&&(n.on.call("end",t,t.__data__,n.index,n.group),s())}function s(){for(var r in n.state=6,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=qn((function(t){n.state=1,n.timer.restart(a,n.delay,n.time),n.delay<=t&&a(t-n.delay)}),0,n.time)}(t,n,{name:e,index:r,group:i,on:Zn,tween:Kn,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})};function Jn(t,e){var n=er(t,e);if(n.state>0)throw new Error("too late; already scheduled");return n}function tr(t,e){var n=er(t,e);if(n.state>3)throw new Error("too late; already running");return n}function er(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var nr,rr,ir,ar,or=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},sr=180/Math.PI,cr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},ur=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r<e*n&&(t=-t,e=-e,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*sr,skewX:Math.atan(c)*sr,scaleX:o,scaleY:s}};function lr(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,o){var s=[],c=[];return a=t(a),o=t(o),function(t,r,i,a,o,s){if(t!==i||r!==a){var c=o.push("translate(",null,e,null,n);s.push({i:c-4,x:wn(t,i)},{i:c-2,x:wn(r,a)})}else(i||a)&&o.push("translate("+i+e+a+n)}(a.translateX,a.translateY,o.translateX,o.translateY,s,c),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:wn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:wn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:wn(t,n)},{i:s-2,x:wn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n<r;)s[(e=c[n]).i]=e.x(t);return s.join("")}}}var hr=lr((function(t){return"none"===t?cr:(nr||(nr=document.createElement("DIV"),rr=document.documentElement,ir=document.defaultView),nr.style.transform=t,t=ir.getComputedStyle(rr.appendChild(nr),null).getPropertyValue("transform"),rr.removeChild(nr),t=t.slice(7,-1).split(","),ur(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}),"px, ","px)","deg)"),fr=lr((function(t){return null==t?cr:(ar||(ar=document.createElementNS("http://www.w3.org/2000/svg","g")),ar.setAttribute("transform",t),(t=ar.transform.baseVal.consolidate())?(t=t.matrix,ur(t.a,t.b,t.c,t.d,t.e,t.f)):cr)}),", ",")",")");function dr(t,e){var n,r;return function(){var i=tr(this,t),a=i.tween;if(a!==n)for(var o=0,s=(r=n=a).length;o<s;++o)if(r[o].name===e){(r=r.slice()).splice(o,1);break}i.tween=r}}function pr(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=tr(this,t),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:e,value:n},c=0,u=i.length;c<u;++c)if(i[c].name===e){i[c]=s;break}c===u&&i.push(s)}a.tween=i}}function yr(t,e,n){var r=t._id;return t.each((function(){var t=tr(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return er(t,r).value[e]}}var gr=function(t,e){var n;return("number"==typeof e?wn:e instanceof qe?fn:(n=qe(e))?(e=n,fn):Sn)(t,e)};function mr(t){return function(){this.removeAttribute(t)}}function vr(t){return function(){this.removeAttributeNS(t.space,t.local)}}function br(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttribute(t);return o===a?null:o===r?i:i=e(r=o,n)}}function xr(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttributeNS(t.space,t.local);return o===a?null:o===r?i:i=e(r=o,n)}}function _r(t,e,n){var r,i,a;return function(){var o,s,c=n(this);if(null!=c)return(o=this.getAttribute(t))===(s=c+"")?null:o===r&&s===i?a:(i=s,a=e(r=o,c));this.removeAttribute(t)}}function kr(t,e,n){var r,i,a;return function(){var o,s,c=n(this);if(null!=c)return(o=this.getAttributeNS(t.space,t.local))===(s=c+"")?null:o===r&&s===i?a:(i=s,a=e(r=o,c));this.removeAttributeNS(t.space,t.local)}}function wr(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function Er(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function Tr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&Er(t,i)),n}return i._value=e,i}function Cr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&wr(t,i)),n}return i._value=e,i}function Sr(t,e){return function(){Jn(this,t).delay=+e.apply(this,arguments)}}function Ar(t,e){return e=+e,function(){Jn(this,t).delay=e}}function Mr(t,e){return function(){tr(this,t).duration=+e.apply(this,arguments)}}function Or(t,e){return e=+e,function(){tr(this,t).duration=e}}function Nr(t,e){if("function"!=typeof e)throw new Error;return function(){tr(this,t).ease=e}}function Br(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Jn:tr;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Dr=ke.prototype.constructor;function Lr(t){return function(){this.style.removeProperty(t)}}function Ir(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Rr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Ir(t,a,n)),r}return a._value=e,a}function Fr(t){return function(e){this.textContent=t.call(this,e)}}function Pr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Fr(r)),e}return r._value=t,r}var jr=0;function Yr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zr(t){return ke().transition(t)}function Ur(){return++jr}var $r=ke.prototype;function qr(t){return t*t*t}function Wr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Yr.prototype=zr.prototype={constructor:Yr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=dt(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o<i;++o)for(var s,c,u=r[o],l=u.length,h=a[o]=new Array(l),f=0;f<l;++f)(s=u[f])&&(c=t.call(s,s.__data__,f,u))&&("__data__"in s&&(c.__data__=s.__data__),h[f]=c,Qn(h[f],e,n,f,h,er(s,n)));return new Yr(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=yt(t));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c,u=r[s],l=u.length,h=0;h<l;++h)if(c=u[h]){for(var f,d=t.call(c,c.__data__,h,u),p=er(c,n),y=0,g=d.length;y<g;++y)(f=d[y])&&Qn(f,e,n,y,d,p);a.push(d),o.push(c)}return new Yr(a,o,e,n)},filter:function(t){"function"!=typeof t&&(t=gt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,c=r[i]=[],u=0;u<s;++u)(a=o[u])&&t.call(a,a.__data__,u,o)&&c.push(a);return new Yr(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s<a;++s)for(var c,u=e[s],l=n[s],h=u.length,f=o[s]=new Array(h),d=0;d<h;++d)(c=u[d]||l[d])&&(f[d]=c);for(;s<r;++s)o[s]=e[s];return new Yr(o,this._parents,this._name,this._id)},selection:function(){return new Dr(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Ur(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],c=s.length,u=0;u<c;++u)if(o=s[u]){var l=er(o,e);Qn(o,t,n,u,s,{time:l.time+l.delay+l.duration,delay:0,duration:l.duration,ease:l.ease})}return new Yr(r,this._parents,t,n)},call:$r.call,nodes:$r.nodes,node:$r.node,size:$r.size,empty:$r.empty,each:$r.each,on:function(t,e){var n=this._id;return arguments.length<2?er(this.node(),n).on.on(t):this.each(Br(n,t,e))},attr:function(t,e){var n=Et(t),r="transform"===n?fr:gr;return this.attrTween(t,"function"==typeof e?(n.local?kr:_r)(n,r,yr(this,"attr."+t,e)):null==e?(n.local?vr:mr)(n):(n.local?xr:br)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=Et(t);return this.tween(n,(r.local?Tr:Cr)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?hr:gr;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=It(this,t),o=(this.style.removeProperty(t),It(this,t));return a===o?null:a===n&&o===r?i:i=e(n=a,r=o)}}(t,r)).on("end.style."+t,Lr(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var o=It(this,t),s=n(this),c=s+"";return null==s&&(this.style.removeProperty(t),c=s=It(this,t)),o===c?null:o===r&&c===i?a:(i=c,a=e(r=o,s))}}(t,r,yr(this,"style."+t,e))).each(function(t,e){var n,r,i,a,o="style."+e,s="end."+o;return function(){var c=tr(this,t),u=c.on,l=null==c.value[o]?a||(a=Lr(e)):void 0;u===n&&i===l||(r=(n=u).copy()).on(s,i=l),c.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var o=It(this,t);return o===a?null:o===r?i:i=e(r=o,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,Rr(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(yr(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,Pr(t))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=er(this.node(),n).tween,a=0,o=i.length;a<o;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?dr:pr)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Sr:Ar)(e,t)):er(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Mr:Or)(e,t)):er(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(Nr(e,t)):er(this.node(),e).ease},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,o){var s={value:o},c={value:function(){0==--i&&a()}};n.each((function(){var n=tr(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(c)),n.on=e}))}))}};var Hr={time:null,delay:0,duration:250,ease:Vr};function Gr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))return Hr.time=zn(),Hr;return n}ke.prototype.interrupt=function(t){return this.each((function(){or(this,t)}))},ke.prototype.transition=function(t){var e,n;t instanceof Yr?(e=t._id,t=t._name):(e=Ur(),(n=Hr).time=zn(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],c=s.length,u=0;u<c;++u)(o=s[u])&&Qn(o,t,e,u,s,n||Gr(o,e));return new Yr(r,this._parents,t,e)};var Xr=[null],Zr=function(t,e){var n,r,i=t.__transition;if(i)for(r in e=null==e?null:e+"",i)if((n=i[r]).state>1&&n.name===e)return new Yr([[t]],Xr,e,+r);return null},Kr=function(t){return function(){return t}},Qr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Jr(){ue.stopImmediatePropagation()}var ti=function(){ue.preventDefault(),ue.stopImmediatePropagation()},ei={name:"drag"},ni={name:"space"},ri={name:"handle"},ii={name:"center"};function ai(t){return[+t[0],+t[1]]}function oi(t){return[ai(t[0]),ai(t[1])]}function si(t){return function(e){return Nn(e,ue.touches,t)}}var ci={name:"x",handles:["w","e"].map(gi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ui={name:"y",handles:["n","s"].map(gi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},li={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(gi),input:function(t){return null==t?null:oi(t)},output:function(t){return t}},hi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},fi={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},di={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},pi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},yi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function gi(t){return{type:t}}function mi(){return!ue.ctrlKey&&!ue.button}function vi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function bi(){return navigator.maxTouchPoints||"ontouchstart"in this}function xi(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function _i(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ki(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function wi(){return Ci(ci)}function Ei(){return Ci(ui)}var Ti=function(){return Ci(li)};function Ci(t){var e,n=vi,r=mi,i=bi,a=!0,o=ht("start","brush","end"),s=6;function c(e){var n=e.property("__brush",y).selectAll(".overlay").data([gi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",hi.overlay).merge(n).each((function(){var t=xi(this).extent;we(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([gi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",hi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return hi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=we(this),e=xi(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){var r=t.__brush.emitter;return!r||n&&r.clean?new h(t,e,n):r}function h(t,e,n){this.that=t,this.args=e,this.state=t.__brush,this.active=0,this.clean=n}function f(){if((!e||ue.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,y,g,m=this,v=ue.target.__data__.type,b="selection"===(a&&ue.metaKey?v="overlay":v)?ei:a&&ue.altKey?ii:ri,x=t===ui?null:pi[v],_=t===ci?null:yi[v],k=xi(m),w=k.extent,E=k.selection,T=w[0][0],C=w[0][1],S=w[1][0],A=w[1][1],M=0,O=0,N=x&&_&&a&&ue.shiftKey,B=ue.touches?si(ue.changedTouches[0].identifier):Bn,D=B(m),L=D,I=l(m,arguments,!0).beforestart();"overlay"===v?(E&&(p=!0),k.selection=E=[[n=t===ui?T:D[0],o=t===ci?C:D[1]],[c=t===ui?S:n,f=t===ci?A:o]]):(n=E[0][0],o=E[0][1],c=E[1][0],f=E[1][1]),i=n,s=o,h=c,d=f;var R=we(m).attr("pointer-events","none"),F=R.selectAll(".overlay").attr("cursor",hi[v]);if(ue.touches)I.moved=j,I.ended=z;else{var P=we(ue.view).on("mousemove.brush",j,!0).on("mouseup.brush",z,!0);a&&P.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Ce(ue.view)}Jr(),or(m),u.call(m),I.start()}function j(){var t=B(m);!N||y||g||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?g=!0:y=!0),L=t,p=!0,ti(),Y()}function Y(){var t;switch(M=L[0]-D[0],O=L[1]-D[1],b){case ni:case ei:x&&(M=Math.max(T-n,Math.min(S-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(A-f,O)),s=o+O,d=f+O);break;case ri:x<0?(M=Math.max(T-n,Math.min(S-n,M)),i=n+M,h=c):x>0&&(M=Math.max(T-c,Math.min(S-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(A-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(A-f,O)),s=o,d=f+O);break;case ii:x&&(i=Math.max(T,Math.min(S,n-M*x)),h=Math.max(T,Math.min(S,c+M*x))),_&&(s=Math.max(C,Math.min(A,o-O*_)),d=Math.max(C,Math.min(A,f+O*_)))}h<i&&(x*=-1,t=n,n=c,c=t,t=i,i=h,h=t,v in fi&&F.attr("cursor",hi[v=fi[v]])),d<s&&(_*=-1,t=o,o=f,f=t,t=s,s=d,d=t,v in di&&F.attr("cursor",hi[v=di[v]])),k.selection&&(E=k.selection),y&&(i=E[0][0],h=E[1][0]),g&&(s=E[0][1],d=E[1][1]),E[0][0]===i&&E[0][1]===s&&E[1][0]===h&&E[1][1]===d||(k.selection=[[i,s],[h,d]],u.call(m),I.brush())}function z(){if(Jr(),ue.touches){if(ue.touches.length)return;e&&clearTimeout(e),e=setTimeout((function(){e=null}),500)}else Se(ue.view,p),P.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);R.attr("pointer-events","all"),F.attr("cursor",hi.overlay),k.selection&&(E=k.selection),_i(E)&&(k.selection=null,u.call(m)),I.end()}function U(){switch(ue.keyCode){case 16:N=x&&_;break;case 18:b===ri&&(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ii,Y());break;case 32:b!==ri&&b!==ii||(x<0?c=h-M:x>0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ni,F.attr("cursor",hi.selection),Y());break;default:return}ti()}function $(){switch(ue.keyCode){case 16:N&&(y=g=N=!1,Y());break;case 18:b===ii&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri,Y());break;case 32:b===ni&&(ue.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ii):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri),F.attr("cursor",hi[v]),Y());break;default:return}ti()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function y(){var e=this.__brush||{selection:null};return e.extent=oi(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=An(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();or(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){ye(new Qr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Kr(oi(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Kr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Kr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Si=Math.cos,Ai=Math.sin,Mi=Math.PI,Oi=Mi/2,Ni=2*Mi,Bi=Math.max;function Di(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Li=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=w(h),p=[],y=[],g=y.groups=new Array(h),m=new Array(h*h);for(a=0,u=-1;++u<h;){for(o=0,l=-1;++l<h;)o+=i[u][l];f.push(o),p.push(w(h)),a+=o}for(e&&d.sort((function(t,n){return e(f[t],f[n])})),n&&p.forEach((function(t,e){t.sort((function(t,r){return n(i[e][t],i[e][r])}))})),c=(a=Bi(0,Ni-t*h)/a)?t:Ni/h,o=0,u=-1;++u<h;){for(s=o,l=-1;++l<h;){var v=d[u],b=p[v][l],x=i[v][b],_=o,k=o+=x*a;m[b*h+v]={index:v,subindex:b,startAngle:_,endAngle:k,value:x}}g[v]={index:v,startAngle:s,endAngle:o,value:f[v]},o+=c}for(u=-1;++u<h;)for(l=u-1;++l<h;){var E=m[l*h+u],T=m[u*h+l];(E.value||T.value)&&y.push(E.value<T.value?{source:T,target:E}:{source:E,target:T})}return r?y.sort(r):y}return i.padAngle=function(e){return arguments.length?(t=Bi(0,e),i):t},i.sortGroups=function(t){return arguments.length?(e=t,i):e},i.sortSubgroups=function(t){return arguments.length?(n=t,i):n},i.sortChords=function(t){return arguments.length?(null==t?r=null:(r=Di(t))._=t,i):r&&r._},i},Ii=Array.prototype.slice,Ri=function(t){return function(){return t}},Fi=Math.PI,Pi=2*Fi,ji=Pi-1e-6;function Yi(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function zi(){return new Yi}Yi.prototype=zi.prototype={constructor:Yi,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,a){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function(t,e,n,r,i){t=+t,e=+e,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,s=n-t,c=r-e,u=a-t,l=o-e,h=u*u+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(h>1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),m=Math.sqrt(h),v=i*Math.tan((Fi-Math.acos((p+h-y)/(2*g*m)))/2),b=v/m,x=v/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%Pi+Pi),h>ji?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Fi)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Ui=zi;function $i(t){return t.source}function qi(t){return t.target}function Wi(t){return t.radius}function Vi(t){return t.startAngle}function Hi(t){return t.endAngle}var Gi=function(){var t=$i,e=qi,n=Wi,r=Vi,i=Hi,a=null;function o(){var o,s=Ii.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Oi,f=i.apply(this,s)-Oi,d=l*Si(h),p=l*Ai(h),y=+n.apply(this,(s[0]=u,s)),g=r.apply(this,s)-Oi,m=i.apply(this,s)-Oi;if(a||(a=o=Ui()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===g&&f===m||(a.quadraticCurveTo(0,0,y*Si(g),y*Ai(g)),a.arc(0,0,y,g,m)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Ri(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ri(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ri(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Xi(){}function Zi(t,e){var n=new Xi;if(t instanceof Xi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i<a;)n.set(i,t[i]);else for(;++i<a;)n.set(e(r=t[i],i,t),r)}else if(t)for(var o in t)n.set(o,t[o]);return n}Xi.prototype=Zi.prototype={constructor:Xi,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var Ki=Zi,Qi=function(){var t,e,n,r=[],i=[];function a(n,i,o,s){if(i>=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Ki(),y=o();++h<f;)(l=p.get(c=d(u=n[h])+""))?l.push(u):p.set(c,[u]);return p.each((function(t,e){s(y,e,a(t,i,o,s))})),y}return n={object:function(t){return a(t,0,Ji,ta)},map:function(t){return a(t,0,ea,na)},entries:function(t){return function t(n,a){if(++a>r.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,ea,na),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Ji(){return{}}function ta(t,e,n){t[e]=n}function ea(){return Ki()}function na(t,e,n){t.set(e,n)}function ra(){}var ia=Ki.prototype;function aa(t,e){var n=new ra;if(t instanceof ra)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r<i;)n.add(t[r]);else for(;++r<i;)n.add(e(t[r],r,t))}return n}ra.prototype=aa.prototype={constructor:ra,has:ia.has,add:function(t){return this["$"+(t+="")]=t,this},remove:ia.remove,clear:ia.clear,values:ia.keys,size:ia.size,empty:ia.empty,each:ia.each};var oa=aa,sa=function(t){var e=[];for(var n in t)e.push(n);return e},ca=function(t){var e=[];for(var n in t)e.push(t[n]);return e},ua=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},la=Math.PI/180,ha=180/Math.PI;function fa(t){if(t instanceof ya)return new ya(t.l,t.a,t.b,t.opacity);if(t instanceof wa)return Ea(t);t instanceof Xe||(t=He(t));var e,n,r=ba(t.r),i=ba(t.g),a=ba(t.b),o=ga((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=o:(e=ga((.4360747*r+.3850649*i+.1430804*a)/.96422),n=ga((.0139322*r+.0971045*i+.7141733*a)/.82521)),new ya(116*o-16,500*(e-o),200*(o-n),t.opacity)}function da(t,e){return new ya(t,0,0,null==e?1:e)}function pa(t,e,n,r){return 1===arguments.length?fa(t):new ya(t,e,n,null==r?1:r)}function ya(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function ga(t){return t>6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function ma(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function va(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ba(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function xa(t){if(t instanceof wa)return new wa(t.h,t.c,t.l,t.opacity);if(t instanceof ya||(t=fa(t)),0===t.a&&0===t.b)return new wa(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*ha;return new wa(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function _a(t,e,n,r){return 1===arguments.length?xa(t):new wa(n,e,t,null==r?1:r)}function ka(t,e,n,r){return 1===arguments.length?xa(t):new wa(t,e,n,null==r?1:r)}function wa(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function Ea(t){if(isNaN(t.h))return new ya(t.l,0,0,t.opacity);var e=t.h*la;return new ya(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}Ae(ya,pa,Me(Oe,{brighter:function(t){return new ya(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new ya(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Xe(va(3.1338561*(e=.96422*ma(e))-1.6168667*(t=1*ma(t))-.4906146*(n=.82521*ma(n))),va(-.9787684*e+1.9161415*t+.033454*n),va(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Ae(wa,ka,Me(Oe,{brighter:function(t){return new wa(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new wa(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Ea(this).rgb()}}));var Ta=-1.7884503806,Ca=3.5172982438,Sa=-.6557636667999999;function Aa(t){if(t instanceof Oa)return new Oa(t.h,t.s,t.l,t.opacity);t instanceof Xe||(t=He(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(Sa*r+Ta*e-Ca*n)/(Sa+Ta-Ca),a=r-i,o=(1.97294*(n-i)- -.29227*a)/-.90649,s=Math.sqrt(o*o+a*a)/(1.97294*i*(1-i)),c=s?Math.atan2(o,a)*ha-120:NaN;return new Oa(c<0?c+360:c,s,i,t.opacity)}function Ma(t,e,n,r){return 1===arguments.length?Aa(t):new Oa(t,e,n,null==r?1:r)}function Oa(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}Ae(Oa,Ma,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Oa(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Oa(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*la,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new Xe(255*(e+n*(-.14861*r+1.78277*i)),255*(e+n*(-.29227*r+-.90649*i)),255*(e+n*(1.97294*r)),this.opacity)}}));var Na=Array.prototype.slice,Ba=function(t,e){return t-e},Da=function(t){return function(){return t}},La=function(t,e){for(var n,r=-1,i=e.length;++r<i;)if(n=Ia(t,e[r]))return n;return 0};function Ia(t,e){for(var n=e[0],r=e[1],i=-1,a=0,o=t.length,s=o-1;a<o;s=a++){var c=t[a],u=c[0],l=c[1],h=t[s],f=h[0],d=h[1];if(Ra(c,h,e))return 0;l>r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Ra(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var Fa=function(){},Pa=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],ja=function(){var t=1,e=1,n=O,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Ba);else{var r=m(t),i=r[0],o=r[1];e=M(i,o,e),e=w(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;for(a=s=-1,u=n[0]>=r,Pa[u<<1].forEach(p);++a<t-1;)c=u,u=n[a+1]>=r,Pa[c|u<<1].forEach(p);for(Pa[u<<0].forEach(p);++s<e-1;){for(a=-1,u=n[s*t+t]>=r,l=n[s*t]>=r,Pa[u<<1|l<<2].forEach(p);++a<t-1;)c=u,u=n[s*t+t+a+1]>=r,h=l,l=n[s*t+a+1]>=r,Pa[c|u<<1|l<<2|h<<3].forEach(p);Pa[u|l<<3].forEach(p)}for(a=-1,l=n[s*t]>=r,Pa[l<<2].forEach(p);++a<t-1;)h=l,l=n[s*t+a+1]>=r,Pa[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Pa[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e<n;)r+=t[e-1][1]*t[e][0]-t[e-1][0]*t[e][1];return r}(t)>0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n<r;++n)if(-1!==La((e=a[n])[0],t))return void e.push(t)})),{type:"MultiPolygon",value:i,coordinates:a}}function o(e){return 2*e[0]+e[1]*(t+1)*4}function s(n,r,i){n.forEach((function(n){var a,o=n[0],s=n[1],c=0|o,u=0|s,l=r[u*t+c];o>0&&o<t&&c===o&&(a=r[u*t+c-1],n[0]=o+(i-a)/(l-a)-.5),s>0&&s<e&&u===s&&(a=r[(u-1)*t+c],n[1]=s+(i-a)/(l-a)-.5)}))}return i.contour=a,i.size=function(n){if(!arguments.length)return[t,e];var r=Math.ceil(n[0]),a=Math.ceil(n[1]);if(!(r>0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?Da(Na.call(t)):Da(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:Fa,i):r===s},i};function Ya(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o<i;++o)for(var s=0,c=0;s<r+n;++s)s<r&&(c+=t.data[s+o*r]),s>=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function za(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o<r;++o)for(var s=0,c=0;s<i+n;++s)s<i&&(c+=t.data[o+s*r]),s>=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function Ua(t){return t[0]}function $a(t){return t[1]}function qa(){return 1}var Wa=function(){var t=Ua,e=$a,n=qa,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=Da(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h<c&&f>=0&&f<u&&(i[h+f*c]+=d)})),Ya({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),za({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ya({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),za({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ya({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),za({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=I(i);d=M(0,p,d),(d=w(0,Math.floor(p/d)*d,d)).shift()}return ja().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(y)}function y(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function g(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:Da(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:Da(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:Da(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},h.cellSize=function(t){if(!arguments.length)return 1<<o;if(!((t=+t)>=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?Da(Na.call(t)):Da(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},h},Va=function(t){return function(){return t}};function Ha(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Ga(){return!ue.ctrlKey&&!ue.button}function Xa(){return this.parentNode}function Za(t){return null==t?{x:ue.x,y:ue.y}:t}function Ka(){return navigator.maxTouchPoints||"ontouchstart"in this}Ha.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Qa=function(){var t,e,n,r,i=Ga,a=Xa,o=Za,s=Ka,c={},u=ht("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",g).on("touchmove.drag",m).on("touchend.drag touchcancel.drag",v).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Bn,this,arguments);o&&(we(ue.view).on("mousemove.drag",p,!0).on("mouseup.drag",y,!0),Ce(ue.view),Ee(),n=!1,t=ue.clientX,e=ue.clientY,o("start"))}}function p(){if(Te(),!n){var r=ue.clientX-t,i=ue.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function y(){we(ue.view).on("mousemove.drag mouseup.drag",null),Se(ue.view,n),Te(),c.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=ue.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t<o;++t)(e=b(n[t].identifier,r,Nn,this,arguments))&&(Ee(),e("start"))}}function m(){var t,e,n=ue.changedTouches,r=n.length;for(t=0;t<r;++t)(e=c[n[t].identifier])&&(Te(),e("drag"))}function v(){var t,e,n=ue.changedTouches,i=n.length;for(r&&clearTimeout(r),r=setTimeout((function(){r=null}),500),t=0;t<i;++t)(e=c[n[t].identifier])&&(Ee(),e("end"))}function b(t,e,n,r,i){var a,s,h,d=n(e,t),p=u.copy();if(ye(new Ha(f,"beforestart",a,t,l,d[0],d[1],0,0,p),(function(){return null!=(ue.subject=a=o.apply(r,i))&&(s=a.x-d[0]||0,h=a.y-d[1]||0,!0)})))return function o(u){var y,g=d;switch(u){case"start":c[t]=o,y=l++;break;case"end":delete c[t],--l;case"drag":d=n(e,t),y=l}ye(new Ha(f,u,a,t,y,d[0]+s,d[1]+h,d[0]-g[0],d[1]-g[1],p),p.apply,p,[u,r,i])}}return f.filter=function(t){return arguments.length?(i="function"==typeof t?t:Va(!!t),f):i},f.container=function(t){return arguments.length?(a="function"==typeof t?t:Va(t),f):a},f.subject=function(t){return arguments.length?(o="function"==typeof t?t:Va(t),f):o},f.touchable=function(t){return arguments.length?(s="function"==typeof t?t:Va(!!t),f):s},f.on=function(){var t=u.on.apply(u,arguments);return t===u?f:t},f.clickDistance=function(t){return arguments.length?(h=(t=+t)*t,f):Math.sqrt(h)},f},Ja={},to={};function eo(t){return new Function("d","return {"+t.map((function(t,e){return JSON.stringify(t)+": d["+e+'] || ""'})).join(",")+"}")}function no(t){var e=Object.create(null),n=[];return t.forEach((function(t){for(var r in t)r in e||n.push(e[r]=r)})),n}function ro(t,e){var n=t+"",r=n.length;return r<e?new Array(e-r+1).join(0)+n:n}var io=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return to;if(u)return u=!1,Ja;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++<a&&34!==t.charCodeAt(o)||34===t.charCodeAt(++o););return(e=o)>=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o<a;){if(10===(r=t.charCodeAt(e=o++)))u=!0;else if(13===r)u=!0,10===t.charCodeAt(o)&&++o;else if(r!==n)continue;return t.slice(i,e)}return c=!0,t.slice(i,a)}for(10===t.charCodeAt(a-1)&&--a,13===t.charCodeAt(a-1)&&--a;(r=l())!==to;){for(var h=[];r!==Ja&&r!==to;)h.push(r),r=l();e&&null==(h=e(h,s++))||i.push(h)}return i}function i(e,n){return e.map((function(e){return n.map((function(t){return o(e[t])})).join(t)}))}function a(e){return e.map(o).join(t)}function o(t){return null==t?"":t instanceof Date?function(t){var e,n=t.getUTCHours(),r=t.getUTCMinutes(),i=t.getUTCSeconds(),a=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":((e=t.getUTCFullYear())<0?"-"+ro(-e,6):e>9999?"+"+ro(e,6):ro(e,4))+"-"+ro(t.getUTCMonth()+1,2)+"-"+ro(t.getUTCDate(),2)+(a?"T"+ro(n,2)+":"+ro(r,2)+":"+ro(i,2)+"."+ro(a,3)+"Z":i?"T"+ro(n,2)+":"+ro(r,2)+":"+ro(i,2)+"Z":r||n?"T"+ro(n,2)+":"+ro(r,2)+"Z":"")}(t):e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,a=r(t,(function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=eo(t);return function(r,i){return e(n(r),i,t)}}(t,e):eo(t)}));return a.columns=i||[],a},parseRows:r,format:function(e,n){return null==n&&(n=no(e)),[n.map(o).join(t)].concat(i(e,n)).join("\n")},formatBody:function(t,e){return null==e&&(e=no(t)),i(t,e).join("\n")},formatRows:function(t){return t.map(a).join("\n")},formatRow:a,formatValue:o}},ao=io(","),oo=ao.parse,so=ao.parseRows,co=ao.format,uo=ao.formatBody,lo=ao.formatRows,ho=ao.formatRow,fo=ao.formatValue,po=io("\t"),yo=po.parse,go=po.parseRows,mo=po.format,vo=po.formatBody,bo=po.formatRows,xo=po.formatRow,_o=po.formatValue;function ko(t){for(var e in t){var n,r,i=t[e].trim();if(i)if("true"===i)i=!0;else if("false"===i)i=!1;else if("NaN"===i)i=NaN;else if(isNaN(n=+i)){if(!(r=i.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)))continue;wo&&r[4]&&!r[7]&&(i=i.replace(/-/g,"/").replace(/T/," ")),i=new Date(i)}else i=n;else i=null;t[e]=i}return t}var wo=new Date("2019-01-01T00:00").getHours()||new Date("2019-07-01T00:00").getHours();function Eo(t){return+t}function To(t){return t*t}function Co(t){return t*(2-t)}function So(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}var Ao=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),Mo=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),Oo=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),No=Math.PI,Bo=No/2;function Do(t){return 1==+t?1:1-Math.cos(t*Bo)}function Lo(t){return Math.sin(t*Bo)}function Io(t){return(1-Math.cos(No*t))/2}function Ro(t){return 1.0009775171065494*(Math.pow(2,-10*t)-.0009765625)}function Fo(t){return Ro(1-+t)}function Po(t){return 1-Ro(t)}function jo(t){return((t*=2)<=1?Ro(1-t):2-Ro(t-1))/2}function Yo(t){return 1-Math.sqrt(1-t*t)}function zo(t){return Math.sqrt(1- --t*t)}function Uo(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function $o(t){return 1-qo(1-t)}function qo(t){return(t=+t)<4/11?7.5625*t*t:t<8/11?7.5625*(t-=6/11)*t+3/4:t<10/11?7.5625*(t-=9/11)*t+15/16:7.5625*(t-=21/22)*t+63/64}function Wo(t){return((t*=2)<=1?1-qo(1-t):qo(t-1)+1)/2}var Vo=function t(e){function n(t){return(t=+t)*t*(e*(t-1)+t)}return e=+e,n.overshoot=t,n}(1.70158),Ho=function t(e){function n(t){return--t*t*((t+1)*e+t)+1}return e=+e,n.overshoot=t,n}(1.70158),Go=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(1.70158),Xo=2*Math.PI,Zo=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Xo);function i(t){return e*Ro(- --t)*Math.sin((r-t)/n)}return i.amplitude=function(e){return t(e,n*Xo)},i.period=function(n){return t(e,n)},i}(1,.3),Ko=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Xo);function i(t){return 1-e*Ro(t=+t)*Math.sin((t+r)/n)}return i.amplitude=function(e){return t(e,n*Xo)},i.period=function(n){return t(e,n)},i}(1,.3),Qo=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Xo);function i(t){return((t=2*t-1)<0?e*Ro(-t)*Math.sin((r-t)/n):2-e*Ro(t)*Math.sin((r+t)/n))/2}return i.amplitude=function(e){return t(e,n*Xo)},i.period=function(n){return t(e,n)},i}(1,.3);function Jo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}var ts=function(t,e){return fetch(t,e).then(Jo)};function es(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}var ns=function(t,e){return fetch(t,e).then(es)};function rs(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}var is=function(t,e){return fetch(t,e).then(rs)};function as(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=void 0),is(e,n).then((function(e){return t(e,r)}))}}function os(t,e,n,r){3===arguments.length&&"function"==typeof n&&(r=n,n=void 0);var i=io(t);return is(e,n).then((function(t){return i.parse(t,r)}))}var ss=as(oo),cs=as(yo),us=function(t,e){return new Promise((function(n,r){var i=new Image;for(var a in e)i[a]=e[a];i.onerror=r,i.onload=function(){n(i)},i.src=t}))};function ls(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);if(204!==t.status&&205!==t.status)return t.json()}var hs=function(t,e){return fetch(t,e).then(ls)};function fs(t){return function(e,n){return is(e,n).then((function(e){return(new DOMParser).parseFromString(e,t)}))}}var ds=fs("application/xml"),ps=fs("text/html"),ys=fs("image/svg+xml"),gs=function(t,e){var n;function r(){var r,i,a=n.length,o=0,s=0;for(r=0;r<a;++r)o+=(i=n[r]).x,s+=i.y;for(o=o/a-t,s=s/a-e,r=0;r<a;++r)(i=n[r]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),r.initialize=function(t){n=t},r.x=function(e){return arguments.length?(t=+e,r):t},r.y=function(t){return arguments.length?(e=+t,r):e},r},ms=function(t){return function(){return t}},vs=function(){return 1e-6*(Math.random()-.5)};function bs(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,a,o,s,c,u,l,h,f,d=t._root,p={data:r},y=t._x0,g=t._y0,m=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((u=e>=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var xs=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function _s(t){return t[0]}function ks(t){return t[1]}function ws(t,e,n){var r=new Es(null==e?_s:e,null==n?ks:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Es(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function Ts(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Cs=ws.prototype=Es.prototype;function Ss(t){return t.x+t.vx}function As(t){return t.y+t.vy}Cs.copy=function(){var t,e,n=new Es(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=Ts(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=Ts(e));return n},Cs.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return bs(this.cover(e,n),e,n,t)},Cs.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;n<a;++n)isNaN(r=+this._x.call(null,e=t[n]))||isNaN(i=+this._y.call(null,e))||(o[n]=r,s[n]=i,r<c&&(c=r),r>l&&(l=r),i<u&&(u=i),i>h&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;n<a;++n)bs(this,o[n],s[n],t[n]);return this},Cs.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,r=this._y0,i=this._x1,a=this._y1;if(isNaN(n))i=(n=Math.floor(t))+1,a=(r=Math.floor(e))+1;else{for(var o,s,c=i-n,u=this._root;n>t||t>=i||r>e||e>=a;)switch(s=(e<r)<<1|t<n,(o=new Array(4))[s]=u,u=o,c*=2,s){case 0:i=n+c,a=r+c;break;case 1:n=i-c,a=r+c;break;case 2:i=n+c,r=a-c;break;case 3:n=i-c,r=a-c}this._root&&this._root.length&&(this._root=u)}return this._x0=n,this._y0=r,this._x1=i,this._y1=a,this},Cs.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},Cs.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},Cs.find=function(t,e,n){var r,i,a,o,s,c,u,l=this._x0,h=this._y0,f=this._x1,d=this._y1,p=[],y=this._root;for(y&&p.push(new xs(y,l,h,f,d)),null==n?n=1/0:(l=t-n,h=e-n,f=t+n,d=e+n,n*=n);c=p.pop();)if(!(!(y=c.node)||(i=c.x0)>f||(a=c.y0)>d||(o=c.x1)<l||(s=c.y1)<h))if(y.length){var g=(i+o)/2,m=(a+s)/2;p.push(new xs(y[3],g,m,o,s),new xs(y[2],i,m,g,s),new xs(y[1],g,a,o,m),new xs(y[0],i,a,g,m)),(u=(e>=m)<<1|t>=g)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var v=t-+this._x.call(null,y.data),b=e-+this._y.call(null,y.data),x=v*v+b*b;if(x<n){var _=Math.sqrt(n=x);l=t-_,h=e-_,f=t+_,d=e+_,r=y.data}}return r},Cs.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,n,r,i,a,o,s,c,u,l,h,f,d=this._root,p=this._x0,y=this._y0,g=this._x1,m=this._y1;if(!d)return this;if(d.length)for(;;){if((u=a>=(s=(p+g)/2))?p=s:g=s,(l=o>=(c=(y+m)/2))?y=c:m=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},Cs.removeAll=function(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this},Cs.root=function(){return this._root},Cs.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},Cs.visit=function(t){var e,n,r,i,a,o,s=[],c=this._root;for(c&&s.push(new xs(c,this._x0,this._y0,this._x1,this._y1));e=s.pop();)if(!t(c=e.node,r=e.x0,i=e.y0,a=e.x1,o=e.y1)&&c.length){var u=(r+a)/2,l=(i+o)/2;(n=c[3])&&s.push(new xs(n,u,l,a,o)),(n=c[2])&&s.push(new xs(n,r,l,u,o)),(n=c[1])&&s.push(new xs(n,u,i,a,l)),(n=c[0])&&s.push(new xs(n,r,i,u,l))}return this},Cs.visitAfter=function(t){var e,n=[],r=[];for(this._root&&n.push(new xs(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var a,o=e.x0,s=e.y0,c=e.x1,u=e.y1,l=(o+c)/2,h=(s+u)/2;(a=i[0])&&n.push(new xs(a,o,s,l,h)),(a=i[1])&&n.push(new xs(a,l,s,c,h)),(a=i[2])&&n.push(new xs(a,o,h,l,u)),(a=i[3])&&n.push(new xs(a,l,h,c,u))}r.push(e)}for(;e=r.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},Cs.x=function(t){return arguments.length?(this._x=t,this):this._x},Cs.y=function(t){return arguments.length?(this._y=t,this):this._y};var Ms=function(t){var e,n,r=1,i=1;function a(){for(var t,a,s,c,u,l,h,f=e.length,d=0;d<i;++d)for(a=ws(e,Ss,As).visitAfter(o),t=0;t<f;++t)s=e[t],l=n[s.index],h=l*l,c=s.x+s.vx,u=s.y+s.vy,a.visit(p);function p(t,e,n,i,a){var o=t.data,f=t.r,d=l+f;if(!o)return e>c+d||i<c-d||n>u+d||a<u-d;if(o.index>s.index){var p=c-o.x-o.vx,y=u-o.y-o.vy,g=p*p+y*y;g<d*d&&(0===p&&(g+=(p=vs())*p),0===y&&(g+=(y=vs())*y),g=(d-(g=Math.sqrt(g)))/g*r,s.vx+=(p*=g)*(d=(f*=f)/(h+f)),s.vy+=(y*=g)*d,o.vx-=p*(d=1-d),o.vy-=y*d)}}}function o(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r<a;++r)i=e[r],n[i.index]=+t(i,r,e)}}return"function"!=typeof t&&(t=ms(null==t?1:+t)),a.initialize=function(t){e=t,s()},a.iterations=function(t){return arguments.length?(i=+t,a):i},a.strength=function(t){return arguments.length?(r=+t,a):r},a.radius=function(e){return arguments.length?(t="function"==typeof e?e:ms(+e),s(),a):t},a};function Os(t){return t.index}function Ns(t,e){var n=t.get(e);if(!n)throw new Error("missing: "+e);return n}var Bs=function(t){var e,n,r,i,a,o=Os,s=function(t){return 1/Math.min(i[t.source.index],i[t.target.index])},c=ms(30),u=1;function l(r){for(var i=0,o=t.length;i<u;++i)for(var s,c,l,h,f,d,p,y=0;y<o;++y)c=(s=t[y]).source,h=(l=s.target).x+l.vx-c.x-c.vx||vs(),f=l.y+l.vy-c.y-c.vy||vs(),h*=d=((d=Math.sqrt(h*h+f*f))-n[y])/d*r*e[y],f*=d,l.vx-=h*(p=a[y]),l.vy-=f*p,c.vx+=h*(p=1-p),c.vy+=f*p}function h(){if(r){var s,c,u=r.length,l=t.length,h=Ki(r,o);for(s=0,i=new Array(u);s<l;++s)(c=t[s]).index=s,"object"!=typeof c.source&&(c.source=Ns(h,c.source)),"object"!=typeof c.target&&(c.target=Ns(h,c.target)),i[c.source.index]=(i[c.source.index]||0)+1,i[c.target.index]=(i[c.target.index]||0)+1;for(s=0,a=new Array(l);s<l;++s)c=t[s],a[s]=i[c.source.index]/(i[c.source.index]+i[c.target.index]);e=new Array(l),f(),n=new Array(l),d()}}function f(){if(r)for(var n=0,i=t.length;n<i;++n)e[n]=+s(t[n],n,t)}function d(){if(r)for(var e=0,i=t.length;e<i;++e)n[e]=+c(t[e],e,t)}return null==t&&(t=[]),l.initialize=function(t){r=t,h()},l.links=function(e){return arguments.length?(t=e,h(),l):t},l.id=function(t){return arguments.length?(o=t,l):o},l.iterations=function(t){return arguments.length?(u=+t,l):u},l.strength=function(t){return arguments.length?(s="function"==typeof t?t:ms(+t),f(),l):s},l.distance=function(t){return arguments.length?(c="function"==typeof t?t:ms(+t),d(),l):c},l};function Ds(t){return t.x}function Ls(t){return t.y}var Is=Math.PI*(3-Math.sqrt(5)),Rs=function(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),a=0,o=.6,s=Ki(),c=qn(l),u=ht("tick","end");function l(){h(),u.call("tick",e),n<r&&(c.stop(),u.call("end",e))}function h(r){var c,u,l=t.length;void 0===r&&(r=1);for(var h=0;h<r;++h)for(n+=(a-n)*i,s.each((function(t){t(n)})),c=0;c<l;++c)null==(u=t[c]).fx?u.x+=u.vx*=o:(u.x=u.fx,u.vx=0),null==u.fy?u.y+=u.vy*=o:(u.y=u.fy,u.vy=0);return e}function f(){for(var e,n=0,r=t.length;n<r;++n){if((e=t[n]).index=n,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=10*Math.sqrt(n),a=n*Is;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function d(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),f(),e={tick:h,restart:function(){return c.restart(l),e},stop:function(){return c.stop(),e},nodes:function(n){return arguments.length?(t=n,f(),s.each(d),e):t},alpha:function(t){return arguments.length?(n=+t,e):n},alphaMin:function(t){return arguments.length?(r=+t,e):r},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},force:function(t,n){return arguments.length>1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u<l;++u)(o=(i=e-(s=t[u]).x)*i+(a=n-s.y)*a)<r&&(c=s,r=o);return c},on:function(t,n){return arguments.length>1?(u.on(t,n),e):u.on(t)}}},Fs=function(){var t,e,n,r,i=ms(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=ws(t,Ds,Ls).visitAfter(l);for(n=r,i=0;i<a;++i)e=t[i],o.visit(h)}function u(){if(t){var e,n,a=t.length;for(r=new Array(a),e=0;e<a;++e)n=t[e],r[n.index]=+i(n,e,t)}}function l(t){var e,n,i,a,o,s=0,c=0;if(t.length){for(i=a=o=0;o<4;++o)(e=t[o])&&(n=Math.abs(e.value))&&(s+=e.value,c+=n,i+=n*e.x,a+=n*e.y);t.x=i/c,t.y=a/c}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=r[e.data.index]}while(e=e.next)}t.value=s}function h(t,i,c,u){if(!t.value)return!0;var l=t.x-e.x,h=t.y-e.y,f=u-i,d=l*l+h*h;if(f*f/s<d)return d<o&&(0===l&&(d+=(l=vs())*l),0===h&&(d+=(h=vs())*h),d<a&&(d=Math.sqrt(a*d)),e.vx+=l*t.value*n/d,e.vy+=h*t.value*n/d),!0;if(!(t.length||d>=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=vs())*l),0===h&&(d+=(h=vs())*h),d<a&&(d=Math.sqrt(a*d)));do{t.data!==e&&(f=r[t.data.index]*n/d,e.vx+=l*f,e.vy+=h*f)}while(t=t.next)}}return c.initialize=function(e){t=e,u()},c.strength=function(t){return arguments.length?(i="function"==typeof t?t:ms(+t),u(),c):i},c.distanceMin=function(t){return arguments.length?(a=t*t,c):Math.sqrt(a)},c.distanceMax=function(t){return arguments.length?(o=t*t,c):Math.sqrt(o)},c.theta=function(t){return arguments.length?(s=t*t,c):Math.sqrt(s)},c},Ps=function(t,e,n){var r,i,a,o=ms(.1);function s(t){for(var o=0,s=r.length;o<s;++o){var c=r[o],u=c.x-e||1e-6,l=c.y-n||1e-6,h=Math.sqrt(u*u+l*l),f=(a[o]-h)*i[o]*t/h;c.vx+=u*f,c.vy+=l*f}}function c(){if(r){var e,n=r.length;for(i=new Array(n),a=new Array(n),e=0;e<n;++e)a[e]=+t(r[e],e,r),i[e]=isNaN(a[e])?0:+o(r[e],e,r)}}return"function"!=typeof t&&(t=ms(+t)),null==e&&(e=0),null==n&&(n=0),s.initialize=function(t){r=t,c()},s.strength=function(t){return arguments.length?(o="function"==typeof t?t:ms(+t),c(),s):o},s.radius=function(e){return arguments.length?(t="function"==typeof e?e:ms(+e),c(),s):t},s.x=function(t){return arguments.length?(e=+t,s):e},s.y=function(t){return arguments.length?(n=+t,s):n},s},js=function(t){var e,n,r,i=ms(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(r[a]-i.x)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=ms(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:ms(+t),o(),a):i},a.x=function(e){return arguments.length?(t="function"==typeof e?e:ms(+e),o(),a):t},a},Ys=function(t){var e,n,r,i=ms(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(r[a]-i.y)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=ms(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:ms(+t),o(),a):i},a.y=function(e){return arguments.length?(t="function"==typeof e?e:ms(+e),o(),a):t},a};function zs(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}var Us=function(t){return(t=zs(Math.abs(t)))?t[1]:NaN},$s=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function qs(t){if(!(e=$s.exec(t)))throw new Error("invalid format: "+t);var e;return new Ws({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Ws(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}qs.prototype=Ws.prototype,Ws.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Vs,Hs,Gs,Xs,Zs=function(t,e){var n=zs(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Ks={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Zs(100*t,e)},r:Zs,s:function(t,e){var n=zs(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Vs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+zs(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Qs=function(t){return t},Js=Array.prototype.map,tc=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],ec=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Qs:(e=Js.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Qs:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Js.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=qs(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,m=t.trim,v=t.type;"n"===v?(y=!0,v="g"):Ks[v]||(void 0===g&&(g=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===f?a:/[%p]/.test(v)?c:"",_=Ks[v],k=/[defgprs%]/.test(v);function w(t){var i,a,c,f=b,w=x;if("c"===v)w=_(t)+w,t="";else{var E=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:_(Math.abs(t),g),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&"+"!==h&&(E=!1),f=(E?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===v?tc[8+Vs/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i<a;)if(48>(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var T=f.length+t.length+w.length,C=T<p?new Array(p-T+1).join(e):"";switch(y&&d&&(t=r(C+t,C.length?p-w.length:1/0),C=""),n){case"<":t=f+t+w+C;break;case"=":t=f+C+t+w;break;case"^":t=C.slice(0,T=C.length>>1)+f+t+w+C.slice(T);break;default:t=C+f+t+w}return s(t)}return g=void 0===g?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=qs(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Us(e)/3))),i=Math.pow(10,-r),a=tc[8+r/3];return function(t){return n(i*t)+a}}}};function nc(t){return Hs=ec(t),Gs=Hs.format,Xs=Hs.formatPrefix,Hs}nc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var rc=function(t){return Math.max(0,-Us(Math.abs(t)))},ic=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Us(e)/3)))-Us(Math.abs(t)))},ac=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Us(e)-Us(t))+1},oc=function(){return new sc};function sc(){this.reset()}sc.prototype={constructor:sc,reset:function(){this.s=this.t=0},add:function(t){uc(cc,t,this.t),uc(this,cc.s,this.s),this.s?this.t+=cc.t:this.s=cc.t},valueOf:function(){return this.s}};var cc=new sc;function uc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var lc=Math.PI,hc=lc/2,fc=lc/4,dc=2*lc,pc=180/lc,yc=lc/180,gc=Math.abs,mc=Math.atan,vc=Math.atan2,bc=Math.cos,xc=Math.ceil,_c=Math.exp,kc=(Math.floor,Math.log),wc=Math.pow,Ec=Math.sin,Tc=Math.sign||function(t){return t>0?1:t<0?-1:0},Cc=Math.sqrt,Sc=Math.tan;function Ac(t){return t>1?0:t<-1?lc:Math.acos(t)}function Mc(t){return t>1?hc:t<-1?-hc:Math.asin(t)}function Oc(t){return(t=Ec(t/2))*t}function Nc(){}function Bc(t,e){t&&Lc.hasOwnProperty(t.type)&&Lc[t.type](t,e)}var Dc={Feature:function(t,e){Bc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)Bc(n[r].geometry,e)}},Lc={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)t=n[r],e.point(t[0],t[1],t[2])},LineString:function(t,e){Ic(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Ic(n[r],e,0)},Polygon:function(t,e){Rc(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Rc(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)Bc(n[r],e)}};function Ic(t,e,n){var r,i=-1,a=t.length-n;for(e.lineStart();++i<a;)r=t[i],e.point(r[0],r[1],r[2]);e.lineEnd()}function Rc(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)Ic(t[n],e,1);e.polygonEnd()}var Fc,Pc,jc,Yc,zc,Uc=function(t,e){t&&Dc.hasOwnProperty(t.type)?Dc[t.type](t,e):Bc(t,e)},$c=oc(),qc=oc(),Wc={point:Nc,lineStart:Nc,lineEnd:Nc,polygonStart:function(){$c.reset(),Wc.lineStart=Vc,Wc.lineEnd=Hc},polygonEnd:function(){var t=+$c;qc.add(t<0?dc+t:t),this.lineStart=this.lineEnd=this.point=Nc},sphere:function(){qc.add(dc)}};function Vc(){Wc.point=Gc}function Hc(){Xc(Fc,Pc)}function Gc(t,e){Wc.point=Xc,Fc=t,Pc=e,jc=t*=yc,Yc=bc(e=(e*=yc)/2+fc),zc=Ec(e)}function Xc(t,e){var n=(t*=yc)-jc,r=n>=0?1:-1,i=r*n,a=bc(e=(e*=yc)/2+fc),o=Ec(e),s=zc*o,c=Yc*a+s*bc(i),u=s*r*Ec(i);$c.add(vc(u,c)),jc=t,Yc=a,zc=o}var Zc=function(t){return qc.reset(),Uc(t,Wc),2*qc};function Kc(t){return[vc(t[1],t[0]),Mc(t[2])]}function Qc(t){var e=t[0],n=t[1],r=bc(n);return[r*bc(e),r*Ec(e),Ec(n)]}function Jc(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function tu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function eu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function nu(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function ru(t){var e=Cc(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var iu,au,ou,su,cu,uu,lu,hu,fu,du,pu=oc(),yu={point:gu,lineStart:vu,lineEnd:bu,polygonStart:function(){yu.point=xu,yu.lineStart=_u,yu.lineEnd=ku,pu.reset(),Wc.polygonStart()},polygonEnd:function(){Wc.polygonEnd(),yu.point=gu,yu.lineStart=vu,yu.lineEnd=bu,$c<0?(iu=-(ou=180),au=-(su=90)):pu>1e-6?su=90:pu<-1e-6&&(au=-90),du[0]=iu,du[1]=ou},sphere:function(){iu=-(ou=180),au=-(su=90)}};function gu(t,e){fu.push(du=[iu=t,ou=t]),e<au&&(au=e),e>su&&(su=e)}function mu(t,e){var n=Qc([t*yc,e*yc]);if(hu){var r=tu(hu,n),i=tu([r[1],-r[0],0],r);ru(i),i=Kc(i);var a,o=t-cu,s=o>0?1:-1,c=i[0]*pc*s,u=gc(o)>180;u^(s*cu<c&&c<s*t)?(a=i[1]*pc)>su&&(su=a):u^(s*cu<(c=(c+360)%360-180)&&c<s*t)?(a=-i[1]*pc)<au&&(au=a):(e<au&&(au=e),e>su&&(su=e)),u?t<cu?wu(iu,t)>wu(iu,ou)&&(ou=t):wu(t,ou)>wu(iu,ou)&&(iu=t):ou>=iu?(t<iu&&(iu=t),t>ou&&(ou=t)):t>cu?wu(iu,t)>wu(iu,ou)&&(ou=t):wu(t,ou)>wu(iu,ou)&&(iu=t)}else fu.push(du=[iu=t,ou=t]);e<au&&(au=e),e>su&&(su=e),hu=n,cu=t}function vu(){yu.point=mu}function bu(){du[0]=iu,du[1]=ou,yu.point=gu,hu=null}function xu(t,e){if(hu){var n=t-cu;pu.add(gc(n)>180?n+(n>0?360:-360):n)}else uu=t,lu=e;Wc.point(t,e),mu(t,e)}function _u(){Wc.lineStart()}function ku(){xu(uu,lu),Wc.lineEnd(),gc(pu)>1e-6&&(iu=-(ou=180)),du[0]=iu,du[1]=ou,hu=null}function wu(t,e){return(e-=t)<0?e+360:e}function Eu(t,e){return t[0]-e[0]}function Tu(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}var Cu,Su,Au,Mu,Ou,Nu,Bu,Du,Lu,Iu,Ru,Fu,Pu,ju,Yu,zu,Uu=function(t){var e,n,r,i,a,o,s;if(su=ou=-(iu=au=1/0),fu=[],Uc(t,yu),n=fu.length){for(fu.sort(Eu),e=1,a=[r=fu[0]];e<n;++e)Tu(r,(i=fu[e])[0])||Tu(r,i[1])?(wu(r[0],i[1])>wu(r[0],r[1])&&(r[1]=i[1]),wu(i[0],r[1])>wu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=wu(r[1],i[0]))>o&&(o=s,iu=i[0],ou=r[1])}return fu=du=null,iu===1/0||au===1/0?[[NaN,NaN],[NaN,NaN]]:[[iu,au],[ou,su]]},$u={sphere:Nc,point:qu,lineStart:Vu,lineEnd:Xu,polygonStart:function(){$u.lineStart=Zu,$u.lineEnd=Ku},polygonEnd:function(){$u.lineStart=Vu,$u.lineEnd=Xu}};function qu(t,e){t*=yc;var n=bc(e*=yc);Wu(n*bc(t),n*Ec(t),Ec(e))}function Wu(t,e,n){++Cu,Au+=(t-Au)/Cu,Mu+=(e-Mu)/Cu,Ou+=(n-Ou)/Cu}function Vu(){$u.point=Hu}function Hu(t,e){t*=yc;var n=bc(e*=yc);ju=n*bc(t),Yu=n*Ec(t),zu=Ec(e),$u.point=Gu,Wu(ju,Yu,zu)}function Gu(t,e){t*=yc;var n=bc(e*=yc),r=n*bc(t),i=n*Ec(t),a=Ec(e),o=vc(Cc((o=Yu*a-zu*i)*o+(o=zu*r-ju*a)*o+(o=ju*i-Yu*r)*o),ju*r+Yu*i+zu*a);Su+=o,Nu+=o*(ju+(ju=r)),Bu+=o*(Yu+(Yu=i)),Du+=o*(zu+(zu=a)),Wu(ju,Yu,zu)}function Xu(){$u.point=qu}function Zu(){$u.point=Qu}function Ku(){Ju(Fu,Pu),$u.point=qu}function Qu(t,e){Fu=t,Pu=e,t*=yc,e*=yc,$u.point=Ju;var n=bc(e);ju=n*bc(t),Yu=n*Ec(t),zu=Ec(e),Wu(ju,Yu,zu)}function Ju(t,e){t*=yc;var n=bc(e*=yc),r=n*bc(t),i=n*Ec(t),a=Ec(e),o=Yu*a-zu*i,s=zu*r-ju*a,c=ju*i-Yu*r,u=Cc(o*o+s*s+c*c),l=Mc(u),h=u&&-l/u;Lu+=h*o,Iu+=h*s,Ru+=h*c,Su+=l,Nu+=l*(ju+(ju=r)),Bu+=l*(Yu+(Yu=i)),Du+=l*(zu+(zu=a)),Wu(ju,Yu,zu)}var tl=function(t){Cu=Su=Au=Mu=Ou=Nu=Bu=Du=Lu=Iu=Ru=0,Uc(t,$u);var e=Lu,n=Iu,r=Ru,i=e*e+n*n+r*r;return i<1e-12&&(e=Nu,n=Bu,r=Du,Su<1e-6&&(e=Au,n=Mu,r=Ou),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[vc(n,e)*pc,Mc(r/Cc(i))*pc]},el=function(t){return function(){return t}},nl=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function rl(t,e){return[gc(t)>lc?t+Math.round(-t/dc)*dc:t,e]}function il(t,e,n){return(t%=dc)?e||n?nl(ol(t),sl(e,n)):ol(t):e||n?sl(e,n):rl}function al(t){return function(e,n){return[(e+=t)>lc?e-dc:e<-lc?e+dc:e,n]}}function ol(t){var e=al(t);return e.invert=al(-t),e}function sl(t,e){var n=bc(t),r=Ec(t),i=bc(e),a=Ec(e);function o(t,e){var o=bc(e),s=bc(t)*o,c=Ec(t)*o,u=Ec(e),l=u*n+s*r;return[vc(c*i-l*a,s*n-u*r),Mc(l*i+c*a)]}return o.invert=function(t,e){var o=bc(e),s=bc(t)*o,c=Ec(t)*o,u=Ec(e),l=u*i-c*a;return[vc(c*i+u*a,s*n+l*r),Mc(l*n-s*r)]},o}rl.invert=rl;var cl=function(t){function e(e){return(e=t(e[0]*yc,e[1]*yc))[0]*=pc,e[1]*=pc,e}return t=il(t[0]*yc,t[1]*yc,t.length>2?t[2]*yc:0),e.invert=function(e){return(e=t.invert(e[0]*yc,e[1]*yc))[0]*=pc,e[1]*=pc,e},e};function ul(t,e,n,r,i,a){if(n){var o=bc(e),s=Ec(e),c=r*n;null==i?(i=e+r*dc,a=e-c/2):(i=ll(o,i),a=ll(o,a),(r>0?i<a:i>a)&&(i+=r*dc));for(var u,l=i;r>0?l>a:l<a;l-=c)u=Kc([o,-s*bc(l),-s*Ec(l)]),t.point(u[0],u[1])}}function ll(t,e){(e=Qc(e))[0]-=t,ru(e);var n=Ac(-e[1]);return((-e[2]<0?-n:n)+dc-1e-6)%dc}var hl=function(){var t,e,n=el([0,0]),r=el(90),i=el(6),a={point:function(n,r){t.push(n=e(n,r)),n[0]*=pc,n[1]*=pc}};function o(){var o=n.apply(this,arguments),s=r.apply(this,arguments)*yc,c=i.apply(this,arguments)*yc;return t=[],e=il(-o[0]*yc,-o[1]*yc,0).invert,ul(a,s,c,1),o={type:"Polygon",coordinates:[t]},t=e=null,o}return o.center=function(t){return arguments.length?(n="function"==typeof t?t:el([+t[0],+t[1]]),o):n},o.radius=function(t){return arguments.length?(r="function"==typeof t?t:el(+t),o):r},o.precision=function(t){return arguments.length?(i="function"==typeof t?t:el(+t),o):i},o},fl=function(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:Nc,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},dl=function(t,e){return gc(t[0]-e[0])<1e-6&&gc(t[1]-e[1])<1e-6};function pl(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var yl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(dl(r,o)){if(!r[2]&&!o[2]){for(i.lineStart(),a=0;a<e;++a)i.point((r=t[a])[0],r[1]);return void i.lineEnd()}o[0]+=2e-6}s.push(n=new pl(r,t,null,!0)),c.push(n.o=new pl(r,null,n,!1)),s.push(n=new pl(o,t,null,!1)),c.push(n.o=new pl(o,null,n,!0))}})),s.length){for(c.sort(e),gl(s),gl(c),a=0,o=c.length;a<o;++a)c[a].e=n=!n;for(var u,l,h=s[0];;){for(var f=h,d=!0;f.v;)if((f=f.n)===h)return;u=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(d)for(a=0,o=u.length;a<o;++a)i.point((l=u[a])[0],l[1]);else r(f.x,f.n.x,1,i);f=f.n}else{if(d)for(u=f.p.z,a=u.length-1;a>=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function gl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}var ml=oc();function vl(t){return gc(t[0])<=lc?t[0]:Tc(t[0])*((gc(t[0])+lc)%dc-lc)}var bl=function(t,e){var n=vl(e),r=e[1],i=Ec(r),a=[Ec(n),-bc(n),0],o=0,s=0;ml.reset(),1===i?r=hc+1e-6:-1===i&&(r=-hc-1e-6);for(var c=0,u=t.length;c<u;++c)if(h=(l=t[c]).length)for(var l,h,f=l[h-1],d=vl(f),p=f[1]/2+fc,y=Ec(p),g=bc(p),m=0;m<h;++m,d=b,y=_,g=k,f=v){var v=l[m],b=vl(v),x=v[1]/2+fc,_=Ec(x),k=bc(x),w=b-d,E=w>=0?1:-1,T=E*w,C=T>lc,S=y*_;if(ml.add(vc(S*E*Ec(T),g*k+S*bc(T))),o+=C?w+E*dc:w,C^d>=n^b>=n){var A=tu(Qc(f),Qc(v));ru(A);var M=tu(a,A);ru(M);var O=(C^w>=0?-1:1)*Mc(M[2]);(r>O||r===O&&(A[0]||A[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&ml<-1e-6)^1&s},xl=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=fl(),l=e(u),h=!1,f={point:d,lineStart:y,lineEnd:g,polygonStart:function(){f.point=m,f.lineStart=v,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=y,f.lineEnd=g,o=P(o);var t=bl(a,r);o.length?(h||(i.polygonStart(),h=!0),yl(o,kl,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function y(){f.point=p,c.lineStart()}function g(){f.point=d,c.lineEnd()}function m(t,e){s.push([t,e]),l.point(t,e)}function v(){l.lineStart(),s=[]}function b(){m(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t<e;++t)i.point((r=n[t])[0],r[1]);i.lineEnd()}}else d>1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(_l))}return f}};function _l(t){return t.length>1}function kl(t,e){return((t=t.x)[0]<0?t[1]-hc-1e-6:hc-t[1])-((e=e.x)[0]<0?e[1]-hc-1e-6:hc-e[1])}var wl=xl((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?lc:-lc,c=gc(a-n);gc(c-lc)<1e-6?(t.point(n,r=(r+o)/2>0?hc:-hc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=lc&&(gc(n-i)<1e-6&&(n-=1e-6*i),gc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Ec(t-n);return gc(o)>1e-6?mc((Ec(e)*(a=bc(r))*Ec(n)-Ec(r)*(i=bc(e))*Ec(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*hc,r.point(-lc,i),r.point(0,i),r.point(lc,i),r.point(lc,0),r.point(lc,-i),r.point(0,-i),r.point(-lc,-i),r.point(-lc,0),r.point(-lc,i);else if(gc(t[0]-e[0])>1e-6){var a=t[0]<e[0]?lc:-lc;i=n*a/2,r.point(-a,i),r.point(0,i),r.point(a,i)}else r.point(e[0],e[1])}),[-lc,-hc]),El=function(t){var e=bc(t),n=6*yc,r=e>0,i=gc(e)>1e-6;function a(t,n){return bc(t)*bc(n)>e}function o(t,n,r){var i=[1,0,0],a=tu(Qc(t),Qc(n)),o=Jc(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=tu(i,a),f=nu(i,u);eu(f,nu(a,l));var d=h,p=Jc(f,d),y=Jc(d,d),g=p*p-y*(Jc(f,f)-1);if(!(g<0)){var m=Cc(g),v=nu(d,(-p-m)/y);if(eu(v,f),v=Kc(v),!r)return v;var b,x=t[0],_=n[0],k=t[1],w=n[1];_<x&&(b=x,x=_,_=b);var E=_-x,T=gc(E-lc)<1e-6;if(!T&&w<k&&(b=k,k=w,w=b),T||E<1e-6?T?k+w>0^v[1]<(gc(v[0]-x)<1e-6?k:w):k<=v[1]&&v[1]<=w:E>lc^(x<=v[0]&&v[0]<=_)){var C=nu(d,(-p+m)/y);return eu(C,f),[v,Kc(C)]}}}function s(e,n){var i=r?t:lc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return xl(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],y=a(h,f),g=r?y?0:s(h,f):y?s(h+(h<0?lc:-lc),f):0;if(!e&&(u=c=y)&&t.lineStart(),y!==c&&(!(d=o(e,p))||dl(e,d)||dl(p,d))&&(p[2]=1),y!==c)l=0,y?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^y){var m;g&n||!(m=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1],3)))}!y||e&&dl(e,p)||t.point(p[0],p[1]),e=p,c=y,n=g},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){ul(a,t,n,i,e,r)}),r?[0,-t]:[-lc,t-lc])};function Tl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return gc(r[0]-t)<1e-6?i>0?0:3:gc(r[0]-n)<1e-6?i>0?2:1:gc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,y,g,m,v,b=o,x=fl(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]),m=!0,g=!1,p=y=NaN},lineEnd:function(){c&&(w(h,f),d&&g&&x.rejoin(),c.push(x.result())),_.point=k,g&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;n<i;++n)for(var a,o,s=u[n],c=1,l=s.length,h=s[0],f=h[0],d=h[1];c<l;++c)a=f,o=d,f=(h=s[c])[0],d=h[1],o<=r?d>r&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=v&&e,i=(c=P(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&yl(c,s,e,a,o),o.polygonEnd()),b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),m)h=a,f=o,d=s,m=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&g)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),y=Math.max(-1e9,Math.min(1e9,y))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o<u)return;o<l&&(l=o)}else if(h>0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o<u)return;o<l&&(l=o)}if(o=r-c,f||!(o>0)){if(o/=f,f<0){if(o<u)return;o<l&&(l=o)}else if(f>0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o<u)return;o<l&&(l=o)}return u>0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),v=!1):(g||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),v=!1)}p=a,y=o,g=s}return _}}var Cl,Sl,Al,Ml=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Tl(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Ol=oc(),Nl={sphere:Nc,point:Nc,lineStart:function(){Nl.point=Dl,Nl.lineEnd=Bl},lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc};function Bl(){Nl.point=Nl.lineEnd=Nc}function Dl(t,e){Cl=t*=yc,Sl=Ec(e*=yc),Al=bc(e),Nl.point=Ll}function Ll(t,e){t*=yc;var n=Ec(e*=yc),r=bc(e),i=gc(t-Cl),a=bc(i),o=r*Ec(i),s=Al*n-Sl*r*a,c=Sl*n+Al*r*a;Ol.add(vc(Cc(o*o+s*s),c)),Cl=t,Sl=n,Al=r}var Il=function(t){return Ol.reset(),Uc(t,Nl),+Ol},Rl=[null,null],Fl={type:"LineString",coordinates:Rl},Pl=function(t,e){return Rl[0]=t,Rl[1]=e,Il(Fl)},jl={Feature:function(t,e){return zl(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)if(zl(n[r].geometry,e))return!0;return!1}},Yl={Sphere:function(){return!0},Point:function(t,e){return Ul(t.coordinates,e)},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Ul(n[r],e))return!0;return!1},LineString:function(t,e){return $l(t.coordinates,e)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if($l(n[r],e))return!0;return!1},Polygon:function(t,e){return ql(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(ql(n[r],e))return!0;return!1},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)if(zl(n[r],e))return!0;return!1}};function zl(t,e){return!(!t||!Yl.hasOwnProperty(t.type))&&Yl[t.type](t,e)}function Ul(t,e){return 0===Pl(t,e)}function $l(t,e){for(var n,r,i,a=0,o=t.length;a<o;a++){if(0===(r=Pl(t[a],e)))return!0;if(a>0&&(i=Pl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function ql(t,e){return!!bl(t.map(Wl),Vl(e))}function Wl(t){return(t=t.map(Vl)).pop(),t}function Vl(t){return[t[0]*yc,t[1]*yc]}var Hl=function(t,e){return(t&&jl.hasOwnProperty(t.type)?jl[t.type]:zl)(t,e)};function Gl(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Xl(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Zl(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,y=360,g=2.5;function m(){return{type:"MultiLineString",coordinates:v()}}function v(){return w(xc(r/p)*p,n,p).map(l).concat(w(xc(s/y)*y,o,y).map(h)).concat(w(xc(e/f)*f,t,f).filter((function(t){return gc(t%p)>1e-6})).map(c)).concat(w(xc(a/d)*d,i,d).filter((function(t){return gc(t%y)>1e-6})).map(u))}return m.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},m.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),m.precision(g)):[[r,s],[n,o]]},m.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),m.precision(g)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(p=+t[0],y=+t[1],m):[p,y]},m.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],m):[f,d]},m.precision=function(f){return arguments.length?(g=+f,c=Gl(a,i,90),u=Xl(e,t,g),l=Gl(s,o,90),h=Xl(r,n,g),m):g},m.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function Kl(){return Zl()()}var Ql,Jl,th,eh,nh=function(t,e){var n=t[0]*yc,r=t[1]*yc,i=e[0]*yc,a=e[1]*yc,o=bc(r),s=Ec(r),c=bc(a),u=Ec(a),l=o*bc(n),h=o*Ec(n),f=c*bc(i),d=c*Ec(i),p=2*Mc(Cc(Oc(a-r)+o*c*Oc(i-n))),y=Ec(p),g=p?function(t){var e=Ec(t*=p)/y,n=Ec(p-t)/y,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[vc(i,r)*pc,vc(a,Cc(r*r+i*i))*pc]}:function(){return[n*pc,r*pc]};return g.distance=p,g},rh=function(t){return t},ih=oc(),ah=oc(),oh={point:Nc,lineStart:Nc,lineEnd:Nc,polygonStart:function(){oh.lineStart=sh,oh.lineEnd=lh},polygonEnd:function(){oh.lineStart=oh.lineEnd=oh.point=Nc,ih.add(gc(ah)),ah.reset()},result:function(){var t=ih/2;return ih.reset(),t}};function sh(){oh.point=ch}function ch(t,e){oh.point=uh,Ql=th=t,Jl=eh=e}function uh(t,e){ah.add(eh*t-th*e),th=t,eh=e}function lh(){uh(Ql,Jl)}var hh,fh,dh,ph,yh=oh,gh=1/0,mh=gh,vh=-gh,bh=vh,xh={point:function(t,e){t<gh&&(gh=t),t>vh&&(vh=t),e<mh&&(mh=e),e>bh&&(bh=e)},lineStart:Nc,lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc,result:function(){var t=[[gh,mh],[vh,bh]];return vh=bh=-(mh=gh=1/0),t}},_h=0,kh=0,wh=0,Eh=0,Th=0,Ch=0,Sh=0,Ah=0,Mh=0,Oh={point:Nh,lineStart:Bh,lineEnd:Ih,polygonStart:function(){Oh.lineStart=Rh,Oh.lineEnd=Fh},polygonEnd:function(){Oh.point=Nh,Oh.lineStart=Bh,Oh.lineEnd=Ih},result:function(){var t=Mh?[Sh/Mh,Ah/Mh]:Ch?[Eh/Ch,Th/Ch]:wh?[_h/wh,kh/wh]:[NaN,NaN];return _h=kh=wh=Eh=Th=Ch=Sh=Ah=Mh=0,t}};function Nh(t,e){_h+=t,kh+=e,++wh}function Bh(){Oh.point=Dh}function Dh(t,e){Oh.point=Lh,Nh(dh=t,ph=e)}function Lh(t,e){var n=t-dh,r=e-ph,i=Cc(n*n+r*r);Eh+=i*(dh+t)/2,Th+=i*(ph+e)/2,Ch+=i,Nh(dh=t,ph=e)}function Ih(){Oh.point=Nh}function Rh(){Oh.point=Ph}function Fh(){jh(hh,fh)}function Ph(t,e){Oh.point=jh,Nh(hh=dh=t,fh=ph=e)}function jh(t,e){var n=t-dh,r=e-ph,i=Cc(n*n+r*r);Eh+=i*(dh+t)/2,Th+=i*(ph+e)/2,Ch+=i,Sh+=(i=ph*t-dh*e)*(dh+t),Ah+=i*(ph+e),Mh+=3*i,Nh(dh=t,ph=e)}var Yh=Oh;function zh(t){this._context=t}zh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,dc)}},result:Nc};var Uh,$h,qh,Wh,Vh,Hh=oc(),Gh={point:Nc,lineStart:function(){Gh.point=Xh},lineEnd:function(){Uh&&Zh($h,qh),Gh.point=Nc},polygonStart:function(){Uh=!0},polygonEnd:function(){Uh=null},result:function(){var t=+Hh;return Hh.reset(),t}};function Xh(t,e){Gh.point=Zh,$h=Wh=t,qh=Vh=e}function Zh(t,e){Wh-=t,Vh-=e,Hh.add(Cc(Wh*Wh+Vh*Vh)),Wh=t,Vh=e}var Kh=Gh;function Qh(){this._string=[]}function Jh(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Qh.prototype={_radius:4.5,_circle:Jh(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Jh(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var tf=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Uc(t,n(r))),r.result()}return a.area=function(t){return Uc(t,n(yh)),yh.result()},a.measure=function(t){return Uc(t,n(Kh)),Kh.result()},a.bounds=function(t){return Uc(t,n(xh)),xh.result()},a.centroid=function(t){return Uc(t,n(Yh)),Yh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,rh):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Qh):new zh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},ef=function(t){return{stream:nf(t)}};function nf(t){return function(e){var n=new rf;for(var r in t)n[r]=t[r];return n.stream=e,n}}function rf(){}function af(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Uc(n,t.stream(xh)),e(xh.result()),null!=r&&t.clipExtent(r),t}function of(t,e,n){return af(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function sf(t,e,n){return of(t,[[0,0],e],n)}function cf(t,e,n){return af(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function uf(t,e,n){return af(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}rf.prototype={constructor:rf,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var lf=bc(30*yc),hf=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,y,g){var m=u-r,v=l-i,b=m*m+v*v;if(b>4*e&&y--){var x=o+f,_=s+d,k=c+p,w=Cc(x*x+_*_+k*k),E=Mc(k/=w),T=gc(gc(k)-1)<1e-6||gc(a-h)<1e-6?(a+h)/2:vc(_,x),C=t(T,E),S=C[0],A=C[1],M=S-r,O=A-i,N=v*M-m*O;(N*N/b>e||gc((m*M+v*O)/b-.5)>.3||o*f+s*d+c*p<lf)&&(n(r,i,a,o,s,c,S,A,T,x/=w,_/=w,k,y,g),g.point(S,A),n(S,A,T,x,_,k,u,l,h,f,d,p,y,g))}}return function(e){var r,i,a,o,s,c,u,l,h,f,d,p,y={point:g,lineStart:m,lineEnd:b,polygonStart:function(){e.polygonStart(),y.lineStart=x},polygonEnd:function(){e.polygonEnd(),y.lineStart=m}};function g(n,r){n=t(n,r),e.point(n[0],n[1])}function m(){l=NaN,y.point=v,e.lineStart()}function v(r,i){var a=Qc([r,i]),o=t(r,i);n(l,h,u,f,d,p,l=o[0],h=o[1],u=r,f=a[0],d=a[1],p=a[2],16,e),e.point(l,h)}function b(){y.point=g,e.lineEnd()}function x(){m(),y.point=_,y.lineEnd=k}function _(t,e){v(r=t,e),i=l,a=h,o=f,s=d,c=p,y.point=v}function k(){n(l,h,u,f,d,p,i,a,r,o,s,c,16,e),y.lineEnd=b,b()}return y}}(t,e):function(t){return nf({point:function(e,n){e=t(e,n),this.stream.point(e[0],e[1])}})}(t)},ff=nf({point:function(t,e){this.stream.point(t*yc,e*yc)}});function df(t,e,n,r,i){function a(a,o){return[e+t*(a*=r),n-t*(o*=i)]}return a.invert=function(a,o){return[(a-e)/t*r,(n-o)/t*i]},a}function pf(t,e,n,r,i,a){var o=bc(a),s=Ec(a),c=o*t,u=s*t,l=o/t,h=s/t,f=(s*n-o*e)/t,d=(s*e+o*n)/t;function p(t,a){return[c*(t*=r)-u*(a*=i)+e,n-u*t-c*a]}return p.invert=function(t,e){return[r*(l*t-h*e+f),i*(d-h*t-l*e)]},p}function yf(t){return gf((function(){return t}))()}function gf(t){var e,n,r,i,a,o,s,c,u,l,h=150,f=480,d=250,p=0,y=0,g=0,m=0,v=0,b=0,x=1,_=1,k=null,w=wl,E=null,T=rh,C=.5;function S(t){return c(t[0]*yc,t[1]*yc)}function A(t){return(t=c.invert(t[0],t[1]))&&[t[0]*pc,t[1]*pc]}function M(){var t=pf(h,0,0,x,_,b).apply(null,e(p,y)),r=(b?pf:df)(h,f-t[0],d-t[1],x,_,b);return n=il(g,m,v),s=nl(e,r),c=nl(n,s),o=hf(s,C),O()}function O(){return u=l=null,S}return S.stream=function(t){return u&&l===t?u:u=ff(function(t){return nf({point:function(e,n){var r=t(e,n);return this.stream.point(r[0],r[1])}})}(n)(w(o(T(l=t)))))},S.preclip=function(t){return arguments.length?(w=t,k=void 0,O()):w},S.postclip=function(t){return arguments.length?(T=t,E=r=i=a=null,O()):T},S.clipAngle=function(t){return arguments.length?(w=+t?El(k=t*yc):(k=null,wl),O()):k*pc},S.clipExtent=function(t){return arguments.length?(T=null==t?(E=r=i=a=null,rh):Tl(E=+t[0][0],r=+t[0][1],i=+t[1][0],a=+t[1][1]),O()):null==E?null:[[E,r],[i,a]]},S.scale=function(t){return arguments.length?(h=+t,M()):h},S.translate=function(t){return arguments.length?(f=+t[0],d=+t[1],M()):[f,d]},S.center=function(t){return arguments.length?(p=t[0]%360*yc,y=t[1]%360*yc,M()):[p*pc,y*pc]},S.rotate=function(t){return arguments.length?(g=t[0]%360*yc,m=t[1]%360*yc,v=t.length>2?t[2]%360*yc:0,M()):[g*pc,m*pc,v*pc]},S.angle=function(t){return arguments.length?(b=t%360*yc,M()):b*pc},S.reflectX=function(t){return arguments.length?(x=t?-1:1,M()):x<0},S.reflectY=function(t){return arguments.length?(_=t?-1:1,M()):_<0},S.precision=function(t){return arguments.length?(o=hf(s,C=t*t),O()):Cc(C)},S.fitExtent=function(t,e){return of(S,t,e)},S.fitSize=function(t,e){return sf(S,t,e)},S.fitWidth=function(t,e){return cf(S,t,e)},S.fitHeight=function(t,e){return uf(S,t,e)},function(){return e=t.apply(this,arguments),S.invert=e.invert&&A,M()}}function mf(t){var e=0,n=lc/3,r=gf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*yc,n=t[1]*yc):[e*pc,n*pc]},i}function vf(t,e){var n=Ec(t),r=(n+Ec(e))/2;if(gc(r)<1e-6)return function(t){var e=bc(t);function n(t,n){return[t*e,Ec(n)/e]}return n.invert=function(t,n){return[t/e,Mc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Cc(i)/r;function o(t,e){var n=Cc(i-2*r*Ec(e))/r;return[n*Ec(t*=r),a-n*bc(t)]}return o.invert=function(t,e){var n=a-e,o=vc(t,gc(n))*Tc(n);return n*r<0&&(o-=lc*Tc(t)*Tc(n)),[o/r,Mc((i-(t*t+n*n)*r*r)/(2*r))]},o}var bf=function(){return mf(vf).scale(155.424).center([0,33.6442])},xf=function(){return bf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},_f=function(){var t,e,n,r,i,a,o=xf(),s=bf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=bf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n<i;)r[n].point(t,e)},sphere:function(){for(var t=-1;++t<i;)r[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)r[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)r[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)r[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)r[t].polygonEnd()}});var r,i},l.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),c.precision(t),h()):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),c.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],l=+t[1];return n=o.translate(t).clipExtent([[a-.455*e,l-.238*e],[a+.455*e,l+.238*e]]).stream(u),r=s.translate([a-.307*e,l+.201*e]).clipExtent([[a-.425*e+1e-6,l+.12*e+1e-6],[a-.214*e-1e-6,l+.234*e-1e-6]]).stream(u),i=c.translate([a-.205*e,l+.212*e]).clipExtent([[a-.214*e+1e-6,l+.166*e+1e-6],[a-.115*e-1e-6,l+.234*e-1e-6]]).stream(u),h()},l.fitExtent=function(t,e){return of(l,t,e)},l.fitSize=function(t,e){return sf(l,t,e)},l.fitWidth=function(t,e){return cf(l,t,e)},l.fitHeight=function(t,e){return uf(l,t,e)},l.scale(1070)};function kf(t){return function(e,n){var r=bc(e),i=bc(n),a=t(r*i);return[a*i*Ec(e),a*Ec(n)]}}function wf(t){return function(e,n){var r=Cc(e*e+n*n),i=t(r),a=Ec(i),o=bc(i);return[vc(e*a,r*o),Mc(r&&n*a/r)]}}var Ef=kf((function(t){return Cc(2/(1+t))}));Ef.invert=wf((function(t){return 2*Mc(t/2)}));var Tf=function(){return yf(Ef).scale(124.75).clipAngle(179.999)},Cf=kf((function(t){return(t=Ac(t))&&t/Ec(t)}));Cf.invert=wf((function(t){return t}));var Sf=function(){return yf(Cf).scale(79.4188).clipAngle(179.999)};function Af(t,e){return[t,kc(Sc((hc+e)/2))]}Af.invert=function(t,e){return[t,2*mc(_c(e))-hc]};var Mf=function(){return Of(Af).scale(961/dc)};function Of(t){var e,n,r,i=yf(t),a=i.center,o=i.scale,s=i.translate,c=i.clipExtent,u=null;function l(){var a=lc*o(),s=i(cl(i.rotate()).invert([0,0]));return c(null==u?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===Af?[[Math.max(s[0]-a,u),e],[Math.min(s[0]+a,n),r]]:[[u,Math.max(s[1]-a,e)],[n,Math.min(s[1]+a,r)]])}return i.scale=function(t){return arguments.length?(o(t),l()):o()},i.translate=function(t){return arguments.length?(s(t),l()):s()},i.center=function(t){return arguments.length?(a(t),l()):a()},i.clipExtent=function(t){return arguments.length?(null==t?u=e=n=r=null:(u=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),l()):null==u?null:[[u,e],[n,r]]},l()}function Nf(t){return Sc((hc+t)/2)}function Bf(t,e){var n=bc(t),r=t===e?Ec(t):kc(n/bc(e))/kc(Nf(e)/Nf(t)),i=n*wc(Nf(t),r)/r;if(!r)return Af;function a(t,e){i>0?e<1e-6-hc&&(e=1e-6-hc):e>hc-1e-6&&(e=hc-1e-6);var n=i/wc(Nf(e),r);return[n*Ec(r*t),i-n*bc(r*t)]}return a.invert=function(t,e){var n=i-e,a=Tc(r)*Cc(t*t+n*n),o=vc(t,gc(n))*Tc(n);return n*r<0&&(o-=lc*Tc(t)*Tc(n)),[o/r,2*mc(wc(i/a,1/r))-hc]},a}var Df=function(){return mf(Bf).scale(109.5).parallels([30,30])};function Lf(t,e){return[t,e]}Lf.invert=Lf;var If=function(){return yf(Lf).scale(152.63)};function Rf(t,e){var n=bc(t),r=t===e?Ec(t):(n-bc(e))/(e-t),i=n/r+t;if(gc(r)<1e-6)return Lf;function a(t,e){var n=i-e,a=r*t;return[n*Ec(a),i-n*bc(a)]}return a.invert=function(t,e){var n=i-e,a=vc(t,gc(n))*Tc(n);return n*r<0&&(a-=lc*Tc(t)*Tc(n)),[a/r,i-Tc(r)*Cc(t*t+n*n)]},a}var Ff=function(){return mf(Rf).scale(131.154).center([0,13.9389])},Pf=1.340264,jf=-.081106,Yf=893e-6,zf=.003796,Uf=Cc(3)/2;function $f(t,e){var n=Mc(Uf*Ec(e)),r=n*n,i=r*r*r;return[t*bc(n)/(Uf*(Pf+3*jf*r+i*(7*Yf+9*zf*r))),n*(Pf+jf*r+i*(Yf+zf*r))]}$f.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(Pf+jf*i+a*(Yf+zf*i))-e)/(Pf+3*jf*i+a*(7*Yf+9*zf*i)))*r)*i*i,!(gc(n)<1e-12));++o);return[Uf*t*(Pf+3*jf*i+a*(7*Yf+9*zf*i))/bc(r),Mc(Ec(r)/Uf)]};var qf=function(){return yf($f).scale(177.158)};function Wf(t,e){var n=bc(e),r=bc(t)*n;return[n*Ec(t)/r,Ec(e)/r]}Wf.invert=wf(mc);var Vf=function(){return yf(Wf).scale(144.049).clipAngle(60)},Hf=function(){var t,e,n,r,i,a,o,s=1,c=0,u=0,l=1,h=1,f=0,d=null,p=1,y=1,g=nf({point:function(t,e){var n=b([t,e]);this.stream.point(n[0],n[1])}}),m=rh;function v(){return p=s*l,y=s*h,a=o=null,b}function b(n){var r=n[0]*p,i=n[1]*y;if(f){var a=i*t-r*e;r=r*t+i*e,i=a}return[r+c,i+u]}return b.invert=function(n){var r=n[0]-c,i=n[1]-u;if(f){var a=i*t+r*e;r=r*t-i*e,i=a}return[r/p,i/y]},b.stream=function(t){return a&&o===t?a:a=g(m(o=t))},b.postclip=function(t){return arguments.length?(m=t,d=n=r=i=null,v()):m},b.clipExtent=function(t){return arguments.length?(m=null==t?(d=n=r=i=null,rh):Tl(d=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),v()):null==d?null:[[d,n],[r,i]]},b.scale=function(t){return arguments.length?(s=+t,v()):s},b.translate=function(t){return arguments.length?(c=+t[0],u=+t[1],v()):[c,u]},b.angle=function(n){return arguments.length?(e=Ec(f=n%360*yc),t=bc(f),v()):f*pc},b.reflectX=function(t){return arguments.length?(l=t?-1:1,v()):l<0},b.reflectY=function(t){return arguments.length?(h=t?-1:1,v()):h<0},b.fitExtent=function(t,e){return of(b,t,e)},b.fitSize=function(t,e){return sf(b,t,e)},b.fitWidth=function(t,e){return cf(b,t,e)},b.fitHeight=function(t,e){return uf(b,t,e)},b};function Gf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Gf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(gc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Xf=function(){return yf(Gf).scale(175.295)};function Zf(t,e){return[bc(e)*Ec(t),Ec(e)]}Zf.invert=wf(Mc);var Kf=function(){return yf(Zf).scale(249.5).clipAngle(90.000001)};function Qf(t,e){var n=bc(e),r=1+bc(t)*n;return[n*Ec(t)/r,Ec(e)/r]}Qf.invert=wf((function(t){return 2*mc(t)}));var Jf=function(){return yf(Qf).scale(250).clipAngle(142)};function td(t,e){return[kc(Sc((hc+e)/2)),-t]}td.invert=function(t,e){return[-e,2*mc(_c(t))-hc]};var ed=function(){var t=Of(td),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function nd(t,e){return t.parent===e.parent?1:2}function rd(t,e){return t+e.x}function id(t,e){return Math.max(t,e.y)}var ad=function(){var t=nd,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(rd,0)/t.length}(n),e.y=function(t){return 1+t.reduce(id,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function od(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function sd(t,e){var n,r,i,a,o,s=new hd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=cd);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new hd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(ld)}function cd(t){return t.children}function ud(t){t.data=t.data.data}function ld(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function hd(t){this.data=t,this.depth=this.height=0,this.parent=null}hd.prototype=sd.prototype={constructor:hd,count:function(){return this.eachAfter(od)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r<i;++r)o.push(n[r])}while(o.length);return this},eachAfter:function(t){for(var e,n,r,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return sd(this).eachBefore(ud)}};var fd=Array.prototype.slice,dd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(fd.call(t))).length,a=[];r<i;)e=t[r],n&&gd(n,e)?++r:(n=vd(a=pd(a,e)),r=0);return n};function pd(t,e){var n,r;if(md(e,t))return[e];for(n=0;n<t.length;++n)if(yd(e,t[n])&&md(bd(t[n],e),t))return[t[n],e];for(n=0;n<t.length-1;++n)for(r=n+1;r<t.length;++r)if(yd(bd(t[n],t[r]),e)&&yd(bd(t[n],e),t[r])&&yd(bd(t[r],e),t[n])&&md(xd(t[n],t[r],e),t))return[t[n],t[r],e];throw new Error}function yd(t,e){var n=t.r-e.r,r=e.x-t.x,i=e.y-t.y;return n<0||n*n<r*r+i*i}function gd(t,e){var n=t.r-e.r+1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function md(t,e){for(var n=0;n<e.length;++n)if(!gd(t,e[n]))return!1;return!0}function vd(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return bd(t[0],t[1]);case 3:return xd(t[0],t[1],t[2])}var e}function bd(t,e){var n=t.x,r=t.y,i=t.r,a=e.x,o=e.y,s=e.r,c=a-n,u=o-r,l=s-i,h=Math.sqrt(c*c+u*u);return{x:(n+a+c/h*l)/2,y:(r+o+u/h*l)/2,r:(h+i+s)/2}}function xd(t,e,n){var r=t.x,i=t.y,a=t.r,o=e.x,s=e.y,c=e.r,u=n.x,l=n.y,h=n.r,f=r-o,d=r-u,p=i-s,y=i-l,g=c-a,m=h-a,v=r*r+i*i-a*a,b=v-o*o-s*s+c*c,x=v-u*u-l*l+h*h,_=d*p-f*y,k=(p*x-y*b)/(2*_)-r,w=(y*g-p*m)/_,E=(d*b-f*x)/(2*_)-i,T=(f*m-d*g)/_,C=w*w+T*T-1,S=2*(a+k*w+E*T),A=k*k+E*E-a*a,M=-(C?(S+Math.sqrt(S*S-4*C*A))/(2*C):A/S);return{x:r+k+w*M,y:i+E+T*M,r:M}}function _d(t,e,n){var r,i,a,o,s=t.x-e.x,c=t.y-e.y,u=s*s+c*c;u?(i=e.r+n.r,i*=i,o=t.r+n.r,i>(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function kd(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function wd(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Ed(t){this._=t,this.next=null,this.previous=null}function Td(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;_d(n,e,r=t[2]),e=new Ed(e),n=new Ed(n),r=new Ed(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s<i;++s){_d(e._,n._,r=t[s]),r=new Ed(r),c=n.next,u=e.previous,l=n._.r,h=e._.r;do{if(l<=h){if(kd(c._,r._)){n=c,e.next=n,n.previous=e,--s;continue t}l+=c._.r,c=c.next}else{if(kd(u._,r._)){(e=u).next=n,n.previous=e,--s;continue t}h+=u._.r,u=u.previous}}while(c!==u.next);for(r.previous=e,r.next=n,e.next=n.previous=n=r,a=wd(e);(r=r.next)!==n;)(o=wd(r))<a&&(e=r,a=o);n=e.next}for(e=[n._],r=n;(r=r.next)!==n;)e.push(r._);for(r=dd(e),s=0;s<i;++s)(e=t[s]).x-=r.x,e.y-=r.y;return r.r}var Cd=function(t){return Td(t),t};function Sd(t){return null==t?null:Ad(t)}function Ad(t){if("function"!=typeof t)throw new Error;return t}function Md(){return 0}var Od=function(t){return function(){return t}};function Nd(t){return Math.sqrt(t.value)}var Bd=function(){var t=null,e=1,n=1,r=Md;function i(i){return i.x=e/2,i.y=n/2,t?i.eachBefore(Dd(t)).eachAfter(Ld(r,.5)).eachBefore(Id(1)):i.eachBefore(Dd(Nd)).eachAfter(Ld(Md,1)).eachAfter(Ld(r,i.r/Math.min(e,n))).eachBefore(Id(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=Sd(e),i):t},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:Od(+t),i):r},i};function Dd(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function Ld(t,e){return function(n){if(r=n.children){var r,i,a,o=r.length,s=t(n)*e||0;if(s)for(i=0;i<o;++i)r[i].r+=s;if(a=Td(r),s)for(i=0;i<o;++i)r[i].r-=s;n.r=a+s}}}function Id(t){return function(e){var n=e.parent;e.r*=t,n&&(e.x=n.x+t*e.x,e.y=n.y+t*e.y)}}var Rd=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},Fd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(r-e)/t.value;++s<c;)(a=o[s]).y0=n,a.y1=i,a.x0=e,a.x1=e+=a.value*u},Pd=function(){var t=1,e=1,n=0,r=!1;function i(i){var a=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(r){r.children&&Fd(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,a=r.y0,o=r.x1-n,s=r.y1-n;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),r.x0=i,r.y0=a,r.x1=o,r.y1=s}}(e,a)),r&&i.eachBefore(Rd),i}return i.round=function(t){return arguments.length?(r=!!t,i):r},i.size=function(n){return arguments.length?(t=+n[0],e=+n[1],i):[t,e]},i.padding=function(t){return arguments.length?(n=+t,i):n},i},jd={depth:-1},Yd={};function zd(t){return t.id}function Ud(t){return t.parentId}var $d=function(){var t=zd,e=Ud;function n(n){var r,i,a,o,s,c,u,l=n.length,h=new Array(l),f={};for(i=0;i<l;++i)r=n[i],s=h[i]=new hd(r),null!=(c=t(r,i,n))&&(c+="")&&(f[u="$"+(s.id=c)]=u in f?Yd:s);for(i=0;i<l;++i)if(s=h[i],null!=(c=e(n[i],i,n))&&(c+="")){if(!(o=f["$"+c]))throw new Error("missing: "+c);if(o===Yd)throw new Error("ambiguous: "+c);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error("multiple roots");a=s}if(!a)throw new Error("no root");if(a.parent=jd,a.eachBefore((function(t){t.depth=t.parent.depth+1,--l})).eachBefore(ld),a.parent=null,l>0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Ad(e),n):t},n.parentId=function(t){return arguments.length?(e=Ad(t),n):e},n};function qd(t,e){return t.parent===e.parent?1:2}function Wd(t){var e=t.children;return e?e[0]:t.t}function Vd(t){var e=t.children;return e?e[e.length-1]:t.t}function Hd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Gd(t,e,n){return t.a.parent===e.parent?t.a:n}function Xd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Xd.prototype=Object.create(hd.prototype);var Zd=function(){var t=qd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Xd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Xd(r[i],i)),n.parent=e;return(o.parent=new Xd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.x<u.x&&(u=t),t.x>l.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),y=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*y}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=Vd(s),a=Wd(a),s&&a;)c=Wd(c),(o=Vd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Hd(Gd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!Vd(o)&&(o.t=s,o.m+=h-l),a&&!Wd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Kd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++s<c;)(a=o[s]).x0=e,a.x1=r,a.y0=n,a.y1=n+=a.value*u},Qd=(1+Math.sqrt(5))/2;function Jd(t,e,n,r,i,a){for(var o,s,c,u,l,h,f,d,p,y,g,m=[],v=e.children,b=0,x=0,_=v.length,k=e.value;b<_;){c=i-n,u=a-r;do{l=v[x++].value}while(!l&&x<_);for(h=f=l,g=l*l*(y=Math.max(u/c,c/u)/(k*t)),p=Math.max(f/g,g/h);x<_;++x){if(l+=s=v[x].value,s<h&&(h=s),s>f&&(f=s),g=l*l*y,(d=Math.max(f/g,g/h))>p){l-=s;break}p=d}m.push(o={value:l,dice:c<u,children:v.slice(b,x)}),o.dice?Fd(o,n,r,i,k?r+=u*l/k:a):Kd(o,n,r,k?n+=c*l/k:i,a),k-=l,b=x}return m}var tp=function t(e){function n(t,n,r,i,a){Jd(e,t,n,r,i,a)}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Qd),ep=function(){var t=tp,e=!1,n=1,r=1,i=[0],a=Md,o=Md,s=Md,c=Md,u=Md;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(Rd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h<r&&(r=h=(r+h)/2),f<l&&(l=f=(l+f)/2),e.x0=r,e.y0=l,e.x1=h,e.y1=f,e.children&&(n=i[e.depth+1]=a(e)/2,r+=u(e)-n,l+=o(e)-n,(h-=s(e)-n)<r&&(r=h=(r+h)/2),(f-=c(e)-n)<l&&(l=f=(l+f)/2),t(e,r,l,h,f))}return l.round=function(t){return arguments.length?(e=!!t,l):e},l.size=function(t){return arguments.length?(n=+t[0],r=+t[1],l):[n,r]},l.tile=function(e){return arguments.length?(t=Ad(e),l):t},l.padding=function(t){return arguments.length?l.paddingInner(t).paddingOuter(t):l.paddingInner()},l.paddingInner=function(t){return arguments.length?(a="function"==typeof t?t:Od(+t),l):a},l.paddingOuter=function(t){return arguments.length?l.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):l.paddingTop()},l.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:Od(+t),l):o},l.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:Od(+t),l):s},l.paddingBottom=function(t){return arguments.length?(c="function"==typeof t?t:Od(+t),l):c},l.paddingLeft=function(t){return arguments.length?(u="function"==typeof t?t:Od(+t),l):u},l},np=function(t,e,n,r,i){var a,o,s=t.children,c=s.length,u=new Array(c+1);for(u[0]=o=a=0;a<c;++a)u[a+1]=o+=s[a].value;!function t(e,n,r,i,a,o,c){if(e>=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}for(var h=u[e],f=r/2+h,d=e+1,p=n-1;d<p;){var y=d+p>>>1;u[y]<f?d=y+1:p=y}f-u[d-1]<u[d]-f&&e+1<d&&--d;var g=u[d]-h,m=r-g;if(o-i>c-a){var v=(i*m+o*g)/r;t(e,d,g,i,a,v,c),t(d,n,m,v,a,o,c)}else{var b=(a*m+c*g)/r;t(e,d,g,i,a,o,b),t(d,n,m,i,b,o,c)}}(0,c,t.value,e,n,r,i)},rp=function(t,e,n,r,i){(1&t.depth?Kd:Fd)(t,e,n,r,i)},ip=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h<f;){for(c=(s=o[h]).children,u=s.value=0,l=c.length;u<l;++u)s.value+=c[u].value;s.dice?Fd(s,n,r,i,r+=(a-r)*s.value/d):Kd(s,n,r,n+=(i-n)*s.value/d,a),d-=s.value}else t._squarify=o=Jd(e,t,n,r,i,a),o.ratio=e}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Qd),ap=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},op=function(t,e){var n=ln(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},sp=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},cp=Math.SQRT2;function up(t){return((t=Math.exp(t))+1/t)/2}var lp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/cp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(cp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),m=Math.log(Math.sqrt(y*y+1)-y);r=(m-g)/cp,n=function(t){var e,n=t*r,s=up(g),c=o/(2*d)*(s*(e=cp*n+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+c*l,a+c*h,o*s/up(cp*n+g)]}}return n.duration=1e3*r,n};function hp(t){return function(e,n){var r=t((e=en(e)).h,(n=en(n)).h),i=hn(e.s,n.s),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var fp=hp(ln),dp=hp(hn);function pp(t,e){var n=hn((t=pa(t)).l,(e=pa(e)).l),r=hn(t.a,e.a),i=hn(t.b,e.b),a=hn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function yp(t){return function(e,n){var r=t((e=ka(e)).h,(n=ka(n)).h),i=hn(e.c,n.c),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var gp=yp(ln),mp=yp(hn);function vp(t){return function e(n){function r(e,r){var i=t((e=Ma(e)).h,(r=Ma(r)).h),a=hn(e.s,r.s),o=hn(e.l,r.l),s=hn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var bp=vp(ln),xp=vp(hn);function _p(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n<r;)a[n]=t(i,i=e[++n]);return function(t){var e=Math.max(0,Math.min(r-1,Math.floor(t*=r)));return a[e](t-e)}}var kp=function(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n},wp=function(t){for(var e,n=-1,r=t.length,i=t[r-1],a=0;++n<r;)e=i,i=t[n],a+=e[1]*i[0]-e[0]*i[1];return a/2},Ep=function(t){for(var e,n,r=-1,i=t.length,a=0,o=0,s=t[i-1],c=0;++r<i;)e=s,s=t[r],c+=n=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*n,o+=(e[1]+s[1])*n;return[a/(c*=3),o/c]};function Tp(t,e){return t[0]-e[0]||t[1]-e[1]}function Cp(t){for(var e,n,r,i=t.length,a=[0,1],o=2,s=2;s<i;++s){for(;o>1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Sp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e<n;++e)r[e]=[+t[e][0],+t[e][1],e];for(r.sort(Tp),e=0;e<n;++e)i[e]=[r[e][0],-r[e][1]];var a=Cp(r),o=Cp(i),s=o[0]===a[0],c=o[o.length-1]===a[a.length-1],u=[];for(e=a.length-1;e>=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;e<o.length-c;++e)u.push(t[r[o[e]][2]]);return u},Ap=function(t,e){for(var n,r,i=t.length,a=t[i-1],o=e[0],s=e[1],c=a[0],u=a[1],l=!1,h=0;h<i;++h)n=(a=t[h])[0],(r=a[1])>s!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Mp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r<i;)e=o,n=s,e-=o=(a=t[r])[0],n-=s=a[1],c+=Math.sqrt(e*e+n*n);return c},Op=function(){return Math.random()},Np=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return e()*n+t}}return n.source=t,n}(Op),Bp=function t(e){function n(t,n){var r,i;return t=null==t?0:+t,n=null==n?1:+n,function(){var a;if(null!=r)a=r,r=null;else do{r=2*e()-1,a=2*e()-1,i=r*r+a*a}while(!i||i>1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Op),Dp=function t(e){function n(){var t=Bp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Op),Lp=function t(e){function n(t){return function(){for(var n=0,r=0;r<t;++r)n+=e();return n}}return n.source=t,n}(Op),Ip=function t(e){function n(t){var n=Lp.source(e)(t);return function(){return n()/t}}return n.source=t,n}(Op),Rp=function t(e){function n(t){return function(){return-Math.log(1-e())/t}}return n.source=t,n}(Op);function Fp(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Pp(t,e){switch(arguments.length){case 0:break;case 1:this.interpolator(t);break;default:this.interpolator(e).domain(t)}return this}var jp=Array.prototype,Yp=jp.map,zp=jp.slice,Up={name:"implicit"};function $p(){var t=Ki(),e=[],n=[],r=Up;function i(i){var a=i+"",o=t.get(a);if(!o){if(r!==Up)return r;t.set(a,o=e.push(i))}return n[(o-1)%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=Ki();for(var r,a,o=-1,s=n.length;++o<s;)t.has(a=(r=n[o])+"")||t.set(a,e.push(r));return i},i.range=function(t){return arguments.length?(n=zp.call(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return $p(e,n).unknown(r)},Fp.apply(i,arguments),i}function qp(){var t,e,n=$p().unknown(void 0),r=n.domain,i=n.range,a=[0,1],o=!1,s=0,c=0,u=.5;function l(){var n=r().length,l=a[1]<a[0],h=a[l-0],f=a[1-l];t=(f-h)/Math.max(1,n-s+2*c),o&&(t=Math.floor(t)),h+=(f-h-t*(n-s))*u,e=t*(1-s),o&&(h=Math.round(h),e=Math.round(e));var d=w(n).map((function(e){return h+t*e}));return i(l?d.reverse():d)}return delete n.unknown,n.domain=function(t){return arguments.length?(r(t),l()):r()},n.range=function(t){return arguments.length?(a=[+t[0],+t[1]],l()):a.slice()},n.rangeRound=function(t){return a=[+t[0],+t[1]],o=!0,l()},n.bandwidth=function(){return e},n.step=function(){return t},n.round=function(t){return arguments.length?(o=!!t,l()):o},n.padding=function(t){return arguments.length?(s=Math.min(1,c=+t),l()):s},n.paddingInner=function(t){return arguments.length?(s=Math.min(1,t),l()):s},n.paddingOuter=function(t){return arguments.length?(c=+t,l()):c},n.align=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),l()):u},n.copy=function(){return qp(r(),a).round(o).paddingInner(s).paddingOuter(c).align(u)},Fp.apply(l(),arguments)}function Wp(t){var e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return Wp(e())},t}function Vp(){return Wp(qp.apply(null,arguments).paddingInner(1))}var Hp=function(t){return+t},Gp=[0,1];function Xp(t){return t}function Zp(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:(n=isNaN(e)?NaN:.5,function(){return n});var n}function Kp(t){var e,n=t[0],r=t[t.length-1];return n>r&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function Qp(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i<r?(r=Zp(i,r),a=n(o,a)):(r=Zp(r,i),a=n(a,o)),function(t){return a(r(t))}}function Jp(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=Zp(t[o],t[o+1]),a[o]=n(e[o],e[o+1]);return function(e){var n=u(t,e,1,r)-1;return a[n](i[n](e))}}function ty(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function ey(){var t,e,n,r,i,a,o=Gp,s=Gp,c=An,u=Xp;function l(){return r=Math.min(o.length,s.length)>2?Jp:Qp,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),wn)))(n)))},h.domain=function(t){return arguments.length?(o=Yp.call(t,Hp),u===Xp||(u=Kp(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=zp.call(t),l()):s.slice()},h.rangeRound=function(t){return s=zp.call(t),c=sp,l()},h.clamp=function(t){return arguments.length?(u=t?Kp(o):Xp,h):u!==Xp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function ny(t,e){return ey()(t,e)}var ry=function(t,e,n,r){var i,a=M(t,e,n);switch((r=qs(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=ic(a,o))||(r.precision=i),Xs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=ac(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=rc(a))||(r.precision=i-2*("%"===r.type))}return Gs(r)};function iy(t){var e=t.domain;return t.ticks=function(t){var n=e();return S(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ry(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c<s&&(r=s,s=c,c=r,r=a,a=o,o=r),(r=A(s,c,n))>0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function ay(){var t=ny(Xp,Xp);return t.copy=function(){return ty(t,ay())},Fp.apply(t,arguments),iy(t)}function oy(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Yp.call(e,Hp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return oy(t).unknown(e)},t=arguments.length?Yp.call(t,Hp):[0,1],iy(n)}var sy=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t};function cy(t){return Math.log(t)}function uy(t){return Math.exp(t)}function ly(t){return-Math.log(-t)}function hy(t){return-Math.exp(-t)}function fy(t){return isFinite(t)?+("1e"+t):t<0?0:t}function dy(t){return function(e){return-t(-e)}}function py(t){var e,n,r=t(cy,uy),i=r.domain,a=10;function o(){return e=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}(a),n=function(t){return 10===t?fy:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}(a),i()[0]<0?(e=dy(e),n=dy(n),t(ly,hy)):t(cy,uy),r}return r.base=function(t){return arguments.length?(a=+t,o()):a},r.domain=function(t){return arguments.length?(i(t),o()):i()},r.ticks=function(t){var r,o=i(),s=o[0],c=o[o.length-1];(r=c<s)&&(f=s,s=c,c=f);var u,l,h,f=e(s),d=e(c),p=null==t?10:+t,y=[];if(!(a%1)&&d-f<p){if(f=Math.round(f)-1,d=Math.round(d)+1,s>0){for(;f<d;++f)for(l=1,u=n(f);l<a;++l)if(!((h=u*l)<s)){if(h>c)break;y.push(h)}}else for(;f<d;++f)for(l=a-1,u=n(f);l>=1;--l)if(!((h=u*l)<s)){if(h>c)break;y.push(h)}}else y=S(f,d,Math.min(d-f,p)).map(n);return r?y.reverse():y},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Gs(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a<a-.5&&(r*=a),r<=o?i(t):""}},r.nice=function(){return i(sy(i(),{floor:function(t){return n(Math.floor(e(t)))},ceil:function(t){return n(Math.ceil(e(t)))}}))},r}function yy(){var t=py(ey()).domain([1,10]);return t.copy=function(){return ty(t,yy()).base(t.base())},Fp.apply(t,arguments),t}function gy(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function my(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function vy(t){var e=1,n=t(gy(e),my(e));return n.constant=function(n){return arguments.length?t(gy(e=+n),my(e)):e},iy(n)}function by(){var t=vy(ey());return t.copy=function(){return ty(t,by()).constant(t.constant())},Fp.apply(t,arguments)}function xy(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function _y(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function ky(t){return t<0?-t*t:t*t}function wy(t){var e=t(Xp,Xp),n=1;function r(){return 1===n?t(Xp,Xp):.5===n?t(_y,ky):t(xy(n),xy(1/n))}return e.exponent=function(t){return arguments.length?(n=+t,r()):n},iy(e)}function Ey(){var t=wy(ey());return t.copy=function(){return ty(t,Ey()).exponent(t.exponent())},Fp.apply(t,arguments),t}function Ty(){return Ey.apply(null,arguments).exponent(.5)}function Cy(){var t,e=[],n=[],r=[];function a(){var t=0,i=Math.max(1,n.length);for(r=new Array(i-1);++t<i;)r[t-1]=B(e,t/i);return o}function o(e){return isNaN(e=+e)?t:n[u(r,e)]}return o.invertExtent=function(t){var i=n.indexOf(t);return i<0?[NaN,NaN]:[i>0?r[i-1]:e[0],i<r.length?r[i]:e[e.length-1]]},o.domain=function(t){if(!arguments.length)return e.slice();e=[];for(var n,r=0,o=t.length;r<o;++r)null==(n=t[r])||isNaN(n=+n)||e.push(n);return e.sort(i),a()},o.range=function(t){return arguments.length?(n=zp.call(t),a()):n.slice()},o.unknown=function(e){return arguments.length?(t=e,o):t},o.quantiles=function(){return r.slice()},o.copy=function(){return Cy().domain(e).range(n).unknown(t)},Fp.apply(o,arguments)}function Sy(){var t,e=0,n=1,r=1,i=[.5],a=[0,1];function o(e){return e<=e?a[u(i,e,0,r)]:t}function s(){var t=-1;for(i=new Array(r);++t<r;)i[t]=((t+1)*n-(t-r)*e)/(r+1);return o}return o.domain=function(t){return arguments.length?(e=+t[0],n=+t[1],s()):[e,n]},o.range=function(t){return arguments.length?(r=(a=zp.call(t)).length-1,s()):a.slice()},o.invertExtent=function(t){var o=a.indexOf(t);return o<0?[NaN,NaN]:o<1?[e,i[0]]:o>=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Sy().domain([e,n]).range(a).unknown(t)},Fp.apply(iy(o),arguments)}function Ay(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[u(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=zp.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=zp.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Ay().domain(e).range(n).unknown(t)},Fp.apply(i,arguments)}var My=new Date,Oy=new Date;function Ny(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},i.range=function(n,r,a){var o,s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return s},i.filter=function(n){return Ny((function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return My.setTime(+e),Oy.setTime(+r),t(My),t(Oy),Math.floor(n(My,Oy))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var By=Ny((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));By.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ny((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Dy=By,Ly=By.range,Iy=Ny((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),Ry=Iy,Fy=Iy.range;function Py(t){return Ny((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var jy=Py(0),Yy=Py(1),zy=Py(2),Uy=Py(3),$y=Py(4),qy=Py(5),Wy=Py(6),Vy=jy.range,Hy=Yy.range,Gy=zy.range,Xy=Uy.range,Zy=$y.range,Ky=qy.range,Qy=Wy.range,Jy=Ny((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),tg=Jy,eg=Jy.range,ng=Ny((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),rg=ng,ig=ng.range,ag=Ny((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),og=ag,sg=ag.range,cg=Ny((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),ug=cg,lg=cg.range,hg=Ny((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));hg.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ny((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):hg:null};var fg=hg,dg=hg.range;function pg(t){return Ny((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var yg=pg(0),gg=pg(1),mg=pg(2),vg=pg(3),bg=pg(4),xg=pg(5),_g=pg(6),kg=yg.range,wg=gg.range,Eg=mg.range,Tg=vg.range,Cg=bg.range,Sg=xg.range,Ag=_g.range,Mg=Ny((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Og=Mg,Ng=Mg.range,Bg=Ny((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Bg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ny((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Dg=Bg,Lg=Bg.range;function Ig(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Rg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Fg(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Pg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Zg(i),l=Kg(i),h=Zg(a),f=Kg(a),d=Zg(o),p=Kg(o),y=Zg(s),g=Kg(s),m=Zg(c),v=Kg(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:vm,e:vm,f:wm,g:Lm,G:Rm,H:bm,I:xm,j:_m,L:km,m:Em,M:Tm,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:av,s:ov,S:Cm,u:Sm,U:Am,V:Om,w:Nm,W:Bm,x:null,X:null,y:Dm,Y:Im,Z:Fm,"%":iv},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Pm,e:Pm,f:$m,g:tv,G:nv,H:jm,I:Ym,j:zm,L:Um,m:qm,M:Wm,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:av,s:ov,S:Vm,u:Hm,U:Gm,V:Zm,w:Km,W:Qm,x:null,X:null,y:Jm,Y:ev,Z:rv,"%":iv},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:cm,e:cm,f:pm,g:im,G:rm,H:lm,I:lm,j:um,L:dm,m:sm,M:hm,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:om,Q:gm,s:mm,S:fm,u:Jg,U:tm,V:em,w:Qg,W:nm,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:im,Y:rm,Z:am,"%":ym};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s<u;)37===t.charCodeAt(s)&&(o.push(t.slice(c,s)),null!=(i=qg[r=t.charAt(++s)])?r=t.charAt(++s):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),o.push(r),c=s+1);return o.push(t.slice(c,s)),o.join("")}}function w(t,e){return function(n){var r,i,a=Fg(1900,void 0,1);if(E(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Rg(Fg(a.y,0,1))).getUTCDay(),r=i>4||0===i?gg.ceil(r):gg(r),r=Og.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Ig(Fg(a.y,0,1))).getDay(),r=i>4||0===i?Yy.ceil(r):Yy(r),r=tg.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Rg(Fg(a.y,0,1)).getUTCDay():Ig(Fg(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Rg(a)):Ig(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o<s;){if(r>=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in qg?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}var jg,Yg,zg,Ug,$g,qg={"-":"",_:" ",0:"0"},Wg=/^\s*\d+/,Vg=/^%/,Hg=/[\\^$*+?|[\]().{}]/g;function Gg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function Xg(t){return t.replace(Hg,"\\$&")}function Zg(t){return new RegExp("^(?:"+t.map(Xg).join("|")+")","i")}function Kg(t){for(var e={},n=-1,r=t.length;++n<r;)e[t[n].toLowerCase()]=n;return e}function Qg(t,e,n){var r=Wg.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Jg(t,e,n){var r=Wg.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function tm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function em(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function nm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function rm(t,e,n){var r=Wg.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function im(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function am(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function om(t,e,n){var r=Wg.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function sm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function cm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function um(t,e,n){var r=Wg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function lm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function hm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function fm(t,e,n){var r=Wg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dm(t,e,n){var r=Wg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function pm(t,e,n){var r=Wg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function ym(t,e,n){var r=Vg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function gm(t,e,n){var r=Wg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function mm(t,e,n){var r=Wg.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function vm(t,e){return Gg(t.getDate(),e,2)}function bm(t,e){return Gg(t.getHours(),e,2)}function xm(t,e){return Gg(t.getHours()%12||12,e,2)}function _m(t,e){return Gg(1+tg.count(Dy(t),t),e,3)}function km(t,e){return Gg(t.getMilliseconds(),e,3)}function wm(t,e){return km(t,e)+"000"}function Em(t,e){return Gg(t.getMonth()+1,e,2)}function Tm(t,e){return Gg(t.getMinutes(),e,2)}function Cm(t,e){return Gg(t.getSeconds(),e,2)}function Sm(t){var e=t.getDay();return 0===e?7:e}function Am(t,e){return Gg(jy.count(Dy(t)-1,t),e,2)}function Mm(t){var e=t.getDay();return e>=4||0===e?$y(t):$y.ceil(t)}function Om(t,e){return t=Mm(t),Gg($y.count(Dy(t),t)+(4===Dy(t).getDay()),e,2)}function Nm(t){return t.getDay()}function Bm(t,e){return Gg(Yy.count(Dy(t)-1,t),e,2)}function Dm(t,e){return Gg(t.getFullYear()%100,e,2)}function Lm(t,e){return Gg((t=Mm(t)).getFullYear()%100,e,2)}function Im(t,e){return Gg(t.getFullYear()%1e4,e,4)}function Rm(t,e){var n=t.getDay();return Gg((t=n>=4||0===n?$y(t):$y.ceil(t)).getFullYear()%1e4,e,4)}function Fm(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Gg(e/60|0,"0",2)+Gg(e%60,"0",2)}function Pm(t,e){return Gg(t.getUTCDate(),e,2)}function jm(t,e){return Gg(t.getUTCHours(),e,2)}function Ym(t,e){return Gg(t.getUTCHours()%12||12,e,2)}function zm(t,e){return Gg(1+Og.count(Dg(t),t),e,3)}function Um(t,e){return Gg(t.getUTCMilliseconds(),e,3)}function $m(t,e){return Um(t,e)+"000"}function qm(t,e){return Gg(t.getUTCMonth()+1,e,2)}function Wm(t,e){return Gg(t.getUTCMinutes(),e,2)}function Vm(t,e){return Gg(t.getUTCSeconds(),e,2)}function Hm(t){var e=t.getUTCDay();return 0===e?7:e}function Gm(t,e){return Gg(yg.count(Dg(t)-1,t),e,2)}function Xm(t){var e=t.getUTCDay();return e>=4||0===e?bg(t):bg.ceil(t)}function Zm(t,e){return t=Xm(t),Gg(bg.count(Dg(t),t)+(4===Dg(t).getUTCDay()),e,2)}function Km(t){return t.getUTCDay()}function Qm(t,e){return Gg(gg.count(Dg(t)-1,t),e,2)}function Jm(t,e){return Gg(t.getUTCFullYear()%100,e,2)}function tv(t,e){return Gg((t=Xm(t)).getUTCFullYear()%100,e,2)}function ev(t,e){return Gg(t.getUTCFullYear()%1e4,e,4)}function nv(t,e){var n=t.getUTCDay();return Gg((t=n>=4||0===n?bg(t):bg.ceil(t)).getUTCFullYear()%1e4,e,4)}function rv(){return"+0000"}function iv(){return"%"}function av(t){return+t}function ov(t){return Math.floor(+t/1e3)}function sv(t){return jg=Pg(t),Yg=jg.format,zg=jg.parse,Ug=jg.utcFormat,$g=jg.utcParse,jg}function cv(t){return new Date(t)}function uv(t){return t instanceof Date?+t:+new Date(+t)}function lv(t,e,n,r,i,o,s,c,u){var l=ny(Xp,Xp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),m=u("%a %d"),v=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(a){return(s(a)<a?d:o(a)<a?p:i(a)<a?y:r(a)<a?g:e(a)<a?n(a)<a?m:v:t(a)<a?b:x)(a)}function w(e,n,r,i){if(null==e&&(e=10),"number"==typeof e){var o=Math.abs(r-n)/e,s=a((function(t){return t[2]})).right(_,o);s===_.length?(i=M(n/31536e6,r/31536e6,e),e=t):s?(i=(s=_[o/_[s-1][2]<_[s][2]/o?s-1:s])[1],e=s[0]):(i=Math.max(M(n,r,e),1),e=c)}return null==i?e:e.every(i)}return l.invert=function(t){return new Date(h(t))},l.domain=function(t){return arguments.length?f(Yp.call(t,uv)):f().map(cv)},l.ticks=function(t,e){var n,r=f(),i=r[0],a=r[r.length-1],o=a<i;return o&&(n=i,i=a,a=n),n=(n=w(t,i,a,e))?n.range(i,a+1):[],o?n.reverse():n},l.tickFormat=function(t,e){return null==e?k:u(e)},l.nice=function(t,e){var n=f();return(t=w(t,n[0],n[n.length-1],e))?f(sy(n,t)):l},l.copy=function(){return ty(l,lv(t,e,n,r,i,o,s,c,u))},l}sv({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var hv=function(){return Fp.apply(lv(Dy,Ry,jy,tg,rg,og,ug,fg,Yg).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)},fv=Ny((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),dv=fv,pv=fv.range,yv=Ny((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getUTCHours()})),gv=yv,mv=yv.range,vv=Ny((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getUTCMinutes()})),bv=vv,xv=vv.range,_v=function(){return Fp.apply(lv(Dg,dv,yg,Og,gv,bv,ug,fg,Ug).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)};function kv(){var t,e,n,r,i,a=0,o=1,s=Xp,c=!1;function u(e){return isNaN(e=+e)?i:s(0===n?.5:(e=(r(e)-t)*n,c?Math.max(0,Math.min(1,e)):e))}return u.domain=function(i){return arguments.length?(t=r(a=+i[0]),e=r(o=+i[1]),n=t===e?0:1/(e-t),u):[a,o]},u.clamp=function(t){return arguments.length?(c=!!t,u):c},u.interpolator=function(t){return arguments.length?(s=t,u):s},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i){return r=i,t=i(a),e=i(o),n=t===e?0:1/(e-t),u}}function wv(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function Ev(){var t=iy(kv()(Xp));return t.copy=function(){return wv(t,Ev())},Pp.apply(t,arguments)}function Tv(){var t=py(kv()).domain([1,10]);return t.copy=function(){return wv(t,Tv()).base(t.base())},Pp.apply(t,arguments)}function Cv(){var t=vy(kv());return t.copy=function(){return wv(t,Cv()).constant(t.constant())},Pp.apply(t,arguments)}function Sv(){var t=wy(kv());return t.copy=function(){return wv(t,Sv()).exponent(t.exponent())},Pp.apply(t,arguments)}function Av(){return Sv.apply(null,arguments).exponent(.5)}function Mv(){var t=[],e=Xp;function n(n){if(!isNaN(n=+n))return e((u(t,n)-1)/(t.length-1))}return n.domain=function(e){if(!arguments.length)return t.slice();t=[];for(var r,a=0,o=e.length;a<o;++a)null==(r=e[a])||isNaN(r=+r)||t.push(r);return t.sort(i),n},n.interpolator=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return Mv(e).domain(t)},Pp.apply(n,arguments)}function Ov(){var t,e,n,r,i,a,o,s=0,c=.5,u=1,l=Xp,h=!1;function f(t){return isNaN(t=+t)?o:(t=.5+((t=+a(t))-e)*(t<e?r:i),l(h?Math.max(0,Math.min(1,t)):t))}return f.domain=function(o){return arguments.length?(t=a(s=+o[0]),e=a(c=+o[1]),n=a(u=+o[2]),r=t===e?0:.5/(e-t),i=e===n?0:.5/(n-e),f):[s,c,u]},f.clamp=function(t){return arguments.length?(h=!!t,f):h},f.interpolator=function(t){return arguments.length?(l=t,f):l},f.unknown=function(t){return arguments.length?(o=t,f):o},function(o){return a=o,t=o(s),e=o(c),n=o(u),r=t===e?0:.5/(e-t),i=e===n?0:.5/(n-e),f}}function Nv(){var t=iy(Ov()(Xp));return t.copy=function(){return wv(t,Nv())},Pp.apply(t,arguments)}function Bv(){var t=py(Ov()).domain([.1,1,10]);return t.copy=function(){return wv(t,Bv()).base(t.base())},Pp.apply(t,arguments)}function Dv(){var t=vy(Ov());return t.copy=function(){return wv(t,Dv()).constant(t.constant())},Pp.apply(t,arguments)}function Lv(){var t=wy(Ov());return t.copy=function(){return wv(t,Lv()).exponent(t.exponent())},Pp.apply(t,arguments)}function Iv(){return Lv.apply(null,arguments).exponent(.5)}var Rv=function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n},Fv=Rv("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Pv=Rv("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),jv=Rv("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),Yv=Rv("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),zv=Rv("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),Uv=Rv("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),$v=Rv("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),qv=Rv("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),Wv=Rv("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),Vv=Rv("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"),Hv=function(t){return pn(t[t.length-1])},Gv=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(Rv),Xv=Hv(Gv),Zv=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(Rv),Kv=Hv(Zv),Qv=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(Rv),Jv=Hv(Qv),tb=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(Rv),eb=Hv(tb),nb=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(Rv),rb=Hv(nb),ib=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(Rv),ab=Hv(ib),ob=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(Rv),sb=Hv(ob),cb=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(Rv),ub=Hv(cb),lb=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(Rv),hb=Hv(lb),fb=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(Rv),db=Hv(fb),pb=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(Rv),yb=Hv(pb),gb=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(Rv),mb=Hv(gb),vb=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(Rv),bb=Hv(vb),xb=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(Rv),_b=Hv(xb),kb=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(Rv),wb=Hv(kb),Eb=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(Rv),Tb=Hv(Eb),Cb=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(Rv),Sb=Hv(Cb),Ab=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(Rv),Mb=Hv(Ab),Ob=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(Rv),Nb=Hv(Ob),Bb=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(Rv),Db=Hv(Bb),Lb=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(Rv),Ib=Hv(Lb),Rb=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(Rv),Fb=Hv(Rb),Pb=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(Rv),jb=Hv(Pb),Yb=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(Rv),zb=Hv(Yb),Ub=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(Rv),$b=Hv(Ub),qb=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(Rv),Wb=Hv(qb),Vb=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(Rv),Hb=Hv(Vb),Gb=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-2710.57*t)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-67.37*t)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-2475.67*t)))))))+")"},Xb=xp(Ma(300,.5,0),Ma(-240,.5,1)),Zb=xp(Ma(-100,.75,.35),Ma(80,1.5,.8)),Kb=xp(Ma(260,.75,.35),Ma(80,1.5,.8)),Qb=Ma(),Jb=function(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Qb.h=360*t-100,Qb.s=1.5-1.5*e,Qb.l=.8-.9*e,Qb+""},tx=Ge(),ex=Math.PI/3,nx=2*Math.PI/3,rx=function(t){var e;return t=(.5-t)*Math.PI,tx.r=255*(e=Math.sin(t))*e,tx.g=255*(e=Math.sin(t+ex))*e,tx.b=255*(e=Math.sin(t+nx))*e,tx+""},ix=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function ax(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var ox=ax(Rv("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),sx=ax(Rv("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),cx=ax(Rv("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),ux=ax(Rv("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),lx=function(t){return we(re(t).call(document.documentElement))},hx=0;function fx(){return new dx}function dx(){this._="@"+(++hx).toString(36)}dx.prototype=fx.prototype={constructor:dx,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var px=function(t){return"string"==typeof t?new xe([document.querySelectorAll(t)],[document.documentElement]):new xe([null==t?[]:t],be)},yx=function(t,e){null==e&&(e=Mn().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n<r;++n)i[n]=On(t,e[n]);return i},gx=function(t){return function(){return t}},mx=Math.abs,vx=Math.atan2,bx=Math.cos,xx=Math.max,_x=Math.min,kx=Math.sin,wx=Math.sqrt,Ex=Math.PI,Tx=Ex/2,Cx=2*Ex;function Sx(t){return t>1?0:t<-1?Ex:Math.acos(t)}function Ax(t){return t>=1?Tx:t<=-1?-Tx:Math.asin(t)}function Mx(t){return t.innerRadius}function Ox(t){return t.outerRadius}function Nx(t){return t.startAngle}function Bx(t){return t.endAngle}function Dx(t){return t&&t.padAngle}function Lx(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Ix(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/wx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,y=r+h,g=(f+p)/2,m=(d+y)/2,v=p-f,b=y-d,x=v*v+b*b,_=i-a,k=f*y-p*d,w=(b<0?-1:1)*wx(xx(0,_*_*x-k*k)),E=(k*b-v*w)/x,T=(-k*v-b*w)/x,C=(k*b+v*w)/x,S=(-k*v+b*w)/x,A=E-g,M=T-m,O=C-g,N=S-m;return A*A+M*M>O*O+N*N&&(E=C,T=S),{cx:E,cy:T,x01:-l,y01:-h,x11:E*(i/_-1),y11:T*(i/_-1)}}var Rx=function(){var t=Mx,e=Ox,n=gx(0),r=null,i=Nx,a=Bx,o=Dx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-Tx,d=a.apply(this,arguments)-Tx,p=mx(d-f),y=d>f;if(s||(s=c=Ui()),h<l&&(u=h,h=l,l=u),h>1e-12)if(p>Cx-1e-12)s.moveTo(h*bx(f),h*kx(f)),s.arc(0,0,h,f,d,!y),l>1e-12&&(s.moveTo(l*bx(d),l*kx(d)),s.arc(0,0,l,d,f,y));else{var g,m,v=f,b=d,x=f,_=d,k=p,w=p,E=o.apply(this,arguments)/2,T=E>1e-12&&(r?+r.apply(this,arguments):wx(l*l+h*h)),C=_x(mx(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(T>1e-12){var M=Ax(T/l*kx(E)),O=Ax(T/h*kx(E));(k-=2*M)>1e-12?(x+=M*=y?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(v+=O*=y?1:-1,b-=O):(w=0,v=b=(f+d)/2)}var N=h*bx(v),B=h*kx(v),D=l*bx(_),L=l*kx(_);if(C>1e-12){var I,R=h*bx(b),F=h*kx(b),P=l*bx(x),j=l*kx(x);if(p<Ex&&(I=Lx(N,B,P,j,R,F,D,L))){var Y=N-I[0],z=B-I[1],U=R-I[0],$=F-I[1],q=1/kx(Sx((Y*U+z*$)/(wx(Y*Y+z*z)*wx(U*U+$*$)))/2),W=wx(I[0]*I[0]+I[1]*I[1]);S=_x(C,(l-W)/(q-1)),A=_x(C,(h-W)/(q+1))}}w>1e-12?A>1e-12?(g=Ix(P,j,N,B,h,A,y),m=Ix(R,F,D,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),A<C?s.arc(g.cx,g.cy,A,vx(g.y01,g.x01),vx(m.y01,m.x01),!y):(s.arc(g.cx,g.cy,A,vx(g.y01,g.x01),vx(g.y11,g.x11),!y),s.arc(0,0,h,vx(g.cy+g.y11,g.cx+g.x11),vx(m.cy+m.y11,m.cx+m.x11),!y),s.arc(m.cx,m.cy,A,vx(m.y11,m.x11),vx(m.y01,m.x01),!y))):(s.moveTo(N,B),s.arc(0,0,h,v,b,!y)):s.moveTo(N,B),l>1e-12&&k>1e-12?S>1e-12?(g=Ix(D,L,R,F,l,-S,y),m=Ix(N,B,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),S<C?s.arc(g.cx,g.cy,S,vx(g.y01,g.x01),vx(m.y01,m.x01),!y):(s.arc(g.cx,g.cy,S,vx(g.y01,g.x01),vx(g.y11,g.x11),!y),s.arc(0,0,l,vx(g.cy+g.y11,g.cx+g.x11),vx(m.cy+m.y11,m.cx+m.x11),y),s.arc(m.cx,m.cy,S,vx(m.y11,m.x11),vx(m.y01,m.x01),!y))):s.arc(0,0,l,_,x,y):s.lineTo(D,L)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Ex/2;return[bx(r)*n,kx(r)*n]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:gx(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:gx(+t),c):e},c.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:gx(+t),c):n},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:gx(+t),c):r},c.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:gx(+t),c):i},c.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:gx(+t),c):a},c.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:gx(+t),c):o},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c};function Fx(t){this._context=t}Fx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var Px=function(t){return new Fx(t)};function jx(t){return t[0]}function Yx(t){return t[1]}var zx=function(){var t=jx,e=Yx,n=gx(!0),r=null,i=Px,a=null;function o(o){var s,c,u,l=o.length,h=!1;for(null==r&&(a=i(u=Ui())),s=0;s<=l;++s)!(s<l&&n(c=o[s],s,o))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(c,s,o),+e(c,s,o));if(u)return a=null,u+""||null}return o.x=function(e){return arguments.length?(t="function"==typeof e?e:gx(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:gx(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:gx(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o},Ux=function(){var t=jx,e=null,n=gx(0),r=Yx,i=gx(!0),a=null,o=Px,s=null;function c(c){var u,l,h,f,d,p=c.length,y=!1,g=new Array(p),m=new Array(p);for(null==a&&(s=o(d=Ui())),u=0;u<=p;++u){if(!(u<p&&i(f=c[u],u,c))===y)if(y=!y)l=u,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=u-1;h>=l;--h)s.point(g[h],m[h]);s.lineEnd(),s.areaEnd()}y&&(g[u]=+t(f,u,c),m[u]=+n(f,u,c),s.point(e?+e(f,u,c):g[u],r?+r(f,u,c):m[u]))}if(d)return s=null,d+""||null}function u(){return zx().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:gx(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:gx(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:gx(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:gx(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:gx(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:gx(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:gx(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},$x=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},qx=function(t){return t},Wx=function(){var t=qx,e=$x,n=null,r=gx(0),i=gx(Cx),a=gx(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),y=new Array(f),g=+r.apply(this,arguments),m=Math.min(Cx,Math.max(-Cx,i.apply(this,arguments)-g)),v=Math.min(Math.abs(m)/f,a.apply(this,arguments)),b=v*(m<0?-1:1);for(s=0;s<f;++s)(h=y[p[s]=s]=+t(o[s],s,o))>0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(m-f*b)/d:0;s<f;++s,g=l)c=p[s],l=g+((h=y[c])>0?h*u:0)+b,y[c]={data:o[c],index:s,value:h,startAngle:g,endAngle:l,padAngle:v};return y}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:gx(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:gx(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:gx(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:gx(+t),o):a},o},Vx=Gx(Px);function Hx(t){this._curve=t}function Gx(t){function e(e){return new Hx(t(e))}return e._curve=t,e}function Xx(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(Gx(t)):e()._curve},t}Hx.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Zx=function(){return Xx(zx().curve(Vx))},Kx=function(){var t=Ux().curve(Vx),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Xx(n())},delete t.lineX0,t.lineEndAngle=function(){return Xx(r())},delete t.lineX1,t.lineInnerRadius=function(){return Xx(i())},delete t.lineY0,t.lineOuterRadius=function(){return Xx(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(Gx(t)):e()._curve},t},Qx=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},Jx=Array.prototype.slice;function t_(t){return t.source}function e_(t){return t.target}function n_(t){var e=t_,n=e_,r=jx,i=Yx,a=null;function o(){var o,s=Jx.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=Ui()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:gx(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:gx(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function r_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function i_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function a_(t,e,n,r,i){var a=Qx(e,n),o=Qx(e,n=(n+i)/2),s=Qx(r,n),c=Qx(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function o_(){return n_(r_)}function s_(){return n_(i_)}function c_(){var t=n_(a_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var u_={draw:function(t,e){var n=Math.sqrt(e/Ex);t.moveTo(n,0),t.arc(0,0,n,0,Cx)}},l_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},h_=Math.sqrt(1/3),f_=2*h_,d_={draw:function(t,e){var n=Math.sqrt(e/f_),r=n*h_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},p_=Math.sin(Ex/10)/Math.sin(7*Ex/10),y_=Math.sin(Cx/10)*p_,g_=-Math.cos(Cx/10)*p_,m_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=y_*n,i=g_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=Cx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},v_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},b_=Math.sqrt(3),x_={draw:function(t,e){var n=-Math.sqrt(e/(3*b_));t.moveTo(0,2*n),t.lineTo(-b_*n,-n),t.lineTo(b_*n,-n),t.closePath()}},__=Math.sqrt(3)/2,k_=1/Math.sqrt(12),w_=3*(k_/2+1),E_={draw:function(t,e){var n=Math.sqrt(e/w_),r=n/2,i=n*k_,a=r,o=n*k_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-__*i,__*r+-.5*i),t.lineTo(-.5*a-__*o,__*a+-.5*o),t.lineTo(-.5*s-__*c,__*s+-.5*c),t.lineTo(-.5*r+__*i,-.5*i-__*r),t.lineTo(-.5*a+__*o,-.5*o-__*a),t.lineTo(-.5*s+__*c,-.5*c-__*s),t.closePath()}},T_=[u_,l_,d_,v_,m_,x_,E_],C_=function(){var t=gx(u_),e=gx(64),n=null;function r(){var r;if(n||(n=r=Ui()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:gx(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:gx(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},S_=function(){};function A_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function M_(t){this._context=t}M_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:A_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:A_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var O_=function(t){return new M_(t)};function N_(t){this._context=t}N_.prototype={areaStart:S_,areaEnd:S_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:A_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var B_=function(t){return new N_(t)};function D_(t){this._context=t}D_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:A_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var L_=function(t){return new D_(t)};function I_(t,e){this._basis=new M_(t),this._beta=e}I_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var R_=function t(e){function n(t){return 1===e?new M_(t):new I_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function F_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function P_(t,e){this._context=t,this._k=(1-e)/6}P_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:F_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:F_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var j_=function t(e){function n(t){return new P_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Y_(t,e){this._context=t,this._k=(1-e)/6}Y_.prototype={areaStart:S_,areaEnd:S_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:F_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var z_=function t(e){function n(t){return new Y_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function U_(t,e){this._context=t,this._k=(1-e)/6}U_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:F_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var $_=function t(e){function n(t){return new U_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function q_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function W_(t,e){this._context=t,this._alpha=e}W_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:q_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var V_=function t(e){function n(t){return e?new W_(t,e):new P_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function H_(t,e){this._context=t,this._alpha=e}H_.prototype={areaStart:S_,areaEnd:S_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:q_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var G_=function t(e){function n(t){return e?new H_(t,e):new Y_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function X_(t,e){this._context=t,this._alpha=e}X_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:q_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Z_=function t(e){function n(t){return e?new X_(t,e):new U_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function K_(t){this._context=t}K_.prototype={areaStart:S_,areaEnd:S_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var Q_=function(t){return new K_(t)};function J_(t){return t<0?-1:1}function tk(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(J_(a)+J_(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function ek(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function nk(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function rk(t){this._context=t}function ik(t){this._context=new ak(t)}function ak(t){this._context=t}function ok(t){return new rk(t)}function sk(t){return new ik(t)}function ck(t){this._context=t}function uk(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,o[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,o[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,o[e]-=n*o[e-1];for(i[r-1]=o[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}rk.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:nk(this,this._t0,ek(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,nk(this,ek(this,n=tk(this,t,e)),n);break;default:nk(this,this._t0,n=tk(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(ik.prototype=Object.create(rk.prototype)).point=function(t,e){rk.prototype.point.call(this,e,t)},ak.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},ck.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=uk(t),i=uk(e),a=0,o=1;o<n;++a,++o)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[o],e[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var lk=function(t){return new ck(t)};function hk(t,e){this._context=t,this._t=e}hk.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var fk=function(t){return new hk(t,.5)};function dk(t){return new hk(t,0)}function pk(t){return new hk(t,1)}var yk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a<i;++a)for(r=o,o=t[e[a]],n=0;n<s;++n)o[n][1]+=o[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]},gk=function(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n};function mk(t,e){return t[e]}var vk=function(){var t=gx([]),e=gk,n=yk,r=mk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a<u;++a){for(var h,f=s[a],d=l[a]=new Array(c),p=0;p<c;++p)d[p]=h=[0,+r(i[p],f,p,i)],h.data=i[p];d.key=f}for(a=0,o=e(l);a<u;++a)l[o[a]].index=a;return n(l,o),l}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:gx(Jx.call(e)),i):t},i.value=function(t){return arguments.length?(r="function"==typeof t?t:gx(+t),i):r},i.order=function(t){return arguments.length?(e=null==t?gk:"function"==typeof t?t:gx(Jx.call(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?yk:t,i):n},i},bk=function(t,e){if((r=t.length)>0){for(var n,r,i,a=0,o=t[0].length;a<o;++a){for(i=n=0;n<r;++n)i+=t[n][a][1]||0;if(i)for(n=0;n<r;++n)t[n][a][1]/=i}yk(t,e)}},xk=function(t,e){if((s=t.length)>0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c<u;++c)for(a=o=0,n=0;n<s;++n)(i=(r=t[e[n]][c])[1]-r[0])>0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},_k=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r<a;++r){for(var o=0,s=0;o<n;++o)s+=t[o][r][1]||0;i[r][1]+=i[r][0]=-s/2}yk(t,e)}},kk=function(t,e){if((i=t.length)>0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;o<r;++o){for(var s=0,c=0,u=0;s<i;++s){for(var l=t[e[s]],h=l[o][1]||0,f=(h-(l[o-1][1]||0))/2,d=0;d<s;++d){var p=t[e[d]];f+=(p[o][1]||0)-(p[o-1][1]||0)}c+=h,u+=f*h}n[o-1][1]+=n[o-1][0]=a,c&&(a-=u/c)}n[o-1][1]+=n[o-1][0]=a,yk(t,e)}},wk=function(t){var e=t.map(Ek);return gk(t).sort((function(t,n){return e[t]-e[n]}))};function Ek(t){for(var e,n=-1,r=0,i=t.length,a=-1/0;++n<i;)(e=+t[n][1])>a&&(a=e,r=n);return r}var Tk=function(t){var e=t.map(Ck);return gk(t).sort((function(t,n){return e[t]-e[n]}))};function Ck(t){for(var e,n=0,r=-1,i=t.length;++r<i;)(e=+t[r][1])&&(n+=e);return n}var Sk=function(t){return Tk(t).reverse()},Ak=function(t){var e,n,r=t.length,i=t.map(Ck),a=wk(t),o=0,s=0,c=[],u=[];for(e=0;e<r;++e)n=a[e],o<s?(o+=i[n],c.push(n)):(s+=i[n],u.push(n));return u.reverse().concat(c)},Mk=function(t){return gk(t).reverse()},Ok=Date.prototype.toISOString?function(t){return t.toISOString()}:Ug("%Y-%m-%dT%H:%M:%S.%LZ"),Nk=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:$g("%Y-%m-%dT%H:%M:%S.%LZ"),Bk=function(t,e,n){var r=new $n,i=e;return null==e?(r.restart(t,e,n),r):(e=+e,n=null==n?zn():+n,r.restart((function a(o){o+=i,r.restart(a,i+=e,n),t(o)}),e,n),r)},Dk=function(t){return function(){return t}};function Lk(t){return t[0]}function Ik(t){return t[1]}function Rk(){this._=null}function Fk(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Pk(t,e){var n=e,r=e.R,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function jk(t,e){var n=e,r=e.L,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function Yk(t){for(;t.L;)t=t.L;return t}Rk.prototype={constructor:Rk,insert:function(t,e){var n,r,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=Yk(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)n===(r=n.U).L?(i=r.R)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.R&&(Pk(this,n),n=(t=n).U),n.C=!1,r.C=!0,jk(this,r)):(i=r.L)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.L&&(jk(this,n),n=(t=n).U),n.C=!1,r.C=!0,Pk(this,r)),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,r,i=t.U,a=t.L,o=t.R;if(n=a?o?Yk(o):a:o,i?i.L===t?i.L=n:i.R=n:this._=n,a&&o?(r=n.C,n.C=t.C,n.L=a,a.U=n,n!==o?(i=n.U,n.U=t.U,t=n.R,i.L=t,n.R=o,o.U=n):(n.U=i,i=n,t=n.R)):(r=t.C,t=n),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,Pk(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,jk(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,Pk(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,jk(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Pk(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,jk(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var zk=Rk;function Uk(t,e,n,r){var i=[null,null],a=fw.push(i)-1;return i.left=t,i.right=e,n&&qk(i,t,e,n),r&&qk(i,e,t,r),lw[t.index].halfedges.push(a),lw[e.index].halfedges.push(a),i}function $k(t,e,n){var r=[e,n];return r.left=t,r}function qk(t,e,n,r){t[0]||t[1]?t.left===n?t[1]=r:t[0]=r:(t[0]=r,t.left=e,t.right=n)}function Wk(t,e,n,r,i){var a,o=t[0],s=t[1],c=o[0],u=o[1],l=0,h=1,f=s[0]-c,d=s[1]-u;if(a=e-c,f||!(a>0)){if(a/=f,f<0){if(a<l)return;a<h&&(h=a)}else if(f>0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a<l)return;a<h&&(h=a)}if(a=n-u,d||!(a>0)){if(a/=d,d<0){if(a<l)return;a<h&&(h=a)}else if(d>0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a<l)return;a<h&&(h=a)}return!(l>0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Vk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],y=(h+d)/2,g=(f+p)/2;if(p===f){if(y<e||y>=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]<n)return}else c=[y,i];a=[y,n]}}else if(s=g-(o=(h-d)/(p-f))*y,o<-1||o>1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]<n)return}else c=[(i-s)/o,i];a=[(n-s)/o,n]}else if(f<p){if(c){if(c[0]>=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]<e)return}else c=[r,o*r+s];a=[e,o*e+s]}return t[0]=c,t[1]=a,!0}function Hk(t,e){var n=t.site,r=e.left,i=e.right;return n===i&&(i=r,r=n),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(n===r?(r=e[1],i=e[0]):(r=e[0],i=e[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function Gk(t,e){return e[+(e.left!==t.site)]}function Xk(t,e){return e[+(e.left===t.site)]}var Zk,Kk=[];function Qk(){Fk(this),this.x=this.y=this.arc=this.site=this.cy=null}function Jk(t){var e=t.P,n=t.N;if(e&&n){var r=e.site,i=t.site,a=n.site;if(r!==a){var o=i[0],s=i[1],c=r[0]-o,u=r[1]-s,l=a[0]-o,h=a[1]-s,f=2*(c*h-u*l);if(!(f>=-pw)){var d=c*c+u*u,p=l*l+h*h,y=(h*d-u*p)/f,g=(c*p-l*d)/f,m=Kk.pop()||new Qk;m.arc=t,m.site=i,m.x=y+o,m.y=(m.cy=g+s)+Math.sqrt(y*y+g*g),t.circle=m;for(var v=null,b=hw._;b;)if(m.y<b.y||m.y===b.y&&m.x<=b.x){if(!b.L){v=b.P;break}b=b.L}else{if(!b.R){v=b;break}b=b.R}hw.insert(v,m),v||(Zk=m)}}}}function tw(t){var e=t.circle;e&&(e.P||(Zk=e.N),hw.remove(e),Kk.push(e),Fk(e),t.circle=null)}var ew=[];function nw(){Fk(this),this.edge=this.site=this.circle=null}function rw(t){var e=ew.pop()||new nw;return e.site=t,e}function iw(t){tw(t),uw.remove(t),ew.push(t),Fk(t)}function aw(t){var e=t.circle,n=e.x,r=e.cy,i=[n,r],a=t.P,o=t.N,s=[t];iw(t);for(var c=a;c.circle&&Math.abs(n-c.circle.x)<dw&&Math.abs(r-c.circle.cy)<dw;)a=c.P,s.unshift(c),iw(c),c=a;s.unshift(c),tw(c);for(var u=o;u.circle&&Math.abs(n-u.circle.x)<dw&&Math.abs(r-u.circle.cy)<dw;)o=u.N,s.push(u),iw(u),u=o;s.push(u),tw(u);var l,h=s.length;for(l=1;l<h;++l)u=s[l],c=s[l-1],qk(u.edge,c.site,u.site,i);c=s[0],(u=s[h-1]).edge=Uk(c.site,u.site,null,i),Jk(c),Jk(u)}function ow(t){for(var e,n,r,i,a=t[0],o=t[1],s=uw._;s;)if((r=sw(s,o)-a)>dw)s=s.L;else{if(!((i=a-cw(s,o))>dw)){r>-dw?(e=s.P,n=s):i>-dw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){lw[t.index]={site:t,halfedges:[]}}(t);var c=rw(t);if(uw.insert(e,c),e||n){if(e===n)return tw(e),n=rw(e.site),uw.insert(c,n),c.edge=n.edge=Uk(e.site,c.site),Jk(e),void Jk(n);if(n){tw(e),tw(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,y=p[0]-l,g=p[1]-h,m=2*(f*g-d*y),v=f*f+d*d,b=y*y+g*g,x=[(g*v-d*b)/m+l,(f*b-y*v)/m+h];qk(n.edge,u,p,x),c.edge=Uk(u,t,null,x),n.edge=Uk(t,p,null,x),Jk(e),Jk(n)}else c.edge=Uk(e.site,c.site)}}function sw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function cw(t,e){var n=t.N;if(n)return sw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var uw,lw,hw,fw,dw=1e-6,pw=1e-12;function yw(t,e){return e[1]-t[1]||e[0]-t[0]}function gw(t,e){var n,r,i,a=t.sort(yw).pop();for(fw=[],lw=new Array(t.length),uw=new zk,hw=new zk;;)if(i=Zk,a&&(!i||a[1]<i.y||a[1]===i.y&&a[0]<i.x))a[0]===n&&a[1]===r||(ow(a),n=a[0],r=a[1]),a=t.pop();else{if(!i)break;aw(i.arc)}if(function(){for(var t,e,n,r,i=0,a=lw.length;i<a;++i)if((t=lw[i])&&(r=(e=t.halfedges).length)){var o=new Array(r),s=new Array(r);for(n=0;n<r;++n)o[n]=n,s[n]=Hk(t,fw[e[n]]);for(o.sort((function(t,e){return s[e]-s[t]})),n=0;n<r;++n)s[n]=e[o[n]];for(n=0;n<r;++n)e[n]=s[n]}}(),e){var o=+e[0][0],s=+e[0][1],c=+e[1][0],u=+e[1][1];!function(t,e,n,r){for(var i,a=fw.length;a--;)Vk(i=fw[a],t,e,n,r)&&Wk(i,t,e,n,r)&&(Math.abs(i[0][0]-i[1][0])>dw||Math.abs(i[0][1]-i[1][1])>dw)||delete fw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g=lw.length,m=!0;for(i=0;i<g;++i)if(a=lw[i]){for(o=a.site,s=(c=a.halfedges).length;s--;)fw[c[s]]||c.splice(s,1);for(s=0,u=c.length;s<u;)p=(d=Xk(a,fw[c[s]]))[0],y=d[1],h=(l=Gk(a,fw[c[++s%u]]))[0],f=l[1],(Math.abs(p-h)>dw||Math.abs(y-f)>dw)&&(c.splice(s,0,fw.push($k(o,d,Math.abs(p-t)<dw&&r-y>dw?[t,Math.abs(h-t)<dw?f:r]:Math.abs(y-r)<dw&&n-p>dw?[Math.abs(f-r)<dw?h:n,r]:Math.abs(p-n)<dw&&y-e>dw?[n,Math.abs(h-n)<dw?f:e]:Math.abs(y-e)<dw&&p-t>dw?[Math.abs(f-e)<dw?h:t,e]:null))-1),++u);u&&(m=!1)}if(m){var v,b,x,_=1/0;for(i=0,m=null;i<g;++i)(a=lw[i])&&(x=(v=(o=a.site)[0]-t)*v+(b=o[1]-e)*b)<_&&(_=x,m=a);if(m){var k=[t,e],w=[t,r],E=[n,r],T=[n,e];m.halfedges.push(fw.push($k(o=m.site,k,w))-1,fw.push($k(o,w,E))-1,fw.push($k(o,E,T))-1,fw.push($k(o,T,k))-1)}}for(i=0;i<g;++i)(a=lw[i])&&(a.halfedges.length||delete lw[i])}(o,s,c,u)}this.edges=fw,this.cells=lw,uw=hw=fw=lw=null}gw.prototype={constructor:gw,polygons:function(){var t=this.edges;return this.cells.map((function(e){var n=e.halfedges.map((function(n){return Gk(e,t[n])}));return n.data=e.site.data,n}))},triangles:function(){var t=[],e=this.edges;return this.cells.forEach((function(n,r){if(a=(i=n.halfedges).length)for(var i,a,o,s,c,u,l=n.site,h=-1,f=e[i[a-1]],d=f.left===l?f.right:f.left;++h<a;)o=d,d=(f=e[i[h]]).left===l?f.right:f.left,o&&d&&r<o.index&&r<d.index&&(c=o,u=d,((s=l)[0]-u[0])*(c[1]-s[1])-(s[0]-c[0])*(u[1]-s[1])<0)&&t.push([l.data,o.data,d.data])})),t},links:function(){return this.edges.filter((function(t){return t.right})).map((function(t){return{source:t.left.data,target:t.right.data}}))},find:function(t,e,n){for(var r,i,a=this,o=a._found||0,s=a.cells.length;!(i=a.cells[o]);)if(++o>=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;h<l&&(l=h,o=s.index)}}))}while(null!==o);return a._found=r,null==n||l<=n*n?i.site:null}};var mw=function(){var t=Lk,e=Ik,n=null;function r(r){return new gw(r.map((function(n,i){var a=[Math.round(t(n,i,r)/dw)*dw,Math.round(e(n,i,r)/dw)*dw];return a.index=i,a.data=n,a})),n)}return r.polygons=function(t){return r(t).polygons()},r.links=function(t){return r(t).links()},r.triangles=function(t){return r(t).triangles()},r.x=function(e){return arguments.length?(t="function"==typeof e?e:Dk(+e),r):t},r.y=function(t){return arguments.length?(e="function"==typeof t?t:Dk(+t),r):e},r.extent=function(t){return arguments.length?(n=null==t?null:[[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]],r):n&&[[n[0][0],n[0][1]],[n[1][0],n[1][1]]]},r.size=function(t){return arguments.length?(n=null==t?null:[[0,0],[+t[0],+t[1]]],r):n&&[n[1][0]-n[0][0],n[1][1]-n[0][1]]},r},vw=function(t){return function(){return t}};function bw(t,e,n){this.target=t,this.type=e,this.transform=n}function xw(t,e,n){this.k=t,this.x=e,this.y=n}xw.prototype={constructor:xw,scale:function(t){return 1===t?this:new xw(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new xw(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var _w=new xw(1,0,0);function kw(t){for(;!t.__zoom;)if(!(t=t.parentNode))return _w;return t.__zoom}function ww(){ue.stopImmediatePropagation()}kw.prototype=xw.prototype;var Ew=function(){ue.preventDefault(),ue.stopImmediatePropagation()};function Tw(){return!ue.ctrlKey&&!ue.button}function Cw(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t).hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]:[[0,0],[t.clientWidth,t.clientHeight]]}function Sw(){return this.__zoom||_w}function Aw(){return-ue.deltaY*(1===ue.deltaMode?.05:ue.deltaMode?1:.002)}function Mw(){return navigator.maxTouchPoints||"ontouchstart"in this}function Ow(t,e,n){var r=t.invertX(e[0][0])-n[0][0],i=t.invertX(e[1][0])-n[1][0],a=t.invertY(e[0][1])-n[0][1],o=t.invertY(e[1][1])-n[1][1];return t.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Nw=function(){var t,e,n=Tw,r=Cw,i=Ow,a=Aw,o=Mw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=lp,h=ht("start","zoom","end"),f=0;function d(t){t.property("__zoom",Sw).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new xw(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new xw(t.k,r,i)}function g(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function m(t,e,n){t.on("start.zoom",(function(){v(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){v(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=v(t,i),o=r.apply(t,i),s=null==n?g(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new xw(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function v(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=v(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Bn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],or(this),t.start()}Ew(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(y(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=v(this,arguments,!0),r=we(ue.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Bn(this),o=ue.clientX,s=ue.clientY;Ce(ue.view),ww(),t.mouse=[a,this.__zoom.invert(a)],or(this),t.start()}function u(){if(Ew(),!t.moved){var e=ue.clientX-o,n=ue.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=Bn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Se(ue.view,t.moved),Ew(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Bn(this),a=t.invert(e),o=t.k*(ue.shiftKey?.5:2),s=i(y(p(t,o),e,a),r.apply(this,arguments),c);Ew(),u>0?we(this).transition().duration(u).call(m,s,e):we(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ue.touches,s=o.length,c=v(this,arguments,ue.changedTouches.length===s);for(ww(),r=0;r<s;++r)i=o[r],a=[a=Nn(this,o,i.identifier),this.__zoom.invert(a),i.identifier],c.touch0?c.touch1||c.touch0[2]===a[2]||(c.touch1=a,c.taps=0):(c.touch0=a,e=!0,c.taps=1+!!t);t&&(t=clearTimeout(t)),e&&(c.taps<2&&(t=setTimeout((function(){t=null}),500)),or(this),c.start())}}function E(){if(this.__zooming){var e,n,r,a,o=v(this,arguments),s=ue.changedTouches,u=s.length;for(Ew(),t&&(t=clearTimeout(t)),o.taps=0,e=0;e<u;++e)n=s[e],r=Nn(this,s,n.identifier),o.touch0&&o.touch0[2]===n.identifier?o.touch0[0]=r:o.touch1&&o.touch1[2]===n.identifier&&(o.touch1[0]=r);if(n=o.that.__zoom,o.touch1){var l=o.touch0[0],h=o.touch0[1],f=o.touch1[0],d=o.touch1[1],g=(g=f[0]-l[0])*g+(g=f[1]-l[1])*g,m=(m=d[0]-h[0])*m+(m=d[1]-h[1])*m;n=p(n,Math.sqrt(g/m)),r=[(l[0]+f[0])/2,(l[1]+f[1])/2],a=[(h[0]+d[0])/2,(h[1]+d[1])/2]}else{if(!o.touch0)return;r=o.touch0[0],a=o.touch0[1]}o.zoom("touch",i(y(n,r,a),o.extent,c))}}function T(){if(this.__zooming){var t,n,r=v(this,arguments),i=ue.changedTouches,a=i.length;for(ww(),e&&clearTimeout(e),e=setTimeout((function(){e=null}),500),t=0;t<a;++t)n=i[t],r.touch0&&r.touch0[2]===n.identifier?delete r.touch0:r.touch1&&r.touch1[2]===n.identifier&&delete r.touch1;if(r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0)r.touch0[1]=this.__zoom.invert(r.touch0[0]);else if(r.end(),2===r.taps){var o=we(this).on("dblclick.zoom");o&&o.apply(this,arguments)}}}return d.transform=function(t,e,n){var r=t.selection?t.selection():t;r.property("__zoom",Sw),t!==r?m(t,e,n):r.interrupt().each((function(){v(this,arguments).start().zoom(null,"function"==typeof e?e.apply(this,arguments):e).end()}))},d.scaleBy=function(t,e,n){d.scaleTo(t,(function(){var t=this.__zoom.k,n="function"==typeof e?e.apply(this,arguments):e;return t*n}),n)},d.scaleTo=function(t,e,n){d.transform(t,(function(){var t=r.apply(this,arguments),a=this.__zoom,o=null==n?g(t):"function"==typeof n?n.apply(this,arguments):n,s=a.invert(o),u="function"==typeof e?e.apply(this,arguments):e;return i(y(p(a,u),o,s),t,c)}),n)},d.translateBy=function(t,e,n){d.transform(t,(function(){return i(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof n?n.apply(this,arguments):n),r.apply(this,arguments),c)}))},d.translateTo=function(t,e,n,a){d.transform(t,(function(){var t=r.apply(this,arguments),o=this.__zoom,s=null==a?g(t):"function"==typeof a?a.apply(this,arguments):a;return i(_w.translate(s[0],s[1]).scale(o.k).translate("function"==typeof e?-e.apply(this,arguments):-e,"function"==typeof n?-n.apply(this,arguments):-n),t,c)}),a)},b.prototype={start:function(){return 1==++this.active&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(t,e){return this.mouse&&"mouse"!==t&&(this.mouse[1]=e.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=e.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=e.invert(this.touch1[0])),this.that.__zoom=e,this.emit("zoom"),this},end:function(){return 0==--this.active&&(delete this.that.__zooming,this.emit("end")),this},emit:function(t){ye(new bw(d,t,this.that.__zoom),h.apply,h,[t,this.that,this.args])}},d.wheelDelta=function(t){return arguments.length?(a="function"==typeof t?t:vw(+t),d):a},d.filter=function(t){return arguments.length?(n="function"==typeof t?t:vw(!!t),d):n},d.touchable=function(t){return arguments.length?(o="function"==typeof t?t:vw(!!t),d):o},d.extent=function(t){return arguments.length?(r="function"==typeof t?t:vw([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),d):r},d.scaleExtent=function(t){return arguments.length?(s[0]=+t[0],s[1]=+t[1],d):[s[0],s[1]]},d.translateExtent=function(t){return arguments.length?(c[0][0]=+t[0][0],c[1][0]=+t[1][0],c[0][1]=+t[0][1],c[1][1]=+t[1][1],d):[[c[0][0],c[0][1]],[c[1][0],c[1][1]]]},d.constrain=function(t){return arguments.length?(i=t,d):i},d.duration=function(t){return arguments.length?(u=+t,d):u},d.interpolate=function(t){return arguments.length?(l=t,d):l},d.on=function(){var t=h.on.apply(h,arguments);return t===h?d:t},d.clickDistance=function(t){return arguments.length?(f=(t=+t)*t,d):Math.sqrt(f)},d}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),function(t){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}(n(171))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,18],u=[1,20],l=[1,21],h=[1,22],f=[1,24],d=[1,25],p=[1,26],y=[1,27],g=[1,28],m=[1,29],v=[1,32],b=[1,33],x=[1,36],_=[1,4,5,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,58],k=[1,44],w=[4,5,16,21,22,23,25,27,28,29,30,31,33,37,48,58],E=[4,5,16,21,22,23,25,27,28,29,30,31,33,36,37,48,58],T=[4,5,16,21,22,23,25,27,28,29,30,31,33,35,37,48,58],C=[46,47,48],S=[1,4,5,7,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,58],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,signal:20,autonumber:21,activate:22,deactivate:23,note_statement:24,title:25,text2:26,loop:27,end:28,rect:29,opt:30,alt:31,else_sections:32,par:33,par_sections:34,and:35,else:36,note:37,placement:38,over:39,actor_pair:40,spaceList:41,",":42,left_of:43,right_of:44,signaltype:45,"+":46,"-":47,ACTOR:48,SOLID_OPEN_ARROW:49,DOTTED_OPEN_ARROW:50,SOLID_ARROW:51,DOTTED_ARROW:52,SOLID_CROSS:53,DOTTED_CROSS:54,SOLID_POINT:55,DOTTED_POINT:56,TXT:57,open_directive:58,type_directive:59,arg_directive:60,close_directive:61,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",21:"autonumber",22:"activate",23:"deactivate",25:"title",27:"loop",28:"end",29:"rect",30:"opt",31:"alt",33:"par",35:"and",36:"else",37:"note",39:"over",42:",",43:"left_of",44:"right_of",46:"+",47:"-",48:"ACTOR",49:"SOLID_OPEN_ARROW",50:"DOTTED_OPEN_ARROW",51:"SOLID_ARROW",52:"DOTTED_ARROW",53:"SOLID_CROSS",54:"DOTTED_CROSS",55:"SOLID_POINT",56:"DOTTED_POINT",57:"TXT",58:"open_directive",59:"type_directive",60:"arg_directive",61:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,2],[10,1],[10,3],[10,3],[10,2],[10,3],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[34,1],[34,4],[32,1],[32,4],[24,4],[24,4],[41,2],[41,1],[40,3],[40,1],[38,1],[38,1],[20,5],[20,5],[20,4],[17,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[26,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.apply(a[s]),a[s];case 5:this.$=[];break;case 6:a[s-1].push(a[s]),this.$=a[s-1];break;case 7:case 8:this.$=a[s];break;case 9:this.$=[];break;case 12:a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 13:this.$=a[s-1];break;case 15:r.enableSequenceNumbers();break;case 16:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 17:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 19:this.$=[{type:"setTitle",text:a[s-1]}];break;case 20:a[s-1].unshift({type:"loopStart",loopText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 21:a[s-1].unshift({type:"rectStart",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_START}),a[s-1].push({type:"rectEnd",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[s-1];break;case 22:a[s-1].unshift({type:"optStart",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 23:a[s-1].unshift({type:"altStart",altText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 24:a[s-1].unshift({type:"parStart",parText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 27:this.$=a[s-3].concat([{type:"and",parText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 29:this.$=a[s-3].concat([{type:"else",altText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 30:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 31:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 34:this.$=[a[s-2],a[s]];break;case 35:this.$=a[s];break;case 36:this.$=r.PLACEMENT.LEFTOF;break;case 37:this.$=r.PLACEMENT.RIGHTOF;break;case 38:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 39:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 40:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 41:this.$={type:"addActor",actor:a[s]};break;case 42:this.$=r.LINETYPE.SOLID_OPEN;break;case 43:this.$=r.LINETYPE.DOTTED_OPEN;break;case 44:this.$=r.LINETYPE.SOLID;break;case 45:this.$=r.LINETYPE.DOTTED;break;case 46:this.$=r.LINETYPE.SOLID_CROSS;break;case 47:this.$=r.LINETYPE.DOTTED_CROSS;break;case 48:this.$=r.LINETYPE.SOLID_POINT;break;case 49:this.$=r.LINETYPE.DOTTED_POINT;break;case 50:this.$=r.parseMessage(a[s].trim().substring(1));break;case 51:r.parseDirective("%%{","open_directive");break;case 52:r.parseDirective(a[s],"type_directive");break;case 53:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 54:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:n,6:4,7:r,11:6,58:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,11:6,58:i},{3:9,4:e,5:n,6:4,7:r,11:6,58:i},{3:10,4:e,5:n,6:4,7:r,11:6,58:i},t([1,4,5,16,21,22,23,25,27,29,30,31,33,37,48,58],a,{8:11}),{12:12,59:[1,13]},{59:[2,51]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,29:p,30:y,31:g,33:m,37:v,48:b,58:i},{13:34,14:[1,35],61:x},t([14,61],[2,52]),t(_,[2,6]),{6:30,10:37,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,29:p,30:y,31:g,33:m,37:v,48:b,58:i},t(_,[2,8]),t(_,[2,9]),{17:38,48:b},{5:[1,39]},t(_,[2,15]),{17:40,48:b},{17:41,48:b},{5:[1,42]},{26:43,57:k},{19:[1,45]},{19:[1,46]},{19:[1,47]},{19:[1,48]},{19:[1,49]},t(_,[2,25]),{45:50,49:[1,51],50:[1,52],51:[1,53],52:[1,54],53:[1,55],54:[1,56],55:[1,57],56:[1,58]},{38:59,39:[1,60],43:[1,61],44:[1,62]},t([5,18,42,49,50,51,52,53,54,55,56,57],[2,41]),{5:[1,63]},{15:64,60:[1,65]},{5:[2,54]},t(_,[2,7]),{5:[1,67],18:[1,66]},t(_,[2,14]),{5:[1,68]},{5:[1,69]},t(_,[2,18]),{5:[1,70]},{5:[2,50]},t(w,a,{8:71}),t(w,a,{8:72}),t(w,a,{8:73}),t(E,a,{32:74,8:75}),t(T,a,{34:76,8:77}),{17:80,46:[1,78],47:[1,79],48:b},t(C,[2,42]),t(C,[2,43]),t(C,[2,44]),t(C,[2,45]),t(C,[2,46]),t(C,[2,47]),t(C,[2,48]),t(C,[2,49]),{17:81,48:b},{17:83,40:82,48:b},{48:[2,36]},{48:[2,37]},t(S,[2,10]),{13:84,61:x},{61:[2,53]},{19:[1,85]},t(_,[2,13]),t(_,[2,16]),t(_,[2,17]),t(_,[2,19]),{4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,28:[1,86],29:p,30:y,31:g,33:m,37:v,48:b,58:i},{4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,28:[1,87],29:p,30:y,31:g,33:m,37:v,48:b,58:i},{4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,28:[1,88],29:p,30:y,31:g,33:m,37:v,48:b,58:i},{28:[1,89]},{4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,28:[2,28],29:p,30:y,31:g,33:m,36:[1,90],37:v,48:b,58:i},{28:[1,91]},{4:o,5:s,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:l,23:h,24:23,25:f,27:d,28:[2,26],29:p,30:y,31:g,33:m,35:[1,92],37:v,48:b,58:i},{17:93,48:b},{17:94,48:b},{26:95,57:k},{26:96,57:k},{26:97,57:k},{42:[1,98],57:[2,35]},{5:[1,99]},{5:[1,100]},t(_,[2,20]),t(_,[2,21]),t(_,[2,22]),t(_,[2,23]),{19:[1,101]},t(_,[2,24]),{19:[1,102]},{26:103,57:k},{26:104,57:k},{5:[2,40]},{5:[2,30]},{5:[2,31]},{17:105,48:b},t(S,[2,11]),t(_,[2,12]),t(E,a,{8:75,32:106}),t(T,a,{8:77,34:107}),{5:[2,38]},{5:[2,39]},{57:[2,34]},{28:[2,29]},{28:[2,27]}],defaultActions:{7:[2,51],8:[2,1],9:[2,2],10:[2,3],36:[2,54],44:[2,50],61:[2,36],62:[2,37],65:[2,53],95:[2,40],96:[2,30],97:[2,31],103:[2,38],104:[2,39],105:[2,34],106:[2,29],107:[2,27]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(203);t.exports={Graph:r.Graph,json:n(306),alg:n(307),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(318),constant:n(88),defaults:n(154),each:n(89),filter:n(128),find:n(319),flatten:n(156),forEach:n(126),forIn:n(326),has:n(94),isUndefined:n(139),last:n(327),map:n(140),mapValues:n(328),max:n(329),merge:n(331),min:n(336),minBy:n(337),now:n(338),pick:n(161),range:n(162),reduce:n(142),sortBy:n(345),uniqueId:n(163),values:n(147),zipObject:n(350)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i=n(178),a=n(179),o=n(180),s={format:{keyword:i.default,hex:r.default,rgb:a.default,rgba:a.default,hsl:o.default,hsla:o.default},parse:function(t){if("string"!=typeof t)return t;var e=r.default.parse(t)||a.default.parse(t)||o.default.parse(t)||i.default.parse(t);if(e)return e;throw new Error('Unsupported color format: "'+t+'"')},stringify:function(t){return!t.changed&&t.color?t.color:t.type.is(2)||void 0===t.data.r?o.default.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?a.default.stringify(t):r.default.stringify(t)}};e.default=s},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){ +/** + * @license + * Copyright (c) 2012-2013 Chris Pettitt + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +t.exports={graphlib:n(316),dagre:n(153),intersect:n(375),render:n(377),util:n(15),version:n(389)}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o),{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){t.exports={graphlib:n(20),layout:n(317),debug:n(373),util:{time:n(9).time,notime:n(9).notime},version:n(374)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(172),i=n(173),a=n(174),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h<e;)c&&c[h].run();h=-1,e=u.length}c=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function y(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new p(t,e)),1!==u.length||l||s(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=y,i.addListener=y,i.once=y,i.off=y,i.removeListener=y,i.removeAllListeners=y,i.emit=y,i.prependListener=y,i.prependOnceListener=y,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){var r;try{r={clone:n(204),constant:n(88),each:n(89),filter:n(128),has:n(94),isArray:n(5),isEmpty:n(281),isFunction:n(39),isUndefined:n(139),keys:n(30),map:n(140),reduce:n(142),size:n(284),transform:n(290),union:n(291),values:n(147)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(44);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,7],n=[1,6],r=[1,14],i=[1,25],a=[1,28],o=[1,26],s=[1,27],c=[1,29],u=[1,30],l=[1,31],h=[1,32],f=[1,35],d=[1,36],p=[1,37],y=[1,38],g=[10,19],m=[1,50],v=[1,51],b=[1,52],x=[1,53],_=[1,54],k=[1,55],w=[10,19,26,33,34,42,45,46,47,48,49,50,55,57],E=[10,19,24,26,33,34,38,42,45,46,47,48,49,50,55,57,72,73,74,75],T=[10,13,17,19],C=[42,72,73,74,75],S=[42,49,50,72,73,74,75],A=[42,45,46,47,48,72,73,74,75],M=[10,19,26],O=[1,87],N={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,classLiteralName:23,GENERICTYPE:24,relationStatement:25,LABEL:26,classStatement:27,methodStatement:28,annotationStatement:29,clickStatement:30,cssClassStatement:31,CLASS:32,STYLE_SEPARATOR:33,STRUCT_START:34,members:35,STRUCT_STOP:36,ANNOTATION_START:37,ANNOTATION_END:38,MEMBER:39,SEPARATOR:40,relation:41,STR:42,relationType:43,lineType:44,AGGREGATION:45,EXTENSION:46,COMPOSITION:47,DEPENDENCY:48,LINE:49,DOTTED_LINE:50,CALLBACK:51,LINK:52,LINK_TARGET:53,CLICK:54,CALLBACK_NAME:55,CALLBACK_ARGS:56,HREF:57,CSSCLASS:58,commentToken:59,textToken:60,graphCodeTokens:61,textNoTagsToken:62,TAGSTART:63,TAGEND:64,"==":65,"--":66,PCT:67,DEFAULT:68,SPACE:69,MINUS:70,keywords:71,UNICODE_TEXT:72,NUM:73,ALPHA:74,BQUOTE_STR:75,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",24:"GENERICTYPE",26:"LABEL",32:"CLASS",33:"STYLE_SEPARATOR",34:"STRUCT_START",36:"STRUCT_STOP",37:"ANNOTATION_START",38:"ANNOTATION_END",39:"MEMBER",40:"SEPARATOR",42:"STR",45:"AGGREGATION",46:"EXTENSION",47:"COMPOSITION",48:"DEPENDENCY",49:"LINE",50:"DOTTED_LINE",51:"CALLBACK",52:"LINK",53:"LINK_TARGET",54:"CLICK",55:"CALLBACK_NAME",56:"CALLBACK_ARGS",57:"HREF",58:"CSSCLASS",61:"graphCodeTokens",63:"TAGSTART",64:"TAGEND",65:"==",66:"--",67:"PCT",68:"DEFAULT",69:"SPACE",70:"MINUS",71:"keywords",72:"UNICODE_TEXT",73:"NUM",74:"ALPHA",75:"BQUOTE_STR"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,1],[21,2],[21,2],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[27,2],[27,4],[27,5],[27,7],[29,4],[35,1],[35,2],[28,1],[28,2],[28,1],[28,1],[25,3],[25,4],[25,4],[25,5],[41,3],[41,2],[41,2],[41,1],[43,1],[43,1],[43,1],[43,1],[44,1],[44,1],[30,3],[30,4],[30,3],[30,4],[30,4],[30,5],[30,3],[30,4],[30,4],[30,5],[30,3],[30,4],[30,4],[30,5],[31,3],[59,1],[59,1],[60,1],[60,1],[60,1],[60,1],[60,1],[60,1],[60,1],[62,1],[62,1],[62,1],[62,1],[22,1],[22,1],[22,1],[23,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:case 15:this.$=a[s];break;case 16:this.$=a[s-1]+a[s];break;case 17:case 18:this.$=a[s-1]+"~"+a[s];break;case 19:r.addRelation(a[s]);break;case 20:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 27:r.addClass(a[s]);break;case 28:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 29:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 30:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 31:r.addAnnotation(a[s],a[s-2]);break;case 32:this.$=[a[s]];break;case 33:a[s].push(a[s-1]),this.$=a[s];break;case 34:break;case 35:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 36:case 37:break;case 38:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 39:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 40:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 41:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 42:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 43:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 44:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 45:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 46:this.$=r.relationType.AGGREGATION;break;case 47:this.$=r.relationType.EXTENSION;break;case 48:this.$=r.relationType.COMPOSITION;break;case 49:this.$=r.relationType.DEPENDENCY;break;case 50:this.$=r.lineType.LINE;break;case 51:this.$=r.lineType.DOTTED_LINE;break;case 52:case 58:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 53:case 59:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 54:case 62:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 55:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 56:case 64:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 57:case 65:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 60:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 61:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 63:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 66:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:5,13:e,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:e,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},t([11,16],[2,7]),{5:23,7:5,13:e,18:15,20:16,21:24,22:33,23:34,25:17,27:18,28:19,29:20,30:21,31:22,32:i,37:a,39:o,40:s,51:c,52:u,54:l,58:h,72:f,73:d,74:p,75:y},{10:[1,39]},{12:40,15:[1,41]},{10:[2,9]},{19:[1,42]},{10:[1,43],19:[2,11]},t(g,[2,19],{26:[1,44]}),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(g,[2,26]),t(g,[2,34],{41:45,43:48,44:49,26:[1,47],42:[1,46],45:m,46:v,47:b,48:x,49:_,50:k}),{21:56,22:33,23:34,72:f,73:d,74:p,75:y},t(g,[2,36]),t(g,[2,37]),{22:57,72:f,73:d,74:p},{21:58,22:33,23:34,72:f,73:d,74:p,75:y},{21:59,22:33,23:34,72:f,73:d,74:p,75:y},{21:60,22:33,23:34,72:f,73:d,74:p,75:y},{42:[1,61]},t(w,[2,14],{22:33,23:34,21:62,24:[1,63],72:f,73:d,74:p,75:y}),t(w,[2,15],{24:[1,64]}),t(E,[2,80]),t(E,[2,81]),t(E,[2,82]),t([10,19,24,26,33,34,42,45,46,47,48,49,50,55,57],[2,83]),t(T,[2,4]),{9:65,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:e,18:66,19:[2,12],20:16,21:24,22:33,23:34,25:17,27:18,28:19,29:20,30:21,31:22,32:i,37:a,39:o,40:s,51:c,52:u,54:l,58:h,72:f,73:d,74:p,75:y},t(g,[2,20]),{21:67,22:33,23:34,42:[1,68],72:f,73:d,74:p,75:y},{41:69,43:48,44:49,45:m,46:v,47:b,48:x,49:_,50:k},t(g,[2,35]),{44:70,49:_,50:k},t(C,[2,45],{43:71,45:m,46:v,47:b,48:x}),t(S,[2,46]),t(S,[2,47]),t(S,[2,48]),t(S,[2,49]),t(A,[2,50]),t(A,[2,51]),t(g,[2,27],{33:[1,72],34:[1,73]}),{38:[1,74]},{42:[1,75]},{42:[1,76]},{55:[1,77],57:[1,78]},{22:79,72:f,73:d,74:p},t(w,[2,16]),t(w,[2,17]),t(w,[2,18]),{10:[1,80]},{19:[2,13]},t(M,[2,38]),{21:81,22:33,23:34,72:f,73:d,74:p,75:y},{21:82,22:33,23:34,42:[1,83],72:f,73:d,74:p,75:y},t(C,[2,44],{43:84,45:m,46:v,47:b,48:x}),t(C,[2,43]),{22:85,72:f,73:d,74:p},{35:86,39:O},{21:88,22:33,23:34,72:f,73:d,74:p,75:y},t(g,[2,52],{42:[1,89]}),t(g,[2,54],{42:[1,91],53:[1,90]}),t(g,[2,58],{42:[1,92],56:[1,93]}),t(g,[2,62],{42:[1,95],53:[1,94]}),t(g,[2,66]),t(T,[2,5]),t(M,[2,40]),t(M,[2,39]),{21:96,22:33,23:34,72:f,73:d,74:p,75:y},t(C,[2,42]),t(g,[2,28],{34:[1,97]}),{36:[1,98]},{35:99,36:[2,32],39:O},t(g,[2,31]),t(g,[2,53]),t(g,[2,55]),t(g,[2,56],{53:[1,100]}),t(g,[2,59]),t(g,[2,60],{42:[1,101]}),t(g,[2,63]),t(g,[2,64],{53:[1,102]}),t(M,[2,41]),{35:103,39:O},t(g,[2,29]),{36:[2,33]},t(g,[2,57]),t(g,[2,61]),t(g,[2,65]),{36:[1,104]},t(g,[2,30])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],41:[2,8],42:[2,10],66:[2,13],99:[2,33]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},B={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),34;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),36;case 15:break;case 16:return"MEMBER";case 17:return 32;case 18:return 58;case 19:return 51;case 20:return 52;case 21:return 54;case 22:return 37;case 23:return 38;case 24:this.begin("generic");break;case 25:this.popState();break;case 26:return"GENERICTYPE";case 27:this.begin("string");break;case 28:this.popState();break;case 29:return"STR";case 30:this.begin("bqstring");break;case 31:this.popState();break;case 32:return"BQUOTE_STR";case 33:this.begin("href");break;case 34:this.popState();break;case 35:return 57;case 36:this.begin("callback_name");break;case 37:this.popState();break;case 38:this.popState(),this.begin("callback_args");break;case 39:return 55;case 40:this.popState();break;case 41:return 56;case 42:case 43:case 44:case 45:return 53;case 46:case 47:return 46;case 48:case 49:return 48;case 50:return 47;case 51:return 45;case 52:return 49;case 53:return 50;case 54:return 26;case 55:return 33;case 56:return 70;case 57:return"DOT";case 58:return"PLUS";case 59:return 67;case 60:case 61:return"EQUALS";case 62:return 74;case 63:return"PUNCTUATION";case 64:return 73;case 65:return 72;case 66:return 69;case 67:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callback_args:{rules:[40,41],inclusive:!1},callback_name:{rules:[37,38,39],inclusive:!1},href:{rules:[34,35],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},generic:{rules:[25,26],inclusive:!1},bqstring:{rules:[31,32],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,24,27,30,33,36,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};function D(){this.yy={}}return N.lexer=B,D.prototype=N,N.Parser=D,new D}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e){},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r<t.length;r++)e(t[r],r,t)&&n.push(t[r]);return n}e.resolve=function(){for(var e="",i=!1,a=arguments.length-1;a>=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-1;n>=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c<o;c++)if(i[c]!==a[c]){s=c;break}var u=[];for(c=s;c<i.length;c++)u.push("..");return(u=u.concat(a.slice(s))).join("/")},e.sep="/",e.delimiter=":",e.dirname=function(t){if("string"!=typeof t&&(t+=""),0===t.length)return".";for(var e=t.charCodeAt(0),n=47===e,r=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(12))},function(t,e,n){var r=n(109),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],m=[1,27],v=[1,32],b=[1,33],x=[1,34],_=[1,35],k=[1,31],w=[1,38],E=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],T=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 36:case 37:this.$=a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},{33:36,34:[1,37],48:w},t([34,48],[2,41]),t(E,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(E,[2,8]),t(E,[2,9]),t(E,[2,10],{12:[1,40],13:[1,41]}),t(E,[2,14]),{16:[1,42]},t(E,[2,16],{18:[1,43]}),{21:[1,44]},t(E,[2,20]),t(E,[2,21]),t(E,[2,22]),t(E,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(E,[2,26]),t(E,[2,27]),t(T,[2,36]),t(T,[2,37]),t(E,[2,30]),t(E,[2,31]),t(E,[2,32]),t(E,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(E,[2,7]),t(E,[2,11]),{11:51,22:f,42:k},t(E,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:w},{48:[2,42]},t(E,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(E,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(E,[2,13]),t(E,[2,17]),t(S,a,{8:62}),t(E,[2,24]),t(E,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(E,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 36;case 1:return 37;case 2:return 38;case 3:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:break;case 11:return 5;case 12:case 13:case 14:case 15:break;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:this.popState();break;case 19:this.pushState("STATE");break;case 20:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:return this.popState(),"ID";case 33:this.popState();break;case 34:return"STATE_DESCR";case 35:return 17;case 36:this.popState();break;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 39:break;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 45:break;case 46:return"NOTE_TEXT";case 47:return this.popState(),"ID";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 59:return 5;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));return r}function h(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function f(t,e){for(var n in e)h(e,n)&&(t[n]=e[n]);return h(e,"toString")&&(t.toString=e.toString),h(e,"valueOf")&&(t.valueOf=e.valueOf),t}function d(t,e,n,r){return be(t,e,n,r,!0).utc()}function p(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function y(t){if(null==t._isValid){var e=p(t),n=r.call(e.parsedDateParts,(function(t){return null!=t})),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function g(t){var e=d(NaN);return null!=t?f(p(e),t):p(e).userInvalidated=!0,e}r=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,r=0;r<n;r++)if(r in e&&t.call(this,e[r],r,e))return!0;return!1};var m=i.momentProperties=[];function v(t,e){var n,r,i;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=p(e)),s(e._locale)||(t._locale=e._locale),0<m.length)for(n=0;n<m.length;n++)s(i=e[r=m[n]])||(t[r]=i);return t}var b=!1;function x(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===b&&(b=!0,i.updateOffset(this),b=!1)}function _(t){return t instanceof x||null!=t&&null!=t._isAMomentObject}function k(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function w(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=k(e)),n}function E(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(r=0;r<i;r++)(n&&t[r]!==e[r]||!n&&w(t[r])!==w(e[r]))&&o++;return o+a}function T(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function C(t,e){var n=!0;return f((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){for(var r,a=[],o=0;o<arguments.length;o++){if(r="","object"==typeof arguments[o]){for(var s in r+="\n["+o+"] ",arguments[0])r+=s+": "+arguments[0][s]+", ";r=r.slice(0,-2)}else r=arguments[o];a.push(r)}T(t+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var S,A={};function M(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),A[t]||(T(e),A[t]=!0)}function O(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function N(t,e){var n,r=f({},t);for(n in e)h(e,n)&&(o(t[n])&&o(e[n])?(r[n]={},f(r[n],t[n]),f(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)h(t,n)&&!h(e,n)&&o(t[n])&&(r[n]=f({},r[n]));return r}function B(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,S=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)h(t,e)&&n.push(e);return n};var D={};function L(t,e){var n=t.toLowerCase();D[n]=D[n+"s"]=D[e]=t}function I(t){return"string"==typeof t?D[t]||D[t.toLowerCase()]:void 0}function R(t){var e,n,r={};for(n in t)h(t,n)&&(e=I(n))&&(r[e]=t[n]);return r}var F={};function P(t,e){F[t]=e}function j(t,e,n){var r=""+Math.abs(t),i=e-r.length;return(0<=t?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var Y=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,z=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},$={};function q(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&($[t]=i),e&&($[e[0]]=function(){return j(i.apply(this,arguments),e[1],e[2])}),n&&($[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function W(t,e){return t.isValid()?(e=V(e,t.localeData()),U[e]=U[e]||function(t){var e,n,r,i=t.match(Y);for(e=0,n=i.length;e<n;e++)$[i[e]]?i[e]=$[i[e]]:i[e]=(r=i[e]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");return function(e){var r,a="";for(r=0;r<n;r++)a+=O(i[r])?i[r].call(e,t):i[r];return a}}(e),U[e](t)):t.localeData().invalidDate()}function V(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(z.lastIndex=0;0<=n&&z.test(t);)t=t.replace(z,r),z.lastIndex=0,n-=1;return t}var H=/\d/,G=/\d\d/,X=/\d{3}/,Z=/\d{4}/,K=/[+-]?\d{6}/,Q=/\d\d?/,J=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,rt=/[+-]?\d{1,6}/,it=/\d+/,at=/[+-]?\d+/,ot=/Z|[+-]\d\d:?\d\d/gi,st=/Z|[+-]\d\d(?::?\d\d)?/gi,ct=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ut={};function lt(t,e,n){ut[t]=O(e)?e:function(t,r){return t&&n?n:e}}function ht(t,e){return h(ut,t)?ut[t](e._strict,e._locale):new RegExp(ft(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,r,i){return e||n||r||i}))))}function ft(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var dt={};function pt(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),c(e)&&(r=function(t,n){n[e]=w(t)}),n=0;n<t.length;n++)dt[t[n]]=r}function yt(t,e){pt(t,(function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)}))}function gt(t){return mt(t)?366:365}function mt(t){return t%4==0&&t%100!=0||t%400==0}q("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),q(0,["YY",2],0,(function(){return this.year()%100})),q(0,["YYYY",4],0,"year"),q(0,["YYYYY",5],0,"year"),q(0,["YYYYYY",6,!0],0,"year"),L("year","y"),P("year",1),lt("Y",at),lt("YY",Q,G),lt("YYYY",nt,Z),lt("YYYYY",rt,K),lt("YYYYYY",rt,K),pt(["YYYYY","YYYYYY"],0),pt("YYYY",(function(t,e){e[0]=2===t.length?i.parseTwoDigitYear(t):w(t)})),pt("YY",(function(t,e){e[0]=i.parseTwoDigitYear(t)})),pt("Y",(function(t,e){e[0]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return w(t)+(68<w(t)?1900:2e3)};var vt,bt=xt("FullYear",!0);function xt(t,e){return function(n){return null!=n?(kt(this,t,n),i.updateOffset(this,e),this):_t(this,t)}}function _t(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function kt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&mt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=(e%12+12)%12;return t+=(e-n)/12,1===n?mt(t)?29:28:31-n%7%2}vt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},q("M",["MM",2],"Mo",(function(){return this.month()+1})),q("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),q("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),L("month","M"),P("month",8),lt("M",Q),lt("MM",Q,G),lt("MMM",(function(t,e){return e.monthsShortRegex(t)})),lt("MMMM",(function(t,e){return e.monthsRegex(t)})),pt(["M","MM"],(function(t,e){e[1]=w(t)-1})),pt(["MMM","MMMM"],(function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[1]=i:p(n).invalidMonth=t}));var Et=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Tt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ct="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function St(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=w(e);else if(!c(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function At(t){return null!=t?(St(this,t),i.updateOffset(this,!0),this):_t(this,"Month")}var Mt=ct,Ot=ct;function Nt(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=d([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=ft(r[e]),i[e]=ft(i[e]);for(e=0;e<24;e++)a[e]=ft(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Bt(t){var e;if(t<100&&0<=t){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Dt(t,e,n){var r=7+e-n;return-(7+Bt(t,0,r).getUTCDay()-e)%7+r-1}function Lt(t,e,n,r,i){var a,o,s=1+7*(e-1)+(7+n-r)%7+Dt(t,r,i);return o=s<=0?gt(a=t-1)+s:s>gt(t)?(a=t+1,s-gt(t)):(a=t,s),{year:a,dayOfYear:o}}function It(t,e,n){var r,i,a=Dt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Rt(i=t.year()-1,e,n):o>Rt(t.year(),e,n)?(r=o-Rt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Rt(t,e,n){var r=Dt(t,e,n),i=Dt(t+1,e,n);return(gt(t)-r+i)/7}function Ft(t,e){return t.slice(e,7).concat(t.slice(0,e))}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),P("week",5),P("isoWeek",5),lt("w",Q),lt("ww",Q,G),lt("W",Q),lt("WW",Q,G),yt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),q("d",0,"do","day"),q("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),q("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),q("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),lt("d",Q),lt("e",Q),lt("E",Q),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),yt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),yt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function qt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Wt(){return this.hours()%12||12}function Vt(t,e){q(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Ht(t,e){return e._meridiemParse}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Wt),q("k",["kk",2],0,(function(){return this.hours()||24})),q("hmm",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)})),q("hmmss",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)})),q("Hmm",0,0,(function(){return""+this.hours()+j(this.minutes(),2)})),q("Hmmss",0,0,(function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)})),Vt("a",!0),Vt("A",!1),L("hour","h"),P("hour",13),lt("a",Ht),lt("A",Ht),lt("H",Q),lt("h",Q),lt("k",Q),lt("HH",Q,G),lt("hh",Q,G),lt("kk",Q,G),lt("hmm",J),lt("hmmss",tt),lt("Hmm",J),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var Gt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:Pt,weekdaysMin:Yt,weekdaysShort:jt,meridiemParse:/[ap]\.?m?\.?/i},Kt={},Qt={};function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Kt[e]&&void 0!==t&&t&&t.exports)try{r=Gt._abbr,n(202)("./"+e),ee(r)}catch(e){}return Kt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?Gt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Gt._abbr}function ne(t,e){if(null===e)return delete Kt[t],null;var n,r=Zt;if(e.abbr=t,null!=Kt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Kt[t]._config;else if(null!=e.parentLocale)if(null!=Kt[e.parentLocale])r=Kt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Qt[e.parentLocale]||(Qt[e.parentLocale]=[]),Qt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Kt[t]=new B(N(r,e)),Qt[t]&&Qt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Kt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Gt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a<t.length;){for(e=(i=Jt(t[a]).split("-")).length,n=(n=Jt(t[a+1]))?n.split("-"):null;0<e;){if(r=te(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&E(i,n,!0)>=e-1)break;e--}a++}return Gt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11<n[1]?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||24<n[3]||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||59<n[4]?4:n[5]<0||59<n[5]?5:n[6]<0||999<n[6]?6:-1,p(t)._overflowDayOfYear&&(e<0||2<e)&&(e=2),p(t)._overflowWeeks&&-1===e&&(e=7),p(t)._overflowWeekday&&-1===e&&(e=8),p(t).overflow=e),t}function ae(t,e,n){return null!=t?t:null!=e?e:n}function oe(t){var e,n,r,a,o,s=[];if(!t._d){var c,u;for(c=t,u=new Date(i.now()),r=c._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,r,i,a,o,s,c;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)a=1,o=4,n=ae(e.GG,t._a[0],It(xe(),1,4).year),r=ae(e.W,1),((i=ae(e.E,1))<1||7<i)&&(c=!0);else{a=t._locale._week.dow,o=t._locale._week.doy;var u=It(xe(),a,o);n=ae(e.gg,t._a[0],u.year),r=ae(e.w,u.week),null!=e.d?((i=e.d)<0||6<i)&&(c=!0):null!=e.e?(i=e.e+a,(e.e<0||6<e.e)&&(c=!0)):i=a}r<1||r>Rt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>gt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Bt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Bt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;e<n;e++)if(le[e][1].exec(c[1])){i=le[e][0],r=!1!==le[e][2];break}if(null==i)return void(t._isValid=!1);if(c[3]){for(e=0,n=he.length;e<n;e++)if(he[e][1].exec(c[3])){a=(c[2]||" ")+he[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(c[4]){if(!ue.exec(c[4]))return void(t._isValid=!1);o="Z"}t._f=i+(a||"")+(o||""),me(t)}else t._isValid=!1}var pe=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ye={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ge(t){var e,n,r,i=pe.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(i){var a=function(t,e,n,r,i,a){var o=[function(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}(t),Ct.indexOf(e),parseInt(n,10),parseInt(r,10),parseInt(i,10)];return a&&o.push(parseInt(a,10)),o}(i[4],i[3],i[2],i[5],i[6],i[7]);if(n=a,r=t,(e=i[1])&&jt.indexOf(e)!==new Date(n[0],n[1],n[2]).getDay()&&(p(r).weekdayMismatch=!0,!(r._isValid=!1)))return;t._a=a,t._tzm=function(t,e,n){if(t)return ye[t];if(e)return 0;var r=parseInt(n,10),i=r%100;return(r-i)/100*60+i}(i[8],i[9],i[10]),t._d=Bt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),p(t).rfc2822=!0}else t._isValid=!1}function me(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],p(t).empty=!0;var e,n,r,a,o,s,c,u,l=""+t._i,f=l.length,d=0;for(r=V(t._f,t._locale).match(Y)||[],e=0;e<r.length;e++)a=r[e],(n=(l.match(ht(a,t))||[])[0])&&(0<(o=l.substr(0,l.indexOf(n))).length&&p(t).unusedInput.push(o),l=l.slice(l.indexOf(n)+n.length),d+=n.length),$[a]?(n?p(t).empty=!1:p(t).unusedTokens.push(a),s=a,u=t,null!=(c=n)&&h(dt,s)&&dt[s](c,u._a,u,s)):t._strict&&!n&&p(t).unusedTokens.push(a);p(t).charsLeftOver=f-d,0<l.length&&p(t).unusedInput.push(l),t._a[3]<=12&&!0===p(t).bigHour&&0<t._a[3]&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):(null!=t.isPM&&((r=t.isPM(n))&&e<12&&(e+=12),r||12!==e||(e=0)),e)}(t._locale,t._a[3],t._meridiem),oe(t),ie(t)}else ge(t);else de(t)}function ve(t){var e,n,r,h,d=t._i,m=t._f;return t._locale=t._locale||re(t._l),null===d||void 0===m&&""===d?g({nullInput:!0}):("string"==typeof d&&(t._i=d=t._locale.preparse(d)),_(d)?new x(ie(d)):(u(d)?t._d=d:a(m)?function(t){var e,n,r,i,a;if(0===t._f.length)return p(t).invalidFormat=!0,t._d=new Date(NaN);for(i=0;i<t._f.length;i++)a=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],me(e),y(e)&&(a+=p(e).charsLeftOver,a+=10*p(e).unusedTokens.length,p(e).score=a,(null==r||a<r)&&(r=a,n=e));f(t,n||e)}(t):m?me(t):s(n=(e=t)._i)?e._d=new Date(i.now()):u(n)?e._d=new Date(n.valueOf()):"string"==typeof n?(r=e,null===(h=fe.exec(r._i))?(de(r),!1===r._isValid&&(delete r._isValid,ge(r),!1===r._isValid&&(delete r._isValid,i.createFromInputFallback(r)))):r._d=new Date(+h[1])):a(n)?(e._a=l(n.slice(0),(function(t){return parseInt(t,10)})),oe(e)):o(n)?function(t){if(!t._d){var e=R(t._i);t._a=l([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),oe(t)}}(e):c(n)?e._d=new Date(n):i.createFromInputFallback(e),y(t)||(t._d=null),t))}function be(t,e,n,r,i){var s,c={};return!0!==n&&!1!==n||(r=n,n=void 0),(o(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||a(t)&&0===t.length)&&(t=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=i,c._l=n,c._i=t,c._f=e,c._strict=r,(s=new x(ie(ve(c))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function xe(t,e,n,r){return be(t,e,n,r,!1)}i.createFromInputFallback=C("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var _e=C("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:g()})),ke=C("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?this<t?this:t:g()}));function we(t,e){var n,r;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return xe();for(n=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](n)||(n=e[r]);return n}var Ee=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Te(t){var e=R(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||e.isoWeek||0,o=e.day||0,s=e.hour||0,c=e.minute||0,u=e.second||0,l=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===vt.call(Ee,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,r=0;r<Ee.length;++r)if(t[Ee[r]]){if(n)return!1;parseFloat(t[Ee[r]])!==w(t[Ee[r]])&&(n=!0)}return!0}(e),this._milliseconds=+l+1e3*u+6e4*c+1e3*s*60*60,this._days=+o+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=re(),this._bubble()}function Ce(t){return t instanceof Te}function Se(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ae(t,e){q(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+j(~~(t/60),2)+e+j(~~t%60,2)}))}Ae("Z",":"),Ae("ZZ",""),lt("Z",st),lt("ZZ",st),pt(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=Oe(st,t)}));var Me=/([\+\-]|\d\d)/gi;function Oe(t,e){var n=(e||"").match(t);if(null===n)return null;var r=((n[n.length-1]||[])+"").match(Me)||["-",0,0],i=60*r[1]+w(r[2]);return 0===i?0:"+"===r[0]?i:-i}function Ne(t,e){var n,r;return e._isUTC?(n=e.clone(),r=(_(t)||u(t)?t.valueOf():xe(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),i.updateOffset(n,!1),n):xe(t).local()}function Be(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function De(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Le=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ie=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Re(t,e){var n,r,i,a=t,o=null;return Ce(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:c(t)?(a={},e?a[e]=t:a.milliseconds=t):(o=Le.exec(t))?(n="-"===o[1]?-1:1,a={y:0,d:w(o[2])*n,h:w(o[3])*n,m:w(o[4])*n,s:w(o[5])*n,ms:w(Se(1e3*o[6]))*n}):(o=Ie.exec(t))?(n="-"===o[1]?-1:1,a={y:Fe(o[2],n),M:Fe(o[3],n),w:Fe(o[4],n),d:Fe(o[5],n),h:Fe(o[6],n),m:Fe(o[7],n),s:Fe(o[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(i=function(t,e){var n;return t.isValid()&&e.isValid()?(e=Ne(e,t),t.isBefore(e)?n=Pe(t,e):((n=Pe(e,t)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}(xe(a.from),xe(a.to)),(a={}).ms=i.milliseconds,a.M=i.months),r=new Te(a),Ce(t)&&h(t,"_locale")&&(r._locale=t._locale),r}function Fe(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Pe(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function je(t,e){return function(n,r){var i;return null===r||isNaN(+r)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),Ye(this,Re(n="string"==typeof n?+n:n,r),t),this}}function Ye(t,e,n,r){var a=e._milliseconds,o=Se(e._days),s=Se(e._months);t.isValid()&&(r=null==r||r,s&&St(t,_t(t,"Month")+s*n),o&&kt(t,"Date",_t(t,"Date")+o*n),a&&t._d.setTime(t._d.valueOf()+a*n),r&&i.updateOffset(t,o||s))}Re.fn=Te.prototype,Re.invalid=function(){return Re(NaN)};var ze=je(1,"add"),Ue=je(-1,"subtract");function $e(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,"months");return-(n+(e-r<0?(e-r)/(r-t.clone().add(n-1,"months")):(e-r)/(t.clone().add(n+1,"months")-r)))||0}function qe(t){var e;return void 0===t?this._locale._abbr:(null!=(e=re(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var We=C("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function Ve(){return this._locale}var He=126227808e5;function Ge(t,e){return(t%e+e)%e}function Xe(t,e,n){return t<100&&0<=t?new Date(t+400,e,n)-He:new Date(t,e,n).valueOf()}function Ze(t,e,n){return t<100&&0<=t?Date.UTC(t+400,e,n)-He:Date.UTC(t,e,n)}function Ke(t,e){q(0,[t,t.length],0,e)}function Qe(t,e,n,r,i){var a;return null==t?It(this,r,i).year:((a=Rt(t,r,i))<e&&(e=a),function(t,e,n,r,i){var a=Lt(t,e,n,r,i),o=Bt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,t,e,n,r,i))}q(0,["gg",2],0,(function(){return this.weekYear()%100})),q(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ke("gggg","weekYear"),Ke("ggggg","weekYear"),Ke("GGGG","isoWeekYear"),Ke("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),P("weekYear",1),P("isoWeekYear",1),lt("G",at),lt("g",at),lt("GG",Q,G),lt("gg",Q,G),lt("GGGG",nt,Z),lt("gggg",nt,Z),lt("GGGGG",rt,K),lt("ggggg",rt,K),yt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,r){e[r.substr(0,2)]=w(t)})),yt(["gg","GG"],(function(t,e,n,r){e[r]=i.parseTwoDigitYear(t)})),q("Q",0,"Qo","quarter"),L("quarter","Q"),P("quarter",7),lt("Q",H),pt("Q",(function(t,e){e[1]=3*(w(t)-1)})),q("D",["DD",2],"Do","date"),L("date","D"),P("date",9),lt("D",Q),lt("DD",Q,G),lt("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),pt(["D","DD"],2),pt("Do",(function(t,e){e[2]=w(t.match(Q)[0])}));var Je=xt("Date",!0);q("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),P("dayOfYear",4),lt("DDD",et),lt("DDDD",X),pt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=w(t)})),q("m",["mm",2],0,"minute"),L("minute","m"),P("minute",14),lt("m",Q),lt("mm",Q,G),pt(["m","mm"],4);var tn=xt("Minutes",!1);q("s",["ss",2],0,"second"),L("second","s"),P("second",15),lt("s",Q),lt("ss",Q,G),pt(["s","ss"],5);var en,nn=xt("Seconds",!1);for(q("S",0,0,(function(){return~~(this.millisecond()/100)})),q(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),q(0,["SSS",3],0,"millisecond"),q(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),q(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),q(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),q(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),q(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),q(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),L("millisecond","ms"),P("millisecond",16),lt("S",et,H),lt("SS",et,G),lt("SSS",et,X),en="SSSS";en.length<=9;en+="S")lt(en,it);function rn(t,e){e[6]=w(1e3*("0."+t))}for(en="S";en.length<=9;en+="S")pt(en,rn);var an=xt("Milliseconds",!1);q("z",0,0,"zoneAbbr"),q("zz",0,0,"zoneName");var on=x.prototype;function sn(t){return t}on.add=ze,on.calendar=function(t,e){var n=t||xe(),r=Ne(n,this).startOf("day"),a=i.calendarFormat(this,r)||"sameElse",o=e&&(O(e[a])?e[a].call(this,n):e[a]);return this.format(o||this.localeData().calendar(a,this,xe(n)))},on.clone=function(){return new x(this)},on.diff=function(t,e,n){var r,i,a;if(!this.isValid())return NaN;if(!(r=Ne(t,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),e=I(e)){case"year":a=$e(this,r)/12;break;case"month":a=$e(this,r);break;case"quarter":a=$e(this,r)/3;break;case"second":a=(this-r)/1e3;break;case"minute":a=(this-r)/6e4;break;case"hour":a=(this-r)/36e5;break;case"day":a=(this-r-i)/864e5;break;case"week":a=(this-r-i)/6048e5;break;default:a=this-r}return n?a:k(a)},on.endOf=function(t){var e;if(void 0===(t=I(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ze:Xe;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Ge(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Ge(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Ge(e,1e3)-1}return this._d.setTime(e),i.updateOffset(this,!0),this},on.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=W(this,t);return this.localeData().postformat(e)},on.from=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||xe(t).isValid())?Re({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},on.fromNow=function(t){return this.from(xe(),t)},on.to=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||xe(t).isValid())?Re({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},on.toNow=function(t){return this.to(xe(),t)},on.get=function(t){return O(this[t=I(t)])?this[t]():this},on.invalidAt=function(){return p(this).overflow},on.isAfter=function(t,e){var n=_(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},on.isBefore=function(t,e){var n=_(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},on.isBetween=function(t,e,n,r){var i=_(t)?t:xe(t),a=_(e)?e:xe(e);return!!(this.isValid()&&i.isValid()&&a.isValid())&&("("===(r=r||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===r[1]?this.isBefore(a,n):!this.isAfter(a,n))},on.isSame=function(t,e){var n,r=_(t)?t:xe(t);return!(!this.isValid()||!r.isValid())&&("millisecond"===(e=I(e)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},on.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},on.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},on.isValid=function(){return y(this)},on.lang=We,on.locale=qe,on.localeData=Ve,on.max=ke,on.min=_e,on.parsingFlags=function(){return f({},p(this))},on.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:F[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=R(t)),r=0;r<n.length;r++)this[n[r].unit](t[n[r].unit]);else if(O(this[t=I(t)]))return this[t](e);return this},on.startOf=function(t){var e;if(void 0===(t=I(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ze:Xe;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Ge(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Ge(e,6e4);break;case"second":e=this._d.valueOf(),e-=Ge(e,1e3)}return this._d.setTime(e),i.updateOffset(this,!0),this},on.subtract=Ue,on.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},on.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},on.toDate=function(){return new Date(this.valueOf())},on.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||9999<n.year()?W(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",W(n,"Z")):W(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},on.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=e+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+i)},on.toJSON=function(){return this.isValid()?this.toISOString():null},on.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},on.unix=function(){return Math.floor(this.valueOf()/1e3)},on.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},on.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},on.year=bt,on.isLeapYear=function(){return mt(this.year())},on.weekYear=function(t){return Qe.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},on.isoWeekYear=function(t){return Qe.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},on.quarter=on.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},on.month=At,on.daysInMonth=function(){return wt(this.year(),this.month())},on.week=on.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},on.isoWeek=on.isoWeeks=function(t){var e=It(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},on.weeksInYear=function(){var t=this.localeData()._week;return Rt(this.year(),t.dow,t.doy)},on.isoWeeksInYear=function(){return Rt(this.year(),1,4)},on.date=Je,on.day=on.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e,n,r=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(e=t,n=this.localeData(),t="string"!=typeof e?e:isNaN(e)?"number"==typeof(e=n.weekdaysParse(e))?e:null:parseInt(e,10),this.add(t-r,"d")):r},on.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},on.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null==t)return this.day()||7;var e,n,r=(e=t,n=this.localeData(),"string"==typeof e?n.weekdaysParse(e)%7||7:isNaN(e)?null:e);return this.day(this.day()%7?r:r-7)},on.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},on.hour=on.hours=Xt,on.minute=on.minutes=tn,on.second=on.seconds=nn,on.millisecond=on.milliseconds=an,on.utcOffset=function(t,e,n){var r,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null==t)return this._isUTC?a:Be(this);if("string"==typeof t){if(null===(t=Oe(st,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(r=Be(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==t&&(!e||this._changeInProgress?Ye(this,Re(t-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this},on.utc=function(t){return this.utcOffset(0,t)},on.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Be(this),"m")),this},on.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Oe(ot,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},on.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?xe(t).utcOffset():0,(this.utcOffset()-t)%60==0)},on.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=De,on.isUTC=De,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Je),on.months=C("months accessor is deprecated. Use month instead",At),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),(t=ve(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0<E(t._a,e.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted}));var cn=B.prototype;function un(t,e,n,r){var i=re(),a=d().set(r,e);return i[n](a,t)}function ln(t,e,n){if(c(t)&&(e=t,t=void 0),t=t||"",null!=e)return un(t,e,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=un(t,r,n,"month");return i}function hn(t,e,n,r){"boolean"==typeof t?c(e)&&(n=e,e=void 0):(e=t,t=!1,c(n=e)&&(n=e,e=void 0)),e=e||"";var i,a=re(),o=t?a._week.dow:0;if(null!=n)return un(e,(n+o)%7,r,"day");var s=[];for(i=0;i<7;i++)s[i]=un(e,(i+o)%7,r,"day");return s}cn.calendar=function(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return O(r)?r.call(e,n):r},cn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},cn.invalidDate=function(){return this._invalidDate},cn.ordinal=function(t){return this._ordinal.replace("%d",t)},cn.preparse=sn,cn.postformat=sn,cn.relativeTime=function(t,e,n,r){var i=this._relativeTime[n];return O(i)?i(t,e,n,r):i.replace(/%d/i,t)},cn.pastFuture=function(t,e){var n=this._relativeTime[0<t?"future":"past"];return O(n)?n(e):n.replace(/%s/i,e)},cn.set=function(t){var e,n;for(n in t)O(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},cn.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Et).test(e)?"format":"standalone"][t.month()]:a(this._months)?this._months:this._months.standalone},cn.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Et.test(e)?"format":"standalone"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},cn.monthsParse=function(t,e,n){var r,i,a;if(this._monthsParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=d([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(i=vt.call(this._shortMonthsParse,o))?i:null:-1!==(i=vt.call(this._longMonthsParse,o))?i:null:"MMM"===e?-1!==(i=vt.call(this._shortMonthsParse,o))||-1!==(i=vt.call(this._longMonthsParse,o))?i:null:-1!==(i=vt.call(this._longMonthsParse,o))||-1!==(i=vt.call(this._shortMonthsParse,o))?i:null}.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=d([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}},cn.monthsRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Nt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Ot),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},cn.monthsShortRegex=function(t){return this._monthsParseExact?(h(this,"_monthsRegex")||Nt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Mt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},cn.week=function(t){return It(t,this._week.dow,this._week.doy).week},cn.firstDayOfYear=function(){return this._week.doy},cn.firstDayOfWeek=function(){return this._week.dow},cn.weekdays=function(t,e){var n=a(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?Ft(n,this._week.dow):t?n[t.day()]:n},cn.weekdaysMin=function(t){return!0===t?Ft(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},cn.weekdaysShort=function(t){return!0===t?Ft(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},cn.weekdaysParse=function(t,e,n){var r,i,a;if(this._weekdaysParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=d([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(i=vt.call(this._weekdaysParse,o))?i:null:"ddd"===e?-1!==(i=vt.call(this._shortWeekdaysParse,o))?i:null:-1!==(i=vt.call(this._minWeekdaysParse,o))?i:null:"dddd"===e?-1!==(i=vt.call(this._weekdaysParse,o))||-1!==(i=vt.call(this._shortWeekdaysParse,o))||-1!==(i=vt.call(this._minWeekdaysParse,o))?i:null:"ddd"===e?-1!==(i=vt.call(this._shortWeekdaysParse,o))||-1!==(i=vt.call(this._weekdaysParse,o))||-1!==(i=vt.call(this._minWeekdaysParse,o))?i:null:-1!==(i=vt.call(this._minWeekdaysParse,o))||-1!==(i=vt.call(this._weekdaysParse,o))||-1!==(i=vt.call(this._shortWeekdaysParse,o))?i:null}.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=d([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}},cn.weekdaysRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=zt),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},cn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},cn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=$t),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},cn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},cn.meridiem=function(t,e,n){return 11<t?n?"pm":"PM":n?"am":"AM"},ee("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),i.lang=C("moment.lang is deprecated. Use moment.locale instead.",ee),i.langData=C("moment.langData is deprecated. Use moment.localeData instead.",re);var fn=Math.abs;function dn(t,e,n,r){var i=Re(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function pn(t){return t<0?Math.floor(t):Math.ceil(t)}function yn(t){return 4800*t/146097}function gn(t){return 146097*t/4800}function mn(t){return function(){return this.as(t)}}var vn=mn("ms"),bn=mn("s"),xn=mn("m"),_n=mn("h"),kn=mn("d"),wn=mn("w"),En=mn("M"),Tn=mn("Q"),Cn=mn("y");function Sn(t){return function(){return this.isValid()?this._data[t]:NaN}}var An=Sn("milliseconds"),Mn=Sn("seconds"),On=Sn("minutes"),Nn=Sn("hours"),Bn=Sn("days"),Dn=Sn("months"),Ln=Sn("years"),In=Math.round,Rn={ss:44,s:45,m:45,h:22,d:26,M:11},Fn=Math.abs;function Pn(t){return(0<t)-(t<0)||+t}function jn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=Fn(this._milliseconds)/1e3,r=Fn(this._days),i=Fn(this._months);e=k((t=k(n/60))/60),n%=60,t%=60;var a=k(i/12),o=i%=12,s=r,c=e,u=t,l=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var f=h<0?"-":"",d=Pn(this._months)!==Pn(h)?"-":"",p=Pn(this._days)!==Pn(h)?"-":"",y=Pn(this._milliseconds)!==Pn(h)?"-":"";return f+"P"+(a?d+a+"Y":"")+(o?d+o+"M":"")+(s?p+s+"D":"")+(c||u||l?"T":"")+(c?y+c+"H":"")+(u?y+u+"M":"")+(l?y+l+"S":"")}var Yn=Te.prototype;return Yn.isValid=function(){return this._isValid},Yn.abs=function(){var t=this._data;return this._milliseconds=fn(this._milliseconds),this._days=fn(this._days),this._months=fn(this._months),t.milliseconds=fn(t.milliseconds),t.seconds=fn(t.seconds),t.minutes=fn(t.minutes),t.hours=fn(t.hours),t.months=fn(t.months),t.years=fn(t.years),this},Yn.add=function(t,e){return dn(this,t,e,1)},Yn.subtract=function(t,e){return dn(this,t,e,-1)},Yn.as=function(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=I(t))||"quarter"===t||"year"===t)switch(e=this._days+r/864e5,n=this._months+yn(e),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(gn(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}},Yn.asMilliseconds=vn,Yn.asSeconds=bn,Yn.asMinutes=xn,Yn.asHours=_n,Yn.asDays=kn,Yn.asWeeks=wn,Yn.asMonths=En,Yn.asQuarters=Tn,Yn.asYears=Cn,Yn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN},Yn._bubble=function(){var t,e,n,r,i,a=this._milliseconds,o=this._days,s=this._months,c=this._data;return 0<=a&&0<=o&&0<=s||a<=0&&o<=0&&s<=0||(a+=864e5*pn(gn(s)+o),s=o=0),c.milliseconds=a%1e3,t=k(a/1e3),c.seconds=t%60,e=k(t/60),c.minutes=e%60,n=k(e/60),c.hours=n%24,s+=i=k(yn(o+=k(n/24))),o-=pn(gn(i)),r=k(s/12),s%=12,c.days=o,c.months=s,c.years=r,this},Yn.clone=function(){return Re(this)},Yn.get=function(t){return t=I(t),this.isValid()?this[t+"s"]():NaN},Yn.milliseconds=An,Yn.seconds=Mn,Yn.minutes=On,Yn.hours=Nn,Yn.days=Bn,Yn.weeks=function(){return k(this.days()/7)},Yn.months=Dn,Yn.years=Ln,Yn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e,n,r,i,a,o,s,c,u,l,h=this.localeData(),f=(e=!t,n=h,r=Re(this).abs(),i=In(r.as("s")),a=In(r.as("m")),o=In(r.as("h")),s=In(r.as("d")),c=In(r.as("M")),u=In(r.as("y")),(l=i<=Rn.ss&&["s",i]||i<Rn.s&&["ss",i]||a<=1&&["m"]||a<Rn.m&&["mm",a]||o<=1&&["h"]||o<Rn.h&&["hh",o]||s<=1&&["d"]||s<Rn.d&&["dd",s]||c<=1&&["M"]||c<Rn.M&&["MM",c]||u<=1&&["y"]||["yy",u])[2]=e,l[3]=0<+this,l[4]=n,function(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}.apply(null,l));return t&&(f=h.pastFuture(+this,f)),h.postformat(f)},Yn.toISOString=jn,Yn.toString=jn,Yn.toJSON=jn,Yn.locale=qe,Yn.localeData=Ve,Yn.toIsoString=C("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",jn),Yn.lang=We,q("X",0,0,"unix"),q("x",0,0,"valueOf"),lt("x",at),lt("X",/[+-]?\d+(\.\d{1,3})?/),pt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),pt("x",(function(t,e,n){n._d=new Date(w(t))})),i.version="2.24.0",e=xe,i.fn=on,i.min=function(){return we("isBefore",[].slice.call(arguments,0))},i.max=function(){return we("isAfter",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=d,i.unix=function(t){return xe(1e3*t)},i.months=function(t,e){return ln(t,e,"months")},i.isDate=u,i.locale=ee,i.invalid=g,i.duration=Re,i.isMoment=_,i.weekdays=function(t,e,n){return hn(t,e,n,"weekdays")},i.parseZone=function(){return xe.apply(null,arguments).parseZone()},i.localeData=re,i.isDuration=Ce,i.monthsShort=function(t,e){return ln(t,e,"monthsShort")},i.weekdaysMin=function(t,e,n){return hn(t,e,n,"weekdaysMin")},i.defineLocale=ne,i.updateLocale=function(t,e){if(null!=e){var n,r,i=Zt;null!=(r=te(t))&&(i=r._config),(n=new B(e=N(i,e))).parentLocale=Kt[t],Kt[t]=n,ee(t)}else null!=Kt[t]&&(null!=Kt[t].parentLocale?Kt[t]=Kt[t].parentLocale:null!=Kt[t]&&delete Kt[t]);return Kt[t]},i.locales=function(){return S(Kt)},i.weekdaysShort=function(t,e,n){return hn(t,e,n,"weekdaysShort")},i.normalizeUnits=I,i.relativeTimeRounding=function(t){return void 0===t?In:"function"==typeof t&&(In=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==Rn[t]&&(void 0===e?Rn[t]:(Rn[t]=e,"s"===t&&(Rn.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=on,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()}).call(this,n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,21,28,33],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,24],d=[1,26],p=[1,29],y=[5,7,9,11,12,13,14,15,16,17,18,19,21,28,33],g={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,excludes:16,todayMarker:17,title:18,section:19,clickStatement:20,taskTxt:21,taskData:22,openDirective:23,typeDirective:24,closeDirective:25,":":26,argDirective:27,click:28,callbackname:29,callbackargs:30,href:31,clickStatementDebug:32,open_directive:33,type_directive:34,arg_directive:35,close_directive:36,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"excludes",17:"todayMarker",18:"title",19:"section",21:"taskTxt",22:"taskData",26:":",28:"click",29:"callbackname",30:"callbackargs",31:"href",33:"open_directive",34:"type_directive",35:"arg_directive",36:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[20,2],[20,3],[20,3],[20,4],[20,3],[20,4],[20,2],[32,2],[32,3],[32,3],[32,4],[32,3],[32,4],[32,2],[23,1],[24,1],[27,1],[25,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.TopAxis(),this.$=a[s].substr(8);break;case 12:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 13:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 14:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 15:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 16:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 18:r.addTask(a[s-1],a[s]),this.$="task";break;case 22:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 23:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 24:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 25:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 26:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 27:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 28:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 29:case 35:this.$=a[s-1]+" "+a[s];break;case 30:case 31:case 33:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 32:case 34:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 36:r.parseDirective("%%{","open_directive");break;case 37:r.parseDirective(a[s],"type_directive");break;case 38:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 39:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,23:4,33:n},{1:[3]},{3:6,4:2,5:e,23:4,33:n},t(r,[2,3],{6:7}),{24:8,34:[1,9]},{34:[2,36]},{1:[2,1]},{4:25,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:23,21:f,23:4,28:d,33:n},{25:27,26:[1,28],36:p},t([26,36],[2,37]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:25,10:30,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:23,21:f,23:4,28:d,33:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),t(r,[2,17]),{22:[1,31]},t(r,[2,19]),{29:[1,32],31:[1,33]},{11:[1,34]},{27:35,35:[1,36]},{11:[2,39]},t(r,[2,5]),t(r,[2,18]),t(r,[2,22],{30:[1,37],31:[1,38]}),t(r,[2,28],{29:[1,39]}),t(y,[2,20]),{25:40,36:p},{36:[2,38]},t(r,[2,23],{31:[1,41]}),t(r,[2,24]),t(r,[2,26],{30:[1,42]}),{11:[1,43]},t(r,[2,25]),t(r,[2,27]),t(y,[2,21])],defaultActions:{5:[2,36],6:[2,1],29:[2,39],36:[2,38]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),33;case 1:return this.begin("type_directive"),34;case 2:return this.popState(),this.begin("arg_directive"),26;case 3:return this.popState(),this.popState(),36;case 4:return 35;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 31;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 29;case 19:this.popState();break;case 20:return 30;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 28;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return 17;case 31:return"date";case 32:return 18;case 33:return 19;case 34:return 21;case 35:return 22;case 36:return 26;case 37:return 7;case 38:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}};function v(){this.yy={}}return g.lexer=m,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(39),i=n(82);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(261),i=n(271),a=n(36),o=n(5),s=n(278);t.exports=function(t){return"function"==typeof t?t:null==t?a:"object"==typeof t?o(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,33],p=[1,34],y=[1,35],g=[1,36],m=[1,37],v=[1,53],b=[1,48],x=[1,50],_=[1,45],k=[1,49],w=[1,52],E=[1,56],T=[1,57],C=[1,38],S=[1,39],A=[1,40],M=[1,41],O=[1,58],N=[1,47],B=[1,51],D=[1,54],L=[1,55],I=[1,46],R=[1,62],F=[1,67],P=[1,20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],j=[1,71],Y=[1,70],z=[1,72],U=[20,21,23,70,71],$=[1,93],q=[1,98],W=[1,95],V=[1,100],H=[1,103],G=[1,101],X=[1,102],Z=[1,96],K=[1,108],Q=[1,107],J=[1,97],tt=[1,99],et=[1,104],nt=[1,105],rt=[1,106],it=[1,109],at=[20,21,22,23,70,71],ot=[20,21,22,23,48,70,71],st=[20,21,22,23,40,47,48,50,52,54,56,58,60,62,63,65,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ct=[20,21,23],ut=[20,21,23,47,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],lt=[1,12,20,21,22,23,24,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],ht=[47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ft=[1,141],dt=[1,149],pt=[1,150],yt=[1,151],gt=[1,152],mt=[1,136],vt=[1,137],bt=[1,133],xt=[1,144],_t=[1,145],kt=[1,146],wt=[1,147],Et=[1,148],Tt=[1,153],Ct=[1,154],St=[1,139],At=[1,142],Mt=[1,138],Ot=[1,135],Nt=[20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],Bt=[1,157],Dt=[20,21,22,23,26,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],Lt=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,61,62,64,66,70,71,72,76,77,78,79,80,81,82,85,95,96,99,100,101,103,104,105,106,114,115,116,117,118,119],It=[12,21,22,24],Rt=[22,96],Ft=[1,238],Pt=[1,242],jt=[1,239],Yt=[1,236],zt=[1,233],Ut=[1,234],$t=[1,235],qt=[1,237],Wt=[1,240],Vt=[1,241],Ht=[1,243],Gt=[1,260],Xt=[20,21,23,96],Zt=[20,21,22,23,76,92,95,96,99,100,101,102,103,104,105],Kt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,CYLINDERSTART:58,CYLINDEREND:59,DIAMOND_START:60,DIAMOND_STOP:61,TAGEND:62,TRAPSTART:63,TRAPEND:64,INVTRAPSTART:65,INVTRAPEND:66,linkStatement:67,arrowText:68,TESTSTR:69,START_LINK:70,LINK:71,PIPE:72,textToken:73,STR:74,keywords:75,STYLE:76,LINKSTYLE:77,CLASSDEF:78,CLASS:79,CLICK:80,DOWN:81,UP:82,textNoTags:83,textNoTagsToken:84,DEFAULT:85,stylesOpt:86,alphaNum:87,CALLBACKNAME:88,CALLBACKARGS:89,HREF:90,LINK_TARGET:91,HEX:92,numList:93,INTERPOLATE:94,NUM:95,COMMA:96,style:97,styleComponent:98,ALPHA:99,COLON:100,MINUS:101,UNIT:102,BRKT:103,DOT:104,PCT:105,TAGSTART:106,alphaNumToken:107,idStringToken:108,alphaNumStatement:109,direction_tb:110,direction_bt:111,direction_rl:112,direction_lr:113,PUNCTUATION:114,UNICODE_TEXT:115,PLUS:116,EQUALS:117,MULT:118,UNDERSCORE:119,graphCodeTokens:120,ARROW_CROSS:121,ARROW_POINT:122,ARROW_CIRCLE:123,ARROW_OPEN:124,QUOTE:125,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"CYLINDERSTART",59:"CYLINDEREND",60:"DIAMOND_START",61:"DIAMOND_STOP",62:"TAGEND",63:"TRAPSTART",64:"TRAPEND",65:"INVTRAPSTART",66:"INVTRAPEND",69:"TESTSTR",70:"START_LINK",71:"LINK",72:"PIPE",74:"STR",76:"STYLE",77:"LINKSTYLE",78:"CLASSDEF",79:"CLASS",80:"CLICK",81:"DOWN",82:"UP",85:"DEFAULT",88:"CALLBACKNAME",89:"CALLBACKARGS",90:"HREF",91:"LINK_TARGET",92:"HEX",94:"INTERPOLATE",95:"NUM",96:"COMMA",99:"ALPHA",100:"COLON",101:"MINUS",102:"UNIT",103:"BRKT",104:"DOT",105:"PCT",106:"TAGSTART",110:"direction_tb",111:"direction_bt",112:"direction_rl",113:"direction_lr",114:"PUNCTUATION",115:"UNICODE_TEXT",116:"PLUS",117:"EQUALS",118:"MULT",119:"UNDERSCORE",121:"ARROW_CROSS",122:"ARROW_POINT",123:"ARROW_CIRCLE",124:"ARROW_OPEN",125:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[67,1],[68,3],[39,1],[39,2],[39,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[83,1],[83,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[93,1],[93,3],[86,1],[86,3],[97,1],[97,2],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[84,1],[84,1],[84,1],[84,1],[49,1],[49,2],[87,1],[87,2],[109,1],[109,1],[109,1],[109,1],[43,1],[43,1],[43,1],[43,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 77:case 79:case 91:case 147:case 149:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 63:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 64:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 69:this.$=a[s],r.addVertex(a[s]);break;case 70:a[s-1].text=a[s],this.$=a[s-1];break;case 71:case 72:a[s-2].text=a[s-1],this.$=a[s-2];break;case 73:this.$=a[s];break;case 74:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 75:c=r.destructLink(a[s]),this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 76:this.$=a[s-1];break;case 78:case 92:case 148:this.$=a[s-1]+""+a[s];break;case 93:case 94:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 95:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 96:case 104:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 97:case 105:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 98:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 99:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 100:case 106:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 101:case 107:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 103:case 109:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 110:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 111:case 113:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 112:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 114:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 116:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 118:case 120:this.$=[a[s]];break;case 119:case 121:a[s-2].push(a[s]),this.$=a[s-2];break;case 123:this.$=a[s-1]+a[s];break;case 145:this.$=a[s];break;case 146:this.$=a[s-1]+""+a[s];break;case 151:this.$="v";break;case 152:this.$="-";break;case 153:this.$={stmt:"dir",value:"TB"};break;case 154:this.$={stmt:"dir",value:"BT"};break;case 155:this.$={stmt:"dir",value:"RL"};break;case 156:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{8:60,10:[1,61],15:R},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,64],21:[1,65],22:F,27:63,30:66},t(P,[2,11]),t(P,[2,12]),t(P,[2,13]),t(P,[2,14]),t(P,[2,15]),t(P,[2,16]),{9:68,20:j,21:Y,23:z,44:69,67:73,70:[1,74],71:[1,75]},{9:76,20:j,21:Y,23:z},{9:77,20:j,21:Y,23:z},{9:78,20:j,21:Y,23:z},{9:79,20:j,21:Y,23:z},{9:80,20:j,21:Y,23:z},{9:82,20:j,21:Y,22:[1,81],23:z},t(P,[2,44]),t(U,[2,51],{30:83,22:F}),{22:[1,84]},{22:[1,85]},{22:[1,86]},{22:[1,87]},{26:$,47:q,74:[1,91],81:W,87:90,88:[1,88],90:[1,89],95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(P,[2,153]),t(P,[2,154]),t(P,[2,155]),t(P,[2,156]),t(at,[2,52],{48:[1,110]}),t(ot,[2,69],{108:121,40:[1,111],47:f,50:[1,112],52:[1,113],54:[1,114],56:[1,115],58:[1,116],60:[1,117],62:[1,118],63:[1,119],65:[1,120],81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,114:O,115:N,116:B,117:D,118:L,119:I}),t(st,[2,145]),t(st,[2,170]),t(st,[2,171]),t(st,[2,172]),t(st,[2,173]),t(st,[2,174]),t(st,[2,175]),t(st,[2,176]),t(st,[2,177]),t(st,[2,178]),t(st,[2,179]),t(st,[2,180]),t(st,[2,181]),t(st,[2,182]),t(st,[2,183]),t(st,[2,184]),{9:122,20:j,21:Y,23:z},{11:123,14:[1,124]},t(ct,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,125]},t(ut,[2,34],{30:126,22:F}),t(P,[2,35]),{45:127,46:42,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:N,116:B,117:D,118:L,119:I},t(lt,[2,45]),t(lt,[2,46]),t(lt,[2,47]),t(ht,[2,73],{68:128,69:[1,129],72:[1,130]}),{22:ft,24:dt,26:pt,38:yt,39:131,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t([47,69,72,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,75]),t(P,[2,36]),t(P,[2,37]),t(P,[2,38]),t(P,[2,39]),t(P,[2,40]),{22:ft,24:dt,26:pt,38:yt,39:155,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:156}),t(U,[2,50],{47:Bt}),{26:$,47:q,81:W,87:158,92:[1,159],95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{85:[1,160],93:161,95:[1,162]},{26:$,47:q,81:W,85:[1,163],87:164,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:165,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,96],{22:[1,166],89:[1,167]}),t(ct,[2,100],{22:[1,168]}),t(ct,[2,104],{107:94,109:170,22:[1,169],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,106],{22:[1,171]}),t(Dt,[2,147]),t(Dt,[2,149]),t(Dt,[2,150]),t(Dt,[2,151]),t(Dt,[2,152]),t(Lt,[2,157]),t(Lt,[2,158]),t(Lt,[2,159]),t(Lt,[2,160]),t(Lt,[2,161]),t(Lt,[2,162]),t(Lt,[2,163]),t(Lt,[2,164]),t(Lt,[2,165]),t(Lt,[2,166]),t(Lt,[2,167]),t(Lt,[2,168]),t(Lt,[2,169]),{47:f,49:172,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:ft,24:dt,26:pt,38:yt,39:173,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:175,42:gt,47:q,50:[1,174],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:176,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:177,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:178,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:179,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:180,42:gt,47:q,60:[1,181],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:182,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:183,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:184,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(st,[2,146]),t(It,[2,3]),{8:185,15:R},{15:[2,7]},t(a,[2,28]),t(ut,[2,33]),t(U,[2,48],{30:186,22:F}),t(ht,[2,70],{22:[1,187]}),{22:[1,188]},{22:ft,24:dt,26:pt,38:yt,39:189,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,71:[1,190],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Lt,[2,77]),t(Lt,[2,79]),t(Lt,[2,135]),t(Lt,[2,136]),t(Lt,[2,137]),t(Lt,[2,138]),t(Lt,[2,139]),t(Lt,[2,140]),t(Lt,[2,141]),t(Lt,[2,142]),t(Lt,[2,143]),t(Lt,[2,144]),t(Lt,[2,80]),t(Lt,[2,81]),t(Lt,[2,82]),t(Lt,[2,83]),t(Lt,[2,84]),t(Lt,[2,85]),t(Lt,[2,86]),t(Lt,[2,87]),t(Lt,[2,88]),t(Lt,[2,89]),t(Lt,[2,90]),{9:193,20:j,21:Y,22:ft,23:z,24:dt,26:pt,38:yt,40:[1,192],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,194],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:F,30:195},{22:[1,196],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,197]},{22:[1,198]},{22:[1,199],96:[1,200]},t(Rt,[2,118]),{22:[1,201]},{22:[1,202],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,203],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{74:[1,204]},t(ct,[2,98],{22:[1,205]}),{74:[1,206],91:[1,207]},{74:[1,208]},t(Dt,[2,148]),{74:[1,209],91:[1,210]},t(at,[2,54],{108:121,47:f,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,114:O,115:N,116:B,117:D,118:L,119:I}),{22:ft,24:dt,26:pt,38:yt,41:[1,211],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:212,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,213],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,53:[1,214],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,55:[1,215],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,57:[1,216],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,59:[1,217],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,218],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:219,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,41:[1,220],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,221],66:[1,222],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,224],66:[1,223],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{9:225,20:j,21:Y,23:z},t(U,[2,49],{47:Bt}),t(ht,[2,72]),t(ht,[2,71]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,72:[1,226],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ht,[2,74]),t(Lt,[2,78]),{22:ft,24:dt,26:pt,38:yt,39:227,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:228}),t(P,[2,43]),{46:229,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:230,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:244,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:245,92:jt,94:[1,246],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:247,92:jt,94:[1,248],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{95:[1,249]},{22:Ft,76:Pt,86:250,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:251,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{26:$,47:q,81:W,87:252,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,97]),{74:[1,253]},t(ct,[2,101],{22:[1,254]}),t(ct,[2,102]),t(ct,[2,105]),t(ct,[2,107],{22:[1,255]}),t(ct,[2,108]),t(ot,[2,55]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,256],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,61]),t(ot,[2,57]),t(ot,[2,58]),t(ot,[2,59]),t(ot,[2,60]),t(ot,[2,62]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,257],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,64]),t(ot,[2,65]),t(ot,[2,67]),t(ot,[2,66]),t(ot,[2,68]),t(It,[2,4]),t([22,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,76]),{22:ft,24:dt,26:pt,38:yt,41:[1,258],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,259],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},t(at,[2,53]),t(ct,[2,110],{96:Gt}),t(Xt,[2,120],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht}),t(Zt,[2,122]),t(Zt,[2,124]),t(Zt,[2,125]),t(Zt,[2,126]),t(Zt,[2,127]),t(Zt,[2,128]),t(Zt,[2,129]),t(Zt,[2,130]),t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),t(ct,[2,111],{96:Gt}),t(ct,[2,112],{96:Gt}),{22:[1,262]},t(ct,[2,113],{96:Gt}),{22:[1,263]},t(Rt,[2,119]),t(ct,[2,93],{96:Gt}),t(ct,[2,94],{96:Gt}),t(ct,[2,95],{107:94,109:170,26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,99]),{91:[1,264]},{91:[1,265]},{51:[1,266]},{61:[1,267]},{9:268,20:j,21:Y,23:z},t(P,[2,42]),{22:Ft,76:Pt,92:jt,95:Yt,97:269,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},t(Zt,[2,123]),{26:$,47:q,81:W,87:270,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:271,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,103]),t(ct,[2,109]),t(ot,[2,56]),t(ot,[2,63]),t(Nt,o,{17:272}),t(Xt,[2,121],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht}),t(ct,[2,116],{107:94,109:170,22:[1,273],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,117],{107:94,109:170,22:[1,274],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,275],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:276,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:277,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},t(P,[2,41]),t(ct,[2,114],{96:Gt}),t(ct,[2,115],{96:Gt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],124:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 76;case 11:return 85;case 12:return 77;case 13:return 94;case 14:return 78;case 15:return 79;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 90;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 88;case 23:this.popState();break;case 24:return 89;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 80;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 91;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 110;case 48:return 111;case 49:return 112;case 50:return 113;case 51:return 95;case 52:return 103;case 53:return 48;case 54:return 100;case 55:return 47;case 56:return 20;case 57:return 96;case 58:return 118;case 59:case 60:case 61:return 71;case 62:case 63:case 64:return 70;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 59;case 73:return 101;case 74:return 104;case 75:return 119;case 76:return 116;case 77:return 105;case 78:case 79:return 117;case 80:return 106;case 81:return 62;case 82:return 82;case 83:return"SEP";case 84:return 81;case 85:return 99;case 86:return 64;case 87:return 63;case 88:return 66;case 89:return 65;case 90:return 114;case 91:return 115;case 92:return 72;case 93:return 50;case 94:return 51;case 95:return 40;case 96:return 41;case 97:return 60;case 98:return 61;case 99:return 125;case 100:return 21;case 101:return 22;case 102:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102],inclusive:!0}}};function Jt(){this.yy={}}return Kt.lexer=Qt,Jt.prototype=Kt,Kt.Parser=Jt,new Jt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(84),a=n(25);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(215),i=n(221);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(40),i=n(217),a=n(218),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e,n){var r=n(112),i=n(241),a=n(25);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e){t.exports=function(t){return t}},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.11.5","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --colors","build:production":"yarn build:development -p --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js src/defaultConfig.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","@percy/migrate":"^0.10.0","d3":"^5.7.0","dagre":"^0.8.5","dagre-d3":"^0.6.4","dompurify":"2.3.0","graphlib":"^2.1.8","khroma":"^1.4.1","moment-mini":"^2.24.0","stylis":"^4.0.10"},"devDependencies":{"@babel/core":"^7.14.6","@babel/preset-env":"^7.14.7","@babel/register":"^7.14.5","@percy/cli":"^1.0.0-beta.58","@percy/cypress":"^3.1.0","babel-core":"7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^27.0.6","babel-loader":"^8.2.2","coveralls":"^3.0.2","css-to-string-loader":"^0.1.3","cypress":"7.6.0","documentation":"13.2.0","eslint":"^7.30.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","husky":"^7.0.1","identity-obj-proxy":"^3.0.0","jest":"^27.0.6","jison":"^0.4.18","js-base64":"3.6.1","moment":"^2.23.0","prettier":"^2.3.2","start-server-and-test":"^1.12.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^4.4.2","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(14);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(19).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(19),i=n(237),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(246),i=n(79),a=n(247),o=n(121),s=n(248),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),y=c;(r&&"[object DataView]"!=y(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=y(new i)||a&&"[object Promise]"!=y(a.resolve())||o&&"[object Set]"!=y(new o)||s&&"[object WeakMap]"!=y(new s))&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=y},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(89),isFunction:n(39),isPlainObject:n(158),pick:n(161),has:n(94),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],m=[5,6,8,14,35,36,37,38,39,40,48,66,67],v=[1,51],b=[1,52],x=[1,53],_=[1,54],k=[1,55],w=[1,56],E=[1,57],T=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],O=[1,68],N=[1,70],B=[1,74],D=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(m,[2,4]),{13:46,16:[1,47]},t(m,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:v,60:b,61:x,62:_,63:k,64:w,65:E},{56:58,59:v,60:b,61:x,62:_,63:k,64:w,65:E},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),{58:[1,63]},t(m,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:O,34:N},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:B,34:D,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:O,34:N},{5:C,24:112,25:S,28:A,30:M,32:O,34:N},{5:C,24:113,25:S,28:A,30:M,32:O,34:N},{5:C,24:114,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:115,51:L,53:I},{5:B,34:D,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(175).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(59),i=n(60);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=a?a(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),o?i(n,u,l):r(n,u,l)}return n}},function(t,e,n){var r=n(236),i=n(21),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return i(t)&&o.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},function(t,e,n){var r=n(238),i=n(62),a=n(83),o=a&&a.isTypedArray,s=o?i(o):r;t.exports=s},function(t,e,n){var r=n(43);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e,n){var r=n(15);t.exports=function(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.applyStyle(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var o=i.node().getBoundingClientRect();return n.attr("width",o.width).attr("height",o.height),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a=n(6),o=n(53);e.default=function(t,e,n,s){if(void 0===n&&(n=0),void 0===s&&(s=1),"number"!=typeof t)return o.default(t,{a:e});var c=i.default.set({r:r.default.channel.clamp.r(t),g:r.default.channel.clamp.g(e),b:r.default.channel.clamp.b(n),a:r.default.channel.clamp.a(s)});return a.default.stringify(c)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e){var n=i.default.parse(t);for(var a in e)n[a]=r.default.channel.clamp[a](e[a]);return i.default.stringify(n)}},function(t,e,n){var r=n(55),i=n(210),a=n(211),o=n(212),s=n(213),c=n(214);function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=s,u.prototype.set=c,t.exports=u},function(t,e,n){var r=n(205),i=n(206),a=n(207),o=n(208),s=n(209);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},function(t,e,n){var r=n(38);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(33)(Object,"create");t.exports=r},function(t,e,n){var r=n(230);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var r=n(60),i=n(38),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];a.call(t,e)&&i(o,n)&&(void 0!==n||e in t)||r(t,e,n)}},function(t,e,n){var r=n(111);t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(113)(Object.getPrototypeOf,Object);t.exports=r},function(t,e,n){var r=n(90),i=n(259)(r);t.exports=i},function(t,e,n){var r=n(67),i=n(50);t.exports=function(t,e){for(var n=0,a=(e=r(e,t)).length;null!=t&&n<a;)t=t[i(e[n++])];return n&&n==a?t:void 0}},function(t,e,n){var r=n(5),i=n(93),a=n(273),o=n(135);t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:a(o(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},function(t,e,n){var r=n(36),i=n(143),a=n(144);t.exports=function(t,e){return a(i(t,e,r),t+"")}},function(t,e,n){var r=n(38),i=n(25),a=n(61),o=n(14);t.exports=function(t,e,n){if(!o(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&a(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";var r=n(4);t.exports={longestPath:function(t){var e={};r.forEach(t.sources(),(function n(i){var a=t.node(i);if(r.has(e,i))return a.rank;e[i]=!0;var o=r.min(r.map(t.outEdges(i),(function(e){return n(e.w)-t.edge(e).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}}},function(t,e,n){"use strict";var r=/^(%20|\s)*(javascript|data)/im,i=/[^\x20-\x7E]/gim,a=/^([^:]+):/gm,o=[".","/"];t.exports={sanitizeUrl:function(t){if(!t)return"about:blank";var e,n,s=t.replace(i,"").trim();return function(t){return o.indexOf(t[0])>-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:break;case 7:return 20;case 8:case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],y={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";var r=n(13);function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}t.exports=i,i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(19),"Map");t.exports=r},function(t,e,n){var r=n(222),i=n(229),a=n(231),o=n(232),s=n(233);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{return a&&a.require&&a.require("util").types||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(63),i=n(239),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},function(t,e,n){var r=n(122);t.exports=function(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){t.exports=n(126)},function(t,e,n){var r=n(91),i=n(30);t.exports=function(t,e){return t&&r(t,e,i)}},function(t,e,n){var r=n(258)();t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(5),i=n(43),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||o.test(t)||!a.test(t)||null!=e&&t in Object(e)}},function(t,e,n){var r=n(280),i=n(137);t.exports=function(t,e){return null!=t&&i(t,e,r)}},function(t,e,n){var r=n(86),i=n(292);t.exports=function t(e,n,a,o,s){var c=-1,u=e.length;for(a||(a=i),s||(s=[]);++c<u;){var l=e[c];n>0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i<a;){var o=t[i],s=e(o);if(null!=s&&(void 0===c?s==s&&!r(s):n(s,c)))var c=s,u=o}return u}},function(t,e){t.exports=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),u=Math.abs(e*n*o/c);r.x<i&&(u=-u);var l=Math.abs(e*n*s/c);return r.y<a&&(l=-l),{x:i+u,y:a+l}}},function(t,e,n){var r=n(379),i=n(51),a=n(380);t.exports=function(t,e,n){var o=e.label,s=t.append("g");"svg"===e.labelType?a(s,e):"string"!=typeof o||"html"===e.labelType?i(s,e):r(s,e);var c,u=s.node().getBBox();switch(n){case"top":c=-e.height/2;break;case"bottom":c=e.height/2-u.height;break;default:c=-u.height/2}return s.attr("transform","translate("+-u.width/2+","+c+")"),s}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(46),i=n(177),a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:function(t){if(35===t.charCodeAt(0)){var e=t.match(a.re);if(e){var n=e[1],i=parseInt(n,16),o=n.length,s=o%4==0,c=o>4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return r.default.set({r:(i>>l*(h+3)&f)*u,g:(i>>l*(h+2)&f)*u,b:(i>>l*(h+1)&f)*u,a:s?(i&f)*u/255:1},t)}}},stringify:function(t){var e=t.r,n=t.g,r=t.b,a=t.a;return a<1?"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]+i.DEC2HEX[Math.round(255*a)]:"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a=n(6);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(77);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(53);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(52);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,y=n/100,g=2*y-1,m=u-p,v=((g*m==-1?g:(g+m)/(1+g*m))+1)/2,b=1-v,x=o*v+h*b,_=s*v+f*b,k=c*v+d*b,w=u*y+p*(1-y);return i.default(x,_,k,w)}},function(t,e){},function(t,e,n){var r=n(54),i=n(81),a=n(59),o=n(234),s=n(240),c=n(114),u=n(115),l=n(243),h=n(244),f=n(119),d=n(245),p=n(42),y=n(249),g=n(250),m=n(124),v=n(5),b=n(41),x=n(254),_=n(14),k=n(256),w=n(30),E=n(35),T={};T["[object Arguments]"]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object DataView]"]=T["[object Boolean]"]=T["[object Date]"]=T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Map]"]=T["[object Number]"]=T["[object Object]"]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object Symbol]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Error]"]=T["[object Function]"]=T["[object WeakMap]"]=!1,t.exports=function t(e,n,C,S,A,M){var O,N=1&n,B=2&n,D=4&n;if(C&&(O=A?C(e,S,A,M):C(e)),void 0!==O)return O;if(!_(e))return e;var L=v(e);if(L){if(O=y(e),!N)return u(e,O)}else{var I=p(e),R="[object Function]"==I||"[object GeneratorFunction]"==I;if(b(e))return c(e,N);if("[object Object]"==I||"[object Arguments]"==I||R&&!A){if(O=B||R?{}:m(e),!N)return B?h(e,s(O,e)):l(e,o(O,e))}else{if(!T[I])return A?e:{};O=g(e,I,N)}}M||(M=new r);var F=M.get(e);if(F)return F;M.set(e,O),k(e)?e.forEach((function(r){O.add(t(r,n,C,r,e,M))})):x(e)&&e.forEach((function(r,i){O.set(i,t(r,n,C,i,e,M))}));var P=L?void 0:(D?B?d:f:B?E:w)(e);return i(P||e,(function(r,i){P&&(r=e[i=r]),a(O,i,t(r,n,C,i,e,M))})),O}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(216))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(235),i=n(48),a=n(5),o=n(41),s=n(61),c=n(49),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],y=p.length;for(var g in t)!e&&!u.call(t,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,y))||p.push(g);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(19),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(86),i=n(64),a=n(85),o=n(117),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)r(e,a(t)),t=i(t);return e}:o;t.exports=s},function(t,e,n){var r=n(120),i=n(85),a=n(30);t.exports=function(t){return r(t,a,i)}},function(t,e,n){var r=n(86),i=n(5);t.exports=function(t,e,n){var a=e(t);return i(t)?a:r(a,n(t))}},function(t,e,n){var r=n(33)(n(19),"Set");t.exports=r},function(t,e,n){var r=n(19).Uint8Array;t.exports=r},function(t,e,n){var r=n(87);t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},function(t,e,n){var r=n(125),i=n(64),a=n(63);t.exports=function(t){return"function"!=typeof t.constructor||a(t)?{}:r(i(t))}},function(t,e,n){var r=n(14),i=Object.create,a=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=a},function(t,e,n){var r=n(81),i=n(65),a=n(127),o=n(5);t.exports=function(t,e){return(o(t)?r:i)(t,a(e))}},function(t,e,n){var r=n(36);t.exports=function(t){return"function"==typeof t?t:r}},function(t,e,n){var r=n(116),i=n(260),a=n(26),o=n(5);t.exports=function(t,e){return(o(t)?r:i)(t,a(e,3))}},function(t,e,n){var r=n(263),i=n(21);t.exports=function t(e,n,a,o,s){return e===n||(null==e||null==n||!i(e)&&!i(n)?e!=e&&n!=n:r(e,n,a,o,t,s))}},function(t,e,n){var r=n(131),i=n(266),a=n(132);t.exports=function(t,e,n,o,s,c){var u=1&n,l=t.length,h=e.length;if(l!=h&&!(u&&h>l))return!1;var f=c.get(t),d=c.get(e);if(f&&d)return f==e&&d==t;var p=-1,y=!0,g=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++p<l;){var m=t[p],v=e[p];if(o)var b=u?o(v,m,p,e,t,c):o(m,v,p,t,e,c);if(void 0!==b){if(b)continue;y=!1;break}if(g){if(!i(e,(function(t,e){if(!a(g,e)&&(m===t||s(m,t,n,o,c)))return g.push(e)}))){y=!1;break}}else if(m!==v&&!s(m,v,n,o,c)){y=!1;break}}return c.delete(t),c.delete(e),y}},function(t,e,n){var r=n(80),i=n(264),a=n(265);function o(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}o.prototype.add=o.prototype.push=i,o.prototype.has=a,t.exports=o},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(14);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},function(t,e,n){var r=n(276);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(277),i=n(137);t.exports=function(t,e){return null!=t&&i(t,e,r)}},function(t,e,n){var r=n(67),i=n(48),a=n(5),o=n(61),s=n(82),c=n(50);t.exports=function(t,e,n){for(var u=-1,l=(e=r(e,t)).length,h=!1;++u<l;){var f=c(e[u]);if(!(h=null!=t&&n(t,f)))break;t=t[f]}return h||++u!=l?h:!!(l=null==t?0:t.length)&&s(l)&&o(f,l)&&(a(t)||i(t))}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e){t.exports=function(t){return void 0===t}},function(t,e,n){var r=n(68),i=n(26),a=n(141),o=n(5);t.exports=function(t,e){return(o(t)?r:a)(t,i(e,3))}},function(t,e,n){var r=n(65),i=n(25);t.exports=function(t,e){var n=-1,a=i(t)?Array(t.length):[];return r(t,(function(t,r,i){a[++n]=e(t,r,i)})),a}},function(t,e,n){var r=n(282),i=n(65),a=n(26),o=n(283),s=n(5);t.exports=function(t,e,n){var c=s(t)?r:o,u=arguments.length<3;return c(t,a(e,4),n,u,i)}},function(t,e,n){var r=n(293),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),c=Array(s);++o<s;)c[o]=a[e+o];o=-1;for(var u=Array(e+1);++o<e;)u[o]=a[o];return u[e]=n(c),r(t,this,u)}}},function(t,e,n){var r=n(294),i=n(295)(r);t.exports=i},function(t,e){t.exports=function(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}},function(t,e,n){var r=n(25),i=n(21);t.exports=function(t){return i(t)&&r(t)}},function(t,e,n){var r=n(304),i=n(30);t.exports=function(t){return null==t?[]:r(t,i(t))}},function(t,e,n){var r=n(13),i=n(149);t.exports=function(t,e,n,r){return function(t,e,n,r){var a,o,s={},c=new i,u=function(t){var e=t.v!==a?t.v:t.w,r=s[e],i=n(t),u=o.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+i);u<r.distance&&(r.distance=u,r.predecessor=a,c.decrease(e,u))};for(t.nodes().forEach((function(t){var n=t===e?0:Number.POSITIVE_INFINITY;s[t]={distance:n},c.add(t,n)}));c.size()>0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(13);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},i.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&!(n[e=t>>1].priority<r);)this._swap(t,e),t=e},i.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],a=n[e];n[t]=a,n[e]=i,r[a.key]=t,r[i.key]=e}},function(t,e,n){var r=n(13);t.exports=function(t){var e=0,n=[],i={},a=[];return t.nodes().forEach((function(o){r.has(i,o)||function o(s){var c=i[s]={onStack:!0,lowlink:e,index:e++};if(n.push(s),t.successors(s).forEach((function(t){r.has(i,t)?i[t].onStack&&(c.lowlink=Math.min(c.lowlink,i[t].index)):(o(t),c.lowlink=Math.min(c.lowlink,i[t].lowlink))})),c.lowlink===c.index){var u,l=[];do{u=n.pop(),i[u].onStack=!1,l.push(u)}while(s!==u);a.push(l)}}(o)})),a}},function(t,e,n){var r=n(13);function i(t){var e={},n={},i=[];if(r.each(t.sinks(),(function o(s){if(r.has(n,s))throw new a;r.has(e,s)||(n[s]=!0,e[s]=!0,r.each(t.predecessors(s),o),delete n[s],i.push(s))})),r.size(e)!==t.nodeCount())throw new a;return i}function a(){}t.exports=i,i.CycleException=a,a.prototype=new Error},function(t,e,n){var r=n(13);t.exports=function(t,e,n){r.isArray(e)||(e=[e]);var i=(t.isDirected()?t.successors:t.neighbors).bind(t),a=[],o={};return r.each(e,(function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);!function t(e,n,i,a,o,s){r.has(a,n)||(a[n]=!0,i||s.push(n),r.each(o(n),(function(n){t(e,n,i,a,o,s)})),i&&s.push(n))}(t,e,"post"===n,o,i,a)})),a}},function(t,e,n){var r;try{r=n(10)}catch(t){}r||(r=window.dagre),t.exports=r},function(t,e,n){var r=n(69),i=n(38),a=n(70),o=n(35),s=Object.prototype,c=s.hasOwnProperty,u=r((function(t,e){t=Object(t);var n=-1,r=e.length,u=r>2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n<r;)for(var l=e[n],h=o(l),f=-1,d=h.length;++f<d;){var p=h[f],y=t[p];(void 0===y||i(y,s[p])&&!c.call(t,p))&&(t[p]=l[p])}return t}));t.exports=u},function(t,e,n){var r=n(323);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(95);t.exports=function(t){return null!=t&&t.length?r(t,1):[]}},function(t,e,n){var r=n(60),i=n(38);t.exports=function(t,e,n){(void 0!==n&&!i(t[e],n)||void 0===n&&!(e in t))&&r(t,e,n)}},function(t,e,n){var r=n(34),i=n(64),a=n(21),o=Function.prototype,s=Object.prototype,c=o.toString,u=s.hasOwnProperty,l=c.call(Object);t.exports=function(t){if(!a(t)||"[object Object]"!=r(t))return!1;var e=i(t);if(null===e)return!0;var n=u.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==l}},function(t,e){t.exports=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}},function(t,e){t.exports=function(t,e){return t<e}},function(t,e,n){var r=n(339),i=n(342)((function(t,e){return null==t?{}:r(t,e)}));t.exports=i},function(t,e,n){var r=n(343)();t.exports=r},function(t,e,n){var r=n(135),i=0;t.exports=function(t){var e=++i;return r(t)+e}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph,a=n(71).slack;function o(t,e){return r.forEach(t.nodes(),(function n(i){r.forEach(e.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;t.hasNode(s)||a(e,r)||(t.setNode(s,{}),t.setEdge(i,s,{}),n(s))}))})),t.nodeCount()}function s(t,e){return r.minBy(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return a(e,n)}))}function c(t,e,n){r.forEach(t.nodes(),(function(t){e.node(t).rank+=n}))}t.exports=function(t){var e,n,r=new i({directed:!1}),u=t.nodes()[0],l=t.nodeCount();for(r.setNode(u,{});o(r,t)<l;)e=s(r,t),n=r.hasNode(e.v)?a(t,e):-a(t,e),c(r,t,n);return r}},function(t,e){t.exports=function(t,e){return t.intersect(e)}},function(t,e,n){var r=n(97);t.exports=function(t,e,n){return r(t,e,e,n)}},function(t,e,n){var r=n(376);t.exports=function(t,e,n){var i=t.x,a=t.y,o=[],s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){s=Math.min(s,t.x),c=Math.min(c,t.y)}));for(var u=i-t.width/2-s,l=a-t.height/2-c,h=0;h<e.length;h++){var f=e[h],d=e[h<e.length-1?h+1:0],p=r(t,n,{x:u+f.x,y:l+f.y},{x:u+d.x,y:l+d.y});p&&o.push(p)}return o.length?(o.length>1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a<c?-1:a===c?0:1})),o[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}},function(t,e){t.exports=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;return Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}}},function(t,e,n){ +/*! @license DOMPurify 2.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.0/LICENSE */ +t.exports=function(){"use strict";var t=Object.hasOwnProperty,e=Object.setPrototypeOf,n=Object.isFrozen,r=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,a=Object.freeze,o=Object.seal,s=Object.create,c="undefined"!=typeof Reflect&&Reflect,u=c.apply,l=c.construct;u||(u=function(t,e,n){return t.apply(e,n)}),a||(a=function(t){return t}),o||(o=function(t){return t}),l||(l=function(t,e){return new(Function.prototype.bind.apply(t,[null].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}(e))))});var h,f=k(Array.prototype.forEach),d=k(Array.prototype.pop),p=k(Array.prototype.push),y=k(String.prototype.toLowerCase),g=k(String.prototype.match),m=k(String.prototype.replace),v=k(String.prototype.indexOf),b=k(String.prototype.trim),x=k(RegExp.prototype.test),_=(h=TypeError,function(){for(var t=arguments.length,e=Array(t),n=0;n<t;n++)e[n]=arguments[n];return l(h,e)});function k(t){return function(e){for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return u(t,e,r)}}function w(t,r){e&&e(t,null);for(var i=r.length;i--;){var a=r[i];if("string"==typeof a){var o=y(a);o!==a&&(n(r)||(r[i]=o),a=o)}t[a]=!0}return t}function E(e){var n=s(null),r=void 0;for(r in e)u(t,e,[r])&&(n[r]=e[r]);return n}function T(t,e){for(;null!==t;){var n=i(t,e);if(n){if(n.get)return k(n.get);if("function"==typeof n.value)return k(n.value)}t=r(t)}return function(t){return console.warn("fallback value for",t),null}}var C=a(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),S=a(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),A=a(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),M=a(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),O=a(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),N=a(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),B=a(["#text"]),D=a(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=a(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),I=a(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),R=a(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),F=o(/\{\{[\s\S]*|[\s\S]*\}\}/gm),P=o(/<%[\s\S]*|[\s\S]*%>/gm),j=o(/^data-[\-\w.\u00B7-\uFFFF]/),Y=o(/^aria-[\-\w]+$/),z=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=o(/^(?:\w+script|data):/i),$=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function W(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var V=function(){return"undefined"==typeof window?null:window},H=function(t,e){if("object"!==(void 0===t?"undefined":q(t))||"function"!=typeof t.createPolicy)return null;var n=null;e.currentScript&&e.currentScript.hasAttribute("data-tt-policy-suffix")&&(n=e.currentScript.getAttribute("data-tt-policy-suffix"));var r="dompurify"+(n?"#"+n:"");try{return t.createPolicy(r,{createHTML:function(t){return t}})}catch(t){return console.warn("TrustedTypes policy "+r+" could not be created."),null}};return function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V(),n=function(e){return t(e)};if(n.version="2.3.0",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var r=e.document,i=e.document,o=e.DocumentFragment,s=e.HTMLTemplateElement,c=e.Node,u=e.Element,l=e.NodeFilter,h=e.NamedNodeMap,k=void 0===h?e.NamedNodeMap||e.MozNamedAttrMap:h,G=e.Text,X=e.Comment,Z=e.DOMParser,K=e.trustedTypes,Q=u.prototype,J=T(Q,"cloneNode"),tt=T(Q,"nextSibling"),et=T(Q,"childNodes"),nt=T(Q,"parentNode");if("function"==typeof s){var rt=i.createElement("template");rt.content&&rt.content.ownerDocument&&(i=rt.content.ownerDocument)}var it=H(K,r),at=it&&Ft?it.createHTML(""):"",ot=i,st=ot.implementation,ct=ot.createNodeIterator,ut=ot.createDocumentFragment,lt=ot.getElementsByTagName,ht=r.importNode,ft={};try{ft=E(i).documentMode?i.documentMode:{}}catch(t){}var dt={};n.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==ft;var pt=F,yt=P,gt=j,mt=Y,vt=U,bt=$,xt=z,_t=null,kt=w({},[].concat(W(C),W(S),W(A),W(O),W(B))),wt=null,Et=w({},[].concat(W(D),W(L),W(I),W(R))),Tt=null,Ct=null,St=!0,At=!0,Mt=!1,Ot=!1,Nt=!1,Bt=!1,Dt=!1,Lt=!1,It=!1,Rt=!0,Ft=!1,Pt=!0,jt=!0,Yt=!1,zt={},Ut=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),$t=null,qt=w({},["audio","video","img","source","image","track"]),Wt=null,Vt=w({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),Ht="http://www.w3.org/1998/Math/MathML",Gt="http://www.w3.org/2000/svg",Xt="http://www.w3.org/1999/xhtml",Zt=Xt,Kt=!1,Qt=null,Jt=i.createElement("form"),te=function(t){Qt&&Qt===t||(t&&"object"===(void 0===t?"undefined":q(t))||(t={}),t=E(t),_t="ALLOWED_TAGS"in t?w({},t.ALLOWED_TAGS):kt,wt="ALLOWED_ATTR"in t?w({},t.ALLOWED_ATTR):Et,Wt="ADD_URI_SAFE_ATTR"in t?w(E(Vt),t.ADD_URI_SAFE_ATTR):Vt,$t="ADD_DATA_URI_TAGS"in t?w(E(qt),t.ADD_DATA_URI_TAGS):qt,Tt="FORBID_TAGS"in t?w({},t.FORBID_TAGS):{},Ct="FORBID_ATTR"in t?w({},t.FORBID_ATTR):{},zt="USE_PROFILES"in t&&t.USE_PROFILES,St=!1!==t.ALLOW_ARIA_ATTR,At=!1!==t.ALLOW_DATA_ATTR,Mt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ot=t.SAFE_FOR_TEMPLATES||!1,Nt=t.WHOLE_DOCUMENT||!1,Lt=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Rt=!1!==t.RETURN_DOM_IMPORT,Ft=t.RETURN_TRUSTED_TYPE||!1,Dt=t.FORCE_BODY||!1,Pt=!1!==t.SANITIZE_DOM,jt=!1!==t.KEEP_CONTENT,Yt=t.IN_PLACE||!1,xt=t.ALLOWED_URI_REGEXP||xt,Zt=t.NAMESPACE||Xt,Ot&&(At=!1),It&&(Lt=!0),zt&&(_t=w({},[].concat(W(B))),wt=[],!0===zt.html&&(w(_t,C),w(wt,D)),!0===zt.svg&&(w(_t,S),w(wt,L),w(wt,R)),!0===zt.svgFilters&&(w(_t,A),w(wt,L),w(wt,R)),!0===zt.mathMl&&(w(_t,O),w(wt,I),w(wt,R))),t.ADD_TAGS&&(_t===kt&&(_t=E(_t)),w(_t,t.ADD_TAGS)),t.ADD_ATTR&&(wt===Et&&(wt=E(wt)),w(wt,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&w(Wt,t.ADD_URI_SAFE_ATTR),jt&&(_t["#text"]=!0),Nt&&w(_t,["html","head","body"]),_t.table&&(w(_t,["tbody"]),delete Tt.tbody),a&&a(t),Qt=t)},ee=w({},["mi","mo","mn","ms","mtext"]),ne=w({},["foreignobject","desc","title","annotation-xml"]),re=w({},S);w(re,A),w(re,M);var ie=w({},O);w(ie,N);var ae=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:Xt,tagName:"template"});var n=y(t.tagName),r=y(e.tagName);if(t.namespaceURI===Gt)return e.namespaceURI===Xt?"svg"===n:e.namespaceURI===Ht?"svg"===n&&("annotation-xml"===r||ee[r]):Boolean(re[n]);if(t.namespaceURI===Ht)return e.namespaceURI===Xt?"math"===n:e.namespaceURI===Gt?"math"===n&&ne[r]:Boolean(ie[n]);if(t.namespaceURI===Xt){if(e.namespaceURI===Gt&&!ne[r])return!1;if(e.namespaceURI===Ht&&!ee[r])return!1;var i=w({},["title","style","font","a","script"]);return!ie[n]&&(i[n]||!re[n])}return!1},oe=function(t){p(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},se=function(t,e){try{p(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){p(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!wt[t])if(Lt||It)try{oe(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},ce=function(t){var e=void 0,n=void 0;if(Dt)t="<remove></remove>"+t;else{var r=g(t,/^[\r\n\t ]+/);n=r&&r[0]}var a=it?it.createHTML(t):t;if(Zt===Xt)try{e=(new Z).parseFromString(a,"text/html")}catch(t){}if(!e||!e.documentElement){e=st.createDocument(Zt,"template",null);try{e.documentElement.innerHTML=Kt?"":a}catch(t){}}var o=e.body||e.documentElement;return t&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Zt===Xt?lt.call(e,Nt?"html":"body")[0]:Nt?e.documentElement:o},ue=function(t){return ct.call(t.ownerDocument||t,t,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},le=function(t){return!(t instanceof G||t instanceof X||"string"==typeof t.nodeName&&"string"==typeof t.textContent&&"function"==typeof t.removeChild&&t.attributes instanceof k&&"function"==typeof t.removeAttribute&&"function"==typeof t.setAttribute&&"string"==typeof t.namespaceURI&&"function"==typeof t.insertBefore)},he=function(t){return"object"===(void 0===c?"undefined":q(c))?t instanceof c:t&&"object"===(void 0===t?"undefined":q(t))&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},fe=function(t,e,r){dt[t]&&f(dt[t],(function(t){t.call(n,e,r,Qt)}))},de=function(t){var e=void 0;if(fe("beforeSanitizeElements",t,null),le(t))return oe(t),!0;if(g(t.nodeName,/[\u0080-\uFFFF]/))return oe(t),!0;var r=y(t.nodeName);if(fe("uponSanitizeElement",t,{tagName:r,allowedTags:_t}),!he(t.firstElementChild)&&(!he(t.content)||!he(t.content.firstElementChild))&&x(/<[/\w]/g,t.innerHTML)&&x(/<[/\w]/g,t.textContent))return oe(t),!0;if(!_t[r]||Tt[r]){if(jt&&!Ut[r]){var i=nt(t)||t.parentNode,a=et(t)||t.childNodes;if(a&&i)for(var o=a.length-1;o>=0;--o)i.insertBefore(J(a[o],!0),tt(t))}return oe(t),!0}return t instanceof u&&!ae(t)?(oe(t),!0):"noscript"!==r&&"noembed"!==r||!x(/<\/no(script|embed)/i,t.innerHTML)?(Ot&&3===t.nodeType&&(e=t.textContent,e=m(e,pt," "),e=m(e,yt," "),t.textContent!==e&&(p(n.removed,{element:t.cloneNode()}),t.textContent=e)),fe("afterSanitizeElements",t,null),!1):(oe(t),!0)},pe=function(t,e,n){if(Pt&&("id"===e||"name"===e)&&(n in i||n in Jt))return!1;if(At&&!Ct[e]&&x(gt,e));else if(St&&x(mt,e));else{if(!wt[e]||Ct[e])return!1;if(Wt[e]);else if(x(xt,m(n,bt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==v(n,"data:")||!$t[t])if(Mt&&!x(vt,m(n,bt,"")));else if(n)return!1}return!0},ye=function(t){var e=void 0,r=void 0,i=void 0,a=void 0;fe("beforeSanitizeAttributes",t,null);var o=t.attributes;if(o){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:wt};for(a=o.length;a--;){var c=e=o[a],u=c.name,l=c.namespaceURI;if(r=b(e.value),i=y(u),s.attrName=i,s.attrValue=r,s.keepAttr=!0,s.forceKeepAttr=void 0,fe("uponSanitizeAttribute",t,s),r=s.attrValue,!s.forceKeepAttr&&(se(u,t),s.keepAttr))if(x(/\/>/i,r))se(u,t);else{Ot&&(r=m(r,pt," "),r=m(r,yt," "));var h=t.nodeName.toLowerCase();if(pe(h,i,r))try{l?t.setAttributeNS(l,u,r):t.setAttribute(u,r),d(n.removed)}catch(t){}}}fe("afterSanitizeAttributes",t,null)}},ge=function t(e){var n=void 0,r=ue(e);for(fe("beforeSanitizeShadowDOM",e,null);n=r.nextNode();)fe("uponSanitizeShadowNode",n,null),de(n)||(n.content instanceof o&&t(n.content),ye(n));fe("afterSanitizeShadowDOM",e,null)};return n.sanitize=function(t,i){var a=void 0,s=void 0,u=void 0,l=void 0,h=void 0;if((Kt=!t)&&(t="\x3c!--\x3e"),"string"!=typeof t&&!he(t)){if("function"!=typeof t.toString)throw _("toString is not a function");if("string"!=typeof(t=t.toString()))throw _("dirty is not a string, aborting")}if(!n.isSupported){if("object"===q(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof t)return e.toStaticHTML(t);if(he(t))return e.toStaticHTML(t.outerHTML)}return t}if(Bt||te(i),n.removed=[],"string"==typeof t&&(Yt=!1),Yt);else if(t instanceof c)1===(s=(a=ce("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?a=s:a.appendChild(s);else{if(!Lt&&!Ot&&!Nt&&-1===t.indexOf("<"))return it&&Ft?it.createHTML(t):t;if(!(a=ce(t)))return Lt?null:at}a&&Dt&&oe(a.firstChild);for(var f=ue(Yt?t:a);u=f.nextNode();)3===u.nodeType&&u===l||de(u)||(u.content instanceof o&&ge(u.content),ye(u),l=u);if(l=null,Yt)return t;if(Lt){if(It)for(h=ut.call(a.ownerDocument);a.firstChild;)h.appendChild(a.firstChild);else h=a;return Rt&&(h=ht.call(r,h,!0)),h}var d=Nt?a.outerHTML:a.innerHTML;return Ot&&(d=m(d,pt," "),d=m(d,yt," ")),it&&Ft?it.createHTML(d):d},n.setConfig=function(t){te(t),Bt=!0},n.clearConfig=function(){Qt=null,Bt=!1},n.isValidAttribute=function(t,e,n){Qt||te({});var r=y(t),i=y(e);return pe(r,i,n)},n.addHook=function(t,e){"function"==typeof e&&(dt[t]=dt[t]||[],p(dt[t],e))},n.removeHook=function(t){dt[t]&&d(dt[t])},n.removeHooks=function(t){dt[t]&&(dt[t]=[])},n.removeAllHooks=function(){dt={}},n}()}()},function(t,e){t.exports=function(t,e){return t.intersect(e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(52);e.hex=r.default;var i=n(52);e.rgb=i.default;var a=n(52);e.rgba=a.default;var o=n(100);e.hsl=o.default;var s=n(100);e.hsla=s.default;var c=n(181);e.toKeyword=c.default;var u=n(182);e.toHex=u.default;var l=n(183);e.toRgba=l.default;var h=n(184);e.toHsla=h.default;var f=n(29);e.channel=f.default;var d=n(185);e.red=d.default;var p=n(186);e.green=p.default;var y=n(187);e.blue=y.default;var g=n(188);e.hue=g.default;var m=n(189);e.saturation=m.default;var v=n(190);e.lightness=v.default;var b=n(101);e.alpha=b.default;var x=n(101);e.opacity=x.default;var _=n(191);e.contrast=_.default;var k=n(77);e.luminance=k.default;var w=n(192);e.isDark=w.default;var E=n(102);e.isLight=E.default;var T=n(193);e.isValid=T.default;var C=n(194);e.saturate=C.default;var S=n(195);e.desaturate=S.default;var A=n(196);e.lighten=A.default;var M=n(197);e.darken=M.default;var O=n(103);e.opacify=O.default;var N=n(103);e.fadeIn=N.default;var B=n(104);e.transparentize=B.default;var D=n(104);e.fadeOut=D.default;var L=n(198);e.complement=L.default;var I=n(199);e.grayscale=I.default;var R=n(105);e.adjust=R.default;var F=n(53);e.change=F.default;var P=n(200);e.invert=P.default;var j=n(106);e.mix=j.default;var Y=n(201);e.scale=Y.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:function(t){return t>=255?255:t<0?0:t},g:function(t){return t>=255?255:t<0?0:t},b:function(t){return t>=255?255:t<0?0:t},h:function(t){return t%360},s:function(t){return t>=100?100:t<0?0:t},l:function(t){return t>=100?100:t<0?0:t},a:function(t){return t>=1?1:t<0?0:t}},toLinear:function(t){var e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:function(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t},hsl2rgb:function(t,e){var n=t.h,i=t.s,a=t.l;if(!i)return 2.55*a;n/=360,i/=100;var o=(a/=100)<.5?a*(1+i):a+i-a*i,s=2*a-o;switch(e){case"r":return 255*r.hue2rgb(s,o,n+1/3);case"g":return 255*r.hue2rgb(s,o,n);case"b":return 255*r.hue2rgb(s,o,n-1/3)}},rgb2hsl:function(t,e){var n=t.r,r=t.g,i=t.b;n/=255,r/=255,i/=255;var a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if("l"===e)return 100*s;if(a===o)return 0;var c=a-o;if("s"===e)return 100*(s>.5?c/(2-a-o):c/(a+o));switch(a){case n:return 60*((r-i)/c+(r<i?6:0));case r:return 60*((i-n)/c+2);case i:return 60*((n-r)/c+4);default:return-1}}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={clamp:function(t,e,n){return e>n?Math.min(e,Math.max(n,t)):Math.min(n,Math.max(e,t))},round:function(t){return Math.round(1e10*t)/1e10}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={dec2hex:function(t){var e=Math.round(t).toString(16);return e.length>1?e:"0"+e}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(176),a=function(){function t(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new i.default}return t.prototype.set=function(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=0,this},t.prototype._ensureHSL=function(){var t=this.data,e=t.h,n=t.s,i=t.l;void 0===e&&(t.h=r.default.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=r.default.channel.rgb2hsl(t,"s")),void 0===i&&(t.l=r.default.channel.rgb2hsl(t,"l"))},t.prototype._ensureRGB=function(){var t=this.data,e=t.r,n=t.g,i=t.b;void 0===e&&(t.r=r.default.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=r.default.channel.hsl2rgb(t,"g")),void 0===i&&(t.b=r.default.channel.hsl2rgb(t,"b"))},Object.defineProperty(t.prototype,"r",{get:function(){var t=this.data,e=t.r;return this.type.is(2)||void 0===e?(this._ensureHSL(),r.default.channel.hsl2rgb(t,"r")):e},set:function(t){this.type.set(1),this.changed=!0,this.data.r=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){var t=this.data,e=t.g;return this.type.is(2)||void 0===e?(this._ensureHSL(),r.default.channel.hsl2rgb(t,"g")):e},set:function(t){this.type.set(1),this.changed=!0,this.data.g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){var t=this.data,e=t.b;return this.type.is(2)||void 0===e?(this._ensureHSL(),r.default.channel.hsl2rgb(t,"b")):e},set:function(t){this.type.set(1),this.changed=!0,this.data.b=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"h",{get:function(){var t=this.data,e=t.h;return this.type.is(1)||void 0===e?(this._ensureRGB(),r.default.channel.rgb2hsl(t,"h")):e},set:function(t){this.type.set(2),this.changed=!0,this.data.h=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"s",{get:function(){var t=this.data,e=t.s;return this.type.is(1)||void 0===e?(this._ensureRGB(),r.default.channel.rgb2hsl(t,"s")):e},set:function(t){this.type.set(2),this.changed=!0,this.data.s=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"l",{get:function(){var t=this.data,e=t.l;return this.type.is(1)||void 0===e?(this._ensureRGB(),r.default.channel.rgb2hsl(t,"l")):e},set:function(t){this.type.set(2),this.changed=!0,this.data.l=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.data.a},set:function(t){this.changed=!0,this.data.a=t},enumerable:!0,configurable:!0}),t}();e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){this.type=0}return t.prototype.get=function(){return this.type},t.prototype.set=function(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t},t.prototype.reset=function(){this.type=0},t.prototype.is=function(t){return this.type===t},t}();e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i={};e.DEC2HEX=i;for(var a=0;a<=255;a++)i[a]=r.default.unit.dec2hex(a)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(t){t=t.toLowerCase();var e=i.colors[t];if(e)return r.default.parse(e)},stringify:function(t){var e=r.default.stringify(t);for(var n in i.colors)if(i.colors[n]===e)return n}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(t){var e=t.charCodeAt(0);if(114===e||82===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5],h=n[6],f=n[7],d=n[8];return i.default.set({r:r.default.channel.clamp.r(s?2.55*parseFloat(o):parseFloat(o)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:f?r.default.channel.clamp.a(d?parseFloat(f)/100:parseFloat(f)):1},t)}}},stringify:function(t){var e=t.r,n=t.g,i=t.b,a=t.a;return a<1?"rgba("+r.default.lang.round(e)+", "+r.default.lang.round(n)+", "+r.default.lang.round(i)+", "+r.default.lang.round(a)+")":"rgb("+r.default.lang.round(e)+", "+r.default.lang.round(n)+", "+r.default.lang.round(i)+")"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(t){var e=t.match(a.hueRe);if(e){var n=e[1];switch(e[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(t))},parse:function(t){var e=t.charCodeAt(0);if(104===e||72===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5];return i.default.set({h:a._hue2deg(o),s:r.default.channel.clamp.s(parseFloat(s)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(l?parseFloat(u)/100:parseFloat(u)):1},t)}}},stringify:function(t){var e=t.h,n=t.s,i=t.l,a=t.a;return a<1?"hsla("+r.default.lang.round(e)+", "+r.default.lang.round(n)+"%, "+r.default.lang.round(i)+"%, "+a+")":"hsl("+r.default.lang.round(e)+", "+r.default.lang.round(n)+"%, "+r.default.lang.round(i)+"%)"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6);e.default=function(t){return r.default.format.keyword.stringify(r.default.parse(t))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6);e.default=function(t){return r.default.format.hex.stringify(r.default.parse(t))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6);e.default=function(t){return r.default.format.rgba.stringify(r.default.parse(t))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6);e.default=function(t){return r.default.format.hsla.stringify(r.default.parse(t))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"r")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"g")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"b")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"h")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"s")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"l")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(77);e.default=function(t,e){var n=i.default(t),a=i.default(e),o=Math.max(n,a),s=Math.min(n,a),c=(o+Number.EPSILON)/(s+Number.EPSILON);return r.default.lang.round(r.default.lang.clamp(c,1,10))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102);e.default=function(t){return!r.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6);e.default=function(t){try{return r.default.parse(t),!0}catch(t){return!1}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t){return r.default(t,"h",180)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(53);e.default=function(t){return r.default(t,{s:0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(106);e.default=function(t,e){void 0===e&&(e=100);var n=r.default.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,i.default(n,t,e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6),a=n(105);e.default=function(t,e){var n,o,s,c=i.default.parse(t),u={};for(var l in e)u[l]=(n=c[l],o=e[l],s=r.default.channel.max[l],o>0?(s-n)*o/100:n*o/100);return a.default(t,u)}},function(t,e,n){var r={"./locale":107,"./locale.js":107};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=202},function(t,e,n){t.exports={Graph:n(78),version:n(305)}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,4)}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(56),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},function(t,e,n){var r=n(56);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(56);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(56);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(55);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(55),i=n(79),a=n(80);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(39),i=n(219),a=n(14),o=n(110),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,h=u.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?f:s).test(o(t))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(40),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,i=n(220),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},function(t,e,n){var r=n(19)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(223),i=n(55),a=n(79);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(t,e,n){var r=n(224),i=n(225),a=n(226),o=n(227),s=n(228);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},function(t,e,n){var r=n(57);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(57),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(57),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},function(t,e,n){var r=n(57);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(58);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(58);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(58);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(58);t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},function(t,e,n){var r=n(47),i=n(30);t.exports=function(t,e){return t&&r(e,i(e),t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(34),i=n(82),a=n(21),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&i(t.length)&&!!o[r(t)]}},function(t,e,n){var r=n(113)(Object.keys,Object);t.exports=r},function(t,e,n){var r=n(47),i=n(35);t.exports=function(t,e){return t&&r(e,i(e),t)}},function(t,e,n){var r=n(14),i=n(63),a=n(242),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return a(t);var e=i(t),n=[];for(var s in t)("constructor"!=s||!e&&o.call(t,s))&&n.push(s);return n}},function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},function(t,e,n){var r=n(47),i=n(85);t.exports=function(t,e){return r(t,i(t),e)}},function(t,e,n){var r=n(47),i=n(118);t.exports=function(t,e){return r(t,i(t),e)}},function(t,e,n){var r=n(120),i=n(118),a=n(35);t.exports=function(t){return r(t,a,i)}},function(t,e,n){var r=n(33)(n(19),"DataView");t.exports=r},function(t,e,n){var r=n(33)(n(19),"Promise");t.exports=r},function(t,e,n){var r=n(33)(n(19),"WeakMap");t.exports=r},function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(r.index=t.index,r.input=t.input),r}},function(t,e,n){var r=n(87),i=n(251),a=n(252),o=n(253),s=n(123);t.exports=function(t,e,n){var c=t.constructor;switch(e){case"[object ArrayBuffer]":return r(t);case"[object Boolean]":case"[object Date]":return new c(+t);case"[object DataView]":return i(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(t,n);case"[object Map]":return new c;case"[object Number]":case"[object String]":return new c(t);case"[object RegExp]":return a(t);case"[object Set]":return new c;case"[object Symbol]":return o(t)}}},function(t,e,n){var r=n(87);t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},function(t,e,n){var r=n(40),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;t.exports=function(t){return a?Object(a.call(t)):{}}},function(t,e,n){var r=n(255),i=n(62),a=n(83),o=a&&a.isMap,s=o?i(o):r;t.exports=s},function(t,e,n){var r=n(42),i=n(21);t.exports=function(t){return i(t)&&"[object Map]"==r(t)}},function(t,e,n){var r=n(257),i=n(62),a=n(83),o=a&&a.isSet,s=o?i(o):r;t.exports=s},function(t,e,n){var r=n(42),i=n(21);t.exports=function(t){return i(t)&&"[object Set]"==r(t)}},function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,a=Object(e),o=r(e),s=o.length;s--;){var c=o[t?s:++i];if(!1===n(a[c],c,a))break}return e}}},function(t,e,n){var r=n(25);t.exports=function(t,e){return function(n,i){if(null==n)return n;if(!r(n))return t(n,i);for(var a=n.length,o=e?a:-1,s=Object(n);(e?o--:++o<a)&&!1!==i(s[o],o,s););return n}}},function(t,e,n){var r=n(65);t.exports=function(t,e){var n=[];return r(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}},function(t,e,n){var r=n(262),i=n(270),a=n(134);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?a(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(54),i=n(129);t.exports=function(t,e,n,a){var o=n.length,s=o,c=!a;if(null==t)return!s;for(t=Object(t);o--;){var u=n[o];if(c&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<s;){var l=(u=n[o])[0],h=t[l],f=u[1];if(c&&u[2]){if(void 0===h&&!(l in t))return!1}else{var d=new r;if(a)var p=a(h,f,l,t,e,d);if(!(void 0===p?i(f,h,3,a,d):p))return!1}}return!0}},function(t,e,n){var r=n(54),i=n(130),a=n(267),o=n(269),s=n(42),c=n(5),u=n(41),l=n(49),h="[object Object]",f=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,d,p,y){var g=c(t),m=c(e),v=g?"[object Array]":s(t),b=m?"[object Array]":s(e),x=(v="[object Arguments]"==v?h:v)==h,_=(b="[object Arguments]"==b?h:b)==h,k=v==b;if(k&&u(t)){if(!u(e))return!1;g=!0,x=!1}if(k&&!x)return y||(y=new r),g||l(t)?i(t,e,n,d,p,y):a(t,e,v,n,d,p,y);if(!(1&n)){var w=x&&f.call(t,"__wrapped__"),E=_&&f.call(e,"__wrapped__");if(w||E){var T=w?t.value():t,C=E?e.value():e;return y||(y=new r),p(T,C,n,d,y)}}return!!k&&(y||(y=new r),o(t,e,n,d,p,y))}},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e,n){var r=n(40),i=n(122),a=n(38),o=n(130),s=n(268),c=n(92),u=r?r.prototype:void 0,l=u?u.valueOf:void 0;t.exports=function(t,e,n,r,u,h,f){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!h(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var d=s;case"[object Set]":var p=1&r;if(d||(d=c),t.size!=e.size&&!p)return!1;var y=f.get(t);if(y)return y==e;r|=2,f.set(t,e);var g=o(d(t),d(e),r,u,h,f);return f.delete(t),g;case"[object Symbol]":if(l)return l.call(t)==l.call(e)}return!1}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e,n){var r=n(119),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,a,o,s){var c=1&n,u=r(t),l=u.length;if(l!=r(e).length&&!c)return!1;for(var h=l;h--;){var f=u[h];if(!(c?f in e:i.call(e,f)))return!1}var d=s.get(t),p=s.get(e);if(d&&p)return d==e&&p==t;var y=!0;s.set(t,e),s.set(e,t);for(var g=c;++h<l;){var m=t[f=u[h]],v=e[f];if(a)var b=c?a(v,m,f,e,t,s):a(m,v,f,t,e,s);if(!(void 0===b?m===v||o(m,v,n,a,s):b)){y=!1;break}g||(g="constructor"==f)}if(y&&!g){var x=t.constructor,_=e.constructor;x==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof _&&_ instanceof _||(y=!1)}return s.delete(t),s.delete(e),y}},function(t,e,n){var r=n(133),i=n(30);t.exports=function(t){for(var e=i(t),n=e.length;n--;){var a=e[n],o=t[a];e[n]=[a,o,r(o)]}return e}},function(t,e,n){var r=n(129),i=n(272),a=n(136),o=n(93),s=n(133),c=n(134),u=n(50);t.exports=function(t,e){return o(t)&&s(e)?c(u(t),e):function(n){var o=i(n,t);return void 0===o&&o===e?a(n,t):r(e,o,3)}}},function(t,e,n){var r=n(66);t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},function(t,e,n){var r=n(274),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(i,(function(t,n,r,i){e.push(r?i.replace(a,"$1"):n||t)})),e}));t.exports=o},function(t,e,n){var r=n(275);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(80);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},function(t,e,n){var r=n(40),i=n(68),a=n(5),o=n(43),s=r?r.prototype:void 0,c=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(a(e))return i(e,t)+"";if(o(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(138),i=n(279),a=n(93),o=n(50);t.exports=function(t){return a(t)?r(o(t)):i(t)}},function(t,e,n){var r=n(66);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t,e){return null!=t&&n.call(t,e)}},function(t,e,n){var r=n(84),i=n(42),a=n(48),o=n(5),s=n(25),c=n(41),u=n(63),l=n(49),h=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(s(t)&&(o(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||l(t)||a(t)))return!t.length;var e=i(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(u(t))return!r(t).length;for(var n in t)if(h.call(t,n))return!1;return!0}},function(t,e){t.exports=function(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}},function(t,e){t.exports=function(t,e,n,r,i){return i(t,(function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)})),n}},function(t,e,n){var r=n(84),i=n(42),a=n(25),o=n(285),s=n(286);t.exports=function(t){if(null==t)return 0;if(a(t))return o(t)?s(t):t.length;var e=i(t);return"[object Map]"==e||"[object Set]"==e?t.size:r(t).length}},function(t,e,n){var r=n(34),i=n(5),a=n(21);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},function(t,e,n){var r=n(287),i=n(288),a=n(289);t.exports=function(t){return i(t)?a(t):r(t)}},function(t,e,n){var r=n(138)("length");t.exports=r},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e){var n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",r="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",o="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+n+"|"+r+")?",c="[\\ufe0e\\ufe0f]?"+s+"(?:\\u200d(?:"+[i,a,o].join("|")+")[\\ufe0e\\ufe0f]?"+s+")*",u="(?:"+[i+n+"?",n,a,o,"[\\ud800-\\udfff]"].join("|")+")",l=RegExp(r+"(?="+r+")|"+u+c,"g");t.exports=function(t){for(var e=l.lastIndex=0;l.test(t);)++e;return e}},function(t,e,n){var r=n(81),i=n(125),a=n(90),o=n(26),s=n(64),c=n(5),u=n(41),l=n(39),h=n(14),f=n(49);t.exports=function(t,e,n){var d=c(t),p=d||u(t)||f(t);if(e=o(e,4),null==n){var y=t&&t.constructor;n=p?d?new y:[]:h(t)&&l(y)?i(s(t)):{}}return(p?r:a)(t,(function(t,r,i){return e(n,t,r,i)})),n}},function(t,e,n){var r=n(95),i=n(69),a=n(296),o=n(146),s=i((function(t){return a(r(t,1,o,!0))}));t.exports=s},function(t,e,n){var r=n(40),i=n(48),a=n(5),o=r?r.isConcatSpreadable:void 0;t.exports=function(t){return a(t)||i(t)||!!(o&&t&&t[o])}},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(88),i=n(111),a=n(36),o=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:a;t.exports=o},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var i=n(),a=16-(i-r);if(r=i,a>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(131),i=n(297),a=n(301),o=n(132),s=n(302),c=n(92);t.exports=function(t,e,n){var u=-1,l=i,h=t.length,f=!0,d=[],p=d;if(n)f=!1,l=a;else if(h>=200){var y=e?null:s(t);if(y)return c(y);f=!1,l=o,p=new r}else p=e?[]:d;t:for(;++u<h;){var g=t[u],m=e?e(g):g;if(g=n||0!==g?g:0,f&&m==m){for(var v=p.length;v--;)if(p[v]===m)continue t;e&&p.push(m),d.push(g)}else l(p,m,n)||(p!==d&&p.push(m),d.push(g))}return d}},function(t,e,n){var r=n(298);t.exports=function(t,e){return!(null==t||!t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(145),i=n(299),a=n(300);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}},function(t,e){t.exports=function(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}},function(t,e,n){var r=n(121),i=n(303),a=n(92),o=r&&1/a(new r([,-0]))[1]==1/0?function(t){return new r(t)}:i;t.exports=o},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(68);t.exports=function(t,e){return r(e,(function(e){return t[e]}))}},function(t,e){t.exports="2.1.8"},function(t,e,n){var r=n(13),i=n(78);function a(t){return r.map(t.nodes(),(function(e){var n=t.node(e),i=t.parent(e),a={v:e};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a}))}function o(t){return r.map(t.edges(),(function(e){var n=t.edge(e),i={v:e.v,w:e.w};return r.isUndefined(e.name)||(i.name=e.name),r.isUndefined(n)||(i.value=n),i}))}t.exports={write:function(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:a(t),edges:o(t)};return r.isUndefined(t.graph())||(e.value=r.clone(t.graph())),e},read:function(t){var e=new i(t.options).setGraph(t.value);return r.each(t.nodes,(function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)})),r.each(t.edges,(function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)})),e}}},function(t,e,n){t.exports={components:n(308),dijkstra:n(148),dijkstraAll:n(309),findCycles:n(310),floydWarshall:n(311),isAcyclic:n(312),postorder:n(313),preorder:n(314),prim:n(315),tarjan:n(150),topsort:n(151)}},function(t,e,n){var r=n(13);t.exports=function(t){var e,n={},i=[];function a(i){r.has(n,i)||(n[i]=!0,e.push(i),r.each(t.successors(i),a),r.each(t.predecessors(i),a))}return r.each(t.nodes(),(function(t){e=[],a(t),e.length&&i.push(e)})),i}},function(t,e,n){var r=n(148),i=n(13);t.exports=function(t,e,n){return i.transform(t.nodes(),(function(i,a){i[a]=r(t,a,e,n)}),{})}},function(t,e,n){var r=n(13),i=n(150);t.exports=function(t){return r.filter(i(t),(function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])}))}},function(t,e,n){var r=n(13);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s<o.distance&&(o.distance=s,o.predecessor=i.predecessor)}))}))})),r}(t,e||i,n||function(e){return t.outEdges(e)})};var i=r.constant(1)},function(t,e,n){var r=n(151);t.exports=function(t){try{r(t)}catch(t){if(t instanceof r.CycleException)return!1;throw t}return!0}},function(t,e,n){var r=n(152);t.exports=function(t,e){return r(t,e,"post")}},function(t,e,n){var r=n(152);t.exports=function(t,e){return r(t,e,"pre")}},function(t,e,n){var r=n(13),i=n(78),a=n(149);t.exports=function(t,e){var n,o=new i,s={},c=new a;function u(t){var r=t.v===n?t.w:t.v,i=c.priority(r);if(void 0!==i){var a=e(t);a<i&&(s[r]=n,c.decrease(r,a))}}if(0===t.nodeCount())return o;r.each(t.nodes(),(function(t){c.add(t,Number.POSITIVE_INFINITY),o.setNode(t)})),c.decrease(t.nodes()[0],0);for(var l=!1;c.size()>0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(n).forEach(u)}return o}},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e,n){"use strict";var r=n(4),i=n(352),a=n(355),o=n(356),s=n(9).normalizeRanks,c=n(358),u=n(9).removeEmptyRanks,l=n(359),h=n(360),f=n(361),d=n(362),p=n(371),y=n(9),g=n(20).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?y.time:y.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new g({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},v,T(n,m),r.pick(n,b))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,x),_)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){l.run(t)})),e(" rank",(function(){o(y.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};y.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){u(t)})),e(" nestingGraph.cleanup",(function(){l.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=y.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){y.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function u(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){u(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&u(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(y.intersectRect(a,n)),i.points.push(y.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],v={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],_={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,5)}},function(t,e,n){var r=n(320)(n(321));t.exports=r},function(t,e,n){var r=n(26),i=n(25),a=n(30);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var u=t(e,n,o);return u>-1?s[c?e[u]:u]:void 0}}},function(t,e,n){var r=n(145),i=n(26),a=n(322),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},function(t,e,n){var r=n(155);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(324),i=n(14),a=n(43),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(a(t))return NaN;if(i(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=s.test(t);return n||c.test(t)?u(t.slice(2),n?2:8):o.test(t)?NaN:+t}},function(t,e,n){var r=n(325),i=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(i,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(91),i=n(127),a=n(35);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(60),i=n(90),a=n(26);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},function(t,e,n){var r=n(96),i=n(330),a=n(36);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e){t.exports=function(t,e){return t>e}},function(t,e,n){var r=n(332),i=n(335)((function(t,e,n){r(t,e,n)}));t.exports=i},function(t,e,n){var r=n(54),i=n(157),a=n(91),o=n(333),s=n(14),c=n(35),u=n(159);t.exports=function t(e,n,l,h,f){e!==n&&a(n,(function(a,c){if(f||(f=new r),s(a))o(e,n,c,l,t,h,f);else{var d=h?h(u(e,c),a,c+"",e,n,f):void 0;void 0===d&&(d=a),i(e,c,d)}}),c)}},function(t,e,n){var r=n(157),i=n(114),a=n(123),o=n(115),s=n(124),c=n(48),u=n(5),l=n(146),h=n(41),f=n(39),d=n(14),p=n(158),y=n(49),g=n(159),m=n(334);t.exports=function(t,e,n,v,b,x,_){var k=g(t,n),w=g(e,n),E=_.get(w);if(E)r(t,n,E);else{var T=x?x(k,w,n+"",t,e,_):void 0,C=void 0===T;if(C){var S=u(w),A=!S&&h(w),M=!S&&!A&&y(w);T=w,S||A||M?u(k)?T=k:l(k)?T=o(k):A?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=m(k):d(k)&&!f(k)||(T=s(w))):C=!1}C&&(_.set(w,T),b(T,w,v,x,_),_.delete(w)),r(t,n,T)}}},function(t,e,n){var r=n(47),i=n(35);t.exports=function(t){return r(t,i(t))}},function(t,e,n){var r=n(69),i=n(70);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r<a;){var c=n[r];c&&t(e,c,r,o)}return e}))}},function(t,e,n){var r=n(96),i=n(160),a=n(36);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e,n){var r=n(96),i=n(26),a=n(160);t.exports=function(t,e){return t&&t.length?r(t,i(e,2),a):void 0}},function(t,e,n){var r=n(19);t.exports=function(){return r.Date.now()}},function(t,e,n){var r=n(340),i=n(136);t.exports=function(t,e){return r(t,e,(function(e,n){return i(t,n)}))}},function(t,e,n){var r=n(66),i=n(341),a=n(67);t.exports=function(t,e,n){for(var o=-1,s=e.length,c={};++o<s;){var u=e[o],l=r(t,u);n(l,u)&&i(c,a(u,t),l)}return c}},function(t,e,n){var r=n(59),i=n(67),a=n(61),o=n(14),s=n(50);t.exports=function(t,e,n,c){if(!o(t))return t;for(var u=-1,l=(e=i(e,t)).length,h=l-1,f=t;null!=f&&++u<l;){var d=s(e[u]),p=n;if("__proto__"===d||"constructor"===d||"prototype"===d)return t;if(u!=h){var y=f[d];void 0===(p=c?c(y,d,f):void 0)&&(p=o(y)?y:a(e[u+1])?[]:{})}r(f,d,p),f=f[d]}return t}},function(t,e,n){var r=n(156),i=n(143),a=n(144);t.exports=function(t){return a(i(t,void 0,r),t+"")}},function(t,e,n){var r=n(344),i=n(70),a=n(155);t.exports=function(t){return function(e,n,o){return o&&"number"!=typeof o&&i(e,n,o)&&(n=o=void 0),e=a(e),void 0===n?(n=e,e=0):n=a(n),o=void 0===o?e<n?1:-1:a(o),r(e,n,o,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,i,a){for(var o=-1,s=r(n((e-t)/(i||1)),0),c=Array(s);s--;)c[a?s:++o]=t,t+=i;return c}},function(t,e,n){var r=n(95),i=n(346),a=n(69),o=n(70),s=a((function(t,e){if(null==t)return[];var n=e.length;return n>1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},function(t,e,n){var r=n(68),i=n(66),a=n(26),o=n(141),s=n(347),c=n(62),u=n(348),l=n(36),h=n(5);t.exports=function(t,e,n){e=e.length?r(e,(function(t){return h(t)?function(e){return i(e,1===t.length?t[0]:t)}:t})):[l];var f=-1;e=r(e,c(a));var d=o(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++f,value:t}}));return s(d,(function(t,e){return u(t,e,n)}))}},function(t,e){t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},function(t,e,n){var r=n(349);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i<s;){var u=r(a[i],o[i]);if(u)return i>=c?u:u*("desc"==n[i]?-1:1)}return t.index-e.index}},function(t,e,n){var r=n(43);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,u=e==e,l=r(e);if(!c&&!l&&!o&&t>e||o&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!a)return 1;if(!i&&!o&&!l&&t<e||l&&n&&a&&!i&&!o||c&&n&&a||!s&&a||!u)return-1}return 0}},function(t,e,n){var r=n(59),i=n(351);t.exports=function(t,e){return i(t||[],e||[],r)}},function(t,e){t.exports=function(t,e,n){for(var r=-1,i=t.length,a=e.length,o={};++r<i;){var s=r<a?e[r]:void 0;n(o,t[r],s)}return o}},function(t,e,n){"use strict";var r=n(4),i=n(353);t.exports={run:function(t){var e="greedy"===t.graph().acyclicer?i(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};return r.forEach(t.nodes(),(function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(t.outEdges(o),(function(t){r.has(n,t.w)?e.push(t):a(t.w)})),delete n[o])})),e}(t);r.forEach(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.uniqueId("rev"))}))},undo:function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}}},function(t,e,n){var r=n(4),i=n(20).Graph,a=n(354);t.exports=function(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new i,o=0,s=0;r.forEach(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),r.forEach(t.edges(),(function(t){var r=n.edge(t.v,t.w)||0,i=e(t),a=r+i;n.setEdge(t.v,t.w,a),s=Math.max(s,n.node(t.v).out+=i),o=Math.max(o,n.node(t.w).in+=i)}));var u=r.range(s+o+3).map((function(){return new a})),l=o+1;return r.forEach(n.nodes(),(function(t){c(u,l,n.node(t))})),{graph:n,buckets:u,zeroIdx:l}}(t,e||o),u=function(t,e,n){for(var r,i=[],a=e[e.length-1],o=e[0];t.nodeCount();){for(;r=o.dequeue();)s(t,e,n,r);for(;r=a.dequeue();)s(t,e,n,r);if(t.nodeCount())for(var c=e.length-2;c>0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return r(e),e},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},function(t,e,n){"use strict";var r=n(4),i=n(9);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,u=t.node(c).rank,l=e.name,h=t.edge(e),f=h.labelRank;if(u!==s+1){for(t.removeEdge(e),a=0,++s;s<u;++a,++s)h.points=[],r={width:0,height:0,edgeLabel:h,edgeObj:e,rank:s},n=i.addDummyNode(t,"edge",r,"_d"),s===f&&(r.width=h.width,r.height=h.height,r.dummy="edge-label",r.labelpos=h.labelpos),t.setEdge(o,n,{weight:h.weight},l),0===a&&t.graph().dummyChains.push(n),o=n;t.setEdge(o,c,{weight:h.weight},l)}}(t,e)}))},undo:function(t){r.forEach(t.graph().dummyChains,(function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)}))}}},function(t,e,n){"use strict";var r=n(71).longestPath,i=n(164),a=n(357);t.exports=function(t){switch(t.graph().ranker){case"network-simplex":s(t);break;case"tight-tree":!function(t){r(t),i(t)}(t);break;case"longest-path":o(t);break;default:s(t)}};var o=r;function s(t){a(t)}},function(t,e,n){"use strict";var r=n(4),i=n(164),a=n(71).slack,o=n(71).longestPath,s=n(20).alg.preorder,c=n(20).alg.postorder,u=n(9).simplify;function l(t){t=u(t),o(t);var e,n=i(t);for(d(n),h(n,t);e=y(n);)m(n,t,e,g(n,t,e))}function h(t,e){var n=c(t,t.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=f(t,e,n)}(t,e,n)}))}function f(t,e,n){var i=t.node(n).parent,a=!0,o=e.edge(n,i),s=0;return o||(a=!1,o=e.edge(i,n)),s=o.weight,r.forEach(e.nodeEdges(n),(function(r){var o,c,u=r.v===n,l=u?r.w:r.v;if(l!==i){var h=u===a,f=e.edge(r).weight;if(s+=h?f:-f,o=n,c=l,t.hasEdge(o,c)){var d=t.edge(n,l).cutvalue;s+=h?-d:d}}})),s}function d(t,e){arguments.length<2&&(e=t.nodes()[0]),p(t,{},1,e)}function p(t,e,n,i,a){var o=n,s=t.node(i);return e[i]=!0,r.forEach(t.neighbors(i),(function(a){r.has(e,a)||(n=p(t,e,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function y(t){return r.find(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function g(t,e,n){var i=n.v,o=n.w;e.hasEdge(i,o)||(i=n.w,o=n.v);var s=t.node(i),c=t.node(o),u=s,l=!1;s.lim>c.lim&&(u=c,l=!0);var h=r.filter(e.edges(),(function(e){return l===v(0,t.node(e.v),u)&&l!==v(0,t.node(e.w),u)}));return r.minBy(h,(function(t){return a(e,t)}))}function m(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function v(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=l,l.initLowLimValues=d,l.initCutValues=h,l.calcCutValue=f,l.leaveEdge=y,l.enterEdge=g,l.exchangeEdges=m},function(t,e,n){var r=n(4);t.exports=function(t){var e=function(t){var e={},n=0;return r.forEach(t.children(),(function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}})),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||u>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,u=o[c],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(u=o[c])!==s&&t.node(u).maxRank<r.rank;)c++;u===s&&(l=!1)}if(!l){for(;c<o.length-1&&t.node(u=o[c+1]).minRank<=r.rank;)c++;u=o[c]}t.setParent(n,u),n=t.successors(n)[0]}}))}},function(t,e,n){var r=n(4),i=n(9);t.exports={run:function(t){var e=i.addDummyNode(t,"root",{},"_root"),n=function(t){var e={};return r.forEach(t.children(),(function(n){!function n(i,a){var o=t.children(i);o&&o.length&&r.forEach(o,(function(t){n(t,a+1)})),e[i]=a}(n,1)})),e}(t),a=r.max(r.values(n))-1,o=2*a+1;t.graph().nestingRoot=e,r.forEach(t.edges(),(function(e){t.edge(e).minlen*=o}));var s=function(t){return r.reduce(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;r.forEach(t.children(),(function(c){!function t(e,n,a,o,s,c,u){var l=e.children(u);if(l.length){var h=i.addBorderNode(e,"_bt"),f=i.addBorderNode(e,"_bb"),d=e.node(u);e.setParent(h,u),d.borderTop=h,e.setParent(f,u),d.borderBottom=f,r.forEach(l,(function(r){t(e,n,a,o,s,c,r);var i=e.node(r),l=i.borderTop?i.borderTop:r,d=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,y=l!==d?1:s-c[u]+1;e.setEdge(h,l,{weight:p,minlen:y,nestingEdge:!0}),e.setEdge(d,f,{weight:p,minlen:y,nestingEdge:!0})})),e.parent(u)||e.setEdge(n,h,{weight:0,minlen:s+c[u]})}else u!==n&&e.setEdge(n,u,{weight:0,minlen:a})}(t,e,o,s,a,n,c)})),t.graph().nodeRankFactor=o},cleanup:function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.forEach(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}}},function(t,e,n){var r=n(4),i=n(9);function a(t,e,n,r,a,o){var s={width:0,height:0,rank:o,borderType:e},c=a[e][o-1],u=i.addDummyNode(t,"border",s,n);a[e][o]=u,t.setParent(u,r),c&&t.setEdge(c,u,{weight:1})}t.exports=function(t){r.forEach(t.children(),(function e(n){var i=t.children(n),o=t.node(n);if(i.length&&r.forEach(i,e),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,c=o.maxRank+1;s<c;++s)a(t,"borderLeft","_bl",n,o,s),a(t,"borderRight","_br",n,o,s)}}))}},function(t,e,n){"use strict";var r=n(4);function i(t){r.forEach(t.nodes(),(function(e){a(t.node(e))})),r.forEach(t.edges(),(function(e){a(t.edge(e))}))}function a(t){var e=t.width;t.width=t.height,t.height=e}function o(t){t.y=-t.y}function s(t){var e=t.x;t.x=t.y,t.y=e}t.exports={adjust:function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||i(t)},undo:function(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){r.forEach(t.nodes(),(function(e){o(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(t),"lr"!==e&&"rl"!==e||(function(t){r.forEach(t.nodes(),(function(e){s(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(t),i(t))}}},function(t,e,n){"use strict";var r=n(4),i=n(363),a=n(364),o=n(365),s=n(369),c=n(370),u=n(20).Graph,l=n(9);function h(t,e,n){return r.map(e,(function(e){return s(t,e,n)}))}function f(t,e){var n=new u;r.forEach(t,(function(t){var i=t.graph().root,a=o(t,i,n,e);r.forEach(a.vs,(function(e,n){t.node(e).order=n})),c(t,n,a.vs)}))}function d(t,e){r.forEach(e,(function(e){r.forEach(e,(function(e,n){t.node(e).order=n}))}))}t.exports=function(t){var e=l.maxRank(t),n=h(t,r.range(1,e+1),"inEdges"),o=h(t,r.range(e-1,-1,-1),"outEdges"),s=i(t);d(t,s);for(var c,u=Number.POSITIVE_INFINITY,p=0,y=0;y<4;++p,++y){f(p%2?n:o,p%4>=2),s=l.buildLayerMatrix(t);var g=a(t,s);g<u&&(y=0,c=r.cloneDeep(s),u=g)}d(t,c)}},function(t,e,n){"use strict";var r=n(4);t.exports=function(t){var e={},n=r.filter(t.nodes(),(function(e){return!t.children(e).length})),i=r.max(r.map(n,(function(e){return t.node(e).rank}))),a=r.map(r.range(i+1),(function(){return[]})),o=r.sortBy(n,(function(e){return t.node(e).rank}));return r.forEach(o,(function n(i){if(!r.has(e,i)){e[i]=!0;var o=t.node(i);a[o.rank].push(i),r.forEach(t.successors(i),n)}})),a}},function(t,e,n){"use strict";var r=n(4);function i(t,e,n){for(var i=r.zipObject(n,r.map(n,(function(t,e){return e}))),a=r.flatten(r.map(e,(function(e){return r.sortBy(r.map(t.outEdges(e),(function(e){return{pos:i[e.w],weight:t.edge(e).weight}})),"pos")})),!0),o=1;o<n.length;)o<<=1;var s=2*o-1;o-=1;var c=r.map(new Array(s),(function(){return 0})),u=0;return r.forEach(a.forEach((function(t){var e=t.pos+o;c[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}t.exports=function(t,e){for(var n=0,r=1;r<e.length;++r)n+=i(t,e[r-1],e[r]);return n}},function(t,e,n){var r=n(4),i=n(366),a=n(367),o=n(368);t.exports=function t(e,n,s,c){var u=e.children(n),l=e.node(n),h=l?l.borderLeft:void 0,f=l?l.borderRight:void 0,d={};h&&(u=r.filter(u,(function(t){return t!==h&&t!==f})));var p=i(e,u);r.forEach(p,(function(n){if(e.children(n.v).length){var i=t(e,n.v,s,c);d[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var y=a(p,s);!function(t,e){r.forEach(t,(function(t){t.vs=r.flatten(t.vs.map((function(t){return e[t]?e[t].vs:t})),!0)}))}(y,d);var g=o(y,c);if(h&&(g.vs=r.flatten([h,g.vs,f],!0),e.predecessors(h).length)){var m=e.node(e.predecessors(h)[0]),v=e.node(e.predecessors(f)[0]);r.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+m.order+v.order)/(g.weight+2),g.weight+=2}return g}},function(t,e,n){var r=n(4);t.exports=function(t,e){return r.map(e,(function(e){var n=t.inEdges(e);if(n.length){var i=r.reduce(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}}))}},function(t,e,n){"use strict";var r=n(4);t.exports=function(t,e){var n={};return r.forEach(t,(function(t,e){var i=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};r.isUndefined(t.barycenter)||(i.barycenter=t.barycenter,i.weight=t.weight)})),r.forEach(e.edges(),(function(t){var e=n[t.v],i=n[t.w];r.isUndefined(e)||r.isUndefined(i)||(i.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){e.merged||(r.isUndefined(e.barycenter)||r.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},function(t,e,n){var r=n(4),i=n(9);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n,o=i.partition(t,(function(t){return r.has(t,"barycenter")})),s=o.lhs,c=r.sortBy(o.rhs,(function(t){return-t.i})),u=[],l=0,h=0,f=0;s.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),f=a(u,c,f),r.forEach(s,(function(t){f+=t.vs.length,u.push(t.vs),l+=t.barycenter*t.weight,h+=t.weight,f=a(u,c,f)}));var d={vs:r.flatten(u,!0)};return h&&(d.barycenter=l/h,d.weight=h),d}},function(t,e,n){var r=n(4),i=n(20).Graph;t.exports=function(t,e,n){var a=function(t){for(var e;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},function(t,e,n){var r=n(4);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},function(t,e,n){"use strict";var r=n(4),i=n(9),a=n(372).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph,a=n(9);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,u=r.last(i);return r.forEach(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===u)&&(r.forEach(i.slice(o,l+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(o<a||f<o)||i.dummy&&t.node(e).dummy||c(n,r,e)}))})),o=l+1,a=f)})),i})),n}function s(t,e){var n={};function i(e,i,a,o,s){var u;r.forEach(r.range(i,a),(function(i){u=e[i],t.node(u).dummy&&r.forEach(t.predecessors(u),(function(e){var r=t.node(e);r.dummy&&(r.order<o||r.order>s)&&c(n,e,u)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var u=t.predecessors(r);u.length&&(a=t.node(u[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function l(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length)for(var l=((c=r.sortBy(c,(function(t){return s[t]}))).length-1)/2,h=Math.floor(l),f=Math.ceil(l);h<=f;++h){var d=c[h];o[t]===t&&e<s[d]&&!u(n,t,d)&&(o[d]=t,o[t]=a[t]=a[d],e=s[d])}}))})),{root:a,align:o}}function h(t,e,n,a,o){var s={},c=function(t,e,n,a){var o=new i,s=t.graph(),c=function(t,e,n){return function(i,a,o){var s,c=i.node(a),u=i.node(o),l=0;if(l+=c.width/2,r.has(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":s=-c.width/2;break;case"r":s=c.width/2}if(s&&(l+=n?s:-s),s=0,l+=(c.dummy?e:t)/2,l+=(u.dummy?e:t)/2,l+=u.width/2,r.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":s=u.width/2;break;case"r":s=-u.width/2}return s&&(l+=n?s:-s),s=0,l}}(s.nodesep,s.edgesep,a);return r.forEach(e,(function(e){var i;r.forEach(e,(function(e){var r=n[e];if(o.setNode(r),i){var a=n[i],s=o.edge(a,r);o.setEdge(a,r,Math.max(c(t,e,i),s||0))}i=e}))})),o}(t,e,n,o),u=o?"borderLeft":"borderRight";function l(t,e){for(var n=c.nodes(),r=n.pop(),i={};r;)i[r]?t(r):(i[r]=!0,n.push(r),n=n.concat(e(r))),r=n.pop()}return l((function(t){s[t]=c.inEdges(t).reduce((function(t,e){return Math.max(t,s[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),l((function(e){var n=c.outEdges(e).reduce((function(t,e){return Math.min(t,s[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),r=t.node(e);n!==Number.POSITIVE_INFINITY&&r.borderType!==u&&(s[e]=Math.max(s[e],n))}),c.successors.bind(c)),r.forEach(a,(function(t){s[t]=s[n[t]]})),s}function f(t,e){return r.minBy(r.values(e),(function(e){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(e,(function(e,r){var a=function(t,e){return t.node(e).width}(t,r)/2;n=Math.max(e+a,n),i=Math.min(e-a,i)})),n-i}))}function d(t,e){var n=r.values(e),i=r.min(n),a=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(o){var s,c=n+o,u=t[c];if(u!==e){var l=r.values(u);(s="l"===o?i-r.min(l):a-r.max(l))&&(t[c]=r.mapValues(u,(function(t){return t+s})))}}))}))}function p(t,e){return r.mapValues(t.ul,(function(n,i){if(e)return t[e.toLowerCase()][i];var a=r.sortBy(r.map(t,i));return(a[1]+a[2])/2}))}t.exports={positionX:function(t){var e,n=a.buildLayerMatrix(t),i=r.merge(o(t,n),s(t,n)),c={};r.forEach(["u","d"],(function(a){e="u"===a?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(e=r.map(e,(function(t){return r.values(t).reverse()})));var o=("u"===a?t.predecessors:t.successors).bind(t),s=l(0,e,i,o),u=h(t,e,s.root,s.align,"r"===n);"r"===n&&(u=r.mapValues(u,(function(t){return-t}))),c[a+n]=u}))}));var u=f(t,c);return d(c,u),p(c,t.graph().align)},findType1Conflicts:o,findType2Conflicts:s,addConflict:c,hasConflict:u,verticalAlignment:l,horizontalCompaction:h,alignCoordinates:d,findSmallestWidthAlignment:f,balance:p}},function(t,e,n){var r=n(4),i=n(9),a=n(20).Graph;t.exports={debugOrdering:function(t){var e=i.buildLayerMatrix(t),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(t.nodes(),(function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)})),r.forEach(t.edges(),(function(t){n.setEdge(t.v,t.w,{},t.name)})),r.forEach(e,(function(t,e){var i="layer"+e;n.setNode(i,{rank:"same"}),r.reduce(t,(function(t,e){return n.setEdge(t,e,{style:"invis"}),e}))})),n}}},function(t,e){t.exports="0.8.5"},function(t,e,n){t.exports={node:n(165),circle:n(166),ellipse:n(97),polygon:n(167),rect:n(168)}},function(t,e){function n(t,e){return t*e>0}t.exports=function(t,e,r,i){var a,o,s,c,u,l,h,f,d,p,y,g,m;if(a=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,d=a*r.x+s*r.y+u,p=a*i.x+s*i.y+u,!(0!==d&&0!==p&&n(d,p)||(o=i.y-r.y,c=r.x-i.x,l=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+l,f=o*e.x+c*e.y+l,0!==h&&0!==f&&n(h,f)||0==(y=a*c-o*s))))return g=Math.abs(y/2),{x:(m=s*l-c*u)<0?(m-g)/y:(m+g)/y,y:(m=o*u-a*l)<0?(m-g)/y:(m+g)/y}}},function(t,e,n){var r=n(44),i=n(31),a=n(153).layout;t.exports=function(){var t=n(378),e=n(381),i=n(382),u=n(383),l=n(384),h=n(385),f=n(386),d=n(387),p=n(388),y=function(n,y){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(y);var g=c(n,"output"),m=c(g,"clusters"),v=c(g,"edgePaths"),b=i(c(g,"edgeLabels"),y),x=t(c(g,"nodes"),y,d);a(y),l(x,y),h(b,y),u(v,y,p);var _=e(m,y);f(_,y),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(y)};return y.createNodes=function(e){return arguments.length?(t=e,y):t},y.createClusters=function(t){return arguments.length?(e=t,y):e},y.createEdgeLabels=function(t){return arguments.length?(i=t,y):i},y.createEdgePaths=function(t){return arguments.length?(u=t,y):u},y.shapes=function(t){return arguments.length?(d=t,y):d},y.arrows=function(t){return arguments.length?(p=t,y):p},y};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},function(t,e,n){"use strict";var r=n(44),i=n(98),a=n(15),o=n(31);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),u=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);return u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),l=i(u,s),h=n[s.shape],f=r.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&u.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,u.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var y=p.node().getBBox();s.width=y.width,s.height=y.height})),s=u.exit?u.exit():u.selectAll(null),a.applyTransition(s,e).style("opacity",0).remove(),u}},function(t,e,n){var r=n(15);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i<t.length;++i)if(e=t[i],r){switch(e){case"n":n+="\n";break;default:n+=e}r=!1}else"\\"===e?r=!0:n+=e;return n}(e.label).split("\n"),a=0;a<i.length;a++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(i[a]);return r.applyStyle(n,e.labelStyle),n}},function(t,e,n){var r=n(15);t.exports=function(t,e){var n=t;return n.node().appendChild(e.label),r.applyStyle(n,e.labelStyle),n}},function(t,e,n){var r=n(15),i=n(31),a=n(98);t.exports=function(t,e){var n,o=e.nodes().filter((function(t){return r.isSubgraph(e,t)})),s=t.selectAll("g.cluster").data(o,(function(t){return t}));return s.selectAll("*").remove(),s.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0),s=t.selectAll("g.cluster"),r.applyTransition(s,e).style("opacity",1),s.each((function(t){var n=e.node(t),r=i.select(this);i.select(this).append("rect");var o=r.append("g").attr("class","label");a(o,n,n.clusterLabelPos)})),s.selectAll("rect").each((function(t){var n=e.node(t),a=i.select(this);r.applyStyle(a,n.style)})),n=s.exit?s.exit():s.selectAll(null),r.applyTransition(n,e).style("opacity",0).remove(),s}},function(t,e,n){"use strict";var r=n(44),i=n(98),a=n(15),o=n(31);t.exports=function(t,e){var n,s=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0);return s.exit().remove(),s.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(s=t.selectAll("g.edgeLabel")).each((function(t){var n=o.select(this);n.select(".label").remove();var a=e.edge(t),s=i(n,e.edge(t),0,0).classed("label",!0),c=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),r.has(a,"width")||(a.width=c.width),r.has(a,"height")||(a.height=c.height)})),n=s.exit?s.exit():s.selectAll(null),a.applyTransition(n,e).style("opacity",0).remove(),s}},function(t,e,n){"use strict";var r=n(44),i=n(165),a=n(15),o=n(31);function s(t,e){var n=(o.line||o.svg.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}t.exports=function(t,e,n){var c=t.selectAll("g.edgePath").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0),u=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),i=e.node(t.v).elem;return s(n,r.range(n.points.length).map((function(){return e=(t=i).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(c,e);!function(t,e){var n=t.exit();a.applyTransition(n,e).style("opacity",0).remove()}(c,e);var l=void 0!==c.merge?c.merge(u):c;return a.applyTransition(l,e).style("opacity",1),l.each((function(t){var n=o.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),a.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),l.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=r.uniqueId("arrowhead");var c=o.select(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");a.applyTransition(c,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),a=t.node(e.w),o=n.points.slice(1,n.points.length-1);return o.unshift(i(r,o[0])),o.push(i(a,o[o.length-1])),s(n,o)}(e,t)})),a.applyStyle(c,n.style)})),l.selectAll("defs *").remove(),l.selectAll("defs").each((function(t){var r=e.edge(t);(0,n[r.arrowhead])(o.select(this),r.arrowheadId,r,"arrowhead")})),l}},function(t,e,n){"use strict";var r=n(15),i=n(31);t.exports=function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},function(t,e,n){"use strict";var r=n(15),i=n(31),a=n(44);t.exports=function(t,e){function n(t){var n=e.edge(t);return a.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},function(t,e,n){"use strict";var r=n(15),i=n(31);t.exports=function(t,e){var n=t.filter((function(){return!i.select(this).classed("update")}));function a(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",a),r.applyTransition(t,e).style("opacity",1).attr("transform",a),r.applyTransition(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}},function(t,e,n){"use strict";var r=n(168),i=n(97),a=n(166),o=n(167);t.exports={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return r(n,t)},i},ellipse:function(t,e,n){var r=e.width/2,a=e.height/2,o=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",a);return n.intersect=function(t){return i(n,r,a,t)},o},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return a(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return o(n,a,t)},s}}},function(t,e,n){var r=n(15);function i(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}t.exports={default:i,normal:i,vee:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])},undirected:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}}},function(t,e){t.exports="0.6.4"},function(t,e,n){"use strict";n.r(e);var r=n(23),i=n.n(r),a={debug:1,info:2,warn:3,error:4,fatal:5},o={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==a[t]&&(t=a[t])),o.trace=function(){},o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=a.fatal&&(o.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"",c("FATAL"))),t<=a.error&&(o.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"",c("ERROR"))),t<=a.warn&&(o.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"",c("WARN"))),t<=a.info&&(o.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"",c("INFO"))),t<=a.debug&&(o.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"",c("DEBUG")))},c=function(t){var e=i()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},u=n(0),l="comm",h="decl",f=Math.abs,d=String.fromCharCode;function p(t){return t.trim()}function y(t,e,n){return t.replace(e,n)}function g(t,e){return 0|t.charCodeAt(e)}function m(t,e,n){return t.slice(e,n)}function v(t){return t.length}function b(t){return t.length}function x(t,e){return e.push(t),t}var _=1,k=1,w=0,E=0,T=0,C="";function S(t,e,n,r,i,a,o){return{value:t,root:e,parent:n,type:r,props:i,children:a,line:_,column:k,length:o,return:""}}function A(){return T=E>0?g(C,--E):0,k--,10===T&&(k=1,_--),T}function M(){return T=E<w?g(C,E++):0,k++,10===T&&(k=1,_++),T}function O(){return g(C,E)}function N(){return E}function B(t,e){return m(C,t,e)}function D(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function L(t){return p(B(E-1,function t(e){for(;M();)switch(T){case e:return E;case 34:case 39:return t(34===e||39===e?e:T);case 40:41===e&&t(e);break;case 92:M()}return E}(91===t?t+2:40===t?t+1:t)))}function I(t){for(;(T=O())&&T<33;)M();return D(t)>2||D(T)>3?"":" "}function R(t,e){for(;--e&&M()&&!(T<48||T>102||T>57&&T<65||T>70&&T<97););return B(t,N()+(e<6&&32==O()&&32==M()))}function F(t,e){for(;M()&&t+T!==57&&(t+T!==84||47!==O()););return"/*"+B(e,E-1)+"*"+d(47===t?t:M())}function P(t){for(;!D(O());)M();return B(t,E)}function j(t){return function(t){return C="",t}(function t(e,n,r,i,a,o,s,c,u){for(var l=0,h=0,f=s,p=0,g=0,m=0,b=1,_=1,k=1,w=0,E="",T=a,C=o,S=i,B=E;_;)switch(m=w,w=M()){case 34:case 39:case 91:case 40:B+=L(w);break;case 9:case 10:case 13:case 32:B+=I(m);break;case 92:B+=R(N()-1,7);continue;case 47:switch(O()){case 42:case 47:x(z(F(M(),N()),n,r),u);break;default:B+="/"}break;case 123*b:c[l++]=v(B)*k;case 125*b:case 59:case 0:switch(w){case 0:case 125:_=0;case 59+h:g>0&&v(B)-f&&x(g>32?U(B+";",i,r,f-1):U(y(B," ","")+";",i,r,f-2),u);break;case 59:B+=";";default:if(x(S=Y(B,n,r,l,h,a,c,E,T=[],C=[],f),o),123===w)if(0===h)t(B,n,S,S,T,o,f,c,C);else switch(p){case 100:case 109:case 115:t(e,S,S,i&&x(Y(e,S,S,0,0,a,c,E,a,T=[],f),C),a,C,f,c,i?T:C);break;default:t(B,S,S,S,[""],C,f,c,C)}}l=h=g=0,b=k=1,E=B="",f=s;break;case 58:f=1+v(B),g=m;default:if(b<1)if(123==w)--b;else if(125==w&&0==b++&&125==A())continue;switch(B+=d(w),w*b){case 38:k=h>0?1:(B+="\f",-1);break;case 44:c[l++]=(v(B)-1)*k,k=1;break;case 64:45===O()&&(B+=L(M())),p=O(),h=v(E=B+=P(N())),w++;break;case 45:45===m&&2==v(B)&&(b=0)}}return o}("",null,null,null,[""],t=function(t){return _=k=1,w=v(C=t),E=0,[]}(t),0,[0],t))}function Y(t,e,n,r,i,a,o,s,c,u,l){for(var h=i-1,d=0===i?a:[""],g=b(d),v=0,x=0,_=0;v<r;++v)for(var k=0,w=m(t,h+1,h=f(x=o[v])),E=t;k<g;++k)(E=p(x>0?d[k]+" "+w:y(w,/&\f/g,d[k])))&&(c[_++]=E);return S(t,e,n,0===i?"rule":s,c,u,l)}function z(t,e,n){return S(t,e,n,l,d(T),m(t,2,-2),0)}function U(t,e,n,r){return S(t,e,n,h,m(t,0,r),m(t,r+1,-1),r)}function $(t,e){for(var n="",r=b(t),i=0;i<r;i++)n+=e(t[i],i,t,e)||"";return n}function q(t,e,n,r){switch(t.type){case"@import":case h:return t.return=t.return||t.value;case l:return"";case"rule":t.value=t.props.join(",")}return v(n=$(t.children,r))?t.return=t.value+"{"+n+"}":""}var W=n(169),V=n.n(W),H=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("<script"))>=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}return(e=(e=(e=(e=e.replace(/script>/gi,"#")).replace(/script>/gi,"#")).replace(/javascript:/gi,"#")).replace(/onerror=/gi,"onerror:")).replace(/<iframe/gi,"")},G=/<br\s*\/?>/gi,X=function(t){return t.replace(G,"#br#")},Z=function(t){return"false"!==t&&!1!==t},K={getRows:function(t){if(!t)return 1;var e=X(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:function(t,e){return V.a.sanitize(function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i?n=H(n):"loose"!==i&&(n=function(t){return t.replace(/#br#/g,"<br/>")}(n=(n=(n=X(n)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"=")))}return n}(t,e))},hasBreaks:function(t){return/<br\s*[/]?>/gi.test(t)},splitBreaks:function(t){return t.split(/<br\s*[/]?>/gi)},lineBreakRegex:G,removeScript:H,getUrl:function(t){var e="";return t&&(e=(e=(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e},evaluate:Z,sanitizeCSS:function(t){return t.indexOf("url")>=0||t.indexOf("/*")>=0||t.indexOf("//")>=0?"":t}},Q=n(37),J=n(72),tt=n(1),et=function(t,e){return e?Object(tt.adjust)(t,{s:-40,l:10}):Object(tt.adjust)(t,{s:-40,l:-10})};function nt(t){return(nt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function rt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var it=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.darkMode=!1,this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}var e,n;return e=t,(n=[{key:"updateColors",value:function(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#ddd":"#333"),this.secondaryColor=this.secondaryColor||Object(tt.adjust)(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Object(tt.adjust)(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||et(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||et(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||et(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||et(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Object(tt.invert)(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Object(tt.invert)(this.tertiaryColor),this.lineColor=this.lineColor||Object(tt.invert)(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Object(tt.darken)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Object(tt.darken)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Object(tt.invert)(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Object(tt.lighten)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||Object(tt.adjust)(this.primaryColor,{h:64}),this.fillType3=this.fillType3||Object(tt.adjust)(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||Object(tt.adjust)(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||Object(tt.adjust)(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||Object(tt.adjust)(this.primaryColor,{h:128}),this.fillType7=this.fillType7||Object(tt.adjust)(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Object(tt.adjust)(this.primaryColor,{l:-10}),this.pie5=this.pie5||Object(tt.adjust)(this.secondaryColor,{l:-10}),this.pie6=this.pie6||Object(tt.adjust)(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||Object(tt.adjust)(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Object(tt.adjust)(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Object(tt.adjust)(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Object(tt.adjust)(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||Object(tt.adjust)(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||Object(tt.adjust)(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Object(tt.darken)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor}},{key:"calculate",value:function(t){var e=this;if("object"===nt(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}])&&rt(e.prototype,n),t}();function at(t){return(at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ot(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var st=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Object(tt.lighten)(this.primaryColor,16),this.tertiaryColor=Object(tt.adjust)(this.primaryColor,{h:-160}),this.primaryBorderColor=et(this.primaryColor,this.darkMode),this.secondaryBorderColor=et(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=et(this.tertiaryColor,this.darkMode),this.primaryTextColor=Object(tt.invert)(this.primaryColor),this.secondaryTextColor=Object(tt.invert)(this.secondaryColor),this.tertiaryTextColor=Object(tt.invert)(this.tertiaryColor),this.lineColor=Object(tt.invert)(this.background),this.textColor=Object(tt.invert)(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Object(tt.lighten)(Object(tt.invert)("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=Object(tt.rgba)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Object(tt.darken)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=Object(tt.rgba)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Object(tt.rgba)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}var e,n;return e=t,(n=[{key:"updateColors",value:function(){this.secondBkg=Object(tt.lighten)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Object(tt.lighten)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Object(tt.lighten)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Object(tt.adjust)(this.primaryColor,{h:64}),this.fillType3=Object(tt.adjust)(this.secondaryColor,{h:64}),this.fillType4=Object(tt.adjust)(this.primaryColor,{h:-64}),this.fillType5=Object(tt.adjust)(this.secondaryColor,{h:-64}),this.fillType6=Object(tt.adjust)(this.primaryColor,{h:128}),this.fillType7=Object(tt.adjust)(this.secondaryColor,{h:128}),this.pie1=this.pie1||"#0b0000",this.pie2=this.pie2||"#4d1037",this.pie3=this.pie3||"#3f5258",this.pie4=this.pie4||"#4f2f1b",this.pie5=this.pie5||"#6e0a0a",this.pie6=this.pie6||"#3b0048",this.pie7=this.pie7||"#995a01",this.pie8=this.pie8||"#154706",this.pie9=this.pie9||"#161722",this.pie10=this.pie10||"#00296f",this.pie11=this.pie11||"#01629c",this.pie12=this.pie12||"#010029",this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Object(tt.darken)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor}},{key:"calculate",value:function(t){var e=this;if("object"===at(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}])&&ot(e.prototype,n),t}();function ct(t){return(ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ut(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var lt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Object(tt.adjust)(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Object(tt.adjust)(this.primaryColor,{h:-160}),this.primaryBorderColor=et(this.primaryColor,this.darkMode),this.secondaryBorderColor=et(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=et(this.tertiaryColor,this.darkMode),this.primaryTextColor=Object(tt.invert)(this.primaryColor),this.secondaryTextColor=Object(tt.invert)(this.secondaryColor),this.tertiaryTextColor=Object(tt.invert)(this.tertiaryColor),this.lineColor=Object(tt.invert)(this.background),this.textColor=Object(tt.invert)(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Object(tt.rgba)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}var e,n;return e=t,(n=[{key:"updateColors",value:function(){this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=Object(tt.lighten)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Object(tt.adjust)(this.primaryColor,{h:64}),this.fillType3=Object(tt.adjust)(this.secondaryColor,{h:64}),this.fillType4=Object(tt.adjust)(this.primaryColor,{h:-64}),this.fillType5=Object(tt.adjust)(this.secondaryColor,{h:-64}),this.fillType6=Object(tt.adjust)(this.primaryColor,{h:128}),this.fillType7=Object(tt.adjust)(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||Object(tt.adjust)(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||Object(tt.adjust)(this.primaryColor,{l:-10}),this.pie5=this.pie5||Object(tt.adjust)(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Object(tt.adjust)(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||Object(tt.adjust)(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||Object(tt.adjust)(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||Object(tt.adjust)(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||Object(tt.adjust)(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||Object(tt.adjust)(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||Object(tt.adjust)(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor}},{key:"calculate",value:function(t){var e=this;if("object"===ct(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}])&&ut(e.prototype,n),t}();function ht(t){return(ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ft(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var dt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Object(tt.lighten)("#cde498",10),this.primaryBorderColor=et(this.primaryColor,this.darkMode),this.secondaryBorderColor=et(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=et(this.tertiaryColor,this.darkMode),this.primaryTextColor=Object(tt.invert)(this.primaryColor),this.secondaryTextColor=Object(tt.invert)(this.secondaryColor),this.tertiaryTextColor=Object(tt.invert)(this.primaryColor),this.lineColor=Object(tt.invert)(this.background),this.textColor=Object(tt.invert)(this.background),this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}var e,n;return e=t,(n=[{key:"updateColors",value:function(){this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=Object(tt.darken)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Object(tt.adjust)(this.primaryColor,{h:64}),this.fillType3=Object(tt.adjust)(this.secondaryColor,{h:64}),this.fillType4=Object(tt.adjust)(this.primaryColor,{h:-64}),this.fillType5=Object(tt.adjust)(this.secondaryColor,{h:-64}),this.fillType6=Object(tt.adjust)(this.primaryColor,{h:128}),this.fillType7=Object(tt.adjust)(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Object(tt.adjust)(this.primaryColor,{l:-30}),this.pie5=this.pie5||Object(tt.adjust)(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Object(tt.adjust)(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||Object(tt.adjust)(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Object(tt.adjust)(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Object(tt.adjust)(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Object(tt.adjust)(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||Object(tt.adjust)(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||Object(tt.adjust)(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor}},{key:"calculate",value:function(t){var e=this;if("object"===ht(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}])&&ft(e.prototype,n),t}();function pt(t){return(pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function yt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var gt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Object(tt.lighten)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Object(tt.adjust)(this.primaryColor,{h:-160}),this.primaryBorderColor=et(this.primaryColor,this.darkMode),this.secondaryBorderColor=et(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=et(this.tertiaryColor,this.darkMode),this.primaryTextColor=Object(tt.invert)(this.primaryColor),this.secondaryTextColor=Object(tt.invert)(this.secondaryColor),this.tertiaryTextColor=Object(tt.invert)(this.tertiaryColor),this.lineColor=Object(tt.invert)(this.background),this.textColor=Object(tt.invert)(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}var e,n;return e=t,(n=[{key:"updateColors",value:function(){this.secondBkg=Object(tt.lighten)(this.contrast,55),this.border2=this.contrast,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=Object(tt.lighten)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=Object(tt.lighten)(this.contrast,30),this.sectionBkgColor2=Object(tt.lighten)(this.contrast,30),this.taskBorderColor=Object(tt.darken)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=Object(tt.lighten)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=Object(tt.darken)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Object(tt.adjust)(this.primaryColor,{h:64}),this.fillType3=Object(tt.adjust)(this.secondaryColor,{h:64}),this.fillType4=Object(tt.adjust)(this.primaryColor,{h:-64}),this.fillType5=Object(tt.adjust)(this.secondaryColor,{h:-64}),this.fillType6=Object(tt.adjust)(this.primaryColor,{h:128}),this.fillType7=Object(tt.adjust)(this.secondaryColor,{h:128}),this.pie1=this.pie1||"#F4F4F4",this.pie2=this.pie2||"#555",this.pie3=this.pie3||"#BBB",this.pie4=this.pie4||"#777",this.pie5=this.pie5||"#999",this.pie6=this.pie6||"#DDD",this.pie7=this.pie7||"#FFF",this.pie8=this.pie8||"#DDD",this.pie9=this.pie9||"#BBB",this.pie10=this.pie10||"#999",this.pie11=this.pie11||"#777",this.pie12=this.pie12||"#555",this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor}},{key:"calculate",value:function(t){var e=this;if("object"===pt(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}])&&yt(e.prototype,n),t}(),mt={base:{getThemeVariables:function(t){var e=new it;return e.calculate(t),e}},dark:{getThemeVariables:function(t){var e=new st;return e.calculate(t),e}},default:{getThemeVariables:function(t){var e=new lt;return e.calculate(t),e}},forest:{getThemeVariables:function(t){var e=new dt;return e.calculate(t),e}},neutral:{getThemeVariables:function(t){var e=new gt;return e.calculate(t),e}}};function vt(t){return function(t){if(Array.isArray(t))return bt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return bt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?bt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function bt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function xt(t){return(xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var _t={theme:"default",themeVariables:mt.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-d3"},sequence:{activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open-Sans", "sans-serif"',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open-Sans", "sans-serif"',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{arrowMarkerAbsolute:!1,useMaxWidth:!0,defaultRenderer:"dagre-d3"},git:{arrowMarkerAbsolute:!1,useWidth:void 0,useMaxWidth:!0},state:{dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20}};_t.class.arrowMarkerAbsolute=_t.arrowMarkerAbsolute,_t.git.arrowMarkerAbsolute=_t.arrowMarkerAbsolute;var kt=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return Object.keys(e).reduce((function(r,i){return Array.isArray(e[i])?r:"object"===xt(e[i])&&null!==e[i]?[].concat(vt(r),[n+i],vt(t(e[i],""))):[].concat(vt(r),[n+i])}),[])}(_t,""),wt=_t;function Et(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Tt(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=At(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function Ct(t){return(Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function St(t){return function(t){if(Array.isArray(t))return Mt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||At(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function At(t,e){if(t){if("string"==typeof t)return Mt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Mt(t,e):void 0}}function Mt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Ot,Nt={curveBasis:u.curveBasis,curveBasisClosed:u.curveBasisClosed,curveBasisOpen:u.curveBasisOpen,curveLinear:u.curveLinear,curveLinearClosed:u.curveLinearClosed,curveMonotoneX:u.curveMonotoneX,curveMonotoneY:u.curveMonotoneY,curveNatural:u.curveNatural,curveStep:u.curveStep,curveStepAfter:u.curveStepAfter,curveStepBefore:u.curveStepBefore},Bt=/[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,Dt=/\s*(?:(?:(\w+)(?=:):|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,Lt=/\s*%%.*\n/gm,It=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(Dt.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),o.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=Bt.exec(t));)if(r.index===Bt.lastIndex&&Bt.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],s=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:s})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return o.error("ERROR: ".concat(n.message," - Unable to parse directive\n ").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},Rt=function(t,e){return(t=t.replace(Bt,"").replace(Lt,"\n")).match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram-v2/)?"classDiagram":t.match(/^\s*classDiagram/)?e&&e.class&&"dagre-wrapper"===e.class.defaultRenderer?"classDiagram":"class":t.match(/^\s*stateDiagram-v2/)?"stateDiagram":t.match(/^\s*stateDiagram/)?e&&e.class&&"dagre-wrapper"===e.state.defaultRenderer?"stateDiagram":"state":t.match(/^\s*gitGraph/)?"git":t.match(/^\s*flowchart/)?"flowchart-v2":t.match(/^\s*info/)?"info":t.match(/^\s*pie/)?"pie":t.match(/^\s*erDiagram/)?"er":t.match(/^\s*journey/)?"journey":t.match(/^\s*requirement/)||t.match(/^\s*requirementDiagram/)?"requirement":e&&e.flowchart&&"dagre-wrapper"===e.flowchart.defaultRenderer?"flowchart-v2":"flowchart"},Ft=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];var o=e?e.apply(void 0,i):i[0];if(o in n)return n[o];var s=t.apply(void 0,i);return n[o]=s,s}},Pt=function(t,e){if(!t)return e;var n="curve".concat(t.charAt(0).toUpperCase()+t.slice(1));return Nt[n]||e},jt=function(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0},Yt=function(t){for(var e="",n="",r=0;r<t.length;r++)void 0!==t[r]&&(t[r].startsWith("color:")||t[r].startsWith("text-align:")?n=n+t[r]+";":e=e+t[r]+";");return{style:e,labelStyle:n}},zt=0,Ut=function(){return zt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+zt},$t=function(t){return function(t){for(var e="",n="0123456789abcdef".length,r=0;r<t;r++)e+="0123456789abcdef".charAt(Math.floor(Math.random()*n));return e}(t.length)},qt=function t(e,n,r){var i=Object.assign({depth:2,clobber:!1},r),a=i.depth,o=i.clobber;return Array.isArray(n)&&!Array.isArray(e)?(n.forEach((function(n){return t(e,n,r)})),e):Array.isArray(n)&&Array.isArray(e)?(n.forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),e):void 0===e||a<=0?null!=e&&"object"===Ct(e)&&"object"===Ct(n)?Object.assign(e,n):n:(void 0!==n&&"object"===Ct(e)&&"object"===Ct(n)&&Object.keys(n).forEach((function(r){"object"!==Ct(n[r])||void 0!==e[r]&&"object"!==Ct(e[r])?(o||"object"!==Ct(e[r])&&"object"!==Ct(n[r]))&&(e[r]=n[r]):(void 0===e[r]&&(e[r]=Array.isArray(n[r])?[]:{}),e[r]=t(e[r],n[r],{depth:a-1,clobber:o}))})),e)},Wt=function(t,e){var n=e.text.replace(K.lineBreakRegex," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.style("text-anchor",e.anchor),r.style("font-family",e.fontFamily),r.style("font-size",e.fontSize),r.style("font-weight",e.fontWeight),r.attr("fill",e.fill),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.attr("fill",e.fill),i.text(n),r},Vt=Ft((function(t,e,n){if(!t)return t;if(n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},n),K.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=Gt("".concat(t," "),n),c=Gt(a,n);if(s>e){var u=Ht(t,e,"-",n),l=u.hyphenatedStrings,h=u.remainingWord;i.push.apply(i,[a].concat(St(l))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),Ht=Ft((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(Gt(c,r)>=e){var u=s+1,l=i.length===u,h="".concat(c).concat(n);a.push(l?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),Gt=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),Xt(t,e).width},Xt=Ft((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],s=t.split(K.lineBreakRegex),c=[],l=Object(u.select)("body");if(!l.remove)return{width:0,height:0,lineHeight:0};for(var h=l.append("svg"),f=0,d=o;f<d.length;f++){var p,y=d[f],g=0,m={width:0,height:0,lineHeight:0},v=Tt(s);try{for(v.s();!(p=v.n()).done;){var b=p.value,x={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0};x.text=b;var _=Wt(h,x).style("font-size",r).style("font-weight",a).style("font-family",y),k=(_._groups||_)[0][0].getBBox();m.width=Math.round(Math.max(m.width,k.width)),g=Math.round(k.height),m.height+=g,m.lineHeight=Math.round(Math.max(m.lineHeight,g))}}catch(t){v.e(t)}finally{v.f()}c.push(m)}return h.remove(),c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),Zt=function(t,e,n){var r=new Map;return r.set("height",t),n?(r.set("width","100%"),r.set("style","max-width: ".concat(e,"px;"))):r.set("width",e),r},Kt=function(t,e,n,r){!function(t,e){var n,r=Tt(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.attr(i[0],i[1])}}catch(t){r.e(t)}finally{r.f()}}(t,Zt(e,n,r))},Qt=function t(e){o.debug("directiveSanitizer called with",e),"object"===Ct(e)&&(e.length?e.forEach((function(e){return t(e)})):Object.keys(e).forEach((function(n){o.debug("Checking key",n),0===n.indexOf("__")&&(o.debug("sanitize deleting __ option",n),delete e[n]),n.indexOf("proto")>=0&&(o.debug("sanitize deleting proto option",n),delete e[n]),n.indexOf("constr")>=0&&(o.debug("sanitize deleting constr option",n),delete e[n]),kt.indexOf(n)<0?(o.debug("sanitize deleting option",n),delete e[n]):"object"===Ct(e[n])&&(o.debug("sanitize deleting object",n),t(e[n]))})))},Jt={assignWithDepth:qt,wrapLabel:Vt,calculateTextHeight:function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),Xt(t,e).height},calculateTextWidth:Gt,calculateTextDimensions:Xt,calculateSvgSizeAttrs:Zt,configureSvgSize:Kt,detectInit:function(t,e){var n=It(t,/(?:init\b)|(?:initialize\b)/),r={};if(Array.isArray(n)){var i=n.map((function(t){return t.args}));Qt(i),r=qt(r,St(i))}else r=n.args;if(r){var a=Rt(t,e);["config"].forEach((function(t){void 0!==r[t]&&("flowchart-v2"===a&&(a="flowchart"),r[a]=r[t],delete r[t])}))}return r},detectDirective:It,detectType:Rt,isSubstringInArray:function(t,e){for(var n=0;n<e.length;n++)if(e[n].match(t))return n;return-1},interpolateToCurve:Pt,calcLabelPosition:function(t){return function(t){var e,n=0;t.forEach((function(t){n+=jt(t,e),e=t}));var r=n/2,i=void 0;return e=void 0,t.forEach((function(t){if(e&&!i){var n=jt(t,e);if(n<r)r-=n;else{var a=r/n;a<=0&&(i=e),a>=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;o.info("our points",e),e[0]!==n&&(e=e.reverse()),e.forEach((function(t){jt(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=jt(t,r);if(e<a)a-=e;else{var n=a/e;n<=0&&(i=r),n>=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var s=t?10:5,c=Math.atan2(e[0].y-i.y,e[0].x-i.x),u={x:0,y:0};return u.x=Math.sin(c)*s+(e[0].x+i.x)/2,u.y=-Math.cos(c)*s+(e[0].y+i.y)/2,u},calcTerminalLabelPosition:function(t,e,n){var r,i=JSON.parse(JSON.stringify(n));o.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((function(t){jt(t,r),r=t}));var a,s=25;r=void 0,i.forEach((function(t){if(r&&!a){var e=jt(t,r);if(e<s)s-=e;else{var n=s/e;n<=0&&(a=r),n>=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var c=10,u=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(u)*c+(i[0].x+a.x)/2,l.y=-Math.cos(u)*c+(i[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(u+Math.PI)*c+(i[0].x+a.x)/2,l.y=-Math.cos(u+Math.PI)*c+(i[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(u-Math.PI)*c+(i[0].x+a.x)/2-5,l.y=-Math.cos(u-Math.PI)*c+(i[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(u)*c+(i[0].x+a.x)/2-5,l.y=-Math.cos(u)*c+(i[0].y+a.y)/2-5),l},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?Object(J.sanitizeUrl)(n):n},getStylesFromArray:Yt,generateId:Ut,random:$t,memoize:Ft,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o<r;o++)if(!(a=a[n[o]]))return;for(var s=arguments.length,c=new Array(s>1?s-1:0),u=1;u<s;u++)c[u-1]=arguments[u];(e=a)[i].apply(e,c)},entityDecode:function(t){return Ot=Ot||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Ot.innerHTML=t,unescape(Ot.textContent)},initIdGeneratior:function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.deterministic=e,this.seed=n,this.count=n?n.length:0}var e,n;return e=t,(n=[{key:"next",value:function(){return this.deterministic?this.count++:Date.now()}}])&&Et(e.prototype,n),t}(),directiveSanitizer:Qt};function te(t){return(te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var ee,ne=Object.freeze(wt),re=qt({},ne),ie=[],ae=qt({},ne),oe=function(t,e){for(var n=qt({},t),r={},i=0;i<e.length;i++){var a=e[i];ue(a),r=qt(r,a)}if(n=qt(n,r),r.theme){var o=qt({},ee),s=qt(o.themeVariables||{},r.themeVariables);n.themeVariables=mt[n.theme].getThemeVariables(s)}return ae=n,n},se=function(){return qt({},re)},ce=function(){return qt({},ae)},ue=function t(e){Object.keys(re.secure).forEach((function(t){void 0!==e[re.secure[t]]&&(o.debug("Denied attempt to modify a secure key ".concat(re.secure[t]),e[re.secure[t]]),delete e[re.secure[t]])})),Object.keys(e).forEach((function(t){0===t.indexOf("__")&&delete e[t]})),Object.keys(e).forEach((function(n){"string"==typeof e[n]&&(e[n].indexOf("<")>-1||e[n].indexOf(">")>-1||e[n].indexOf("url(data:")>-1)&&delete e[n],"object"===te(e[n])&&t(e[n])}))},le=function(t){t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),ie.push(t),oe(re,ie)},he=function(){oe(re,ie=[])};function fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var de=[],pe={},ye=0,ge=[],me=function(t){var e="",n=t;if(t.indexOf("~")>0){var r=t.split("~");n=r[0],e=r[1]}return{className:n,type:e}},ve=function(t){var e=me(t);void 0===pe[e.className]&&(pe[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+e.className+"-"+ye},ye++)},be=function(t){for(var e=Object.keys(pe),n=0;n<e.length;n++)if(pe[e[n]].id===t)return pe[e[n]].domId},xe=function(t,e){var n=me(t).className,r=pe[n];if("string"==typeof e){var i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},_e=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n="classid-"+n),void 0!==pe[n]&&pe[n].cssClasses.push(e)}))},ke=function(t,e,n){var r=ce(),i=t,a=be(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==pe[i]){var o=[];if("string"==typeof n){o=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var s=0;s<o.length;s++){var c=o[s].trim();'"'===c.charAt(0)&&'"'===c.charAt(c.length-1)&&(c=c.substr(1,c.length-2)),o[s]=c}}0===o.length&&o.push(a),ge.push((function(){var t=document.querySelector('[id="'.concat(a,'"]'));null!==t&&t.addEventListener("click",(function(){Jt.runFunc.apply(Jt,[e].concat(function(t){return function(t){if(Array.isArray(t))return fe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return fe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?fe(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(o)))}),!1)}))}},we={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},Ee=function(t){var e=Object(u.select)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=Object(u.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Object(u.select)(t).select("svg").selectAll("g.node").on("mouseover",(function(){var t=Object(u.select)(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0),Object(u.select)(this).classed("hover",!1)}))};ge.push(Ee);var Te={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().class},addClass:ve,bindFunctions:function(t){ge.forEach((function(e){e(t)}))},clear:function(){de=[],pe={},(ge=[]).push(Ee)},getClass:function(t){return pe[t]},getClasses:function(){return pe},addAnnotation:function(t,e){var n=me(t).className;pe[n].annotations.push(e)},getRelations:function(){return de},addRelation:function(t){o.debug("Adding relation: "+JSON.stringify(t)),ve(t.id1),ve(t.id2),t.id1=me(t.id1).className,t.id2=me(t.id2).className,de.push(t)},addMember:xe,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((function(e){return xe(t,e)})))},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(1).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:we,setClickEvent:function(t,e,n){t.split(",").forEach((function(t){ke(t,e,n),pe[t].haveCallback=!0})),_e(t,"clickable")},setCssClass:_e,setLink:function(t,e,n){var r=ce();t.split(",").forEach((function(t){var i=t;t[0].match(/\d/)&&(i="classid-"+i),void 0!==pe[i]&&(pe[i].link=Jt.formatUrl(e,r),pe[i].linkTarget="string"==typeof n?n:"_blank")})),_e(t,"clickable")},setTooltip:function(t,e){var n=ce();t.split(",").forEach((function(t){void 0!==e&&(pe[t].tooltip=K.sanitizeText(e,n))}))},lookUpDomId:be},Ce=n(10),Se=n.n(Ce),Ae=n(3),Me=n.n(Ae),Oe=n(16),Ne=n.n(Oe),Be=0,De=function(t){var e=t.match(/(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/),n=t.match(/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/);return e&&!n?Le(e):n?Ie(n):Re(t)},Le=function(t){var e="";try{e=(t[1]?t[1].trim():"")+(t[2]?t[2].trim():"")+(t[3]?Pe(t[3].trim()):"")+" "+(t[4]?t[4].trim():"")}catch(n){e=t}return{displayText:e,cssStyle:""}},Ie=function(t){var e="",n="";try{var r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?Pe(t[3].trim()):"",o=t[4]?t[4].trim():"";n=r+i+"("+a+")"+(t[5]?" : "+Pe(t[5]).trim():""),e=je(o)}catch(e){n=t}return{displayText:n,cssStyle:e}},Re=function(t){var e="",n="",r="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var u=t.substring(i+1,a),l=t.substring(a+1,1);n=je(l),e=o+s+"("+Pe(u.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+Pe(r))}else e=Pe(t);return{displayText:e,cssStyle:n}},Fe=function(t,e,n,r){var i=De(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},Pe=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n},je=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},Ye=function(t,e,n){o.info("Rendering class "+e);var r,i=e.id,a={id:i,label:e.id,width:0,height:0},s=t.append("g").attr("id",be(i)).attr("class","classGroup");r=e.link?s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var c=!0;e.annotations.forEach((function(t){var e=r.append("tspan").text("«"+t+"»");c||e.attr("dy",n.textHeight),c=!1}));var u=e.id;void 0!==e.type&&""!==e.type&&(u+="<"+e.type+">");var l=r.append("tspan").text(u).attr("class","title");c||l.attr("dy",n.textHeight);var h=r.node().getBBox().height,f=s.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin/2).attr("y2",n.padding+h+n.dividerMargin/2),d=s.append("text").attr("x",n.padding).attr("y",h+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(t){Fe(d,t,c,n),c=!1}));var p=d.node().getBBox(),y=s.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin+p.height).attr("y2",n.padding+h+n.dividerMargin+p.height),g=s.append("text").attr("x",n.padding).attr("y",h+2*n.dividerMargin+p.height+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(t){Fe(g,t,c,n),c=!1}));var m=s.node().getBBox(),v=" ";e.cssClasses.length>0&&(v+=e.cssClasses.join(" "));var b=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*n.padding).attr("height",m.height+n.padding+.5*n.dividerMargin).attr("class",v).node().getBBox().width;return r.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&r.insert("title").text(e.tooltip),f.attr("x2",b),y.attr("x2",b),a.width=b,a.height=m.height+n.padding+.5*n.dividerMargin,a};Oe.parser.yy=Te;var ze={},Ue={dividerMargin:10,padding:5,textHeight:10},$e=function(t){for(var e=Object.keys(ze),n=0;n<e.length;n++)if(ze[e[n]].label===t)return e[n]},qe=function(t){Object.keys(t).forEach((function(e){Ue[e]=t[e]}))},We=function(t,e){ze={},Oe.parser.yy.clear(),Oe.parser.parse(t),o.info("Rendering diagram "+t);var n,r=Object(u.select)("[id='".concat(e,"']"));r.attr("xmlns:xlink","http://www.w3.org/1999/xlink"),(n=r).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),n.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),n.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");var i=new Me.a.Graph({multigraph:!0});i.setGraph({isMultiGraph:!0}),i.setDefaultEdgeLabel((function(){return{}}));for(var a=Te.getClasses(),s=Object.keys(a),c=0;c<s.length;c++){var l=a[s[c]],h=Ye(r,l,Ue);ze[h.id]=h,i.setNode(h.id,h),o.info("Org height: "+h.height)}Te.getRelations().forEach((function(t){o.info("tjoho"+$e(t.id1)+$e(t.id2)+JSON.stringify(t)),i.setEdge($e(t.id1),$e(t.id2),{relation:t},t.title||"DEFAULT")})),Se.a.layout(i),i.nodes().forEach((function(t){void 0!==t&&void 0!==i.node(t)&&(o.debug("Node "+t+": "+JSON.stringify(i.node(t))),Object(u.select)("#"+be(t)).attr("transform","translate("+(i.node(t).x-i.node(t).width/2)+","+(i.node(t).y-i.node(t).height/2)+" )"))})),i.edges().forEach((function(t){void 0!==t&&void 0!==i.edge(t)&&(o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(i.edge(t))),function(t,e,n,r){var i=function(t){switch(t){case we.AGGREGATION:return"aggregation";case we.EXTENSION:return"extension";case we.COMPOSITION:return"composition";case we.DEPENDENCY:return"dependency"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var a,s,c=e.points,l=Object(u.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(u.curveBasis),h=t.append("path").attr("d",l(c)).attr("id","edge"+Be).attr("class","relation"),f="";r.arrowMarkerAbsolute&&(f=(f=(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&h.attr("class","relation dashed-line"),"none"!==n.relation.type1&&h.attr("marker-start","url("+f+"#"+i(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&h.attr("marker-end","url("+f+"#"+i(n.relation.type2)+"End)");var d,p,y,g,m=e.points.length,v=Jt.calcLabelPosition(e.points);if(a=v.x,s=v.y,m%2!=0&&m>1){var b=Jt.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),x=Jt.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[m-1]);o.debug("cardinality_1_point "+JSON.stringify(b)),o.debug("cardinality_2_point "+JSON.stringify(x)),d=b.x,p=b.y,y=x.x,g=x.y}if(void 0!==n.title){var _=t.append("g").attr("class","classLabel"),k=_.append("text").attr("class","label").attr("x",a).attr("y",s).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=k;var w=k.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",w.x-r.padding/2).attr("y",w.y-r.padding/2).attr("width",w.width+r.padding).attr("height",w.height+r.padding)}o.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",d).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1),void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle2),Be++}(r,i.edge(t),i.edge(t).relation,Ue))}));var f=r.node().getBBox(),d=f.width+40,p=f.height+40;Kt(r,p,d,Ue.useMaxWidth);var y="".concat(f.x-20," ").concat(f.y-20," ").concat(d," ").concat(p);o.debug("viewBox ".concat(y)),r.attr("viewBox",y)},Ve={extension:function(t,e,n){o.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:function(t,e){t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:function(t,e){t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:function(t,e){t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},point:function(t,e){t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:function(t,e){t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:function(t,e){t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:function(t,e){t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}};function He(t){return(He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ge=function(t,e,n,r){var i=t||"";if("object"===He(i)&&(i=i[0]),Z(ce().flowchart.htmlLabels))return i=i.replace(/\\n|\n/g,"<br />"),o.info("vertexText"+i),function(t){var e,n=Object(u.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=n.append("xhtml:div"),i=t.label,a=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+a+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+i+"</span>"),(e=t.labelStyle)&&r.attr("style",e),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),n.node()}({isNode:r,label:i.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")})),labelStyle:e.replace("fill:","color:")});var a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));var s=[];s="string"==typeof i?i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?i:[];for(var c=0;c<s.length;c++){var l=document.createElementNS("http://www.w3.org/2000/svg","tspan");l.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),l.setAttribute("dy","1em"),l.setAttribute("x","0"),n?l.setAttribute("class","title-row"):l.setAttribute("class","row"),l.textContent=s[c].trim(),a.appendChild(l)}return a},Xe=function(t,e,n,r){var i;i=n||"node default";var a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),o=a.insert("g").attr("class","label").attr("style",e.labelStyle),s=o.node().appendChild(Ge(e.labelText,e.labelStyle,!1,r)),c=s.getBBox();if(Z(ce().flowchart.htmlLabels)){var l=s.children[0],h=Object(u.select)(s);c=l.getBoundingClientRect(),h.attr("width",c.width),h.attr("height",c.height)}var f=e.padding/2;return o.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),{shapeSvg:a,bbox:c,halfPadding:f,label:o}},Ze=function(t,e){var n=e.node().getBBox();t.width=n.width,t.height=n.height};function Ke(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+n/2+")")}var Qe={},Je={},tn={},en=function(t,e){return o.trace("In isDecendant",e," ",t," = ",Je[e].indexOf(t)>=0),Je[e].indexOf(t)>=0},nn=function t(e,n,r,i){o.warn("Copying children of ",e,"root",i,"data",n.node(e),i);var a=n.children(e)||[];e!==i&&a.push(e),o.warn("Copying (nodes) clusterId",e,"nodes",a),a.forEach((function(a){if(n.children(a).length>0)t(a,n,r,i);else{var s=n.node(a);o.info("cp ",a," to ",i," with parent ",e),r.setNode(a,s),i!==n.parent(a)&&(o.warn("Setting parent",a,n.parent(a)),r.setParent(a,n.parent(a))),e!==i&&a!==e?(o.debug("Setting parent",a,e),r.setParent(a,e)):(o.info("In copy ",e,"root",i,"data",n.node(e),i),o.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var c=n.edges(a);o.debug("Copying Edges",c),c.forEach((function(t){o.info("Edge",t);var a=n.edge(t.v,t.w,t.name);o.info("Edge data",a,i);try{!function(t,e){return o.info("Decendants of ",e," is ",Je[e]),o.info("Edge is ",t),t.v!==e&&t.w!==e&&(Je[e]?(o.info("Here "),Je[e].indexOf(t.v)>=0||!!en(t.v,e)||!!en(t.w,e)||Je[e].indexOf(t.w)>=0):(o.debug("Tilt, ",e,",not in decendants"),!1))}(t,i)?o.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(o.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),o.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){o.error(t)}}))}o.debug("Removing node",a),n.removeNode(a)}))},rn=function t(e,n){o.trace("Searching",e);var r=n.children(e);if(o.trace("Searching children of id ",e,r),r.length<1)return o.trace("This is a valid node",e),e;for(var i=0;i<r.length;i++){var a=t(r[i],n);if(a)return o.trace("Found replacement for",e," => ",a),a}},an=function(t){return Qe[t]&&Qe[t].externalConnections&&Qe[t]?Qe[t].id:t},on=function t(e,n){if(o.warn("extractor - ",n,Me.a.json.write(e),e.children("D")),n>10)o.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a<r.length;a++){var s=r[a],c=e.children(s);i=i||c.length>0}if(i){o.debug("Nodes = ",r,n);for(var u=0;u<r.length;u++){var l=r[u];if(o.debug("Extracting node",l,Qe,Qe[l]&&!Qe[l].externalConnections,!e.parent(l),e.node(l),e.children("D")," Depth ",n),Qe[l])if(!Qe[l].externalConnections&&e.children(l)&&e.children(l).length>0){o.warn("Cluster without external connections, without a parent and with children",l,n);var h="TB"===e.graph().rankdir?"LR":"TB";Qe[l]&&Qe[l].clusterData&&Qe[l].clusterData.dir&&(h=Qe[l].clusterData.dir,o.warn("Fixing dir",Qe[l].clusterData.dir,h));var f=new Me.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:h,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));o.warn("Old graph before copy",Me.a.json.write(e)),nn(l,e,f,l),e.setNode(l,{clusterNode:!0,id:l,clusterData:Qe[l].clusterData,labelText:Qe[l].labelText,graph:f}),o.warn("New graph after copy node: (",l,")",Me.a.json.write(f)),o.debug("Old graph after copy",Me.a.json.write(e))}else o.warn("Cluster ** ",l," **not meeting the criteria !externalConnections:",!Qe[l].externalConnections," no parent: ",!e.parent(l)," children ",e.children(l)&&e.children(l).length>0,e.children("D"),n),o.debug(Qe);else o.debug("Not a cluster",l,n)}r=e.nodes(),o.warn("New list of nodes",r);for(var d=0;d<r.length;d++){var p=r[d],y=e.node(p);o.warn(" Now next level",p,y),y.clusterNode&&t(y.graph,n+1)}}else o.debug("Done, no node has children",e.nodes())}},sn=n(170),cn=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),u=Math.abs(e*n*o/c);r.x<i&&(u=-u);var l=Math.abs(e*n*s/c);return r.y<a&&(l=-l),{x:i+u,y:a+l}};function un(t,e){return t*e>0}var ln=function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,f=i*n.x+o*n.y+c,d=i*r.x+o*r.y+c,!(0!==f&&0!==d&&un(f,d)||(a=r.y-n.y,s=n.x-r.x,u=r.x*n.y-n.x*r.y,l=a*t.x+s*t.y+u,h=a*e.x+s*e.y+u,0!==l&&0!==h&&un(l,h)||0==(p=i*s-a*o))))return y=Math.abs(p/2),{x:(g=o*u-s*c)<0?(g-y)/p:(g+y)/p,y:(g=a*c-i*u)<0?(g-y)/p:(g+y)/p}},hn=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;return Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},fn=(n.n(sn).a,function(t,e,n){return cn(t,e,e,n)}),dn=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,u=i-t.height/2-s,l=0;l<e.length;l++){var h=e[l],f=e[l<e.length-1?l+1:0],d=ln(t,n,{x:c+h.x,y:u+h.y},{x:c+f.x,y:u+f.y});d&&a.push(d)}return a.length?(a.length>1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a<c?-1:a===c?0:1})),a[0]):t},pn=hn;function yn(t){return(yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var gn=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Ze(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return pn(e,t)},r},mn={question:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),s=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];o.info("Question main (Circle)");var c=Ke(r,a,a,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return o.warn("Intersect called"),dn(e,s,t)},r},rect:function(t,e){var n=Xe(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;o.trace("Classes = ",e.classes);var s=r.insert("rect",":first-child");return s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Ze(e,s),e.intersect=function(t){return pn(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r,i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),s=i.insert("line"),c=i.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText;r="object"===yn(l)?l[0]:l,o.info("Label text abc79",r,l,"object"===yn(l));var h,f=c.node().appendChild(Ge(r,e.labelStyle,!0,!0));if(Z(ce().flowchart.htmlLabels)){var d=f.children[0],p=Object(u.select)(f);h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}o.info("Text 2",l);var y=l.slice(1,l.length),g=f.getBBox(),m=c.node().appendChild(Ge(y.join?y.join("<br/>"):y,e.labelStyle,!0,!0));if(Z(ce().flowchart.htmlLabels)){var v=m.children[0],b=Object(u.select)(m);h=v.getBoundingClientRect(),b.attr("width",h.width),b.attr("height",h.height)}var x=e.padding/2;return Object(u.select)(m).attr("transform","translate( "+(h.width>g.width?0:(g.width-h.width)/2)+", "+(g.height+x+5)+")"),Object(u.select)(f).attr("transform","translate( "+(h.width<g.width?0:-(g.width-h.width)/2)+", 0)"),h=c.node().getBBox(),c.attr("transform","translate("+-h.width/2+", "+(-h.height/2-x+3)+")"),a.attr("class","outer title-state").attr("x",-h.width/2-x).attr("y",-h.height/2-x).attr("width",h.width+e.padding).attr("height",h.height+e.padding),s.attr("class","divider").attr("x1",-h.width/2-x).attr("x2",h.width/2+x).attr("y1",-h.height/2-x+g.height+x).attr("y2",-h.height/2-x+g.height+x),Ze(e,a),e.intersect=function(t){return pn(e,t)},i},choice:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);return n.insert("polygon",":first-child").attr("points",[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}].map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return fn(e,14,t)},n},circle:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding,s=r.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),o.info("Circle main"),Ze(e,s),e.intersect=function(t){return o.info("Circle intersect",e,i.width/2+a,t),fn(e,i.width/2+a,t)},r},stadium:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.height+e.padding,o=i.width+a/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",a/2).attr("ry",a/2).attr("x",-o/2).attr("y",-a/2).attr("width",o).attr("height",a);return Ze(e,s),e.intersect=function(t){return pn(e,t)},r},hexagon:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.height+e.padding,o=a/4,s=i.width+2*o+e.padding,c=[{x:o,y:0},{x:s-o,y:0},{x:s,y:-a/2},{x:s-o,y:-a},{x:o,y:-a},{x:0,y:-a/2}],u=Ke(r,s,a,c);return u.attr("style",e.style),Ze(e,u),e.intersect=function(t){return dn(e,c,t)},r},rect_left_inv_arrow:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-o/2,y:0},{x:a,y:0},{x:a,y:-o},{x:-o/2,y:-o},{x:0,y:-o/2}];return Ke(r,a,o,s).attr("style",e.style),e.width=a+o,e.height=o,e.intersect=function(t){return dn(e,s,t)},r},lean_right:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-2*o/6,y:0},{x:a-o/6,y:0},{x:a+2*o/6,y:-o},{x:o/6,y:-o}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},lean_left:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:2*o/6,y:0},{x:a+o/6,y:0},{x:a-2*o/6,y:-o},{x:-o/6,y:-o}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},trapezoid:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:-2*o/6,y:0},{x:a+2*o/6,y:0},{x:a-o/6,y:-o},{x:o/6,y:-o}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},inv_trapezoid:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:o/6,y:0},{x:a-o/6,y:0},{x:a+2*o/6,y:-o},{x:-2*o/6,y:-o}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},rect_right_inv_arrow:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:0,y:0},{x:a+o/2,y:0},{x:a,y:-o/2},{x:a+o/2,y:-o},{x:0,y:-o}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},cylinder:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=a/2,s=o/(2.5+a/50),c=i.height+s+e.padding,u="M 0,"+s+" a "+o+","+s+" 0,0,0 "+a+" 0 a "+o+","+s+" 0,0,0 "+-a+" 0 l 0,"+c+" a "+o+","+s+" 0,0,0 "+a+" 0 l 0,"+-c,l=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-a/2+","+-(c/2+s)+")");return Ze(e,l),e.intersect=function(t){var n=pn(e,t),r=n.x-e.x;if(0!=o&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(n.y-e.y)>e.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Ze(e,r),e.intersect=function(t){return fn(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Ze(e,i),e.intersect=function(t){return fn(e,7,t)},n},note:function(t,e){var n=Xe(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;o.info("Classes = ",e.classes);var s=r.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Ze(e,s),e.intersect=function(t){return pn(e,t)},r},subroutine:function(t,e){var n=Xe(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}],c=Ke(r,a,o,s);return c.attr("style",e.style),Ze(e,c),e.intersect=function(t){return dn(e,s,t)},r},fork:gn,join:gn,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),s=i.insert("line"),c=0,l=4,h=i.insert("g").attr("class","label"),f=0,d=e.classData.annotations&&e.classData.annotations[0],p=e.classData.annotations[0]?"«"+e.classData.annotations[0]+"»":"",y=h.node().appendChild(Ge(p,e.labelStyle,!0,!0)),g=y.getBBox();if(Z(ce().flowchart.htmlLabels)){var m=y.children[0],v=Object(u.select)(y);g=m.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}e.classData.annotations[0]&&(l+=g.height+4,c+=g.width);var b=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(b+="<"+e.classData.type+">");var x=h.node().appendChild(Ge(b,e.labelStyle,!0,!0));Object(u.select)(x).attr("class","classTitle");var _=x.getBBox();if(Z(ce().flowchart.htmlLabels)){var k=x.children[0],w=Object(u.select)(x);_=k.getBoundingClientRect(),w.attr("width",_.width),w.attr("height",_.height)}l+=_.height+4,_.width>c&&(c=_.width);var E=[];e.classData.members.forEach((function(t){var n=De(t).displayText,r=h.node().appendChild(Ge(n,e.labelStyle,!0,!0)),i=r.getBBox();if(Z(ce().flowchart.htmlLabels)){var a=r.children[0],o=Object(u.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),l+=i.height+4,E.push(r)})),l+=8;var T=[];if(e.classData.methods.forEach((function(t){var n=De(t).displayText,r=h.node().appendChild(Ge(n,e.labelStyle,!0,!0)),i=r.getBBox();if(Z(ce().flowchart.htmlLabels)){var a=r.children[0],o=Object(u.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),l+=i.height+4,T.push(r)})),l+=8,d){var C=(c-g.width)/2;Object(u.select)(y).attr("transform","translate( "+(-1*c/2+C)+", "+-1*l/2+")"),f=g.height+4}var S=(c-_.width)/2;return Object(u.select)(x).attr("transform","translate( "+(-1*c/2+S)+", "+(-1*l/2+f)+")"),f+=_.height+4,o.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-l/2-r+8+f).attr("y2",-l/2-r+8+f),f+=8,E.forEach((function(t){Object(u.select)(t).attr("transform","translate( "+-c/2+", "+(-1*l/2+f+4)+")"),f+=_.height+4})),f+=8,s.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-l/2-r+8+f).attr("y2",-l/2-r+8+f),f+=8,T.forEach((function(t){Object(u.select)(t).attr("transform","translate( "+-c/2+", "+(-1*l/2+f)+")"),f+=_.height+4})),a.attr("class","outer title-state").attr("x",-c/2-r).attr("y",-l/2-r).attr("width",c+e.padding).attr("height",l+e.padding),Ze(e,a),e.intersect=function(t){return pn(e,t)},i}},vn={},bn=function(t){var e=vn[t.id];o.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");var n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},xn={rect:function(t,e){o.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(Ge(e.labelText,e.labelStyle,void 0,!0)),s=a.getBBox();if(Z(ce().flowchart.htmlLabels)){var c=a.children[0],l=Object(u.select)(a);s=c.getBoundingClientRect(),l.attr("width",s.width),l.attr("height",s.height)}var h=0*e.padding,f=h/2,d=e.width<=s.width+h?s.width+h:e.width;e.width<=s.width+h?e.diff=(s.width-e.width)/2:e.diff=-e.padding/2,o.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-d/2).attr("y",e.y-e.height/2-f).attr("width",d).attr("height",e.height+h),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");var p=r.node().getBBox();return e.width=p.width,e.height=p.height,e.intersect=function(t){return hn(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(Ge(e.labelText,e.labelStyle,void 0,!0)),s=o.getBBox();if(Z(ce().flowchart.htmlLabels)){var c=o.children[0],l=Object(u.select)(o);s=c.getBoundingClientRect(),l.attr("width",s.width),l.attr("height",s.height)}s=o.getBBox();var h=0*e.padding,f=h/2,d=e.width<=s.width+e.padding?s.width+e.padding:e.width;e.width<=s.width+e.padding?e.diff=(s.width+0*e.padding-e.width)/2:e.diff=-e.padding/2,r.attr("class","outer").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f).attr("width",d+h).attr("height",e.height+h),a.attr("class","inner").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f+s.height-1).attr("width",d+h).attr("height",e.height+h-s.height-3),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2-e.padding/3+(Z(ce().flowchart.htmlLabels)?5:3))+")");var p=r.node().getBBox();return e.height=p.height,e.intersect=function(t){return hn(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return hn(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.diff=-e.padding/2,e.intersect=function(t){return hn(e,t)},n}},_n={},kn={},wn={},En=function(t,e){o.warn("abc88 cutPathAtIntersect",t,e);var n=[],r=t[0],i=!1;return t.forEach((function(t){if(o.info("abc88 checking point",t,e),function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s}(e,t)||i)o.warn("abc88 outside",t,r),r=t,i||n.push(t);else{var a=function(t,e,n){o.warn("intersection calc abc89:\n outsidePoint: ".concat(JSON.stringify(e),"\n insidePoint : ").concat(JSON.stringify(n),"\n node : x:").concat(t.x," y:").concat(t.y," w:").concat(t.width," h:").concat(t.height));var r=t.x,i=t.y,a=Math.abs(r-n.x),s=t.width/2,c=n.x<e.x?s-a:s+a,u=t.height/2,l=Math.abs(e.y-n.y),h=Math.abs(e.x-n.x);if(Math.abs(i-e.y)*s>Math.abs(r-e.x)*u){var f=n.y<e.y?e.y-u-i:i-u-e.y;c=h*f/l;var d={x:n.x<e.x?n.x+c:n.x-h+c,y:n.y<e.y?n.y+l-f:n.y-l+f};return 0===c&&(d.x=e.x,d.y=e.y),0===h&&(d.x=e.x),0===l&&(d.y=e.y),o.warn("abc89 topp/bott calc, Q ".concat(l,", q ").concat(f,", R ").concat(h,", r ").concat(c),d),d}var p=l*(c=n.x<e.x?e.x-s-r:r-s-e.x)/h,y=n.x<e.x?n.x+h-c:n.x-h+c,g=n.y<e.y?n.y+p:n.y-p;return o.warn("sides calc abc89, Q ".concat(l,", q ").concat(p,", R ").concat(h,", r ").concat(c),{_x:y,_y:g}),0===c&&(y=e.x,g=e.y),0===h&&(y=e.x),0===l&&(g=e.y),{x:y,y:g}}(e,r,t);o.warn("abc88 inside",t,r,a),o.warn("abc88 intersection",a);var s=!1;n.forEach((function(t){s=s||t.x===a.x&&t.y===a.y})),n.find((function(t){return t.x===a.x&&t.y===a.y}))?o.warn("abc88 no intersect",a,n):n.push(a),i=!0}})),o.warn("abc88 returning points",n),n},Tn=function t(e,n,r,i){o.info("Graph in recursive render: XXX",Me.a.json.write(n),i);var a=n.graph().rankdir;o.trace("Dir in recursive render - dir:",a);var s=e.insert("g").attr("class","root");n.nodes()?o.info("Recursive render XXX",n.nodes()):o.info("No nodes found for",n),n.edges().length>0&&o.trace("Recursive edges",n.edge(n.edges()[0]));var c=s.insert("g").attr("class","clusters"),l=s.insert("g").attr("class","edgePaths"),h=s.insert("g").attr("class","edgeLabels"),f=s.insert("g").attr("class","nodes");n.nodes().forEach((function(e){var s=n.node(e);if(void 0!==i){var c=JSON.parse(JSON.stringify(i.clusterData));o.info("Setting data for cluster XXX (",e,") ",c,i),n.setNode(i.id,c),n.parent(e)||(o.trace("Setting parent",e,i.id),n.setParent(e,i.id,c))}if(o.info("(Insert) Node XXX"+e+": "+JSON.stringify(n.node(e))),s&&s.clusterNode){o.info("Cluster identified",e,s.width,n.node(e));var u=t(f,s.graph,r,n.node(e)),l=u.elem;Ze(s,l),s.diff=u.diff||0,o.info("Node bounds (abc123)",e,s,s.width,s.x,s.y),function(t,e){vn[e.id]=t}(l,s),o.warn("Recursive render complete ",l,s)}else n.children(e).length>0?(o.info("Cluster - the non recursive path XXX",e,s.id,s,n),o.info(rn(s.id,n)),Qe[s.id]={id:rn(s.id,n),node:s}):(o.info("Node - the non recursive path",e,s.id,s),function(t,e,n){var r,i;e.link?(r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget||"_blank"),i=mn[e.shape](r,e,n)):r=i=mn[e.shape](t,e,n),e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),vn[e.id]=r,e.haveCallback&&vn[e.id].attr("class",vn[e.id].attr("class")+" clickable")}(f,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),o.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),o.info("Fix",Qe,"ids:",t.v,t.w,"Translateing: ",Qe[t.v],Qe[t.w]),function(t,e){var n=Ge(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a=n.getBBox();if(Z(ce().flowchart.htmlLabels)){var o=n.children[0],s=Object(u.select)(n);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}if(i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),kn[e.id]=r,e.width=a.width,e.height=a.height,e.startLabelLeft){var c=Ge(e.startLabelLeft,e.labelStyle),l=t.insert("g").attr("class","edgeTerminals"),h=l.insert("g").attr("class","inner");h.node().appendChild(c);var f=c.getBBox();h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),wn[e.id]||(wn[e.id]={}),wn[e.id].startLeft=l}if(e.startLabelRight){var d=Ge(e.startLabelRight,e.labelStyle),p=t.insert("g").attr("class","edgeTerminals"),y=p.insert("g").attr("class","inner");p.node().appendChild(d),y.node().appendChild(d);var g=d.getBBox();y.attr("transform","translate("+-g.width/2+", "+-g.height/2+")"),wn[e.id]||(wn[e.id]={}),wn[e.id].startRight=p}if(e.endLabelLeft){var m=Ge(e.endLabelLeft,e.labelStyle),v=t.insert("g").attr("class","edgeTerminals"),b=v.insert("g").attr("class","inner");b.node().appendChild(m);var x=m.getBBox();b.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),v.node().appendChild(m),wn[e.id]||(wn[e.id]={}),wn[e.id].endLeft=v}if(e.endLabelRight){var _=Ge(e.endLabelRight,e.labelStyle),k=t.insert("g").attr("class","edgeTerminals"),w=k.insert("g").attr("class","inner");w.node().appendChild(_);var E=_.getBBox();w.attr("transform","translate("+-E.width/2+", "+-E.height/2+")"),k.node().appendChild(_),wn[e.id]||(wn[e.id]={}),wn[e.id].endRight=k}}(h,e)})),n.edges().forEach((function(t){o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),o.info("#############################################"),o.info("### Layout ###"),o.info("#############################################"),o.info(n),Se.a.layout(n),o.info("Graph after layout:",Me.a.json.write(n));var d=0;return function(t){return function t(e,n){if(0===n.length)return[];var r=Object.assign(n);return n.forEach((function(n){var i=e.children(n),a=t(e,i);r=r.concat(a)})),r}(t,t.children())}(n).forEach((function(t){var e=n.node(t);o.info("Position "+t+": "+JSON.stringify(n.node(t))),o.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?bn(e):n.children(t).length>0?(function(t,e){o.trace("Inserting cluster");var n=e.shape||"rect";_n[e.id]=xn[n](t,e)}(c,e),Qe[e.id].node=e):bn(e)})),n.edges().forEach((function(t){var e=n.edge(t);o.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e),function(t,e){o.info("Moving label abc78 ",t.id,t.label,kn[t.id]);var n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){var r=kn[t.id],i=t.x,a=t.y;if(n){var s=Jt.calcLabelPosition(n);o.info("Moving label from (",i,",",a,") to (",s.x,",",s.y,") abc78")}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){var c=wn[t.id].startLeft,u=t.x,l=t.y;if(n){var h=Jt.calcTerminalLabelPosition(0,"start_left",n);u=h.x,l=h.y}c.attr("transform","translate("+u+", "+l+")")}if(t.startLabelRight){var f=wn[t.id].startRight,d=t.x,p=t.y;if(n){var y=Jt.calcTerminalLabelPosition(0,"start_right",n);d=y.x,p=y.y}f.attr("transform","translate("+d+", "+p+")")}if(t.endLabelLeft){var g=wn[t.id].endLeft,m=t.x,v=t.y;if(n){var b=Jt.calcTerminalLabelPosition(0,"end_left",n);m=b.x,v=b.y}g.attr("transform","translate("+m+", "+v+")")}if(t.endLabelRight){var x=wn[t.id].endRight,_=t.x,k=t.y;if(n){var w=Jt.calcTerminalLabelPosition(0,"end_right",n);_=w.x,k=w.y}x.attr("transform","translate("+_+", "+k+")")}}(e,function(t,e,n,r,i,a){var s=n.points,c=!1,l=a.node(e.v),h=a.node(e.w);o.info("abc88 InsertEdge: ",n),h.intersect&&l.intersect&&((s=s.slice(1,n.points.length-1)).unshift(l.intersect(s[0])),o.info("Last point",s[s.length-1],h,h.intersect(s[s.length-1])),s.push(h.intersect(s[s.length-1]))),n.toCluster&&(o.info("to cluster abc88",r[n.toCluster]),s=En(n.points,r[n.toCluster].node),c=!0),n.fromCluster&&(o.info("from cluster abc88",r[n.fromCluster]),s=En(s.reverse(),r[n.fromCluster].node).reverse(),c=!0);var f,d=s.filter((function(t){return!Number.isNaN(t.y)}));f=("graph"===i||"flowchart"===i)&&n.curve||u.curveBasis;var p,y=Object(u.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(f);switch(n.thickness){case"normal":p="edge-thickness-normal";break;case"thick":p="edge-thickness-thick";break;default:p=""}switch(n.pattern){case"solid":p+=" edge-pattern-solid";break;case"dotted":p+=" edge-pattern-dotted";break;case"dashed":p+=" edge-pattern-dashed"}var g=t.append("path").attr("d",y(d)).attr("id",n.id).attr("class"," "+p+(n.classes?" "+n.classes:"")).attr("style",n.style),m="";switch(ce().state.arrowMarkerAbsolute&&(m=(m=(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),o.info("arrowTypeStart",n.arrowTypeStart),o.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":g.attr("marker-start","url("+m+"#"+i+"-crossStart)");break;case"arrow_point":g.attr("marker-start","url("+m+"#"+i+"-pointStart)");break;case"arrow_barb":g.attr("marker-start","url("+m+"#"+i+"-barbStart)");break;case"arrow_circle":g.attr("marker-start","url("+m+"#"+i+"-circleStart)");break;case"aggregation":g.attr("marker-start","url("+m+"#"+i+"-aggregationStart)");break;case"extension":g.attr("marker-start","url("+m+"#"+i+"-extensionStart)");break;case"composition":g.attr("marker-start","url("+m+"#"+i+"-compositionStart)");break;case"dependency":g.attr("marker-start","url("+m+"#"+i+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":g.attr("marker-end","url("+m+"#"+i+"-crossEnd)");break;case"arrow_point":g.attr("marker-end","url("+m+"#"+i+"-pointEnd)");break;case"arrow_barb":g.attr("marker-end","url("+m+"#"+i+"-barbEnd)");break;case"arrow_circle":g.attr("marker-end","url("+m+"#"+i+"-circleEnd)");break;case"aggregation":g.attr("marker-end","url("+m+"#"+i+"-aggregationEnd)");break;case"extension":g.attr("marker-end","url("+m+"#"+i+"-extensionEnd)");break;case"composition":g.attr("marker-end","url("+m+"#"+i+"-compositionEnd)");break;case"dependency":g.attr("marker-end","url("+m+"#"+i+"-dependencyEnd)")}var v={};return c&&(v.updatedPath=s),v.originalPath=n.points,v}(l,t,e,Qe,r,n))})),n.nodes().forEach((function(t){var e=n.node(t);o.info(t,e.type,e.diff),"group"===e.type&&(d=e.diff)})),{elem:s,diff:d}},Cn=function(t,e,n,r,i){(function(t,e,n,r){e.forEach((function(e){Ve[e](t,n,r)}))})(t,n,r,i),vn={},kn={},wn={},_n={},Je={},tn={},Qe={},o.warn("Graph at first:",Me.a.json.write(e)),function(t,e){!t||e>10?o.debug("Opting out, no graph "):(o.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(o.warn("Cluster identified",e," Replacement id in edges: ",rn(e,t)),Je[e]=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a<r.length;a++)tn[r[a]]=e,i=i.concat(t(r[a],n));return i}(e,t),Qe[e]={id:rn(e,t),clusterData:t.node(e)})})),t.nodes().forEach((function(e){var n=t.children(e),r=t.edges();n.length>0?(o.debug("Cluster identified",e,Je),r.forEach((function(t){t.v!==e&&t.w!==e&&en(t.v,e)^en(t.w,e)&&(o.warn("Edge: ",t," leaves cluster ",e),o.warn("Decendants of XXX ",e,": ",Je[e]),Qe[e].externalConnections=!0)}))):o.debug("Not a cluster ",e,Je)})),t.edges().forEach((function(e){var n=t.edge(e);o.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),o.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;o.warn("Fix XXX",Qe,"ids:",e.v,e.w,"Translateing: ",Qe[e.v]," --- ",Qe[e.w]),(Qe[e.v]||Qe[e.w])&&(o.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=an(e.v),i=an(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),o.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),o.warn("Adjusted Graph",Me.a.json.write(t)),on(t,0),o.trace(Qe))}(e),o.warn("Graph after:",Me.a.json.write(e)),Tn(t,e,r)};Oe.parser.yy=Te;var Sn={dividerMargin:10,padding:5,textHeight:10};function An(t){var e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;default:e="none"}return e}var Mn={},On=[],Nn="",Bn=function(t){return void 0===Mn[t]&&(Mn[t]={attributes:[]},o.info("Added new entity :",t)),Mn[t]},Dn={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().er},addEntity:Bn,addAttributes:function(t,e){var n,r=Bn(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),o.debug("Added attribute ",e[n].attributeName)},getEntities:function(){return Mn},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};On.push(i),o.debug("Added new relationship :",i)},getRelationships:function(){return On},clear:function(){Mn={},On=[],Nn=""},setTitle:function(t){Nn=t},getTitle:function(){return Nn}},Ln=n(76),In=n.n(Ln),Rn={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},Fn=Rn,Pn={},jn=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},Yn=0,zn=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)Pn[e[n]]=t[e[n]]},Un=function(t,e){o.info("Drawing ER diagram"),Dn.clear();var n=In.a.parser;n.yy=Dn;try{n.parse(t)}catch(t){o.debug("Parsing failed")}var r,i=Object(u.select)("[id='".concat(e,"']"));(function(t,e){var n;t.append("defs").append("marker").attr("id",Rn.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Rn.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Rn.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Rn.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Rn.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Rn.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=t.append("defs").append("marker").attr("id",Rn.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=t.append("defs").append("marker").attr("id",Rn.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")})(i,Pn),r=new Me.a.Graph({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:Pn.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));var a,s,c=function(t,e,n){var r;return Object.keys(e).forEach((function(i){var a=t.append("g").attr("id",i);r=void 0===r?i:r;var o="entity-"+i,s=a.append("text").attr("class","er entityLabel").attr("id",o).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("style","font-family: "+ce().fontFamily+"; font-size: "+Pn.fontSize+"px").text(i),c=function(t,e,n){var r=Pn.entityPadding/3,i=Pn.entityPadding/3,a=.85*Pn.fontSize,o=e.node().getBBox(),s=[],c=0,u=0,l=o.height+2*r,h=1;n.forEach((function(n){var i="".concat(e.node().id,"-attr-").concat(h),o=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-type")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+ce().fontFamily+"; font-size: "+a+"px").text(n.attributeType),f=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-name")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+ce().fontFamily+"; font-size: "+a+"px").text(n.attributeName);s.push({tn:o,nn:f});var d=o.node().getBBox(),p=f.node().getBBox();c=Math.max(c,d.width),u=Math.max(u,p.width),l+=Math.max(d.height,p.height)+2*r,h+=1}));var f={width:Math.max(Pn.minEntityWidth,Math.max(o.width+2*Pn.entityPadding,c+u+4*i)),height:n.length>0?l:Math.max(Pn.minEntityHeight,o.height+2*Pn.entityPadding)},d=Math.max(0,f.width-(c+u)-4*i);if(n.length>0){e.attr("transform","translate("+f.width/2+","+(r+o.height/2)+")");var p=o.height+2*r,y="attributeBoxOdd";s.forEach((function(e){var n=p+r+Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)/2;e.tn.attr("transform","translate("+i+","+n+")");var a=t.insert("rect","#"+e.tn.node().id).attr("class","er ".concat(y)).attr("fill",Pn.fill).attr("fill-opacity","100%").attr("stroke",Pn.stroke).attr("x",0).attr("y",p).attr("width",c+2*i+d/2).attr("height",e.tn.node().getBBox().height+2*r);e.nn.attr("transform","translate("+(parseFloat(a.attr("width"))+i)+","+n+")"),t.insert("rect","#"+e.nn.node().id).attr("class","er ".concat(y)).attr("fill",Pn.fill).attr("fill-opacity","100%").attr("stroke",Pn.stroke).attr("x","".concat(a.attr("x")+a.attr("width"))).attr("y",p).attr("width",u+2*i+d/2).attr("height",e.nn.node().getBBox().height+2*r),p+=Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)+2*r,y="attributeBoxOdd"==y?"attributeBoxEven":"attributeBoxOdd"}))}else f.height=Math.max(Pn.minEntityHeight,l),e.attr("transform","translate("+f.width/2+","+f.height/2+")");return f}(a,s,e[i].attributes),u=c.width,l=c.height,h=a.insert("rect","#"+o).attr("class","er entityBox").attr("fill",Pn.fill).attr("fill-opacity","100%").attr("stroke",Pn.stroke).attr("x",0).attr("y",0).attr("width",u).attr("height",l).node().getBBox();n.setNode(i,{width:h.width,height:h.height,shape:"rect",id:i})})),r}(i,Dn.getEntities(),r),l=function(t,e){return t.forEach((function(t){e.setEdge(t.entityA,t.entityB,{relationship:t},jn(t))})),t}(Dn.getRelationships(),r);Se.a.layout(r),a=i,(s=r).nodes().forEach((function(t){void 0!==t&&void 0!==s.node(t)&&a.select("#"+t).attr("transform","translate("+(s.node(t).x-s.node(t).width/2)+","+(s.node(t).y-s.node(t).height/2)+" )")})),l.forEach((function(t){!function(t,e,n,r){Yn++;var i=n.edge(e.entityA,e.entityB,jn(e)),a=Object(u.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(u.curveBasis),o=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",a(i.points)).attr("stroke",Pn.stroke).attr("fill","none");e.relSpec.relType===Dn.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");var s="";switch(Pn.arrowMarkerAbsolute&&(s=(s=(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e.relSpec.cardA){case Dn.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+s+"#"+Fn.ZERO_OR_ONE_END+")");break;case Dn.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+s+"#"+Fn.ZERO_OR_MORE_END+")");break;case Dn.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+s+"#"+Fn.ONE_OR_MORE_END+")");break;case Dn.Cardinality.ONLY_ONE:o.attr("marker-end","url("+s+"#"+Fn.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case Dn.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+s+"#"+Fn.ZERO_OR_ONE_START+")");break;case Dn.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+s+"#"+Fn.ZERO_OR_MORE_START+")");break;case Dn.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+s+"#"+Fn.ONE_OR_MORE_START+")");break;case Dn.Cardinality.ONLY_ONE:o.attr("marker-start","url("+s+"#"+Fn.ONLY_ONE_START+")")}var c=o.node().getTotalLength(),l=o.node().getPointAtLength(.5*c),h="rel"+Yn,f=t.append("text").attr("class","er relationshipLabel").attr("id",h).attr("x",l.x).attr("y",l.y).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("style","font-family: "+ce().fontFamily+"; font-size: "+Pn.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+h).attr("class","er relationshipLabelBox").attr("x",l.x-f.width/2).attr("y",l.y-f.height/2).attr("width",f.width).attr("height",f.height).attr("fill","white").attr("fill-opacity","85%")}(i,t,r,c)}));var h=Pn.diagramPadding,f=i.node().getBBox(),d=f.width+2*h,p=f.height+2*h;Kt(i,p,d,Pn.useMaxWidth),i.attr("viewBox","".concat(f.x-h," ").concat(f.y-h," ").concat(d," ").concat(p))};function $n(t){return($n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function qn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Wn,Vn,Hn=0,Gn=ce(),Xn={},Zn=[],Kn=[],Qn=[],Jn={},tr={},er=0,nr=!0,rr=[],ir=function(t){for(var e=Object.keys(Xn),n=0;n<e.length;n++)if(Xn[e[n]].id===t)return Xn[e[n]].domId;return t},ar=function(t,e,n,r){var i={start:t,end:e,type:void 0,text:""};void 0!==(r=n.text)&&(i.text=K.sanitizeText(r.trim(),Gn),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke,i.length=n.length),Zn.push(i)},or=function(t,e){t.split(",").forEach((function(t){var n=t;void 0!==Xn[n]&&Xn[n].classes.push(e),void 0!==Jn[n]&&Jn[n].classes.push(e)}))},sr=function(t){var e=Object(u.select)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=Object(u.select)("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Object(u.select)(t).select("svg").selectAll("g.node").on("mouseover",(function(){var t=Object(u.select)(this);if(null!==t.attr("title")){var n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0),Object(u.select)(this).classed("hover",!1)}))};rr.push(sr);var cr=function(t){for(var e=0;e<Qn.length;e++)if(Qn[e].id===t)return e;return-1},ur=-1,lr=[],hr=function(t,e){var n=!1;return t.forEach((function(t){t.nodes.indexOf(e)>=0&&(n=!0)})),n},fr=function(t,e){var n=[];return t.nodes.forEach((function(r,i){hr(e,r)||n.push(t.nodes[i])})),{nodes:n}},dr={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},defaultConfig:function(){return ne.flowchart},addVertex:function(t,e,n,r,i,a){var o,s=t;void 0!==s&&0!==s.trim().length&&(void 0===Xn[s]&&(Xn[s]={id:s,domId:"flowchart-"+s+"-"+Hn,styles:[],classes:[]}),Hn++,void 0!==e?(Gn=ce(),'"'===(o=K.sanitizeText(e.trim(),Gn))[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),Xn[s].text=o):void 0===Xn[s].text&&(Xn[s].text=t),void 0!==n&&(Xn[s].type=n),null!=r&&r.forEach((function(t){Xn[s].styles.push(t)})),null!=i&&i.forEach((function(t){Xn[s].classes.push(t)})),void 0!==a&&(Xn[s].dir=a))},lookUpDomId:ir,addLink:function(t,e,n,r){var i,a;for(i=0;i<t.length;i++)for(a=0;a<e.length;a++)ar(t[i],e[a],n,r)},updateLinkInterpolate:function(t,e){t.forEach((function(t){"default"===t?Zn.defaultInterpolate=e:Zn[t].interpolate=e}))},updateLink:function(t,e){t.forEach((function(t){"default"===t?Zn.defaultStyle=e:(-1===Jt.isSubstringInArray("fill",e)&&e.push("fill:none"),Zn[t].style=e)}))},addClass:function(t,e){void 0===Kn[t]&&(Kn[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){var n=e.replace("fill","bgFill").replace("color","fill");Kn[t].textStyles.push(n)}Kn[t].styles.push(e)}))},setDirection:function(t){(Wn=t).match(/.*</)&&(Wn="RL"),Wn.match(/.*\^/)&&(Wn="BT"),Wn.match(/.*>/)&&(Wn="LR"),Wn.match(/.*v/)&&(Wn="TB")},setClass:or,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(tr["gen-1"===Vn?ir(t):t]=K.sanitizeText(e,Gn))}))},getTooltip:function(t){return tr[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){var r=ir(t);if("loose"===ce().securityLevel&&void 0!==e){var i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a<i.length;a++){var o=i[a].trim();'"'===o.charAt(0)&&'"'===o.charAt(o.length-1)&&(o=o.substr(1,o.length-2)),i[a]=o}}0===i.length&&i.push(t),void 0!==Xn[t]&&(Xn[t].haveCallback=!0,rr.push((function(){var t=document.querySelector('[id="'.concat(r,'"]'));null!==t&&t.addEventListener("click",(function(){Jt.runFunc.apply(Jt,[e].concat(function(t){return function(t){if(Array.isArray(t))return qn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return qn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qn(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(i)))}),!1)})))}}(t,e,n)})),or(t,"clickable")},setLink:function(t,e,n){t.split(",").forEach((function(t){void 0!==Xn[t]&&(Xn[t].link=Jt.formatUrl(e,Gn),Xn[t].linkTarget=n)})),or(t,"clickable")},bindFunctions:function(t){rr.forEach((function(e){e(t)}))},getDirection:function(){return Wn.trim()},getVertices:function(){return Xn},getEdges:function(){return Zn},getClasses:function(){return Kn},clear:function(t){Xn={},Kn={},Zn=[],(rr=[]).push(sr),Qn=[],Jn={},er=0,tr=[],nr=!0,Vn=t||"gen-1"},setGen:function(t){Vn=t||"gen-1"},defaultStyle:function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},addSubGraph:function(t,e,n){var r=t.trim(),i=n;t===n&&n.match(/\s/)&&(r=void 0);var a=[],s=function(t){var e,n={boolean:{},number:{},string:{}},r=[];return{nodeList:t.filter((function(t){var i=$n(t);return t.stmt&&"dir"===t.stmt?(e=t.value,!1):""!==t.trim()&&(i in n?!n[i].hasOwnProperty(t)&&(n[i][t]=!0):!(r.indexOf(t)>=0)&&r.push(t))})),dir:e}}(a.concat.apply(a,e)),c=s.nodeList,u=s.dir;if(a=c,"gen-1"===Vn){o.warn("LOOKING UP");for(var l=0;l<a.length;l++)a[l]=ir(a[l])}r=r||"subGraph"+er,i=i||"",i=K.sanitizeText(i,Gn),er+=1;var h={id:r,nodes:a,title:i.trim(),classes:[],dir:u};return o.info("Adding",h.id,h.nodes,h.dir),h.nodes=fr(h,Qn).nodes,Qn.push(h),Jn[r]=h,r},getDepthFirstPos:function(t){return lr[t]},indexNodes:function(){ur=-1,Qn.length>0&&function t(e,n){var r=Qn[n].nodes;if(!((ur+=1)>2e3)){if(lr[ur]=n,Qn[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i<r.length;){var o=cr(r[i]);if(o>=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}}("none",Qn.length-1)},getSubGraphs:function(){return Qn},destructLink:function(t,e){var n,r=function(t){var e=t.trim(),n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",a=n.length-1;"="===n[0]&&(i="thick");var o=function(t,e){for(var n=e.length,r=0,i=0;i<n;++i)"."===e[i]&&++r;return r}(0,n);return o&&(i="dotted",a=o),{type:r,stroke:i,length:a}}(t);if(e){if((n=function(t){var e=t.trim(),n="arrow_open";switch(e[0]){case"<":n="arrow_point",e=e.slice(1);break;case"x":n="arrow_cross",e=e.slice(1);break;case"o":n="arrow_circle",e=e.slice(1)}var r="normal";return-1!==e.indexOf("=")&&(r="thick"),-1!==e.indexOf(".")&&(r="dotted"),{type:n,stroke:r}}(e)).stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===n.type)n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return"double_arrow"===n.type&&(n.type="double_arrow_point"),n.length=r.length,n}return r},lex:{firstGraph:function(){return!!nr&&(nr=!1,!0)}},exists:hr,makeUniq:fr},pr=n(27),yr=n.n(pr),gr=n(8),mr=n.n(gr),vr=n(51),br=n.n(vr);function xr(t,e,n){var r=.9*(e.width+e.height),i=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],a=Nr(t,r,r,i);return n.intersect=function(t){return mr.a.intersect.polygon(n,i,t)},a}function _r(t,e,n){var r=e.height,i=r/4,a=e.width+2*i,o=[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],s=Nr(t,a,r,o);return n.intersect=function(t){return mr.a.intersect.polygon(n,o,t)},s}function kr(t,e,n){var r=e.width,i=e.height,a=[{x:-i/2,y:0},{x:r,y:0},{x:r,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function wr(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:i/6,y:-i}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Er(t,e,n){var r=e.width,i=e.height,a=[{x:2*i/6,y:0},{x:r+i/6,y:0},{x:r-2*i/6,y:-i},{x:-i/6,y:-i}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Tr(t,e,n){var r=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:r+2*i/6,y:0},{x:r-i/6,y:-i},{x:i/6,y:-i}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Cr(t,e,n){var r=e.width,i=e.height,a=[{x:i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:-2*i/6,y:-i}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Sr(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r+i/2,y:0},{x:r,y:-i/2},{x:r+i/2,y:-i},{x:0,y:-i}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Ar(t,e,n){var r=e.height,i=e.width+r/4,a=t.insert("rect",":first-child").attr("rx",r/2).attr("ry",r/2).attr("x",-i/2).attr("y",-r/2).attr("width",i).attr("height",r);return n.intersect=function(t){return mr.a.intersect.rect(n,t)},a}function Mr(t,e,n){var r=e.width,i=e.height,a=[{x:0,y:0},{x:r,y:0},{x:r,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],o=Nr(t,r,i,a);return n.intersect=function(t){return mr.a.intersect.polygon(n,a,t)},o}function Or(t,e,n){var r=e.width,i=r/2,a=i/(2.5+r/50),o=e.height+a,s="M 0,"+a+" a "+i+","+a+" 0,0,0 "+r+" 0 a "+i+","+a+" 0,0,0 "+-r+" 0 l 0,"+o+" a "+i+","+a+" 0,0,0 "+r+" 0 l 0,"+-o,c=t.attr("label-offset-y",a).insert("path",":first-child").attr("d",s).attr("transform","translate("+-r/2+","+-(o/2+a)+")");return n.intersect=function(t){var e=mr.a.intersect.rect(n,t),r=e.x-n.x;if(0!=i&&(Math.abs(r)<n.width/2||Math.abs(r)==n.width/2&&Math.abs(e.y-n.y)>n.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function Nr(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var Br=function(t){t.shapes().question=xr,t.shapes().hexagon=_r,t.shapes().stadium=Ar,t.shapes().subroutine=Mr,t.shapes().cylinder=Or,t.shapes().rect_left_inv_arrow=kr,t.shapes().lean_right=wr,t.shapes().lean_left=Er,t.shapes().trapezoid=Tr,t.shapes().inv_trapezoid=Cr,t.shapes().rect_right_inv_arrow=Sr},Dr={},Lr=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)Dr[e[n]]=t[e[n]]},Ir=function(t,e){o.info("Drawing flowchart"),dr.clear(),dr.setGen("gen-1");var n=yr.a.parser;n.yy=dr,n.parse(t);var r=dr.getDirection();void 0===r&&(r="TD");for(var i,a=ce().flowchart,s=a.nodeSpacing||50,c=a.rankSpacing||50,l=new Me.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:s,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=dr.getSubGraphs(),f=h.length-1;f>=0;f--)i=h[f],dr.addVertex(i.id,i.title,"group",void 0,i.classes);var d=dr.getVertices();o.warn("Get vertices",d);var p=dr.getEdges(),y=0;for(y=h.length-1;y>=0;y--){i=h[y],Object(u.selectAll)("cluster").append("text");for(var g=0;g<i.nodes.length;g++)o.warn("Setting subgraph",i.nodes[g],dr.lookUpDomId(i.nodes[g]),dr.lookUpDomId(i.id)),l.setParent(dr.lookUpDomId(i.nodes[g]),dr.lookUpDomId(i.id))}(function(t,e,n){var r=Object(u.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var s,c=Yt(i.styles),u=void 0!==i.text?i.text:i.id;if(Z(ce().flowchart.htmlLabels)){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")}))};(s=br()(r,l).node()).parentNode.removeChild(s)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var f=u.split(K.lineBreakRegex),d=0;d<f.length;d++){var p=document.createElementNS("http://www.w3.org/2000/svg","tspan");p.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),p.setAttribute("dy","1em"),p.setAttribute("x","1"),p.textContent=f[d],h.appendChild(p)}s=h}var y=0,g="";switch(i.type){case"round":y=5,g="rect";break;case"square":g="rect";break;case"diamond":g="question";break;case"hexagon":g="hexagon";break;case"odd":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"odd_right":g="rect_left_inv_arrow";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"group":g="rect";break;default:g="rect"}o.warn("Adding node",i.id,i.domId),e.setNode(dr.lookUpDomId(i.id),{labelType:"svg",labelStyle:c.labelStyle,shape:g,label:s,rx:y,ry:y,class:a,style:c.style,id:dr.lookUpDomId(i.id)})}))})(d,l,e),function(t,e){var n,r,i=0;if(void 0!==t.defaultStyle){var a=Yt(t.defaultStyle);n=a.style,r=a.labelStyle}t.forEach((function(a){i++;var o="L-"+a.start+"-"+a.end,s="LS-"+a.start,c="LE-"+a.end,l={};"arrow_open"===a.type?l.arrowhead="none":l.arrowhead="normal";var h="",f="";if(void 0!==a.style){var d=Yt(a.style);h=d.style,f=d.labelStyle}else switch(a.stroke){case"normal":h="fill:none",void 0!==n&&(h=n),void 0!==r&&(f=r);break;case"dotted":h="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":h=" stroke-width: 3.5px;fill:none"}l.style=h,l.labelStyle=f,void 0!==a.interpolate?l.curve=Pt(a.interpolate,u.curveLinear):void 0!==t.defaultInterpolate?l.curve=Pt(t.defaultInterpolate,u.curveLinear):l.curve=Pt(Dr.curve,u.curveLinear),void 0===a.text?void 0!==a.style&&(l.arrowheadStyle="fill: #333"):(l.arrowheadStyle="fill: #333",l.labelpos="c",Z(ce().flowchart.htmlLabels)?(l.labelType="html",l.label='<span id="L-'.concat(o,'" class="edgeLabel L-').concat(s,"' L-").concat(c,'">').concat(a.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")})),"</span>")):(l.labelType="text",l.label=a.text.replace(K.lineBreakRegex,"\n"),void 0===a.style&&(l.style=l.style||"stroke: #333; stroke-width: 1.5px;fill:none"),l.labelStyle=l.labelStyle.replace("color:","fill:"))),l.id=o,l.class=s+" "+c,l.minlen=a.length||1,e.setEdge(dr.lookUpDomId(a.start),dr.lookUpDomId(a.end),l,i)}))}(p,l);var m=new(0,mr.a.render);Br(m),m.arrows().none=function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");mr.a.util.applyStyle(i,n[r+"Style"])},m.arrows().normal=function(t,e){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var v=Object(u.select)('[id="'.concat(e,'"]'));v.attr("xmlns:xlink","http://www.w3.org/1999/xlink"),o.warn(l);var b=Object(u.select)("#"+e+" g");m(b,l),b.selectAll("g.node").attr("title",(function(){return dr.getTooltip(this.id)}));var x=a.diagramPadding,_=v.node().getBBox(),k=_.width+2*x,w=_.height+2*x;Kt(v,w,k,a.useMaxWidth);var E="".concat(_.x-x," ").concat(_.y-x," ").concat(k," ").concat(w);for(o.debug("viewBox ".concat(E)),v.attr("viewBox",E),dr.indexNodes("subGraph"+y),y=0;y<h.length;y++)if("undefined"!==(i=h[y]).title){var T=document.querySelectorAll("#"+e+' [id="'+dr.lookUpDomId(i.id)+'"] rect'),C=document.querySelectorAll("#"+e+' [id="'+dr.lookUpDomId(i.id)+'"]'),S=T[0].x.baseVal.value,A=T[0].y.baseVal.value,M=T[0].width.baseVal.value,O=Object(u.select)(C[0]).select(".label");O.attr("transform","translate(".concat(S+M/2,", ").concat(A+14,")")),O.attr("id",e+"Text");for(var N=0;N<i.classes.length;N++)C[0].classList.add(i.classes[N])}Z(a.htmlLabels);for(var B=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),D=0;D<B.length;D++){var L=B[D],I=L.getBBox(),R=document.createElementNS("http://www.w3.org/2000/svg","rect");R.setAttribute("rx",0),R.setAttribute("ry",0),R.setAttribute("width",I.width),R.setAttribute("height",I.height),L.insertBefore(R,L.firstChild)}Object.keys(d).forEach((function(t){var n=d[t];if(n.link){var r=Object(u.select)("#"+e+' [id="'+dr.lookUpDomId(t)+'"]');if(r){var i=document.createElementNS("http://www.w3.org/2000/svg","a");i.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),i.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),i.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),n.linkTarget&&i.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);var a=r.insert((function(){return i}),":first-child"),o=r.select(".label-container");o&&a.append((function(){return o.node()}));var s=r.select(".label");s&&a.append((function(){return s.node()}))}}}))},Rr={},Fr=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)Rr[e[n]]=t[e[n]]},Pr=function(t,e){o.info("Drawing flowchart"),dr.clear(),dr.setGen("gen-2");var n=yr.a.parser;n.yy=dr,n.parse(t);var r=dr.getDirection();void 0===r&&(r="TD");var i,a=ce().flowchart,s=a.nodeSpacing||50,c=a.rankSpacing||50,l=new Me.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:s,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=dr.getSubGraphs();o.info("Subgraphs - ",h);for(var f=h.length-1;f>=0;f--)i=h[f],o.info("Subgraph - ",i),dr.addVertex(i.id,i.title,"group",void 0,i.classes,i.dir);var d=dr.getVertices(),p=dr.getEdges();o.info(p);var y=0;for(y=h.length-1;y>=0;y--){i=h[y],Object(u.selectAll)("cluster").append("text");for(var g=0;g<i.nodes.length;g++)o.info("Setting up subgraphs",i.nodes[g],i.id),l.setParent(i.nodes[g],i.id)}(function(t,e,n){var r=Object(u.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var s,c=Yt(i.styles),u=void 0!==i.text?i.text:i.id;if(Z(ce().flowchart.htmlLabels)){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"<i class='".concat(t.replace(":"," "),"'></i>")}))};(s=br()(r,l).node()).parentNode.removeChild(s)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var f=u.split(K.lineBreakRegex),d=0;d<f.length;d++){var p=document.createElementNS("http://www.w3.org/2000/svg","tspan");p.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),p.setAttribute("dy","1em"),p.setAttribute("x","1"),p.textContent=f[d],h.appendChild(p)}s=h}var y=0,g="";switch(i.type){case"round":y=5,g="rect";break;case"square":g="rect";break;case"diamond":g="question";break;case"hexagon":g="hexagon";break;case"odd":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"odd_right":g="rect_left_inv_arrow";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"group":g="rect";break;default:g="rect"}e.setNode(i.id,{labelStyle:c.labelStyle,shape:g,labelText:u,rx:y,ry:y,class:a,style:c.style,id:i.id,link:i.link,linkTarget:i.linkTarget,tooltip:dr.getTooltip(i.id)||"",domId:dr.lookUpDomId(i.id),haveCallback:i.haveCallback,width:"group"===i.type?500:void 0,dir:i.dir,type:i.type,padding:ce().flowchart.padding}),o.info("setNode",{labelStyle:c.labelStyle,shape:g,labelText:u,rx:y,ry:y,class:a,style:c.style,id:i.id,domId:dr.lookUpDomId(i.id),width:"group"===i.type?500:void 0,type:i.type,dir:i.dir,padding:ce().flowchart.padding})}))})(d,l,e),function(t,e){o.info("abc78 edges = ",t);var n,r,i=0,a={};if(void 0!==t.defaultStyle){var s=Yt(t.defaultStyle);n=s.style,r=s.labelStyle}t.forEach((function(s){i++;var c="L-"+s.start+"-"+s.end;void 0===a[c]?(a[c]=0,o.info("abc78 new entry",c,a[c])):(a[c]++,o.info("abc78 new entry",c,a[c]));var l=c+"-"+a[c];o.info("abc78 new link id to be used is",c,l,a[c]);var h="LS-"+s.start,f="LE-"+s.end,d={style:"",labelStyle:""};switch(d.minlen=s.length||1,"arrow_open"===s.type?d.arrowhead="none":d.arrowhead="normal",d.arrowTypeStart="arrow_open",d.arrowTypeEnd="arrow_open",s.type){case"double_arrow_cross":d.arrowTypeStart="arrow_cross";case"arrow_cross":d.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":d.arrowTypeStart="arrow_point";case"arrow_point":d.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":d.arrowTypeStart="arrow_circle";case"arrow_circle":d.arrowTypeEnd="arrow_circle"}var p="",y="";switch(s.stroke){case"normal":p="fill:none;",void 0!==n&&(p=n),void 0!==r&&(y=r),d.thickness="normal",d.pattern="solid";break;case"dotted":d.thickness="normal",d.pattern="dotted",d.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":d.thickness="thick",d.pattern="solid",d.style="stroke-width: 3.5px;fill:none;"}if(void 0!==s.style){var g=Yt(s.style);p=g.style,y=g.labelStyle}d.style=d.style+=p,d.labelStyle=d.labelStyle+=y,void 0!==s.interpolate?d.curve=Pt(s.interpolate,u.curveLinear):void 0!==t.defaultInterpolate?d.curve=Pt(t.defaultInterpolate,u.curveLinear):d.curve=Pt(Rr.curve,u.curveLinear),void 0===s.text?void 0!==s.style&&(d.arrowheadStyle="fill: #333"):(d.arrowheadStyle="fill: #333",d.labelpos="c"),d.labelType="text",d.label=s.text.replace(K.lineBreakRegex,"\n"),void 0===s.style&&(d.style=d.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),d.labelStyle=d.labelStyle.replace("color:","fill:"),d.id=l,d.classes="flowchart-link "+h+" "+f,e.setEdge(s.start,s.end,d,i)}))}(p,l);var m=Object(u.select)('[id="'.concat(e,'"]'));m.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var v=Object(u.select)("#"+e+" g");Cn(v,l,["point","circle","cross"],"flowchart",e);var b=a.diagramPadding,x=m.node().getBBox(),_=x.width+2*b,k=x.height+2*b;if(o.debug("new ViewBox 0 0 ".concat(_," ").concat(k),"translate(".concat(b-l._label.marginx,", ").concat(b-l._label.marginy,")")),Kt(m,k,_,a.useMaxWidth),m.attr("viewBox","0 0 ".concat(_," ").concat(k)),m.select("g").attr("transform","translate(".concat(b-l._label.marginx,", ").concat(b-x.y,")")),dr.indexNodes("subGraph"+y),!a.htmlLabels)for(var w=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),E=0;E<w.length;E++){var T=w[E],C=T.getBBox(),S=document.createElementNS("http://www.w3.org/2000/svg","rect");S.setAttribute("rx",0),S.setAttribute("ry",0),S.setAttribute("width",C.width),S.setAttribute("height",C.height),T.insertBefore(S,T.firstChild)}Object.keys(d).forEach((function(t){var n=d[t];if(n.link){var r=Object(u.select)("#"+e+' [id="'+t+'"]');if(r){var i=document.createElementNS("http://www.w3.org/2000/svg","a");i.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),i.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),i.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),n.linkTarget&&i.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);var a=r.insert((function(){return i}),":first-child"),o=r.select(".label-container");o&&a.append((function(){return o.node()}));var s=r.select(".label");s&&a.append((function(){return s.node()}))}}}))};function jr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Yr,zr,Ur="",$r="",qr="",Wr=[],Vr="",Hr=[],Gr=[],Xr="",Zr=["active","done","crit","milestone"],Kr=[],Qr=!1,Jr=!1,ti=0,ei=function(t,e,n){return t.isoWeekday()>=6&&n.indexOf("weekends")>=0||n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0},ni=function(t,e,n){if(n.length&&!t.manualEndTime){var r=i()(t.startTime,e,!0);r.add(1,"d");var a=i()(t.endTime,e,!0),o=ri(r,a,e,n);t.endTime=a.toDate(),t.renderEndTime=o}},ri=function(t,e,n,r){for(var i=!1,a=null;t<=e;)i||(a=e.toDate()),(i=ei(t,n,r))&&e.add(1,"d"),t.add(1,"d");return a},ii=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var a=null;if(r[1].split(" ").forEach((function(t){var e=hi(t);void 0!==e&&(a?e.endTime>a.endTime&&(a=e):a=e)})),a)return a.endTime;var s=new Date;return s.setHours(0,0,0,0),s}var c=i()(n,e.trim(),!0);return c.isValid()?c.toDate():(o.debug("Invalid date:"+n),o.debug("With date format:"+e.trim()),new Date)},ai=function(t,e){if(null!==t)switch(t[2]){case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},oi=function(t,e,n,r){r=r||!1,n=n.trim();var a=i()(n,e.trim(),!0);return a.isValid()?(r&&a.add(1,"d"),a.toDate()):ai(/^([\d]+)([wdhms])/.exec(n.trim()),i()(t))},si=0,ci=function(t){return void 0===t?"task"+(si+=1):t},ui=[],li={},hi=function(t){var e=li[t];return ui[e]},fi=function(){for(var t=function(t){var e=ui[t],n="";switch(ui[t].raw.startTime.type){case"prevTaskEnd":var r=hi(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=ii(0,Ur,ui[t].raw.startTime.startData))&&(ui[t].startTime=n)}return ui[t].startTime&&(ui[t].endTime=oi(ui[t].startTime,Ur,ui[t].raw.endTime.data,Qr),ui[t].endTime&&(ui[t].processed=!0,ui[t].manualEndTime=i()(ui[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),ni(ui[t],Ur,Wr))),ui[t].processed},e=!0,n=0;n<ui.length;n++)t(n),e=e&&ui[n].processed;return e},di=function(t,e){t.split(",").forEach((function(t){var n=hi(t);void 0!==n&&n.classes.push(e)}))},pi=function(t,e){Kr.push((function(){var n=document.querySelector('[id="'.concat(t,'"]'));null!==n&&n.addEventListener("click",(function(){e()}))})),Kr.push((function(){var n=document.querySelector('[id="'.concat(t,'-text"]'));null!==n&&n.addEventListener("click",(function(){e()}))}))},yi={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().gantt},clear:function(){Hr=[],Gr=[],Xr="",Kr=[],Vr="",si=0,Yr=void 0,zr=void 0,ui=[],Ur="",$r="",qr="",Wr=[],Qr=!1,Jr=!1,ti=0},setDateFormat:function(t){Ur=t},getDateFormat:function(){return Ur},enableInclusiveEndDates:function(){Qr=!0},endDatesAreInclusive:function(){return Qr},enableTopAxis:function(){Jr=!0},topAxisEnabled:function(){return Jr},setAxisFormat:function(t){$r=t},getAxisFormat:function(){return $r},setTodayMarker:function(t){qr=t},getTodayMarker:function(){return qr},setTitle:function(t){Vr=t},getTitle:function(){return Vr},addSection:function(t){Xr=t,Hr.push(t)},getSections:function(){return Hr},getTasks:function(){for(var t=fi(),e=0;!t&&e<10;)t=fi(),e++;return Gr=ui},addTask:function(t,e){var n={section:Xr,type:Xr,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=function(t,e){var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={};gi(n,r,Zr);for(var i=0;i<n.length;i++)n[i]=n[i].trim();switch(n.length){case 1:r.id=ci(),r.startTime={type:"prevTaskEnd",id:t},r.endTime={data:n[0]};break;case 2:r.id=ci(),r.startTime={type:"getStartDate",startData:n[0]},r.endTime={data:n[1]};break;case 3:r.id=ci(n[0]),r.startTime={type:"getStartDate",startData:n[1]},r.endTime={data:n[2]}}return r}(zr,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=zr,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,n.order=ti,ti++;var i=ui.push(n);zr=n.id,li[n.id]=i-1},findTaskById:hi,addTaskOrg:function(t,e){var n={section:Xr,type:Xr,description:t,task:t,classes:[]},r=function(t,e){var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={};gi(n,r,Zr);for(var a=0;a<n.length;a++)n[a]=n[a].trim();var o="";switch(n.length){case 1:r.id=ci(),r.startTime=t.endTime,o=n[0];break;case 2:r.id=ci(),r.startTime=ii(0,Ur,n[0]),o=n[1];break;case 3:r.id=ci(n[0]),r.startTime=ii(0,Ur,n[1]),o=n[2]}return o&&(r.endTime=oi(r.startTime,Ur,o,Qr),r.manualEndTime=i()(o,"YYYY-MM-DD",!0).isValid(),ni(r,Ur,Wr)),r}(Yr,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,Yr=n,Gr.push(n)},setExcludes:function(t){Wr=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return Wr},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"===ce().securityLevel&&void 0!==e){var r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var i=0;i<r.length;i++){var a=r[i].trim();'"'===a.charAt(0)&&'"'===a.charAt(a.length-1)&&(a=a.substr(1,a.length-2)),r[i]=a}}0===r.length&&r.push(t),void 0!==hi(t)&&pi(t,(function(){Jt.runFunc.apply(Jt,[e].concat(function(t){return function(t){if(Array.isArray(t))return jr(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return jr(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jr(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(r)))}))}}(t,e,n)})),di(t,"clickable")},setLink:function(t,e){var n=e;"loose"!==ce().securityLevel&&(n=Object(J.sanitizeUrl)(e)),t.split(",").forEach((function(t){void 0!==hi(t)&&pi(t,(function(){window.open(n,"_self")}))})),di(t,"clickable")},bindFunctions:function(t){Kr.forEach((function(e){e(t)}))},durationToDate:ai};function gi(t,e,n){for(var r=!0;r;)r=!1,n.forEach((function(n){var i=new RegExp("^\\s*"+n+"\\s*$");t[0].match(i)&&(e[n]=!0,t.shift(1),r=!0)}))}var mi=n(24),vi=n.n(mi);mi.parser.yy=yi;var bi,xi={},_i=null,ki={master:_i},wi="master",Ei="LR",Ti=0;function Ci(){return $t({length:7})}function Si(t,e){for(o.debug("Entering isfastforwardable:",t.id,e.id);t.seq<=e.seq&&t!==e&&null!=e.parent;){if(Array.isArray(e.parent))return o.debug("In merge commit:",e.parent),Si(t,xi[e.parent[0]])||Si(t,xi[e.parent[1]]);e=xi[e.parent]}return o.debug(t.id,e.id),t.id===e.id}var Ai={};function Mi(t,e,n){var r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}var Oi,Ni=function(){var t=Object.keys(xi).map((function(t){return xi[t]}));return t.forEach((function(t){o.debug(t.id)})),t.sort((function(t,e){return e.seq-t.seq})),t},Bi={setDirection:function(t){Ei=t},setOptions:function(t){o.debug("options str",t),t=(t=t&&t.trim())||"{}";try{Ai=JSON.parse(t)}catch(t){o.error("error while parsing gitGraph options",t.message)}},getOptions:function(){return Ai},commit:function(t){var e={id:Ci(),message:t,seq:Ti++,parent:null==_i?null:_i.id};_i=e,xi[e.id]=e,ki[wi]=e.id,o.debug("in pushCommit "+e.id)},branch:function(t){ki[t]=null!=_i?_i.id:null,o.debug("in createBranch")},merge:function(t){var e=xi[ki[wi]],n=xi[ki[t]];if(function(t,e){return t.seq>e.seq&&Si(e,t)}(e,n))o.debug("Already merged");else{if(Si(e,n))ki[wi]=ki[t],_i=xi[ki[wi]];else{var r={id:Ci(),message:"merged branch "+t+" into "+wi,seq:Ti++,parent:[null==_i?null:_i.id,ki[t]]};_i=r,xi[r.id]=r,ki[wi]=r.id}o.debug(ki),o.debug("in mergeBranch")}},checkout:function(t){o.debug("in checkout");var e=ki[wi=t];_i=xi[e]},reset:function(t){o.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?_i:xi[ki[e]];for(o.debug(r,n);n>0;)if(n--,!(r=xi[r.parent])){var i="Critical error - unique parent commit not found during reset";throw o.error(i),i}_i=r,ki[wi]=r.id},prettyPrint:function(){o.debug(xi),function t(e){var n=e.reduce((function(t,e){return t.seq>e.seq?t:e}),e[0]),r="";e.forEach((function(t){r+=t===n?"\t*":"\t|"}));var i,a,s,c=[r,n.id,n.seq];for(var u in ki)ki[u]===n.id&&c.push(u);if(o.debug(c.join(" ")),Array.isArray(n.parent)){var l=xi[n.parent[0]];Mi(e,n,l),e.push(xi[n.parent[1]])}else{if(null==n.parent)return;var h=xi[n.parent];Mi(e,n,h)}i=e,a=function(t){return t.id},s=Object.create(null),t(e=i.reduce((function(t,e){var n=a(e);return s[n]||(s[n]=!0,t.push(e)),t}),[]))}([Ni()[0]])},clear:function(){xi={},ki={master:_i=null},wi="master",Ti=0},getBranchesAsObjArray:function(){var t=[];for(var e in ki)t.push({name:e,commit:xi[ki[e]]});return t},getBranches:function(){return ki},getCommits:function(){return xi},getCommitsArray:Ni,getCurrentBranch:function(){return wi},getDirection:function(){return Ei},getHead:function(){return _i}},Di=n(73),Li=n.n(Di),Ii={},Ri={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},Fi={};function Pi(t,e,n,r){var i=Pt(r,u.curveBasis),a=Ri.branchColors[n%Ri.branchColors.length],o=Object(u.line)().x((function(t){return Math.round(t.x)})).y((function(t){return Math.round(t.y)})).curve(i);t.append("svg:path").attr("d",o(e)).style("stroke",a).style("stroke-width",Ri.lineStrokeWidth).style("fill","none")}function ji(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function Yi(t,e,n,r,i){o.debug("svgDrawLineForCommits: ",e,n);var a=ji(t.select("#node-"+e+" circle")),s=ji(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-s.left>Ri.nodeSpacing){var c={x:a.left-Ri.nodeSpacing,y:s.top+s.height/2};Pi(t,[c,{x:s.left+s.width,y:s.top+s.height/2}],i,"linear"),Pi(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-Ri.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-Ri.nodeSpacing/2,y:c.y},c],i)}else Pi(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-Ri.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-Ri.nodeSpacing/2,y:s.top+s.height/2},{x:s.left+s.width,y:s.top+s.height/2}],i);break;case"BT":if(s.top-a.top>Ri.nodeSpacing){var u={x:s.left+s.width/2,y:a.top+a.height+Ri.nodeSpacing};Pi(t,[u,{x:s.left+s.width/2,y:s.top}],i,"linear"),Pi(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+Ri.nodeSpacing/2},{x:s.left+s.width/2,y:u.y-Ri.nodeSpacing/2},u],i)}else Pi(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+Ri.nodeSpacing/2},{x:s.left+s.width/2,y:s.top-Ri.nodeSpacing/2},{x:s.left+s.width/2,y:s.top}],i)}}function zi(t,e){return t.select(e).node().cloneNode(!0)}function Ui(t,e,n,r){var i,a=Object.keys(Ii).length;if("string"==typeof e)do{if(i=Ii[e],o.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append((function(){return zi(t,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(r){case"LR":return"translate("+(i.seq*Ri.nodeSpacing+Ri.leftMargin)+", "+Oi*Ri.branchOffset+")";case"BT":return"translate("+(Oi*Ri.branchOffset+Ri.leftMargin)+", "+(a-i.seq)*Ri.nodeSpacing+")"}})).attr("fill",Ri.nodeFillColor).attr("stroke",Ri.nodeStrokeColor).attr("stroke-width",Ri.nodeStrokeWidth);var s=void 0;for(var c in n)if(n[c].commit===i){s=n[c];break}s&&(o.debug("found branch ",s.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(s.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===r&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&Ii[e]);Array.isArray(e)&&(o.debug("found merge commmit",e),Ui(t,e[0],n,r),Oi++,Ui(t,e[1],n,r),Oi--)}function $i(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)"string"==typeof e.parent?(Yi(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=Ii[e.parent]):Array.isArray(e.parent)&&(Yi(t,e.id,e.parent[0],n,r),Yi(t,e.id,e.parent[1],n,r+1),$i(t,Ii[e.parent[1]],n,r+1),e.lineDrawn=!0,e=Ii[e.parent[0]])}var qi,Wi=function(t){Fi=t},Vi="",Hi=!1,Gi={setMessage:function(t){o.debug("Setting message to: "+t),Vi=t},getMessage:function(){return Vi},setInfo:function(t){Hi=t},getInfo:function(){return Hi}},Xi=n(74),Zi=n.n(Xi),Ki={},Qi=function(t){Object.keys(t).forEach((function(e){Ki[e]=t[e]}))},Ji=n(75),ta=n.n(Ji),ea={},na="",ra=!1,ia={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().pie},addSection:function(t,e){void 0===ea[t]&&(ea[t]=e,o.debug("Added new section :",t))},getSections:function(){return ea},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){ea={},na="",ra=!1},setTitle:function(t){na=t},getTitle:function(){return na},setShowData:function(t){ra=t},getShowData:function(){return ra}},aa=ce(),oa=n(45),sa=n.n(oa),ca=[],ua={},la={},ha={},fa={},da={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().req},addRequirement:function(t,e){return void 0===la[t]&&(la[t]={name:t,type:e,id:ua.id,text:ua.text,risk:ua.risk,verifyMethod:ua.verifyMethod}),ua={},la[t]},getRequirements:function(){return la},setNewReqId:function(t){void 0!==ua&&(ua.id=t)},setNewReqText:function(t){void 0!==ua&&(ua.text=t)},setNewReqRisk:function(t){void 0!==ua&&(ua.risk=t)},setNewReqVerifyMethod:function(t){void 0!==ua&&(ua.verifyMethod=t)},addElement:function(t){return void 0===fa[t]&&(fa[t]={name:t,type:ha.type,docRef:ha.docRef},o.info("Added new requirement: ",t)),ha={},fa[t]},getElements:function(){return fa},setNewElementType:function(t){void 0!==ha&&(ha.type=t)},setNewElementDocRef:function(t){void 0!==ha&&(ha.docRef=t)},addRelationship:function(t,e,n){ca.push({type:t,src:e,dst:n})},getRelationships:function(){return ca},clear:function(){ca=[],ua={},la={},ha={},fa={}}},pa={CONTAINS:"contains",ARROW:"arrow"},ya=pa,ga={},ma=0,va=function(t,e){return t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",ga.rect_min_width+"px").attr("height",ga.rect_min_height+"px")},ba=function(t,e,n){var r=ga.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",r).attr("y",ga.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((function(t){0==a?i.append("tspan").attr("text-anchor","middle").attr("x",ga.rect_min_width/2).attr("dy",0).text(t):i.append("tspan").attr("text-anchor","middle").attr("x",ga.rect_min_width/2).attr("dy",.75*ga.line_height).text(t),a++}));var o=1.5*ga.rect_padding+a*ga.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",ga.rect_min_width).attr("y1",o).attr("y2",o),{titleNode:i,y:o}},xa=function(t,e,n,r){var i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",ga.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),a=0,o=[];return n.forEach((function(t){for(var e=t.length;e>30&&a<3;){var n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,o[o.length]=n,a++}if(3==a){var r=o[o.length-1];o[o.length-1]=r.substring(0,r.length-4)+"..."}else o[o.length]=t;a=0})),o.forEach((function(t){i.append("tspan").attr("x",ga.rect_padding).attr("dy",ga.line_height).text(t)})),i},_a=function(t){return t.replace(/\s/g,"").replace(/\./g,"_")},ka=function(t){if(void 0!==t)for(var e=Object.keys(t),n=0;n<e.length;n++)ga[e[n]]=t[e[n]]},wa=function(t,e){oa.parser.yy=da,oa.parser.yy.clear(),oa.parser.parse(t);var n=Object(u.select)("[id='".concat(e,"']"));!function(t,e){var n=t.append("defs").append("marker").attr("id",pa.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),n.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",pa.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d","M0,0\n L".concat(e.line_height,",").concat(e.line_height/2,"\n M").concat(e.line_height,",").concat(e.line_height/2,"\n L0,").concat(e.line_height)).attr("stroke-width",1)}(n,ga);var r,i,a,s=new Me.a.Graph({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:ga.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}})),c=da.getRequirements(),l=da.getElements(),h=da.getRelationships();r=c,i=s,a=n,Object.keys(r).forEach((function(t){var e=r[t];t=_a(t),o.info("Added new requirement: ",t);var n=a.append("g").attr("id",t),s=va(n,"req-"+t),c=[],u=ba(n,t+"_title",["<<".concat(e.type,">>"),"".concat(e.name)]);c.push(u.titleNode);var l=xa(n,t+"_body",["Id: ".concat(e.id),"Text: ".concat(e.text),"Risk: ".concat(e.risk),"Verification: ".concat(e.verifyMethod)],u.y);c.push(l);var h=s.node().getBBox();i.setNode(t,{width:h.width,height:h.height,shape:"rect",id:t})})),function(t,e,n){Object.keys(t).forEach((function(r){var i=t[r],a=_a(r),o=n.append("g").attr("id",a),s="element-"+a,c=va(o,s),u=[],l=ba(o,s+"_title",["<<Element>>","".concat(r)]);u.push(l.titleNode);var h=xa(o,s+"_body",["Type: ".concat(i.type||"Not Specified"),"Doc Ref: ".concat(i.docRef||"None")],l.y);u.push(h);var f=c.node().getBBox();e.setNode(a,{width:f.width,height:f.height,shape:"rect",id:a})}))}(l,s,n),function(t,e){t.forEach((function(t){var n=_a(t.src),r=_a(t.dst);e.setEdge(n,r,{relationship:t})}))}(h,s),Se.a.layout(s),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(n,s),h.forEach((function(t){!function(t,e,n,r){var i=n.edge(_a(e.src),_a(e.dst)),a=Object(u.line)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",a(i.points)).attr("fill","none");e.type==da.Relationships.CONTAINS?o.attr("marker-start","url("+K.getUrl(ga.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+K.getUrl(ga.arrowMarkerAbsolute)+"#"+ya.ARROW+"_line_ending)")),function(t,e,n,r){var i=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*i),o="rel"+ma;ma++;var s=t.append("text").attr("class","req relationshipLabel").attr("id",o).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();t.insert("rect","#"+o).attr("class","req reqLabelBox").attr("x",a.x-s.width/2).attr("y",a.y-s.height/2).attr("width",s.width).attr("height",s.height).attr("fill","white").attr("fill-opacity","85%")}(t,o,0,"<<".concat(e.type,">>"))}(n,t,s,e)}));var f=ga.rect_padding,d=n.node().getBBox(),p=d.width+2*f,y=d.height+2*f;Kt(n,y,p,ga.useMaxWidth),n.attr("viewBox","".concat(d.x-f," ").concat(d.y-f," ").concat(p," ").concat(y))},Ea=n(2),Ta=n.n(Ea),Ca=void 0,Sa={},Aa=[],Ma=[],Oa="",Na=!1,Ba=!1,Da=!1,La=function(t,e,n){var r=Sa[t];r&&e===r.name&&null==n||(null!=n&&null!=n.text||(n={text:e,wrap:null}),Sa[t]={name:e,description:n.text,wrap:void 0===n.wrap&&Fa()||!!n.wrap,prevActor:Ca},Ca&&Sa[Ca]&&(Sa[Ca].nextActor=t),Ca=t)},Ia=function(t){var e,n=0;for(e=0;e<Aa.length;e++)Aa[e].type===Pa.ACTIVE_START&&Aa[e].from.actor===t&&n++,Aa[e].type===Pa.ACTIVE_END&&Aa[e].from.actor===t&&n--;return n},Ra=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===Pa.ACTIVE_END){var i=Ia(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return Aa.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&Fa()||!!n.wrap,type:r}),!0},Fa=function(){return Da},Pa={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ja=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&Fa()||!!n.wrap},i=[].concat(t,t);Ma.push(r),Aa.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&Fa()||!!n.wrap,type:Pa.NOTE,placement:e})},Ya=function(t){Oa=t.text,Na=void 0===t.wrap&&Fa()||!!t.wrap},za={addActor:La,addMessage:function(t,e,n,r){Aa.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&Fa()||!!n.wrap,answer:r})},addSignal:Ra,autoWrap:Fa,setWrap:function(t){Da=t},enableSequenceNumbers:function(){Ba=!0},showSequenceNumbers:function(){return Ba},getMessages:function(){return Aa},getActors:function(){return Sa},getActor:function(t){return Sa[t]},getActorKeys:function(){return Object.keys(Sa)},getTitle:function(){return Oa},parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().sequence},getTitleWrapped:function(){return Na},clear:function(){Sa={},Aa=[]},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return o.debug("parseMessage:",n),n},LINETYPE:Pa,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:ja,setTitle:Ya,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"addActor":La(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":Ra(e.actor,void 0,void 0,e.signalType);break;case"addNote":ja(e.actor,e.placement,e.text);break;case"addMessage":Ra(e.from,e.to,e.msg,e.signalType);break;case"loopStart":Ra(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":Ra(void 0,void 0,void 0,e.signalType);break;case"rectStart":Ra(void 0,void 0,e.color,e.signalType);break;case"rectEnd":Ra(void 0,void 0,void 0,e.signalType);break;case"optStart":Ra(void 0,void 0,e.optText,e.signalType);break;case"optEnd":Ra(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":Ra(void 0,void 0,e.altText,e.signalType);break;case"altEnd":Ra(void 0,void 0,void 0,e.signalType);break;case"setTitle":Ya(e.text);break;case"parStart":case"and":Ra(void 0,void 0,e.parText,e.signalType);break;case"parEnd":Ra(void 0,void 0,void 0,e.signalType)}}},Ua=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},$a=function(t,e){var n=0,r=0,i=e.text.split(K.lineBreakRegex),a=[],o=0,s=function(){return e.y};if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle"}for(var c=0;c<i.length;c++){var u=i[c];void 0!==e.textMargin&&0===e.textMargin&&void 0!==e.fontSize&&(o=c*e.fontSize);var l=t.append("text");if(l.attr("x",e.x),l.attr("y",s()),void 0!==e.anchor&&l.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&l.style("font-family",e.fontFamily),void 0!==e.fontSize&&l.style("font-size",e.fontSize),void 0!==e.fontWeight&&l.style("font-weight",e.fontWeight),void 0!==e.fill&&l.attr("fill",e.fill),void 0!==e.class&&l.attr("class",e.class),void 0!==e.dy?l.attr("dy",e.dy):0!==o&&l.attr("dy",o),e.tspan){var h=l.append("tspan");h.attr("x",e.x),void 0!==e.fill&&h.attr("fill",e.fill),h.text(u)}else l.text(u);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(r+=(l._groups||l)[0][0].getBBox().height,n=r),a.push(l)}return a},qa=function(t,e){var n,r,i,a,o=t.append("polygon");return o.attr("points",(n=e.x)+","+(r=e.y)+" "+(n+(i=e.width))+","+r+" "+(n+i)+","+(r+(a=e.height)-7)+" "+(n+i-8.4)+","+(r+a)+" "+n+","+(r+a)),o.attr("class","labelBox"),e.y=e.y+e.height/2,$a(t,e),o},Wa=-1,Va=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},Ha=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Ga=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var u=c.actorFontSize,l=c.actorFontFamily,h=c.actorFontWeight,f=t.split(K.lineBreakRegex),d=0;d<f.length;d++){var p=d*u-u*(f.length-1)/2,y=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").style("font-size",u).style("font-weight",h).style("font-family",l);y.append("tspan").attr("x",n+a/2).attr("dy",p).text(f[d]),y.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(y,s)}}function n(t,n,i,a,o,s,c,u){var l=n.append("switch"),h=l.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,l,i,a,o,s,c,u),r(h,c)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),Xa=Ua,Za=function(t,e,n){var r=e.x+e.width/2,i=t.append("g");0===e.y&&(Wa++,i.append("line").attr("id","actor"+Wa).attr("x1",r).attr("y1",5).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var a={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0};a.x=e.x,a.y=e.y,a.fill="#eaeaea",a.width=e.width,a.height=e.height,a.class="actor",a.rx=3,a.ry=3,Ua(i,a),Ga(n)(e.description,i,a.x,a.y,a.width,a.height,{class:"actor"},n)},Ka=function(t){return t.append("g")},Qa=function(t,e,n,r,i){var a={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0},o=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=n-e.starty,Ua(o,a)},Ja=function(t,e,n,r){var i=r.boxMargin,a=r.boxTextMargin,o=r.labelBoxHeight,s=r.labelBoxWidth,c=r.messageFontFamily,u=r.messageFontSize,l=r.messageFontWeight,h=t.append("g"),f=function(t,e,n,r){return h.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};f(e.startx,e.starty,e.stopx,e.starty),f(e.stopx,e.starty,e.stopx,e.stopy),f(e.startx,e.stopy,e.stopx,e.stopy),f(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){f(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));var d={x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0};d.text=n,d.x=e.startx,d.y=e.starty,d.fontFamily=c,d.fontSize=u,d.fontWeight=l,d.anchor="middle",d.valign="middle",d.tspan=!1,d.width=s||50,d.height=o||20,d.textMargin=a,d.class="labelText",qa(h,d),(d={x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}).text=e.title,d.x=e.startx+s/2+(e.stopx-e.startx)/2,d.y=e.starty+i+a,d.anchor="middle",d.valign="middle",d.textMargin=a,d.class="loopText",d.fontFamily=c,d.fontSize=u,d.fontWeight=l,d.wrap=!0;var p=$a(h,d);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,n){if(t.message){d.text=t.message,d.x=e.startx+(e.stopx-e.startx)/2,d.y=e.sections[n].y+i+a,d.class="loopText",d.anchor="middle",d.valign="middle",d.tspan=!1,d.fontFamily=c,d.fontSize=u,d.fontWeight=l,d.wrap=e.wrap,p=$a(h,d);var r=Math.round(p.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));e.sections[n].height+=r-(i+a)}})),e.height=Math.round(e.stopy-e.starty),h},to=function(t,e){Ua(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},eo=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},no=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},ro=function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},io=function(t){var e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},ao=Va,oo=Ha;Ea.parser.yy=za;var so={},co={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(t){return t.height||0})))+(0===this.loops.length?0:this.loops.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.messages.length?0:this.messages.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.notes.length?0:this.notes.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,po(Ea.parser.yy.getConfig())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;function o(o){return function(s){a++;var c=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-c*so.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*so.boxMargin,Math.max),i.updateVal(co.data,"startx",t-c*so.boxMargin,Math.min),i.updateVal(co.data,"stopx",n+c*so.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-c*so.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*so.boxMargin,Math.max),i.updateVal(co.data,"starty",e-c*so.boxMargin,Math.min),i.updateVal(co.data,"stopy",r+c*so.boxMargin,Math.max))}}this.sequenceItems.forEach(o()),this.activations.forEach(o("activation"))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(co.data,"startx",i,Math.min),this.updateVal(co.data,"starty",o,Math.min),this.updateVal(co.data,"stopx",a,Math.max),this.updateVal(co.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e,n){var r=n[t.from.actor],i=yo(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*so.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+so.activationWidth,stopy:void 0,actor:t.from.actor,anchored:Ka(e)})},endActivation:function(t){var e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:co.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},uo=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},lo=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},ho=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},fo=function(t,e,n,r){for(var i=0,a=0,o=0;o<n.length;o++){var s=e[n[o]];s.width=s.width||so.width,s.height=Math.max(s.height||so.height,so.height),s.margin=s.margin||so.actorMargin,s.x=i+a,s.y=r,Za(t,s,so),co.insert(s.x,r,s.x+s.width,s.height),i+=s.width,a+=s.margin,co.models.addActor(s)}co.bumpVerticalPos(so.height)},po=function(t){qt(so,t),t.fontFamily&&(so.actorFontFamily=so.noteFontFamily=so.messageFontFamily=t.fontFamily),t.fontSize&&(so.actorFontSize=so.noteFontSize=so.messageFontSize=t.fontSize),t.fontWeight&&(so.actorFontWeight=so.noteFontWeight=so.messageFontWeight=t.fontWeight)},yo=function(t){return co.activations.filter((function(e){return e.actor===t}))},go=function(t,e){var n=e[t],r=yo(t);return[r.reduce((function(t,e){return Math.min(t,e.startx)}),n.x+n.width/2),r.reduce((function(t,e){return Math.max(t,e.stopx)}),n.x+n.width/2)]};function mo(t,e,n,r,i){co.bumpVerticalPos(n);var a=r;if(e.id&&e.message&&t[e.id]){var s=t[e.id].width,c=uo(so);e.message=Jt.wrapLabel("[".concat(e.message,"]"),s-2*so.wrapPadding,c),e.width=s,e.wrap=!0;var u=Jt.calculateTextDimensions(e.message,c),l=Math.max(u.height,so.labelBoxHeight);a=r+l,o.debug("".concat(l," - ").concat(e.message))}i(e),co.bumpVerticalPos(a)}var vo={bounds:co,drawActors:fo,setConf:po,draw:function(t,e){so=ce().sequence,Ea.parser.yy.clear(),Ea.parser.yy.setWrap(so.wrap),Ea.parser.parse(t+"\n"),co.init(),o.debug("C:".concat(JSON.stringify(so,null,2)));var n=Object(u.select)('[id="'.concat(e,'"]')),r=Ea.parser.yy.getActors(),i=Ea.parser.yy.getActorKeys(),a=Ea.parser.yy.getMessages(),s=Ea.parser.yy.getTitle(),c=function(t,e){var n={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){var r=t[e.to];if(e.placement===Ea.parser.yy.PLACEMENT.LEFTOF&&!r.prevActor)return;if(e.placement===Ea.parser.yy.PLACEMENT.RIGHTOF&&!r.nextActor)return;var i=void 0!==e.placement,a=!i,o=i?lo(so):uo(so),s=e.wrap?Jt.wrapLabel(e.message,so.width-2*so.wrapPadding,o):e.message,c=Jt.calculateTextDimensions(s,o).width+2*so.wrapPadding;a&&e.from===r.nextActor?n[e.to]=Math.max(n[e.to]||0,c):a&&e.from===r.prevActor?n[e.from]=Math.max(n[e.from]||0,c):a&&e.from===e.to?(n[e.from]=Math.max(n[e.from]||0,c/2),n[e.to]=Math.max(n[e.to]||0,c/2)):e.placement===Ea.parser.yy.PLACEMENT.RIGHTOF?n[e.from]=Math.max(n[e.from]||0,c):e.placement===Ea.parser.yy.PLACEMENT.LEFTOF?n[r.prevActor]=Math.max(n[r.prevActor]||0,c):e.placement===Ea.parser.yy.PLACEMENT.OVER&&(r.prevActor&&(n[r.prevActor]=Math.max(n[r.prevActor]||0,c/2)),r.nextActor&&(n[e.from]=Math.max(n[e.from]||0,c/2)))}})),o.debug("maxMessageWidthPerActor:",n),n}(r,a);so.height=function(t,e){var n=0;for(var r in Object.keys(t).forEach((function(e){var r=t[e];r.wrap&&(r.description=Jt.wrapLabel(r.description,so.width-2*so.wrapPadding,ho(so)));var i=Jt.calculateTextDimensions(r.description,ho(so));r.width=r.wrap?so.width:Math.max(so.width,i.width+2*so.wrapPadding),r.height=r.wrap?Math.max(i.height,so.height):so.height,n=Math.max(n,r.height)})),e){var i=t[r];if(i){var a=t[i.nextActor];if(a){var o=e[r]+so.actorMargin-i.width/2-a.width/2;i.margin=Math.max(o,so.actorMargin)}}}return Math.max(n,so.height)}(r,c),fo(n,r,i,0);var l=function(t,e){var n,r,i,a={},s=[];return t.forEach((function(t){switch(t.id=Jt.random({length:10}),t.type){case Ea.parser.yy.LINETYPE.LOOP_START:case Ea.parser.yy.LINETYPE.ALT_START:case Ea.parser.yy.LINETYPE.OPT_START:case Ea.parser.yy.LINETYPE.PAR_START:s.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case Ea.parser.yy.LINETYPE.ALT_ELSE:case Ea.parser.yy.LINETYPE.PAR_AND:t.message&&(n=s.pop(),a[n.id]=n,a[t.id]=n,s.push(n));break;case Ea.parser.yy.LINETYPE.LOOP_END:case Ea.parser.yy.LINETYPE.ALT_END:case Ea.parser.yy.LINETYPE.OPT_END:case Ea.parser.yy.LINETYPE.PAR_END:n=s.pop(),a[n.id]=n;break;case Ea.parser.yy.LINETYPE.ACTIVE_START:var c=e[t.from?t.from.actor:t.to.actor],u=yo(t.from?t.from.actor:t.to.actor).length,l=c.x+c.width/2+(u-1)*so.activationWidth/2,h={startx:l,stopx:l+so.activationWidth,actor:t.from.actor,enabled:!0};co.activations.push(h);break;case Ea.parser.yy.LINETYPE.ACTIVE_END:var f=co.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);delete co.activations.splice(f,1)[0]}void 0!==t.placement?(r=function(t,e){var n=e[t.from].x,r=e[t.to].x,i=t.wrap&&t.message,a=Jt.calculateTextDimensions(i?Jt.wrapLabel(t.message,so.width,lo(so)):t.message,lo(so)),s={width:i?so.width:Math.max(so.width,a.width+2*so.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===Ea.parser.yy.PLACEMENT.RIGHTOF?(s.width=i?Math.max(so.width,a.width):Math.max(e[t.from].width/2+e[t.to].width/2,a.width+2*so.noteMargin),s.startx=n+(e[t.from].width+so.actorMargin)/2):t.placement===Ea.parser.yy.PLACEMENT.LEFTOF?(s.width=i?Math.max(so.width,a.width+2*so.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,a.width+2*so.noteMargin),s.startx=n-s.width+(e[t.from].width-so.actorMargin)/2):t.to===t.from?(a=Jt.calculateTextDimensions(i?Jt.wrapLabel(t.message,Math.max(so.width,e[t.from].width),lo(so)):t.message,lo(so)),s.width=i?Math.max(so.width,e[t.from].width):Math.max(e[t.from].width,so.width,a.width+2*so.noteMargin),s.startx=n+(e[t.from].width-s.width)/2):(s.width=Math.abs(n+e[t.from].width/2-(r+e[t.to].width/2))+so.actorMargin,s.startx=n<r?n+e[t.from].width/2-so.actorMargin/2:r+e[t.to].width/2-so.actorMargin/2),i&&(s.message=Jt.wrapLabel(t.message,s.width-2*so.wrapPadding,lo(so))),o.debug("NM:[".concat(s.startx,",").concat(s.stopx,",").concat(s.starty,",").concat(s.stopy,":").concat(s.width,",").concat(s.height,"=").concat(t.message,"]")),s}(t,e),t.noteModel=r,s.forEach((function(t){(n=t).from=Math.min(n.from,r.startx),n.to=Math.max(n.to,r.startx+r.width),n.width=Math.max(n.width,Math.abs(n.from-n.to))-so.labelBoxWidth}))):(i=function(t,e){var n=!1;if([Ea.parser.yy.LINETYPE.SOLID_OPEN,Ea.parser.yy.LINETYPE.DOTTED_OPEN,Ea.parser.yy.LINETYPE.SOLID,Ea.parser.yy.LINETYPE.DOTTED,Ea.parser.yy.LINETYPE.SOLID_CROSS,Ea.parser.yy.LINETYPE.DOTTED_CROSS,Ea.parser.yy.LINETYPE.SOLID_POINT,Ea.parser.yy.LINETYPE.DOTTED_POINT].includes(t.type)&&(n=!0),!n)return{};var r=go(t.from,e),i=go(t.to,e),a=r[0]<=i[0]?1:0,o=r[0]<i[0]?0:1,s=r.concat(i),c=Math.abs(i[o]-r[a]);t.wrap&&t.message&&(t.message=Jt.wrapLabel(t.message,Math.max(c+2*so.wrapPadding,so.width),uo(so)));var u=Jt.calculateTextDimensions(t.message,uo(so));return{width:Math.max(t.wrap?0:u.width+2*so.wrapPadding,c+2*so.wrapPadding,so.width),height:0,startx:r[a],stopx:i[o],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,s),toBounds:Math.max.apply(null,s)}}(t,e),t.msgModel=i,i.startx&&i.stopx&&s.length>0&&s.forEach((function(r){if(n=r,i.startx===i.stopx){var a=e[t.from],o=e[t.to];n.from=Math.min(a.x-i.width/2,a.x-a.width/2,n.from),n.to=Math.max(o.x+i.width/2,o.x+a.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-so.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-so.labelBoxWidth})))})),co.activations=[],o.debug("Loop type widths:",a),a}(a,r);eo(n),io(n),no(n),ro(n);var h=1;a.forEach((function(t){var e,i,a;switch(t.type){case Ea.parser.yy.LINETYPE.NOTE:i=t.noteModel,function(t,e){co.bumpVerticalPos(so.boxMargin),e.height=so.boxMargin,e.starty=co.getVerticalPos();var n=oo();n.x=e.startx,n.y=e.starty,n.width=e.width||so.width,n.class="note";var r=t.append("g"),i=Xa(r,n),a=ao();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=so.noteFontFamily,a.fontSize=so.noteFontSize,a.fontWeight=so.noteFontWeight,a.anchor=so.noteAlign,a.textMargin=so.noteMargin,a.valign=so.noteAlign;var o=$a(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*so.noteMargin),e.height+=s+2*so.noteMargin,co.bumpVerticalPos(s+2*so.noteMargin),e.stopy=e.starty+s+2*so.noteMargin,e.stopx=e.startx+n.width,co.insert(e.startx,e.starty,e.stopx,e.stopy),co.models.addNote(e)}(n,i);break;case Ea.parser.yy.LINETYPE.ACTIVE_START:co.newActivation(t,n,r);break;case Ea.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=co.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),Qa(n,r,e,so,yo(t.from.actor).length),co.insert(r.startx,e-10,r.stopx,e)}(t,co.getVerticalPos());break;case Ea.parser.yy.LINETYPE.LOOP_START:mo(l,t,so.boxMargin,so.boxMargin+so.boxTextMargin,(function(t){return co.newLoop(t)}));break;case Ea.parser.yy.LINETYPE.LOOP_END:e=co.endLoop(),Ja(n,e,"loop",so),co.bumpVerticalPos(e.stopy-co.getVerticalPos()),co.models.addLoop(e);break;case Ea.parser.yy.LINETYPE.RECT_START:mo(l,t,so.boxMargin,so.boxMargin,(function(t){return co.newLoop(void 0,t.message)}));break;case Ea.parser.yy.LINETYPE.RECT_END:e=co.endLoop(),to(n,e),co.models.addLoop(e),co.bumpVerticalPos(e.stopy-co.getVerticalPos());break;case Ea.parser.yy.LINETYPE.OPT_START:mo(l,t,so.boxMargin,so.boxMargin+so.boxTextMargin,(function(t){return co.newLoop(t)}));break;case Ea.parser.yy.LINETYPE.OPT_END:e=co.endLoop(),Ja(n,e,"opt",so),co.bumpVerticalPos(e.stopy-co.getVerticalPos()),co.models.addLoop(e);break;case Ea.parser.yy.LINETYPE.ALT_START:mo(l,t,so.boxMargin,so.boxMargin+so.boxTextMargin,(function(t){return co.newLoop(t)}));break;case Ea.parser.yy.LINETYPE.ALT_ELSE:mo(l,t,so.boxMargin+so.boxTextMargin,so.boxMargin,(function(t){return co.addSectionToLoop(t)}));break;case Ea.parser.yy.LINETYPE.ALT_END:e=co.endLoop(),Ja(n,e,"alt",so),co.bumpVerticalPos(e.stopy-co.getVerticalPos()),co.models.addLoop(e);break;case Ea.parser.yy.LINETYPE.PAR_START:mo(l,t,so.boxMargin,so.boxMargin+so.boxTextMargin,(function(t){return co.newLoop(t)}));break;case Ea.parser.yy.LINETYPE.PAR_AND:mo(l,t,so.boxMargin+so.boxTextMargin,so.boxMargin,(function(t){return co.addSectionToLoop(t)}));break;case Ea.parser.yy.LINETYPE.PAR_END:e=co.endLoop(),Ja(n,e,"par",so),co.bumpVerticalPos(e.stopy-co.getVerticalPos()),co.models.addLoop(e);break;default:try{(a=t.msgModel).starty=co.getVerticalPos(),a.sequenceIndex=h,function(t,e){co.bumpVerticalPos(10);var n=e.startx,r=e.stopx,i=e.starty,a=e.message,o=e.type,s=e.sequenceIndex,c=K.splitBreaks(a).length,u=Jt.calculateTextDimensions(a,uo(so)),l=u.height/c;e.height+=l,co.bumpVerticalPos(l);var h=ao();h.x=n,h.y=i+10,h.width=r-n,h.class="messageText",h.dy="1em",h.text=a,h.fontFamily=so.messageFontFamily,h.fontSize=so.messageFontSize,h.fontWeight=so.messageFontWeight,h.anchor=so.messageAlign,h.valign=so.messageAlign,h.textMargin=so.wrapPadding,h.tspan=!1,$a(t,h);var f,d,p=u.height-10,y=u.width;if(n===r){d=co.getVerticalPos()+p,so.rightAngles?f=t.append("path").attr("d","M ".concat(n,",").concat(d," H ").concat(n+Math.max(so.width/2,y/2)," V ").concat(d+25," H ").concat(n)):(p+=so.boxMargin,d=co.getVerticalPos()+p,f=t.append("path").attr("d","M "+n+","+d+" C "+(n+60)+","+(d-10)+" "+(n+60)+","+(d+30)+" "+n+","+(d+20))),p+=30;var g=Math.max(y/2,so.width/2);co.insert(n-g,co.getVerticalPos()-10+p,r+g,co.getVerticalPos()+30+p)}else p+=so.boxMargin,d=co.getVerticalPos()+p,(f=t.append("line")).attr("x1",n),f.attr("y1",d),f.attr("x2",r),f.attr("y2",d),co.insert(n,d-10,r,d);o===Ea.parser.yy.LINETYPE.DOTTED||o===Ea.parser.yy.LINETYPE.DOTTED_CROSS||o===Ea.parser.yy.LINETYPE.DOTTED_POINT||o===Ea.parser.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var m="";so.arrowMarkerAbsolute&&(m=(m=(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),o!==Ea.parser.yy.LINETYPE.SOLID&&o!==Ea.parser.yy.LINETYPE.DOTTED||f.attr("marker-end","url("+m+"#arrowhead)"),o!==Ea.parser.yy.LINETYPE.SOLID_POINT&&o!==Ea.parser.yy.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+m+"#filled-head)"),o!==Ea.parser.yy.LINETYPE.SOLID_CROSS&&o!==Ea.parser.yy.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+m+"#crosshead)"),(za.showSequenceNumbers()||so.showSequenceNumbers)&&(f.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",d+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(s)),co.bumpVerticalPos(p),e.height+=p,e.stopy=e.starty+e.height,co.insert(e.fromBounds,e.starty,e.toBounds,e.stopy)}(n,a),co.models.addMessage(a)}catch(t){o.error("error while drawing message",t)}}[Ea.parser.yy.LINETYPE.SOLID_OPEN,Ea.parser.yy.LINETYPE.DOTTED_OPEN,Ea.parser.yy.LINETYPE.SOLID,Ea.parser.yy.LINETYPE.DOTTED,Ea.parser.yy.LINETYPE.SOLID_CROSS,Ea.parser.yy.LINETYPE.DOTTED_CROSS,Ea.parser.yy.LINETYPE.SOLID_POINT,Ea.parser.yy.LINETYPE.DOTTED_POINT].includes(t.type)&&h++})),so.mirrorActors&&(co.bumpVerticalPos(2*so.boxMargin),fo(n,r,i,co.getVerticalPos()));var f=co.getBounds().bounds;o.debug("For line height fix Querying: #"+e+" .actor-line"),Object(u.selectAll)("#"+e+" .actor-line").attr("y2",f.stopy);var d=f.stopy-f.starty+2*so.diagramMarginY;so.mirrorActors&&(d=d-so.boxMargin+so.bottomMarginAdj);var p=f.stopx-f.startx+2*so.diagramMarginX;s&&n.append("text").text(s).attr("x",(f.stopx-f.startx)/2-2*so.diagramMarginX).attr("y",-25),Kt(n,d,p,so.useMaxWidth);var y=s?40:0;n.attr("viewBox",f.startx-so.diagramMarginX+" -"+(so.diagramMarginY+y)+" "+p+" "+(d+y)),o.debug("models:",co.models)}},bo=n(22),xo=n.n(bo);function _o(t){return(_o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var ko=function(t){return JSON.parse(JSON.stringify(t))},wo=[],Eo={root:{relations:[],states:{},documents:{}}},To=Eo.root,Co=0,So=function(t,e,n,r,i){void 0===To.states[t]?To.states[t]={id:t,descriptions:[],type:e,doc:n,note:i}:(To.states[t].doc||(To.states[t].doc=n),To.states[t].type||(To.states[t].type=e)),r&&(o.info("Adding state ",t,r),"string"==typeof r&&Oo(t,r.trim()),"object"===_o(r)&&r.forEach((function(e){return Oo(t,e.trim())}))),i&&(To.states[t].note=i)},Ao=function(){To=(Eo={root:{relations:[],states:{},documents:{}}}).root,To=Eo.root,Co=0,Bo=[]},Mo=function(t,e,n){var r=t,i=e,a="default",o="default";"[*]"===t&&(r="start"+ ++Co,a="start"),"[*]"===e&&(i="end"+Co,o="end"),So(r,a),So(i,o),To.relations.push({id1:r,id2:i,title:n})},Oo=function(t,e){var n=To.states[t],r=e;":"===r[0]&&(r=r.substr(1).trim()),n.descriptions.push(r)},No=0,Bo=[],Do="TB",Lo={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().state},addState:So,clear:Ao,getState:function(t){return To.states[t]},getStates:function(){return To.states},getRelations:function(){return To.relations},getClasses:function(){return Bo},getDirection:function(){return Do},addRelation:Mo,getDividerId:function(){return"divider-id-"+ ++No},setDirection:function(t){Do=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){o.info("Documents = ",Eo)},getRootDoc:function(){return wo},setRootDoc:function(t){o.info("Setting root doc",t),wo=t},getRootDocV2:function(){return function t(e,n,r){if("relation"===n.stmt)t(e,n.state1,!0),t(e,n.state2,!1);else if("state"===n.stmt&&"[*]"===n.id&&(n.id=r?e.id+"_start":e.id+"_end",n.start=r),n.doc){var i=[],a=0,o=[];for(a=0;a<n.doc.length;a++)if("divider"===n.doc[a].type){var s=ko(n.doc[a]);s.doc=ko(o),i.push(s),o=[]}else o.push(n.doc[a]);if(i.length>0&&o.length>0){var c={stmt:"state",id:Ut(),type:"divider",doc:ko(o)};i.push(ko(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}}({id:"root"},{id:"root",doc:wo},!0),{id:"root",doc:wo}},extract:function(t){var e;e=t.doc?t.doc:t,o.info(e),Ao(),o.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&So(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&Mo(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()}},Io={};function Ro(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Fo,Po=function(t,e,n){var r,i=ce().state.padding,a=2*ce().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,u=t.append("text").attr("x",0).attr("y",ce().state.titleShift).attr("font-size",ce().state.fontSize).attr("class","state-title").text(e.id),l=u.node().getBBox().width+a,h=Math.max(l,s);h===s&&(h+=a);var f=t.node().getBBox();e.doc,r=c-i,l>s&&(r=(s-h)/2+i),Math.abs(c-f.x)<i&&l>s&&(r=c-(l-s)/2);var d=1-ce().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",d).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",f.height+ce().state.textHeight+ce().state.titleShift+1).attr("rx","0"),u.attr("x",r+i),l<=s&&u.attr("x",c+(h-a)/2-l/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",ce().state.titleShift-ce().state.textHeight-ce().state.padding).attr("width",h).attr("height",3*ce().state.textHeight).attr("rx",ce().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",ce().state.titleShift-ce().state.textHeight-ce().state.padding).attr("width",h).attr("height",f.height+3+2*ce().state.textHeight).attr("rx",ce().state.radius),t},jo=function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",ce().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o,s=t.replace(/\r\n/g,"<br/>"),c=(s=s.replace(/\n/g,"<br/>")).split(K.lineBreakRegex),u=1.25*ce().state.noteMargin,l=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return Ro(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ro(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){s=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(c);try{for(l.s();!(o=l.n()).done;){var h=o.value.trim();if(h.length>0){var f=a.append("tspan");f.text(h),0===u&&(u+=f.node().getBBox().height),i+=u,f.attr("x",0+ce().state.noteMargin),f.attr("y",0+i+1.25*ce().state.noteMargin)}}}catch(t){l.e(t)}finally{l.f()}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;return n.attr("height",a+2*ce().state.noteMargin),n.attr("width",i+2*ce().state.noteMargin),n},Yo=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",ce().state.sizeUnit).attr("cx",ce().state.padding+ce().state.sizeUnit).attr("cy",ce().state.padding+ce().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",ce().state.sizeUnit+ce().state.miniPadding).attr("cx",ce().state.padding+ce().state.sizeUnit+ce().state.miniPadding).attr("cy",ce().state.padding+ce().state.sizeUnit+ce().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",ce().state.sizeUnit).attr("cx",ce().state.padding+ce().state.sizeUnit+2).attr("cy",ce().state.padding+ce().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=ce().state.forkWidth,r=ce().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",ce().state.padding).attr("y",ce().state.padding)}(i,e),"note"===e.type&&jo(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ce().state.textHeight).attr("class","divider").attr("x2",2*ce().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*ce().state.padding).attr("y",ce().state.textHeight+2*ce().state.padding).attr("font-size",ce().state.fontSize).attr("class","state-title").text(e.id).node().getBBox();t.insert("rect",":first-child").attr("x",ce().state.padding).attr("y",ce().state.padding).attr("width",n.width+2*ce().state.padding).attr("height",n.height+2*ce().state.padding).attr("rx",ce().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&function(t,e){var n=t.append("text").attr("x",2*ce().state.padding).attr("y",ce().state.textHeight+1.3*ce().state.padding).attr("font-size",ce().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",ce().state.padding).attr("y",r+.4*ce().state.padding+ce().state.dividerMargin+ce().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(function(t,e,n){var r=t.append("tspan").attr("x",2*ce().state.padding).text(e);n||r.attr("dy",ce().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",ce().state.padding).attr("y1",ce().state.padding+r+ce().state.dividerMargin/2).attr("y2",ce().state.padding+r+ce().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),u=Math.max(c.width,n.width);s.attr("x2",u+3*ce().state.padding),t.insert("rect",":first-child").attr("x",ce().state.padding).attr("y",ce().state.padding).attr("width",u+2*ce().state.padding).attr("height",c.height+r+2*ce().state.padding).attr("rx",ce().state.radius)}(i,e);var a=i.node().getBBox();return r.width=a.width+2*ce().state.padding,r.height=a.height+2*ce().state.padding,function(t,e){Io[t]=e}(n,r),r},zo=0;bo.parser.yy=Lo;var Uo={},$o=function(t,e){Fo=ce().state,bo.parser.yy.clear(),bo.parser.parse(t),o.debug("Rendering diagram "+t);var n=Object(u.select)("[id='".concat(e,"']"));n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new Me.a.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}})),function t(e,n,r,i){var a,s=new Me.a.Graph({compound:!0,multigraph:!0}),c=!0;for(a=0;a<e.length;a++)if("relation"===e[a].stmt){c=!1;break}r?s.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:c?1:Fo.edgeLengthFactor,nodeSep:c?1:50,isMultiGraph:!0}):s.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:c?1:Fo.edgeLengthFactor,nodeSep:c?1:50,ranker:"tight-tree",isMultiGraph:!0}),s.setDefaultEdgeLabel((function(){return{}})),Lo.extract(e);for(var l=Lo.getStates(),h=Lo.getRelations(),f=Object.keys(l),d=0;d<f.length;d++){var p=l[f[d]];r&&(p.parentId=r);var y=void 0;if(p.doc){var g=n.append("g").attr("id",p.id).attr("class","stateGroup");y=t(p.doc,g,p.id,!i);var m=(g=Po(g,p,i)).node().getBBox();y.width=m.width,y.height=m.height+Fo.padding/2,Uo[p.id]={y:Fo.compositTitleSize}}else y=Yo(n,p);if(p.note){var v={descriptions:[],id:p.id+"-note",note:p.note,type:"note"},b=Yo(n,v);"left of"===p.note.position?(s.setNode(y.id+"-note",b),s.setNode(y.id,y)):(s.setNode(y.id,y),s.setNode(y.id+"-note",b)),s.setParent(y.id,y.id+"-group"),s.setParent(y.id+"-note",y.id+"-group")}else s.setNode(y.id,y)}o.debug("Count=",s.nodeCount(),s);var x=0;h.forEach((function(t){var e;x++,o.debug("Setting edge",t),s.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*Fo.fontSizeFactor:1),height:Fo.labelHeight*K.getRows(t.title).length,labelpos:"c"},"id"+x)})),Se.a.layout(s),o.debug("Graph after layout",s.nodes());var _=n.node();s.nodes().forEach((function(t){void 0!==t&&void 0!==s.node(t)?(o.warn("Node "+t+": "+JSON.stringify(s.node(t))),Object(u.select)("#"+_.id+" #"+t).attr("transform","translate("+(s.node(t).x-s.node(t).width/2)+","+(s.node(t).y+(Uo[t]?Uo[t].y:0)-s.node(t).height/2)+" )"),Object(u.select)("#"+_.id+" #"+t).attr("data-x-shift",s.node(t).x-s.node(t).width/2),document.querySelectorAll("#"+_.id+" #"+t+" .divider").forEach((function(t){var e=t.parentElement,n=0,r=0;e&&(e.parentElement&&(n=e.parentElement.getBBox().width),r=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(r)&&(r=0)),t.setAttribute("x1",0-r+8),t.setAttribute("x2",n-r-8)}))):o.debug("No Node "+t+": "+JSON.stringify(s.node(t)))}));var k=_.getBBox();s.edges().forEach((function(t){void 0!==t&&void 0!==s.edge(t)&&(o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(s.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=Object(u.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(u.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+zo).attr("class","transition"),s="";if(ce().state.arrowMarkerAbsolute&&(s=(s=(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+s+"#"+function(t){switch(t){case Lo.relationType.AGGREGATION:return"aggregation";case Lo.relationType.EXTENSION:return"extension";case Lo.relationType.COMPOSITION:return"composition";case Lo.relationType.DEPENDENCY:return"dependency"}}(Lo.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var c=t.append("g").attr("class","stateLabel"),l=Jt.calcLabelPosition(e.points),h=l.x,f=l.y,d=K.getRows(n.title),p=0,y=[],g=0,m=0,v=0;v<=d.length;v++){var b=c.append("text").attr("text-anchor","middle").text(d[v]).attr("x",h).attr("y",f+p),x=b.node().getBBox();if(g=Math.max(g,x.width),m=Math.min(m,x.x),o.info(x.x,h,f+p),0===p){var _=b.node().getBBox();p=_.height,o.info("Title height",p,f)}y.push(b)}var k=p*d.length;if(d.length>1){var w=(d.length-1)*p*.5;y.forEach((function(t,e){return t.attr("y",f+e*p-w)})),k=p*d.length}var E=c.node().getBBox();c.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-ce().state.padding/2).attr("y",f-k/2-ce().state.padding/2-3.5).attr("width",g+ce().state.padding).attr("height",k+ce().state.padding),o.info(E)}zo++}(n,s.edge(t),s.edge(t).relation))})),k=_.getBBox();var w={id:r||"root",label:r||"root",width:0,height:0};return w.width=k.width+2*Fo.padding,w.height=k.height+2*Fo.padding,o.debug("Doc rendered",w,s),w}(Lo.getRootDoc(),n,void 0,!1);var r=Fo.padding,i=n.node().getBBox(),a=i.width+2*r,s=i.height+2*r;Kt(n,s,1.75*a,Fo.useMaxWidth),n.attr("viewBox","".concat(i.x-Fo.padding," ").concat(i.y-Fo.padding," ")+a+" "+s)},qo={},Wo={},Vo=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),Wo[n.id]||(Wo[n.id]={id:n.id,shape:i,description:n.id,classes:"statediagram-state"}),n.description&&(Array.isArray(Wo[n.id].description)?(Wo[n.id].shape="rectWithTitle",Wo[n.id].description.push(n.description)):Wo[n.id].description.length>0?(Wo[n.id].shape="rectWithTitle",Wo[n.id].description===n.id?Wo[n.id].description=[n.description]:Wo[n.id].description=[Wo[n.id].description,n.description]):(Wo[n.id].shape="rect",Wo[n.id].description=n.description)),!Wo[n.id].type&&n.doc&&(o.info("Setting cluster for ",n.id,Xo(n)),Wo[n.id].type="group",Wo[n.id].dir=Xo(n),Wo[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",Wo[n.id].classes=Wo[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:Wo[n.id].shape,labelText:Wo[n.id].description,classes:Wo[n.id].classes,style:"",id:n.id,dir:Wo[n.id].dir,domId:"state-"+n.id+"-"+Ho,type:Wo[n.id].type,padding:15};if(n.note){var s={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note-"+Ho,domId:"state-"+n.id+"----note-"+Ho,type:Wo[n.id].type,padding:15},c={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:Wo[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+Ho,type:"group",padding:0};Ho++,t.setNode(n.id+"----parent",c),t.setNode(s.id,s),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(s.id,n.id+"----parent");var u=n.id,l=s.id;"left of"===n.note.position&&(u=s.id,l=n.id),t.setEdge(u,l,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(o.trace("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(o.trace("Adding nodes children "),Go(t,n,n.doc,!r))},Ho=0,Go=function(t,e,n,r){o.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)Vo(t,e,n,r);else if("relation"===n.stmt){Vo(t,e,n.state1,r),Vo(t,e,n.state2,r);var i={id:"edge"+Ho,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,Ho),Ho++}}))},Xo=function(t,e){var n=e||"TB";if(t.doc)for(var r=0;r<t.doc.length;r++){var i=t.doc[r];"dir"===i.stmt&&(n=i.value)}return n},Zo=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)qo[e[n]]=t[e[n]]};function Ko(t){return function(t){if(Array.isArray(t))return Qo(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Qo(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qo(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qo(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var Jo="",ts="",es=[],ns=[],rs=[],is=function(){for(var t=!0,e=0;e<rs.length;e++)rs[e].processed,t=t&&rs[e].processed;return t},as={parseDirective:function(t,e,n){Ds.parseDirective(this,t,e,n)},getConfig:function(){return ce().journey},clear:function(){es.length=0,ns.length=0,ts="",Jo="",rs.length=0},setTitle:function(t){Jo=t},getTitle:function(){return Jo},addSection:function(t){ts=t,es.push(t)},getSections:function(){return es},getTasks:function(){for(var t=is(),e=0;!t&&e<100;)t=is(),e++;return ns.push.apply(ns,rs),ns},addTask:function(t,e){var n=e.substr(1).split(":"),r=0,i=[];1===n.length?(r=Number(n[0]),i=[]):(r=Number(n[0]),i=n[1].split(","));var a=i.map((function(t){return t.trim()})),o={section:ts,type:ts,people:a,task:t,score:r};rs.push(o)},addTaskOrg:function(t){var e={section:ts,type:ts,description:t,task:t,classes:[]};ns.push(e)},getActors:function(){return t=[],ns.forEach((function(e){e.people&&t.push.apply(t,Ko(e.people))})),Ko(new Set(t)).sort();var t}},os=n(28),ss=n.n(os),cs=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},us=function(t,e){var n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},ls=-1,hs=function(){function t(t,e,n,i,a,o,s,c){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("font-color",c).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c,u){for(var l=c.taskFontSize,h=c.taskFontFamily,f=t.split(/<br\s*\/?>/gi),d=0;d<f.length;d++){var p=d*l-l*(f.length-1)/2,y=e.append("text").attr("x",n+a/2).attr("y",i).attr("fill",u).style("text-anchor","middle").style("font-size",l).style("font-family",h);y.append("tspan").attr("x",n+a/2).attr("dy",p).text(f[d]),y.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(y,s)}}function n(t,n,i,a,o,s,c,u){var l=n.append("switch"),h=l.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,l,i,a,o,s,c,u),r(h,c)}function r(t,e){for(var n in e)n in e&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),fs=us,ds=function(t,e,n){var r=t.append("g"),i={x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0};i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=n.width,i.height=n.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cs(r,i),hs(n)(e.text,r,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},n,e.colour)},ps=function(t,e){var n=e.text.replace(/<br\s*\/?>/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r},ys=function(t,e,n){var r,i,a,o=e.x+n.width/2,s=t.append("g");ls++,s.append("line").attr("id","task"+ls).attr("x1",o).attr("y1",e.y).attr("x2",o).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),r=s,i={cx:o,cy:300+30*(5-e.score),score:e.score},r.append("circle").attr("cx",i.cx).attr("cy",i.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),(a=r.append("g")).append("circle").attr("cx",i.cx-5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),a.append("circle").attr("cx",i.cx+5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.score>3?function(t){var e=Object(u.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+2)+")")}(a):i.score<3?function(t){var e=Object(u.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+7)+")")}(a):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",i.cx-5).attr("y1",i.cy+7).attr("x2",i.cx+5).attr("y2",i.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a);var c={x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0};c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,cs(s,c);var l=e.x+14;e.people.forEach((function(t){var n=e.actors[t].color,r={cx:l,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};us(s,r),l+=10})),hs(n)(e.task,s,c.x,c.y,c.width,c.height,{class:"task"},n,e.colour)};os.parser.yy=as;var gs={},ms=ce().journey,vs=ce().journey.leftMargin,bs={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=ce().journey,a=this,o=0;this.sequenceItems.forEach((function(s){o++;var c=a.sequenceItems.length-o+1;a.updateVal(s,"starty",e-c*i.boxMargin,Math.min),a.updateVal(s,"stopy",r+c*i.boxMargin,Math.max),a.updateVal(bs.data,"startx",t-c*i.boxMargin,Math.min),a.updateVal(bs.data,"stopx",n+c*i.boxMargin,Math.max),a.updateVal(s,"startx",t-c*i.boxMargin,Math.min),a.updateVal(s,"stopx",n+c*i.boxMargin,Math.max),a.updateVal(bs.data,"starty",e-c*i.boxMargin,Math.min),a.updateVal(bs.data,"stopy",r+c*i.boxMargin,Math.max)}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(bs.data,"startx",i,Math.min),this.updateVal(bs.data,"starty",o,Math.min),this.updateVal(bs.data,"stopx",a,Math.max),this.updateVal(bs.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},xs=ms.sectionFills,_s=ms.sectionColours,ks=function(t){Object.keys(t).forEach((function(e){ms[e]=t[e]}))},ws=function(t,e){var n=ce().journey;os.parser.yy.clear(),os.parser.parse(t+"\n"),bs.init();var r=Object(u.select)("#"+e);r.attr("xmlns:xlink","http://www.w3.org/1999/xlink"),function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")}(r);var i=os.parser.yy.getTasks(),a=os.parser.yy.getTitle(),o=os.parser.yy.getActors();for(var s in gs)delete gs[s];var c=0;o.forEach((function(t){gs[t]={color:n.actorColours[c%n.actorColours.length],position:c},c++})),function(t){var e=ce().journey,n=60;Object.keys(gs).forEach((function(r){var i=gs[r].color,a={cx:20,cy:n,r:7,fill:i,stroke:"#000",pos:gs[r].position};fs(t,a);var o={x:40,y:n+7,fill:"#666",text:r,textMargin:5|e.boxTextMargin};ps(t,o),n+=20}))}(r),bs.insert(0,0,vs,50*Object.keys(gs).length),function(t,e,n){for(var r=ce().journey,i="",a=n+(2*r.height+r.diagramMarginY),o=0,s="#CCC",c="black",u=0,l=0;l<e.length;l++){var h=e[l];if(i!==h.section){s=xs[o%xs.length],u=o%xs.length,c=_s[o%_s.length];var f={x:l*r.taskMargin+l*r.width+vs,y:50,text:h.section,fill:s,num:u,colour:c};ds(t,f,r),i=h.section,o++}var d=h.people.reduce((function(t,e){return gs[e]&&(t[e]=gs[e]),t}),{});h.x=l*r.taskMargin+l*r.width+vs,h.y=a,h.width=r.diagramMarginX,h.height=r.diagramMarginY,h.colour=c,h.fill=s,h.num=u,h.actors=d,ys(t,h,r),bs.insert(h.x,h.y,h.x+h.width+r.taskMargin,450)}}(r,i,0);var l=bs.getBounds();a&&r.append("text").text(a).attr("x",vs).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);var h=l.stopy-l.starty+2*n.diagramMarginY,f=vs+l.stopx+2*n.diagramMarginX;Kt(r,h,f,n.useMaxWidth),r.append("line").attr("x1",vs).attr("y1",4*n.height).attr("x2",f-vs-4).attr("y2",4*n.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");var d=a?70:0;r.attr("viewBox","".concat(l.startx," -25 ").concat(f," ").concat(h+d)),r.attr("preserveAspectRatio","xMinYMin meet"),r.attr("height",h+d+25)},Es={},Ts=function(t){return"g.classGroup text {\n fill: ".concat(t.nodeBorder,";\n fill: ").concat(t.classText,";\n stroke: none;\n font-family: ").concat(t.fontFamily,";\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ").concat(t.nodeBorder,";\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n}\n\ng.classGroup line {\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(t.mainBkg,";\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ").concat(t.nodeBorder,";\n font-size: 10px;\n}\n\n.relation {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n#compositionStart, .composition {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ").concat(t.lineColor," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ").concat(t.mainBkg," !important;\n stroke: ").concat(t.lineColor," !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n")},Cs=function(t){return".label {\n font-family: ".concat(t.fontFamily,";\n color: ").concat(t.nodeTextColor||t.textColor,";\n }\n .cluster-label text {\n fill: ").concat(t.titleColor,";\n }\n .cluster-label span {\n color: ").concat(t.titleColor,";\n }\n\n .label text,span {\n fill: ").concat(t.nodeTextColor||t.textColor,";\n color: ").concat(t.nodeTextColor||t.textColor,";\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n background-color: ").concat(t.edgeLabelBackground,";\n fill: ").concat(t.edgeLabelBackground,";\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ").concat(t.clusterBkg,";\n stroke: ").concat(t.clusterBorder,";\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n .cluster span {\n color: ").concat(t.titleColor,";\n }\n // .cluster div {\n // color: ").concat(t.titleColor,";\n // }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ").concat(t.fontFamily,";\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n")},Ss=function(t){return"\ndefs #statediagram-barbEnd {\n fill: ".concat(t.transitionColor,";\n stroke: ").concat(t.transitionColor,";\n }\ng.stateGroup text {\n fill: ").concat(t.nodeBorder,";\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ").concat(t.textColor,";\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ").concat(t.stateLabelColor,";\n}\n\ng.stateGroup rect {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n}\n\ng.stateGroup line {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n}\n\n.transition {\n stroke: ").concat(t.transitionColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ").concat(t.background,";\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n\n text {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(t.mainBkg,";\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ").concat(t.labelBackgroundColor,";\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ").concat(t.transitionLabelColor||t.tertiaryTextColor,";\n}\n.label div .edgeLabel {\n color: ").concat(t.transitionLabelColor||t.tertiaryTextColor,";\n}\n\n.stateLabel text {\n fill: ").concat(t.stateLabelColor,";\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ").concat(t.specialStateColor,";\n stroke: ").concat(t.specialStateColor,";\n}\n\n.node .fork-join {\n fill: ").concat(t.specialStateColor,";\n stroke: ").concat(t.specialStateColor,";\n}\n\n.node circle.state-end {\n fill: ").concat(t.innerEndBackground,";\n stroke: ").concat(t.background,";\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ").concat(t.compositeBackground||t.background,";\n // stroke: ").concat(t.background,";\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ").concat(t.stateBkg||t.mainBkg,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n stroke-width: 1px;\n}\n.node polygon {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ").concat(t.lineColor,";\n}\n\n.statediagram-cluster rect {\n fill: ").concat(t.compositeTitleBackground,";\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ").concat(t.stateLabelColor,";\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ").concat(t.stateBorder||t.nodeBorder,";\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ").concat(t.compositeBackground||t.background,";\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ").concat(t.altBackground?t.altBackground:"#efefef",";\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ").concat(t.altBackground?t.altBackground:"#efefef",";\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ").concat(t.noteBkgColor,";\n stroke: ").concat(t.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ").concat(t.noteBkgColor,";\n stroke: ").concat(t.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ").concat(t.noteTextColor,";\n}\n\n.statediagram-note .nodeLabel {\n color: ").concat(t.noteTextColor,";\n}\n.statediagram .edgeLabel {\n color: red; // ").concat(t.noteTextColor,";\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ").concat(t.lineColor,";\n stroke: ").concat(t.lineColor,";\n stroke-width: 1;\n}\n")},As={flowchart:Cs,"flowchart-v2":Cs,sequence:function(t){return".actor {\n stroke: ".concat(t.actorBorder,";\n fill: ").concat(t.actorBkg,";\n }\n\n text.actor > tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: ").concat(t.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ").concat(t.ganttFontSize,";\n // }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n // font-size: ").concat(t.ganttFontSize,";\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:Ts,"classDiagram-v2":Ts,class:Ts,stateDiagram:Ss,state:Ss,git:function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n"},info:function(){return""},pie:function(t){return"\n .pieCircle{\n stroke: ".concat(t.pieStrokeColor,";\n stroke-width : ").concat(t.pieStrokeWidth,";\n opacity : ").concat(t.pieOpacity,";\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ").concat(t.pieTitleTextSize,";\n fill: ").concat(t.pieTitleTextColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.pieSectionTextColor,";\n font-size:").concat(t.pieSectionTextSize,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.pieLegendTextColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.pieLegendTextSize,";\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n ").concat(t.faceColor?"fill: ".concat(t.faceColor):"fill: #FFF8DC",";\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n\n .actor-0 {\n ").concat(t.actor0?"fill: ".concat(t.actor0):"",";\n }\n .actor-1 {\n ").concat(t.actor1?"fill: ".concat(t.actor1):"",";\n }\n .actor-2 {\n ").concat(t.actor2?"fill: ".concat(t.actor2):"",";\n }\n .actor-3 {\n ").concat(t.actor3?"fill: ".concat(t.actor3):"",";\n }\n .actor-4 {\n ").concat(t.actor4?"fill: ".concat(t.actor4):"",";\n }\n .actor-5 {\n ").concat(t.actor5?"fill: ".concat(t.actor5):"",";\n }\n\n }\n")},requirement:function(t){return"\n\n marker {\n fill: ".concat(t.relationColor,";\n stroke: ").concat(t.relationColor,";\n }\n\n marker.cross {\n stroke: ").concat(t.lineColor,";\n }\n\n svg {\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.fontSize,";\n }\n\n .reqBox {\n fill: ").concat(t.requirementBackground,";\n fill-opacity: 100%;\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n \n .reqTitle, .reqLabel{\n fill: ").concat(t.requirementTextColor,";\n }\n .reqLabelBox {\n fill: ").concat(t.relationLabelBackground,";\n fill-opacity: 100%;\n }\n\n .req-title-line {\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n .relationshipLine {\n stroke: ").concat(t.relationColor,";\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ").concat(t.relationLabelColor,";\n }\n\n")}};function Ms(t){return(Ms="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Os={};function Ns(t){Wi(t.git),Lr(t.flowchart),Fr(t.flowchart),void 0!==t.sequenceDiagram&&vo.setConf(qt(t.sequence,t.sequenceDiagram)),vo.setConf(t.sequence),t.gantt,qe(t.class),t.state,Zo(t.state),Qi(t.class),zn(t.er),ks(t.journey),ka(t.requirement),function(t){Object.keys(t).forEach((function(e){Es[e]=t[e]}))}(t.class)}var Bs=Object.freeze({render:function(t,e,n,r){he();var i=e,a=Jt.detectInit(i);a&&le(a);var s=ce();if(e.length>s.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(u.select)(r).append("div").attr("id","d"+t).attr("style","font-family: "+s.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var c=document.getElementById(t);c&&c.remove();var l=document.querySelector("#d"+t);l&&l.remove(),Object(u.select)("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=i,i=function(t){var e=t;return(e=(e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"}))}(i);var h=Object(u.select)("#d"+t).node(),f=Jt.detectType(i,s),d=h.firstChild,p=d.firstChild,y="";if(void 0!==s.themeCSS&&(y+="\n".concat(K.sanitizeCSS(s.themeCSS))),void 0!==s.fontFamily&&(y+="\n:root { --mermaid-font-family: ".concat(s.fontFamily,"}")),void 0!==s.altFontFamily&&(y+="\n:root { --mermaid-alt-font-family: ".concat(s.altFontFamily,"}")),"flowchart"===f||"flowchart-v2"===f||"graph"===f){var g=function(t){o.info("Extracting classes"),dr.clear();try{var e=yr.a.parser;return e.yy=dr,e.parse(t),dr.getClasses()}catch(t){return}}(i),m=s.htmlLabels||s.flowchart.htmlLabels;for(var v in g)m?(y+="\n.".concat(v," > * { ").concat(g[v].styles.join(" !important; ")," !important; }"),y+="\n.".concat(v," span { ").concat(g[v].styles.join(" !important; ")," !important; }")):(y+="\n.".concat(v," path { ").concat(g[v].styles.join(" !important; ")," !important; }"),y+="\n.".concat(v," rect { ").concat(g[v].styles.join(" !important; ")," !important; }"),y+="\n.".concat(v," polygon { ").concat(g[v].styles.join(" !important; ")," !important; }"),y+="\n.".concat(v," ellipse { ").concat(g[v].styles.join(" !important; ")," !important; }"),y+="\n.".concat(v," circle { ").concat(g[v].styles.join(" !important; ")," !important; }"),g[v].textStyles&&(y+="\n.".concat(v," tspan { ").concat(g[v].textStyles.join(" !important; ")," !important; }")))}var b,x,_=(b="#".concat(t),x=function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n stroke: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(As[t](n),"\n\n ").concat(e,"\n")}(f,y,s.themeVariables),$(j("".concat(b,"{").concat(x,"}")),q)),k=document.createElement("style");k.innerHTML="#".concat(t," ")+_,d.insertBefore(k,p);try{switch(f){case"git":s.flowchart.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Wi(s.git),function(t,e,n){try{var r=Li.a.parser;r.yy=Bi,r.yy.clear(),o.debug("in gitgraph renderer",t+"\n","id:",e,n),r.parse(t+"\n"),Ri=Object.assign(Ri,Fi,Bi.getOptions()),o.debug("effective options",Ri);var i=Bi.getDirection();Ii=Bi.getCommits();var a=Bi.getBranchesAsObjArray();"BT"===i&&(Ri.nodeLabel.x=a.length*Ri.branchOffset,Ri.nodeLabel.width="100%",Ri.nodeLabel.y=-2*Ri.nodeRadius);var s=Object(u.select)('[id="'.concat(e,'"]'));for(var c in function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",Ri.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",Ri.nodeLabel.width).attr("height",Ri.nodeLabel.height).attr("x",Ri.nodeLabel.x).attr("y",Ri.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(s),Oi=1,a){var l=a[c];Ui(s,l.commit.id,a,i),$i(s,l.commit,i),Oi++}s.attr("height",(function(){return"BT"===i?Object.keys(Ii).length*Ri.nodeSpacing:(a.length+1)*Ri.branchOffset}))}catch(t){o.error("Error while rendering gitgraph"),o.error(t.message)}}(i,t,!1);break;case"flowchart":s.flowchart.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Lr(s.flowchart),Ir(i,t);break;case"flowchart-v2":s.flowchart.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Fr(s.flowchart),Pr(i,t);break;case"sequence":s.sequence.arrowMarkerAbsolute=s.arrowMarkerAbsolute,s.sequenceDiagram?(vo.setConf(Object.assign(s.sequence,s.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):vo.setConf(s.sequence),vo.draw(i,t);break;case"gantt":s.gantt.arrowMarkerAbsolute=s.arrowMarkerAbsolute,s.gantt,function(t,e){var n=ce().gantt;mi.parser.yy.clear(),mi.parser.parse(t);var r=document.getElementById(e);void 0===(bi=r.parentElement.offsetWidth)&&(bi=1200),void 0!==n.useWidth&&(bi=n.useWidth);var i=mi.parser.yy.getTasks(),a=i.length*(n.barHeight+n.barGap)+2*n.topPadding;r.setAttribute("viewBox","0 0 "+bi+" "+a);for(var o=Object(u.select)('[id="'.concat(e,'"]')),s=Object(u.scaleTime)().domain([Object(u.min)(i,(function(t){return t.startTime})),Object(u.max)(i,(function(t){return t.endTime}))]).rangeRound([0,bi-n.leftPadding-n.rightPadding]),c=[],l=0;l<i.length;l++)c.push(i[l].type);var h=c;function f(t){for(var e=t.length,n={};e;)n[t[--e]]=(n[t[e]]||0)+1;return n}c=function(t){for(var e={},n=[],r=0,i=t.length;r<i;++r)e.hasOwnProperty(t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(c),i.sort((function(t,e){var n=t.startTime,r=e.startTime,i=0;return n>r?i=1:n<r&&(i=-1),i})),function(t,e,r){var i=n.barHeight,a=i+n.barGap,l=n.topPadding,d=n.leftPadding;Object(u.scaleLinear)().domain([0,c.length]).range(["#00B9FA","#F95002"]).interpolate(u.interpolateHcl),function(t,e,r,i){var a=Object(u.axisBottom)(s).tickSize(-i+e+n.gridLineStartPadding).tickFormat(Object(u.timeFormat)(mi.parser.yy.getAxisFormat()||n.axisFormat||"%Y-%m-%d"));if(o.append("g").attr("class","grid").attr("transform","translate("+t+", "+(i-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),yi.topAxisEnabled()||n.topAxis){var c=Object(u.axisTop)(s).tickSize(-i+e+n.gridLineStartPadding).tickFormat(Object(u.timeFormat)(mi.parser.yy.getAxisFormat()||n.axisFormat||"%Y-%m-%d"));o.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(c).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(d,l,0,r),function(t,e,r,i,a,u,l){o.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",(function(t,n){return t.order*e+r-2})).attr("width",(function(){return l-n.rightPadding/2})).attr("height",e).attr("class",(function(t){for(var e=0;e<c.length;e++)if(t.type===c[e])return"section section"+e%n.numberSectionStyles;return"section section0"}));var h=o.append("g").selectAll("rect").data(t).enter();h.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?s(t.startTime)+i+.5*(s(t.endTime)-s(t.startTime))-.5*a:s(t.startTime)+i})).attr("y",(function(t,n){return t.order*e+r})).attr("width",(function(t){return t.milestone?a:s(t.renderEndTime||t.endTime)-s(t.startTime)})).attr("height",a).attr("transform-origin",(function(t,n){return n=t.order,(s(t.startTime)+i+.5*(s(t.endTime)-s(t.startTime))).toString()+"px "+(n*e+r+.5*a).toString()+"px"})).attr("class",(function(t){var e="";t.classes.length>0&&(e=t.classes.join(" "));for(var r=0,i=0;i<c.length;i++)t.type===c[i]&&(r=i%n.numberSectionStyles);var a="";return t.active?t.crit?a+=" activeCrit":a=" active":t.done?a=t.crit?" doneCrit":" done":t.crit&&(a+=" crit"),0===a.length&&(a=" task"),t.milestone&&(a=" milestone "+a),"task"+(a+=r)+" "+e})),h.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",n.fontSize).attr("x",(function(t){var e=s(t.startTime),r=s(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(s(t.endTime)-s(t.startTime))-.5*a),t.milestone&&(r=e+a);var o=this.getBBox().width;return o>r-e?r+o+1.5*n.leftPadding>l?e+i-5:r+i+5:(r-e)/2+e+i})).attr("y",(function(t,i){return t.order*e+n.barHeight/2+(n.fontSize/2-2)+r})).attr("text-height",a).attr("class",(function(t){var e=s(t.startTime),r=s(t.endTime);t.milestone&&(r=e+a);var i=this.getBBox().width,o="";t.classes.length>0&&(o=t.classes.join(" "));for(var u=0,h=0;h<c.length;h++)t.type===c[h]&&(u=h%n.numberSectionStyles);var f="";return t.active&&(f=t.crit?"activeCritText"+u:"activeText"+u),t.done?f=t.crit?f+" doneCritText"+u:f+" doneText"+u:t.crit&&(f=f+" critText"+u),t.milestone&&(f+=" milestoneText"),i>r-e?r+i+1.5*n.leftPadding>l?o+" taskTextOutsideLeft taskTextOutside"+u+" "+f:o+" taskTextOutsideRight taskTextOutside"+u+" "+f+" width-"+i:o+" taskText taskText"+u+" "+f+" width-"+i}))}(t,a,l,d,i,0,e),function(t,e){for(var r=[],i=0,a=0;a<c.length;a++)r[a]=[c[a],(s=c[a],u=h,f(u)[s]||0)];var s,u;o.append("g").selectAll("text").data(r).enter().append((function(t){var e=t[0].split(K.lineBreakRegex),n=-(e.length-1)/2,r=document.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("dy",n+"em");for(var i=0;i<e.length;i++){var a=document.createElementNS("http://www.w3.org/2000/svg","tspan");a.setAttribute("alignment-baseline","central"),a.setAttribute("x","10"),i>0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(n,a){if(!(a>0))return n[1]*t/2+e;for(var o=0;o<a;o++)return i+=r[a-1][1],n[1]*t/2+i*t+e})).attr("font-size",n.sectionFontSize).attr("font-size",n.sectionFontSize).attr("class",(function(t){for(var e=0;e<c.length;e++)if(t[0]===c[e])return"sectionTitle sectionTitle"+e%n.numberSectionStyles;return"sectionTitle"}))}(a,l),function(t,e,r,i){var a=yi.getTodayMarker();if("off"!==a){var c=o.append("g").attr("class","today"),u=new Date,l=c.append("line");l.attr("x1",s(u)+t).attr("x2",s(u)+t).attr("y1",n.titleTopMargin).attr("y2",i-n.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}}(d,0,0,r)}(i,bi,a),Kt(o,a,bi,n.useMaxWidth),o.append("text").text(mi.parser.yy.getTitle()).attr("x",bi/2).attr("y",n.titleTopMargin).attr("class","titleText")}(i,t);break;case"class":s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,qe(s.class),We(i,t);break;case"classDiagram":s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,function(t){Object.keys(t).forEach((function(e){Sn[e]=t[e]}))}(s.class),function(t,e){o.info("Drawing class"),Te.clear(),Oe.parser.parse(t);var n=ce().flowchart;o.info("config:",n);var r=n.nodeSpacing||50,i=n.rankSpacing||50,a=new Me.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:r,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),s=Te.getClasses(),c=Te.getRelations();o.info(c),function(t,e){var n=Object.keys(t);o.info("keys:",n),o.info(t),n.forEach((function(n){var r=t[n],i="";r.cssClasses.length>0&&(i=i+" "+r.cssClasses.join(" "));var a={labelStyle:""},s=void 0!==r.text?r.text:r.id,c="";switch(r.type){case"class":c="class_box";break;default:c="class_box"}e.setNode(r.id,{labelStyle:a.labelStyle,shape:c,labelText:s,classData:r,rx:0,ry:0,class:i,style:a.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:ce().flowchart.padding}),o.info("setNode",{labelStyle:a.labelStyle,shape:c,labelText:s,rx:0,ry:0,class:i,style:a.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:ce().flowchart.padding})}))}(s,a),function(t,e){var n=0;t.forEach((function(r){n++;var i={classes:"relation"};i.pattern=1==r.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===r.type?i.arrowhead="none":i.arrowhead="normal",o.info(i,r),i.startLabelRight="none"===r.relationTitle1?"":r.relationTitle1,i.endLabelLeft="none"===r.relationTitle2?"":r.relationTitle2,i.arrowTypeStart=An(r.relation.type1),i.arrowTypeEnd=An(r.relation.type2);var a="",s="";if(void 0!==r.style){var c=Yt(r.style);a=c.style,s=c.labelStyle}else a="fill:none";i.style=a,i.labelStyle=s,void 0!==r.interpolate?i.curve=Pt(r.interpolate,u.curveLinear):void 0!==t.defaultInterpolate?i.curve=Pt(t.defaultInterpolate,u.curveLinear):i.curve=Pt(Sn.curve,u.curveLinear),r.text=r.title,void 0===r.text?void 0!==r.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",ce().flowchart.htmlLabels,i.labelType="text",i.label=r.text.replace(K.lineBreakRegex,"\n"),void 0===r.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),e.setEdge(r.id1,r.id2,i,n)}))}(c,a);var l=Object(u.select)('[id="'.concat(e,'"]'));l.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var h=Object(u.select)("#"+e+" g");Cn(h,a,["aggregation","extension","composition","dependency"],"classDiagram",e);var f=l.node().getBBox(),d=f.width+16,p=f.height+16;if(o.debug("new ViewBox 0 0 ".concat(d," ").concat(p),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),Kt(l,p,d,n.useMaxWidth),l.attr("viewBox","0 0 ".concat(d," ").concat(p)),l.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-f.y,")")),!n.htmlLabels)for(var y=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),g=0;g<y.length;g++){var m=y[g],v=m.getBBox(),b=document.createElementNS("http://www.w3.org/2000/svg","rect");b.setAttribute("rx",0),b.setAttribute("ry",0),b.setAttribute("width",v.width),b.setAttribute("height",v.height),b.setAttribute("style","fill:#e8e8e8;"),m.insertBefore(b,m.firstChild)}}(i,t);break;case"state":s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,s.state,$o(i,t);break;case"stateDiagram":s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Zo(s.state),function(t,e){o.info("Drawing state diagram (v2)",e),Lo.clear(),Wo={};var n=xo.a.parser;n.yy=Lo,n.parse(t);var r=Lo.getDirection();void 0===r&&(r="LR");var i=ce().state,a=i.nodeSpacing||50,s=i.rankSpacing||50;o.info(Lo.getRootDocV2()),Lo.extract(Lo.getRootDocV2()),o.info(Lo.getRootDocV2());var c=new Me.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:Xo(Lo.getRootDocV2()),nodesep:a,ranksep:s,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));Vo(c,void 0,Lo.getRootDocV2(),!0);var l=Object(u.select)('[id="'.concat(e,'"]')),h=Object(u.select)("#"+e+" g");Cn(h,c,["barb"],"statediagram",e);var f=l.node().getBBox(),d=f.width+16,p=f.height+16;l.attr("class","statediagram");var y=l.node().getBBox();Kt(l,p,1.75*d,i.useMaxWidth);var g="".concat(y.x-8," ").concat(y.y-8," ").concat(d," ").concat(p);o.debug("viewBox ".concat(g)),l.attr("viewBox",g);for(var m=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),v=0;v<m.length;v++){var b=m[v],x=b.getBBox(),_=document.createElementNS("http://www.w3.org/2000/svg","rect");_.setAttribute("rx",0),_.setAttribute("ry",0),_.setAttribute("width",x.width),_.setAttribute("height",x.height),b.insertBefore(_,b.firstChild)}}(i,t);break;case"info":s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,Qi(s.class),function(t,e,n){try{var r=Zi.a.parser;r.yy=Gi,o.debug("Renering info diagram\n"+t),r.parse(t),o.debug("Parsed info diagram");var i=Object(u.select)("#"+e);i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),i.attr("height",100),i.attr("width",400)}catch(t){o.error("Error while rendering info diagram"),o.error(t.message)}}(i,t,Q.version);break;case"pie":!function(t,e){try{aa=ce();var n=ta.a.parser;n.yy=ia,o.debug("Rendering info diagram\n"+t),n.yy.clear(),n.parse(t),o.debug("Parsed info diagram");var r=document.getElementById(e);void 0===(qi=r.parentElement.offsetWidth)&&(qi=1200),void 0!==aa.useWidth&&(qi=aa.useWidth),void 0!==aa.pie.useWidth&&(qi=aa.pie.useWidth);var i=Object(u.select)("#"+e);Kt(i,450,qi,aa.pie.useMaxWidth),r.setAttribute("viewBox","0 0 "+qi+" 450");var a=Math.min(qi,450)/2-40,s=i.append("g").attr("transform","translate("+qi/2+",225)"),c=ia.getSections(),l=0;Object.keys(c).forEach((function(t){l+=c[t]}));var h=aa.themeVariables,f=[h.pie1,h.pie2,h.pie3,h.pie4,h.pie5,h.pie6,h.pie7,h.pie8,h.pie9,h.pie10,h.pie11,h.pie12],d=Object(u.scaleOrdinal)().domain(c).range(f),p=Object(u.pie)().value((function(t){return t.value}))(Object(u.entries)(c)),y=Object(u.arc)().innerRadius(0).outerRadius(a);s.selectAll("mySlices").data(p).enter().append("path").attr("d",y).attr("fill",(function(t){return d(t.data.key)})).attr("class","pieCircle"),s.selectAll("mySlices").data(p.filter((function(t){return 0!==t.data.value}))).enter().append("text").text((function(t){return(t.data.value/l*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+y.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),s.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var g=s.selectAll(".legend").data(d.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*d.domain().length/2)+")"}));g.append("rect").attr("width",18).attr("height",18).style("fill",d).style("stroke",d),g.data(p.filter((function(t){return 0!==t.data.value}))).append("text").attr("x",22).attr("y",14).text((function(t){return n.yy.getShowData()||aa.showData||aa.pie.showData?t.data.key+" ["+t.data.value+"]":t.data.key}))}catch(t){o.error("Error while rendering info diagram"),o.error(t)}}(i,t,Q.version);break;case"er":zn(s.er),Un(i,t,Q.version);break;case"journey":ks(s.journey),ws(i,t,Q.version);break;case"requirement":ka(s.requirement),wa(i,t,Q.version)}}catch(e){throw function(t,e){try{o.debug("Renering svg for syntax error\n");var n=Object(u.select)("#"+t),r=n.append("g");r.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),r.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),r.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),r.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),r.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),r.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),r.append("text").attr("class","error-text").attr("x",1240).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),r.append("text").attr("class","error-text").attr("x",1050).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+e),n.attr("height",100),n.attr("width",400),n.attr("viewBox","768 0 512 512")}catch(t){o.error("Error while rendering info diagram"),o.error(t.message)}}(t,Q.version),e}Object(u.select)('[id="'.concat(t,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var w=Object(u.select)("#d"+t).node().innerHTML;if(o.debug("cnf.arrowMarkerAbsolute",s.arrowMarkerAbsolute),s.arrowMarkerAbsolute&&"false"!==s.arrowMarkerAbsolute||(w=w.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),w=(w=function(t){var e=t;return(e=(e=e.replace(/fl°°/g,(function(){return"&#"}))).replace(/fl°/g,(function(){return"&"}))).replace(/¶ß/g,(function(){return";"}))}(w)).replace(/<br>/g,"<br/>"),void 0!==n)switch(f){case"flowchart":case"flowchart-v2":n(w,dr.bindFunctions);break;case"gantt":n(w,yi.bindFunctions);break;case"class":case"classDiagram":n(w,Te.bindFunctions);break;default:n(w)}else o.debug("CB = undefined!");var E=Object(u.select)("#d"+t).node();return null!==E&&"function"==typeof E.remove&&Object(u.select)("#d"+t).node().remove(),w},parse:function(t){var e=ce(),n=Jt.detectInit(t,e);n&&o.debug("reinit ",n);var r,i=Jt.detectType(t,e);switch(o.debug("Type "+i),i){case"git":(r=Li.a).parser.yy=Bi;break;case"flowchart":case"flowchart-v2":dr.clear(),(r=yr.a).parser.yy=dr;break;case"sequence":(r=Ta.a).parser.yy=za;break;case"gantt":(r=vi.a).parser.yy=yi;break;case"class":case"classDiagram":(r=Ne.a).parser.yy=Te;break;case"state":case"stateDiagram":(r=xo.a).parser.yy=Lo;break;case"info":o.debug("info info info"),(r=Zi.a).parser.yy=Gi;break;case"pie":o.debug("pie"),(r=ta.a).parser.yy=ia;break;case"er":o.debug("er"),(r=In.a).parser.yy=Dn;break;case"journey":o.debug("Journey"),(r=ss.a).parser.yy=as;break;case"requirement":case"requirementDiagram":o.debug("RequirementDiagram"),(r=sa.a).parser.yy=da}return r.parser.yy.graphType=i,r.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},r.parse(t),r},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Os={};break;case"type_directive":Os.type=e.toLowerCase();break;case"arg_directive":Os.args=JSON.parse(e);break;case"close_directive":(function(t,e,n){switch(o.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),o.debug("sanitize in handleDirective",e.args),Qt(e.args),o.debug("sanitize in handleDirective (done)",e.args),e.args,le(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;default:o.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}})(t,Os,r),Os=null}}catch(t){o.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),o.error(t.message)}},initialize:function(t){t&&t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),ee=qt({},t),t&&t.theme&&mt[t.theme]?t.themeVariables=mt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=mt.default.getThemeVariables(t.themeVariables));var e="object"===Ms(t)?function(t){return re=qt({},ne),re=qt(re,t),t.theme&&(re.themeVariables=mt[t.theme].getThemeVariables(t.themeVariables)),ae=oe(re,ie),re}(t):se();Ns(e),s(e.logLevel)},reinitialize:function(){},getConfig:ce,setConfig:function(t){return qt(ae,t),ce()},getSiteConfig:se,updateSiteConfig:function(t){return re=qt(re,t),oe(re,ie),re},reset:function(){he()},globalReset:function(){he(),Ns(ce())},defaultConfig:ne});s(ce().logLevel),he(ce());var Ds=Bs,Ls=function(){Is.startOnLoad?Ds.getConfig().startOnLoad&&Is.init():void 0===Is.startOnLoad&&(o.debug("In start, no config"),Ds.getConfig().startOnLoad&&Is.init())};"undefined"!=typeof document&& +/*! + * Wait for document loaded before starting the execution + */ +window.addEventListener("load",(function(){Ls()}),!1);var Is={startOnLoad:!0,htmlLabels:!0,mermaidAPI:Ds,parse:Ds.parse,render:Ds.render,init:function(){var t,e,n=this,r=Ds.getConfig();arguments.length>=2?( +/*! sequence config was passed as #1 */ +void 0!==arguments[0]&&(Is.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],o.debug("Callback function found")):void 0!==r.mermaid&&("function"==typeof r.mermaid.callback?(e=r.mermaid.callback,o.debug("Callback function found")):o.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,o.debug("Start On Load before: "+Is.startOnLoad),void 0!==Is.startOnLoad&&(o.debug("Start On Load inner: "+Is.startOnLoad),Ds.updateSiteConfig({startOnLoad:Is.startOnLoad})),void 0!==Is.ganttConfig&&Ds.updateSiteConfig({gantt:Is.ganttConfig});for(var i,a=new Jt.initIdGeneratior(r.deterministicIds,r.deterministicIDSeed),s=function(r){var s=t[r]; +/*! Check if previously processed */if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var c="mermaid-".concat(a.next());i=s.innerHTML,i=Jt.entityDecode(i).trim().replace(/<br\s*\/?>/gi,"<br/>");var u=Jt.detectInit(i);u&&o.debug("Detected early reinit: ",u);try{Ds.render(c,i,(function(t,n){s.innerHTML=t,void 0!==e&&e(c),n&&n(s)}),s)}catch(t){o.warn("Syntax Error rendering"),o.warn(t),n.parseError&&n.parseError(t)}},c=0;c<t.length;c++)s(c)},initialize:function(t){void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(Is.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(Is.htmlLabels="false"!==t.mermaid.htmlLabels&&!1!==t.mermaid.htmlLabels)),Ds.initialize(t)},contentLoaded:Ls};e.default=Is}]).default}}]); \ No newline at end of file diff --git a/assets/js/6.470366e6.js b/assets/js/6.470366e6.js new file mode 100644 index 00000000..5e80493a --- /dev/null +++ b/assets/js/6.470366e6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{408:function(t,e,s){},409:function(t,e,s){},413:function(t,e,s){"use strict";s(408)},414:function(t,e,s){"use strict";s(409)},416:function(t,e,s){"use strict";var a=s(407),i={name:"PostDetails",props:{author:{type:String,required:!0},posted:{type:String,required:!0},updated:{required:!0},numberOfCommits:{required:!0}},methods:{formatDate:a.b}},n=(s(413),s(18)),o=Object(n.a)(i,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"post-details"},[s("span",{staticClass:"author"},[t._v(" By: "+t._s(t.author)+" ")]),t._v(" "),s("div",{staticClass:"posted-updated-wrapper"},[s("span",{staticClass:"posted-wrapper"},[s("span",{staticClass:"bullet"},[t._v("•")]),s("span",{staticClass:"posted"},[t._v("Posted: "+t._s(t.formatDate(t.posted)))])]),t._v(" "),t.numberOfCommits>1?s("span",{staticClass:"updated-wrapper"},[s("span",{staticClass:"bullet"},[t._v("•")]),s("span",{staticClass:"updated"},[t._v("Updated: "+t._s(t.formatDate(t.updated)))])]):t._e()])])}),[],!1,null,"652ba438",null);e.a=o.exports},417:function(t,e,s){"use strict";var a={name:"PaginationButtons",props:{prevButton:{type:Boolean,required:!1,default:!1}}},i=(s(414),s(18)),n=Object(i.a)(a,(function(){var t=this.$createElement,e=this._self._c||t;return this.prevButton?e("div",[e("vp-icon",{staticClass:"left-arrow",attrs:{name:"leftArrow"}}),this._v("Prev\n")],1):e("div",[this._v("\n Next"),e("vp-icon",{staticClass:"right-arrow",attrs:{name:"rightArrow"}})],1)}),[],!1,null,"547f8e12",null);e.a=n.exports},433:function(t,e,s){},482:function(t,e,s){"use strict";s(433)},523:function(t,e,s){"use strict";s.r(e);s(204),s(205);var a=s(415),i=s(416),n=s(417),o=s(406),r={topicHeaders:{LeetCode:{description:"Solutions for LeetCode Problems",descriptionEmoji:"Enjoy!!! 🍌🐒"},"Node.js":{description:"Node.js Tutorials",descriptionEmoji:"Enjoy!!! 🍌🐒"},"Raspberry-Pi":{description:"Raspberry Pi Tutorials",descriptionEmoji:"Enjoy!!! 🍌🐒"},VuePress:{description:"VuePress Tutorials",descriptionEmoji:"Enjoy!!! 🍌🐒"}}},p={name:"IndexPost",components:{Layout:a.default,PostDetails:i.a,PaginationButtons:n.a,VLazyImage:o.a},data:function(){return{topicHeaders:r.topicHeaders}},computed:{allPosts:function(){return this.$route.path.includes("/posts/")}},watch:{$route:{immediate:!0,handler:function(){"undefined"!=typeof window&&(this.$route.path.includes("/topics/")?sessionStorage.setItem("allPosts","false"):sessionStorage.setItem("allPosts","true"))}}}},c=(s(482),s(18)),u=Object(c.a)(p,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("Layout",{scopedSlots:t._u([{key:"page-top",fn:function(){return[s("div",{staticClass:"theme-default-content"},[t.allPosts?s("h1",[t._v("\n The Scribblings of a\n "),s("div",{staticClass:"emoji-wrap"},[t._v("Monkey!!! 📝🐒")])]):s("h1",[t._v("\n "+t._s(t.topicHeaders[t.$pagination.pages[0].frontmatter.topic].description)+"\n "),s("div",{staticClass:"emoji-wrap"},[t._v("\n "+t._s(t.topicHeaders[t.$pagination.pages[0].frontmatter.topic].descriptionEmoji)+"\n ")])]),t._v(" "),t._l(t.$pagination.pages,(function(e){return s("div",{key:e.key,staticClass:"post-card",on:{click:function(s){t.$router.push(""+e.path).catch((function(e){"NavigationDuplicated"===e.name||e.message.includes("Avoided redundant navigation to current location")||t.console.log(e)}))}}},[s("div",{staticClass:"post-title-and-summary"},[s("div",{staticClass:"title-wrapper"},[s("h2",{staticClass:"title"},[t._v("\n "+t._s(e.title)+"\n ")])]),t._v(" "),s("PostDetails",{attrs:{author:e.frontmatter.author,posted:e.frontmatter.date,updated:e.lastUpdated,numberOfCommits:e.numberOfCommits}}),t._v(" "),s("p",{staticClass:"preview"},[t._v("\n "+t._s(e.frontmatter.preview)+"\n ")])],1),t._v(" "),s("div",{staticClass:"post-pic"},[s("v-lazy-image",{attrs:{src:t.$withBase("/images/"+e.frontmatter.img),"src-placeholder":t.$withBase("/images/"+e.frontmatter.placeholder),alt:e.frontmatter.alt||"Post Picture"}})],1)])})),t._v(" "),s("div",{staticClass:"pagination"},[s("div",[t.$pagination.hasPrev?s("router-link",{attrs:{to:t.$pagination.prevLink}},[s("PaginationButtons",{attrs:{prevButton:!0}})],1):t._e()],1),t._v(" "),s("div",[t.$pagination.hasNext?s("router-link",{attrs:{to:t.$pagination.nextLink}},[s("PaginationButtons")],1):t._e()],1)])],2)]},proxy:!0}])})}),[],!1,null,"2e2f5dca",null);e.default=u.exports}}]); \ No newline at end of file diff --git a/assets/js/7.decbbed9.js b/assets/js/7.decbbed9.js new file mode 100644 index 00000000..ba6ac625 --- /dev/null +++ b/assets/js/7.decbbed9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{406:function(t,s,a){"use strict";a.d(s,"a",(function(){return e}));const e={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let s=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,s]:[s]):s},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},438:function(t,s,a){},497:function(t,s,a){"use strict";a(438)},529:function(t,s,a){"use strict";a.r(s);var e={components:{VLazyImage:a(406).a}},n=(a(497),a(18)),r=Object(n.a)(e,(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-18-indexpost-images"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-18-indexpost-images"}},[t._v("#")]),t._v(" VuePress Tutorial 18 - IndexPost Images")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("In this tutorial we're going to continue the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component by using the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination")]),t._v(" variable to access "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data related to images. To display the data on the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages we'll be updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component's "),a("code",{staticClass:"inline-code-block"},[t._v("template")]),t._v(" tag like we did in the previous tutorial.")]),t._v(" "),a("p",[t._v("Make sure you start the local development server which should be running at "),a("a",{attrs:{href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/"),a("OutboundLink")],1),t._v(" to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.")]),t._v(" "),a("p",[t._v("Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-18")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-18",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"adding-post-images"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-post-images"}},[t._v("#")]),t._v(" Adding Post Images")]),t._v(" "),a("p",[t._v("Before we can access the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" data related to images, we need to first add the images that we'll be displaying in the list of post pages. We're going to be adding three post images to the blog one for each post.")]),t._v(" "),a("p",[t._v("Each post image has a "),a("code",{staticClass:"inline-code-block"},[t._v("width")]),t._v(" of "),a("code",{staticClass:"inline-code-block"},[t._v("155px")]),t._v(" and a "),a("code",{staticClass:"inline-code-block"},[t._v("height")]),t._v(" of "),a("code",{staticClass:"inline-code-block"},[t._v("185px")]),t._v(". Using the same "),a("code",{staticClass:"inline-code-block"},[t._v("width")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("height")]),t._v(" for the post images makes the list of post pages look consistent.")]),t._v(" "),a("p",[t._v("You can download all of the images below from your browser, and they're also available in the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-18")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-18",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("p",[t._v("The images were created using "),a("a",{attrs:{href:"https://www.canva.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Canva"),a("OutboundLink")],1),t._v(". The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is "),a("a",{attrs:{href:"https://www.gimp.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GIMP"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("Here are some other useful online image tools:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www5.lunapic.com/editor/",target:"_blank",rel:"noopener noreferrer"}},[t._v("LunaPic"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://htmlcsstoimage.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("HCTI API"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://photoscissors.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhotoScissors"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://www.iloveimg.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("iLoveIMG"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. "),a("a",{attrs:{href:"https://www.canva.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Canva"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://www.gimp.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("GIMP"),a("OutboundLink")],1),t._v(", and some of the other image tools mentioned above offer the ability to compress your images.")]),t._v(" "),a("p",[t._v("Here are some other useful online tools for image compression:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://tinypng.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("TinyPNG"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://imagecompressor.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Image Compressor"),a("OutboundLink")],1)])])]),t._v(" "),a("h3",{attrs:{id:"adding-an-examples-directory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-an-examples-directory"}},[t._v("#")]),t._v(" Adding an Examples Directory")]),t._v(" "),a("p",[t._v("Let's start by creating an "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("images")]),t._v(" directory. The "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory will be used to store the post images for each example post.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("docs")]),t._v("\n│ ├── "),a("code",[t._v(".vuepress")]),t._v("\n│ │ ├── "),a("code",[t._v("public")]),t._v("\n│ │ │ ├── "),a("code",[t._v("images")]),t._v("\n│ │ │ │ ├── "),a("code",[t._v("code-monkeys-logos")]),t._v("\n│ │ │ │ └── "),a("code",[t._v("examples")]),t._v("\n│ │ ├── "),a("code",[t._v("theme")]),t._v("\n│ │ └── config.js")]),t._v("\n")])]),a("h3",{attrs:{id:"example-post-1"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-post-1"}},[t._v("#")]),t._v(" Example Post 1")]),t._v(" "),a("p",[t._v("After adding the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory, we're now ready to add the post images for each example post. We'll be creating a directory for each example post inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the post images to the directories of each example post.")]),t._v(" "),a("p",[t._v("We're going to start with the first example post by adding an "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-1")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the image for the first example post which is named "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-1.png")]),t._v(" inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-1")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("examples")]),t._v("\n│ ├── "),a("code",[t._v("example-post-1")]),t._v("\n│ │ └── example-post-1.png")]),t._v("\n")])]),a("p",[t._v("Here's the example post 1 image:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-1-155w.png"),"src-placeholder":t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-1-90w.png"),alt:"Example Post 1 Image"}})],1),t._v(" "),a("h3",{attrs:{id:"example-post-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-post-2"}},[t._v("#")]),t._v(" Example Post 2")]),t._v(" "),a("p",[t._v("For the second example post we'll be adding an "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-2")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the image for the second example post which is named "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-2.png")]),t._v(" inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-2")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("examples")]),t._v("\n│ ├── "),a("code",[t._v("example-post-1")]),t._v("\n│ ├── "),a("code",[t._v("example-post-2")]),t._v("\n│ │ └── example-post-2.png")]),t._v("\n")])]),a("p",[t._v("Here's the example post 2 image:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-2-155w.png"),"src-placeholder":t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-2-90w.png"),alt:"Example Post 2 Image"}})],1),t._v(" "),a("h3",{attrs:{id:"example-post-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-post-3"}},[t._v("#")]),t._v(" Example Post 3")]),t._v(" "),a("p",[t._v("For the third example post we'll be adding an "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-3")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the image for the third example post which is named "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-3.png")]),t._v(" inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-3")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("examples")]),t._v("\n│ ├── "),a("code",[t._v("example-post-1")]),t._v("\n│ ├── "),a("code",[t._v("example-post-2")]),t._v("\n│ ├── "),a("code",[t._v("example-post-3")]),t._v("\n│ │ └── example-post-3.png")]),t._v("\n")])]),a("p",[t._v("Here's the example post 3 image:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-3-155w.png"),"src-placeholder":t.$withBase("/images/vuepress-tutorials/tutorial-18/example-post-3-90w.png"),alt:"Example Post 3 Image"}})],1),t._v(" "),a("h2",{attrs:{id:"post-images"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#post-images"}},[t._v("#")]),t._v(" Post Images")]),t._v(" "),a("p",[t._v("After adding the post images to the blog, we now need to add a way to access each image in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component which we'll accomplish by adding a custom variable "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" to the "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks of each post file. The value of the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" custom variable will be the path to the image in the project.")]),t._v(" "),a("p",[t._v("We're also going to add another custom variable of "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" to the "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks of each post file. The value of the "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" custom variable will be a description of the image.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter blocks in "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" then check these resources:")]),t._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/vuepress-tutorial-6/#yaml-frontmatter-blocks"}},[t._v("YAML Frontmatter Blocks")])],1),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/guide/frontmatter.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Frontmatter"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://vuepress.vuejs.org/miscellaneous/glossary.html#frontmatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("Glossary - frontmatter"),a("OutboundLink")],1)])])]),t._v(" "),a("h3",{attrs:{id:"adding-img-and-alt-to-post-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-img-and-alt-to-post-files"}},[t._v("#")]),t._v(" Adding Img and Alt to Post Files")]),t._v(" "),a("p",[t._v("Here's what the post files look like after adding the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" custom variables:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 1"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 1 preview\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("img")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" examples/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("1/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("1.png\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 1 Post Picture")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 1")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 2"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 2 preview\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("img")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" examples/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("2/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("2.png\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 2 Post Picture")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 2")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 3"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 3 preview\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("img")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" examples/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("3/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("3.png\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 3 Post Picture")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 3")]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"adding-img-and-alt-to-page-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-img-and-alt-to-page-variables"}},[t._v("#")]),t._v(" Adding Img and Alt to $page Variables")]),t._v(" "),a("p",[t._v("As mentioned in the previous tutorial when "),a("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(" encounters a "),a("a",{attrs:{href:"https://yaml.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("YAML"),a("OutboundLink")],1),t._v(" frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped "),a("code",{staticClass:"inline-code-block"},[t._v("$page.frontmatter")]),t._v(" variable.")]),t._v(" "),a("p",[t._v("Since the page objects in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property are the same as the "),a("code",{staticClass:"inline-code-block"},[t._v("$page")]),t._v(" variables used by the post pages, we will now have a "),a("code",{staticClass:"inline-code-block"},[t._v("frontmatter.img")]),t._v(" property and a "),a("code",{staticClass:"inline-code-block"},[t._v("frontmatter.alt")]),t._v(" property that we can access in the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component.")]),t._v(" "),a("h3",{attrs:{id:"displaying-images"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-images"}},[t._v("#")]),t._v(" Displaying Images")]),t._v(" "),a("p",[t._v("Now that we can access the values of the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" custom variables in the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.pages")]),t._v(" property, we're ready to render the images on the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("We're going to display the images using the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag which we'll place in a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag underneath the parent "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag of the "),a("code",{staticClass:"inline-code-block"},[t._v("p")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag allows us to embed an image into the page. We'll be using the "),a("code",{staticClass:"inline-code-block"},[t._v("src")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" attributes provided by the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("src")]),t._v(" attribute is required, and it contains the path to the image you want to display which in our case are the post images we created earlier.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" attribute is optional and consists of a text description of the image which is useful for "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/Accessibility",target:"_blank",rel:"noopener noreferrer"}},[t._v("accessibility"),a("OutboundLink")],1),t._v(" because screen readers will be able to read the description to the users. This allows the users to gain an understanding of what the image is. The description is also displayed on the page if the image is unable to be loaded.")]),t._v(" "),a("p",[t._v("If you want to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" tag, then check out "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img",target:"_blank",rel:"noopener noreferrer"}},[t._v("<img>: The Image Embed element"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("We can access the "),a("code",{staticClass:"inline-code-block"},[t._v("img")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" properties on each page object in our loop by using "),a("code",{staticClass:"inline-code-block"},[t._v("post.frontmatter.img")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("post.frontmatter.alt")]),t._v(", respectively.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying the Images"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("`/images/${post.frontmatter.img}`"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.frontmatter.alt || "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Here we're binding the "),a("code",{staticClass:"inline-code-block"},[t._v("src")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" attributes by placing a "),a("code",{staticClass:"inline-code-block"},[t._v(":")]),t._v(" before them which is shorthand for "),a("code",{staticClass:"inline-code-block"},[t._v("v-bind")]),t._v(". This allows us to bind the JavaScript expressions to the HTML attributes.")]),t._v(" "),a("p",[t._v("Also, notice "),a("code",{staticClass:"inline-code-block"},[t._v("/images/")]),t._v(" was added to the beginning of the path to the post images which we need to add since they're all located in the "),a("code",{staticClass:"inline-code-block"},[t._v("images")]),t._v(" directory. We don't need to include "),a("code",{staticClass:"inline-code-block"},[t._v(".vuepress/public")]),t._v(" in the path to the post images though because whenever you reference assets stored in the "),a("code",{staticClass:"inline-code-block"},[t._v("public")]),t._v(" directory that gets added automatically.")]),t._v(" "),a("p",[t._v("We also added an alternative value for the post image "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" attribute in case the "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" custom variable isn't present in the frontmatter of a post. This is done by using a logical OR operator, i.e., "),a("code",{staticClass:"inline-code-block"},[t._v("||")]),t._v(". Here, we're using "),a("code",{staticClass:"inline-code-block"},[t._v("\"post.frontmatter.alt || 'Post Picture'\"")]),t._v(" which means if the "),a("code",{staticClass:"inline-code-block"},[t._v("alt")]),t._v(" property evaluates to a "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Glossary/Falsy",target:"_blank",rel:"noopener noreferrer"}},[t._v("falsy"),a("OutboundLink")],1),t._v(" value, then we'll display the "),a("code",{staticClass:"inline-code-block"},[t._v("Post Picture")]),t._v(" text instead.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about "),a("code",{staticClass:"inline-code-block"},[t._v("v-bind")]),t._v(" or the logical OR operator, then check these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/api/#v-bind",target:"_blank",rel:"noopener noreferrer"}},[t._v("v-bind"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://masteringjs.io/tutorials/vue/bind",target:"_blank",rel:"noopener noreferrer"}},[t._v("Using v-bind in Vue"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR",target:"_blank",rel:"noopener noreferrer"}},[t._v("logical OR (||)"),a("OutboundLink")],1)])])]),t._v(" "),a("h3",{attrs:{id:"entry-page-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you should now see the images being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the entry page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-1/example-post-1.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Exmple Post 1 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-2/example-post-2.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Example Post 2 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-2-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you should now see the image being displayed with some styling which again is being provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 Preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-3/example-post-3.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Example Post 3 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("In the next tutorial we'll be continuing the development of the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost")]),t._v(" layout component by beginning the process of adding the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" buttons to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")])],1)}),[],!1,null,"4cb35906",null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/8.a8ce7c8d.js b/assets/js/8.a8ce7c8d.js new file mode 100644 index 00000000..d2bca28a --- /dev/null +++ b/assets/js/8.a8ce7c8d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{406:function(t,s,a){"use strict";a.d(s,"a",(function(){return n}));const n={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(t){let s=t("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?t("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,s]:[s]):s},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},439:function(t,s,a){},498:function(t,s,a){"use strict";a(439)},530:function(t,s,a){"use strict";a.r(s);var n={components:{VLazyImage:a(406).a}},e=(a(498),a(18)),r=Object(e.a)(n,(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"header",fn:function(){return[a("h1",{attrs:{id:"vuepress-tutorial-19-pagination-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-19-pagination-links"}},[t._v("#")]),t._v(" VuePress Tutorial 19 - Pagination Links")])]},proxy:!0}])},[a("h2",{attrs:{id:"what-we-re-doing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-we-re-doing"}},[t._v("#")]),t._v(" What We're Doing")]),t._v(" "),a("p",[t._v("Every time we navigate to the entry page or the second page in the list of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages we have to manually input the URL into the search bar of the browser which isn't a great user experience. To resolve this issue we're going to be adding "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links to each of the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("To accomplish this we'll be using the following properties provided by the blog plugin "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/client-api/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Client API"),a("OutboundLink")],1),t._v(":")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasPrev")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("$pagintaion.prevLink")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasNext")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("$pagintaion.nextLink")])])]),t._v(" "),a("p",[t._v("Before, we use the properties to add the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links, we're going to add two more example posts to the blog. This will allow us to view the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links in every scenario, i.e., when there isn't a previous page, when there isn't a next page, and when there is a previous page and a next page.")]),t._v(" "),a("p",[t._v("You can view all of the code in this tutorial by going to the tutorial-19 branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-19",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h2",{attrs:{id:"adding-more-example-pages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-more-example-pages"}},[t._v("#")]),t._v(" Adding More Example Pages")]),t._v(" "),a("p",[t._v("We'll be adding the following example pages to the "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory:")]),t._v(" "),a("ul",[a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2022-07-14-example-page-4.md")])]),t._v(" "),a("li",[a("code",{staticClass:"inline-code-block"},[t._v("2022-11-10-example-page-5.md")])])]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory for your site should now look like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("_posts")]),t._v("\n│ ├── 2020-07-03-example-page-1.md\n│ ├── 2021-11-16-example-page-2.md\n│ ├── 2022-05-08-example-page-3.md\n│ ├── 2022-07-14-example-page-4.md\n│ └── 2022-11-10-example-page-5.md")]),t._v("\n")])]),a("h3",{attrs:{id:"adding-titles-and-frontmatter"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-titles-and-frontmatter"}},[t._v("#")]),t._v(" Adding Titles and Frontmatter")]),t._v(" "),a("p",[t._v("We're now going to add post titles and frontmatter to the example pages we just added like we did for the other example pages.")]),t._v(" "),a("p",[t._v("Here's what the "),a("code",{staticClass:"inline-code-block"},[t._v("2022-07-14-example-page-4.md")]),t._v(" file and the "),a("code",{staticClass:"inline-code-block"},[t._v("2022-11-10-example-page-5.md")]),t._v(" file look like after adding the titles and frontmatter:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 4"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 4 preview\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("img")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" examples/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("4/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("4.png\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 4 Post Picture")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 4")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Example Page 5"}},[a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[a("span",{pre:!0,attrs:{class:"token front-matter-block"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token font-matter yaml language-yaml"}},[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preview")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 5 preview\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("img")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" examples/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("5/example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("5.png\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Example Post 5 Post Picture")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("---")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token title important"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("#")]),t._v(" Example Post 5")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"adding-images"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adding-images"}},[t._v("#")]),t._v(" Adding Images")]),t._v(" "),a("p",[t._v("We also need to add the post images for the example pages we just added. We'll do this just like we did in the previous tutorial by creating a directory for each example post inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the post images to the directories for each example post.")]),t._v(" "),a("p",[t._v("You can download all of the images below from your browser, and they're also available in the "),a("code",{staticClass:"inline-code-block"},[t._v("tutorial-19")]),t._v(" branch of the "),a("a",{attrs:{href:"https://github.com/codemonkeysio/code-monkeys-blog-tutorials/tree/tutorial-19",target:"_blank",rel:"noopener noreferrer"}},[t._v("code-monkeys-blog-tutorials"),a("OutboundLink")],1),t._v(" repository.")]),t._v(" "),a("h4",{attrs:{id:"example-post-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-post-4"}},[t._v("#")]),t._v(" Example Post 4")]),t._v(" "),a("p",[t._v("For the fourth example post we'll be adding an "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-4")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the image for the fourth example post which is named "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-4.png")]),t._v(" inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-4")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("examples")]),t._v("\n│ ├── "),a("code",[t._v("example-post-1")]),t._v("\n│ ├── "),a("code",[t._v("example-post-2")]),t._v("\n│ ├── "),a("code",[t._v("example-post-3")]),t._v("\n│ ├── "),a("code",[t._v("example-post-4")]),t._v("\n│ │ └── example-post-4.png")]),t._v("\n")])]),a("p",[t._v("Here's the example post 4 image:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/vuepress-tutorials/tutorial-19/example-post-4-155w.png"),"src-placeholder":t.$withBase("/images/vuepress-tutorials/tutorial-19/example-post-4-90w.png"),alt:"Example Post 4 Image"}})],1),t._v(" "),a("h4",{attrs:{id:"example-post-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-post-5"}},[t._v("#")]),t._v(" Example Post 5")]),t._v(" "),a("p",[t._v("For the fifth example post we'll be adding an "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-5")]),t._v(" directory inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("examples")]),t._v(" directory. Then we'll add the image for the fifth example post which is named "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-5.png")]),t._v(" inside of the "),a("code",{staticClass:"inline-code-block"},[t._v("example-post-5")]),t._v(" directory.")]),t._v(" "),a("p",[t._v("The directory structure for your site should now look something like this:")]),t._v(" "),a("pre",{staticClass:"vue-container"},[a("code",[a("p",[t._v(".\n├── "),a("code",[t._v("examples")]),t._v("\n│ ├── "),a("code",[t._v("example-post-1")]),t._v("\n│ ├── "),a("code",[t._v("example-post-2")]),t._v("\n│ ├── "),a("code",[t._v("example-post-3")]),t._v("\n│ ├── "),a("code",[t._v("example-post-4")]),t._v("\n│ ├── "),a("code",[t._v("example-post-5")]),t._v("\n│ │ └── example-post-5.png")]),t._v("\n")])]),a("p",[t._v("Here's the example post 5 image:")]),t._v(" "),a("div",{staticClass:"website-diagrams"},[a("v-lazy-image",{attrs:{src:t.$withBase("/images/vuepress-tutorials/tutorial-19/example-post-5-155w.png"),"src-placeholder":t.$withBase("/images/vuepress-tutorials/tutorial-19/example-post-5-90w.png"),alt:"Example Post 5 Image"}})],1),t._v(" "),a("h3",{attrs:{id:"viewing-the-pagination-pages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#viewing-the-pagination-pages"}},[t._v("#")]),t._v(" Viewing the Pagination Pages")]),t._v(" "),a("p",[t._v("After adding the titles and frontmatter to the example pages and adding the post images, you should now have the following "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"http://localhost:8080/posts/page/3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/3/"),a("OutboundLink")],1)])])]),t._v(" "),a("p",[t._v("Having these three "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages will allow us to view the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links in every scenario that we mentioned in the beginning of the post.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Order of Posts")]),t._v(" "),a("p",[t._v("The order of the posts may not be what you're expecting and may change each time you start the local development server. This is because the blog plugin uses a "),a("code",{staticClass:"inline-code-block"},[t._v("date")]),t._v(" property to sort the posts which it looks for on the frontmatter of each post page. Since we haven't added a "),a("code",{staticClass:"inline-code-block"},[t._v("date")]),t._v(" custom variable to the frontmatter blocks for the post pages, the blog plugin will not sort the posts in a predictable way. We'll fix this issue in a future tutorial by adding the "),a("code",{staticClass:"inline-code-block"},[t._v("date")]),t._v(" custom variable to the frontmatter blocks of the post pages.")])]),t._v(" "),a("p",[t._v("If you have any questions about adding the example pages to the "),a("code",{staticClass:"inline-code-block"},[t._v("_posts")]),t._v(" directory, adding titles to the post pages, adding the frontmatter to the post pages, and/or adding the post images, then check out the relevant sections from the previous tutorials:")]),t._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/vuepress-tutorial-15/#directory-classification"}},[t._v("VuePress Tutorial 15 - Blog Plugin")])],1),t._v(" "),a("li",[a("RouterLink",{attrs:{to:"/vuepress-tutorial-17/#post-titles"}},[t._v("VuePress Tutorial 17 - IndexPost Layout")])],1),t._v(" "),a("li",[a("RouterLink",{attrs:{to:"/vuepress-tutorial-18/#adding-post-images"}},[t._v("VuePress Tutorial 18 - IndexPost Images")])],1)]),t._v(" "),a("h2",{attrs:{id:"displaying-pagination-links"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#displaying-pagination-links"}},[t._v("#")]),t._v(" Displaying Pagination Links")]),t._v(" "),a("p",[t._v("We're now ready to use the properties provided by the blog plugin "),a("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/client-api/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Client API"),a("OutboundLink")],1),t._v(" to add the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links to the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("We're going to display the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links using two "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" components one for the previous page and one for the next page. We'll be wrapping each "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component in a "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag.")]),t._v(" "),a("p",[t._v("We'll then wrap the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tags inside another "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag which we'll place underneath the "),a("code",{staticClass:"inline-code-block"},[t._v("div")]),t._v(" tag that is being used to loop over the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component is provided by "),a("a",{attrs:{href:"https://v3.router.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Vue Router"),a("OutboundLink")],1),t._v(" which gets installed when installing "),a("a",{attrs:{href:"https://vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("VuePress"),a("OutboundLink")],1),t._v(". The "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component is used for enabling user navigation for the site. The target location for the link is specified by using the "),a("code",{staticClass:"inline-code-block"},[t._v("to")]),t._v(" prop, and it renders as an "),a("code",{staticClass:"inline-code-block"},[t._v("a")]),t._v(" tag with the specified "),a("code",{staticClass:"inline-code-block"},[t._v("href")]),t._v(" by default.")]),t._v(" "),a("p",[t._v("If you want to learn more about the "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component, then check out the "),a("a",{attrs:{href:"https://v3.router.vuejs.org/api/#router-link",target:"_blank",rel:"noopener noreferrer"}},[t._v("<router-link>"),a("OutboundLink")],1),t._v(" documentation.")]),t._v(" "),a("p",[t._v("To display the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link for the previous page we'll be using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasPrev")]),t._v(" property to check if the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page has a previous page. We'll use the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.prevLink")]),t._v(" property to provide the path of the previous "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page to the "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component "),a("code",{staticClass:"inline-code-block"},[t._v("to")]),t._v(" prop.")]),t._v(" "),a("p",[t._v("Similarly, to display the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link for the next page we'll be using the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasNext")]),t._v(" property to check if the current "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page has a next page. We'll use the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.nextLink")]),t._v(" property to provide the path of the next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" page to the "),a("code",{staticClass:"inline-code-block"},[t._v("router-link")]),t._v(" component "),a("code",{staticClass:"inline-code-block"},[t._v("to")]),t._v(" prop.")]),t._v(" "),a("p",[t._v("We discussed the properties above in detail in the "),a("RouterLink",{attrs:{to:"/vuepress-tutorial-16/#client-api"}},[t._v("VuePress Tutorial 16 - Pagination")]),t._v(" post, so if you need a refresher or if you have any questions read through the relevant sections in that post.")],1),t._v(" "),a("p",[t._v("The "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file should now look like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Displaying the Pagination Links"}},[a("div",{staticClass:"language-vue line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-for")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post in $pagination.pages"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":key")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.title }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n {{ post.frontmatter.preview }}\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("`/images/${post.frontmatter.img}`"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post.frontmatter.alt || "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasPrev"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.prevLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Prev\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("router-link")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("router-link")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("v-if")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.hasNext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v(":to")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("$pagination.nextLink"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Next\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("router-link")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IndexPost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token style"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("style")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Here we're using the "),a("code",{staticClass:"inline-code-block"},[t._v("v-if")]),t._v(" directive to conditionally render the "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links by using the values of the "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasPrev")]),t._v(" and "),a("code",{staticClass:"inline-code-block"},[t._v("$pagination.hasNext")]),t._v(" properties. The block of code using the "),a("code",{staticClass:"inline-code-block"},[t._v("v-if")]),t._v(" directive will only be rendered if the expression provided to it returns a "),a("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Glossary/Truthy",target:"_blank",rel:"noopener noreferrer"}},[t._v("truthy"),a("OutboundLink")],1),t._v(" value.")]),t._v(" "),a("p",[t._v("We're also binding the "),a("code",{staticClass:"inline-code-block"},[t._v("to")]),t._v(" prop by placing a "),a("code",{staticClass:"inline-code-block"},[t._v(":")]),t._v(" before it which is shorthand for "),a("code",{staticClass:"inline-code-block"},[t._v("v-bind")]),t._v(". Using "),a("code",{staticClass:"inline-code-block"},[t._v("v-bind")]),t._v(" allows us to bind JavaScript expressions to the HTML attributes.")]),t._v(" "),a("p",[t._v("If you have any questions or want to learn more about conditional rendering or "),a("code",{staticClass:"inline-code-block"},[t._v("v-bind")]),t._v(", then check these resources:")]),t._v(" "),a("ul",[a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/guide/conditional.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Conditional Rendering"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://v2.vuejs.org/v2/api/#v-bind",target:"_blank",rel:"noopener noreferrer"}},[t._v("v-bind"),a("OutboundLink")],1)])]),t._v(" "),a("li",[a("span",{staticClass:"external-link-wrap"},[a("a",{attrs:{href:"https://masteringjs.io/tutorials/vue/bind",target:"_blank",rel:"noopener noreferrer"}},[t._v("Using v-bind in Vue"),a("OutboundLink")],1)])])]),t._v(" "),a("h3",{attrs:{id:"entry-page-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-page-html"}},[t._v("#")]),t._v(" Entry Page HTML")]),t._v(" "),a("p",[t._v("After updating the "),a("code",{staticClass:"inline-code-block"},[t._v("IndexPost.vue")]),t._v(" file with the code above, if you navigate to the entry page "),a("a",{attrs:{href:"http://localhost:8080/posts/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/"),a("OutboundLink")],1),t._v(" you should now see the Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You should now be able to click on the Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link, and it should take you to the next page in the list of "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" pages.")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the entry page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Entry Page HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 1 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-1/example-post-1.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Exmple Post 1 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 2 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-2/example-post-2.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Example Post 2 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/page/2/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Next "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-2-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-2-html"}},[t._v("#")]),t._v(" Page 2 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the second page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/2/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/2/"),a("OutboundLink")],1),t._v(" you should now see the Prev and Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You should be able to click on the Prev "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link, and it should take you to the previous page. You should also be able to click on the Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link, and it should take you to the next page.")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the second page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 2 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 3 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-3/example-post-3.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Exmple Post 3 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 4 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 4 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-4/example-post-4.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Example Post 4 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("router-link-active"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Prev "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/page/3/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Next "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"page-3-html"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#page-3-html"}},[t._v("#")]),t._v(" Page 3 HTML")]),t._v(" "),a("p",[t._v("If you navigate to the third page "),a("a",{attrs:{href:"http://localhost:8080/posts/page/3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/posts/page/3/"),a("OutboundLink")],1),t._v(" you should now see the Prev "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link being displayed with some styling provided by the "),a("a",{attrs:{href:"https://vuepress.vuejs.org/theme/default-theme-config.html#default-theme-config",target:"_blank",rel:"noopener noreferrer"}},[t._v("default theme"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You should be able to click on the Prev "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" link, and it should take you to the previous page.")]),t._v(" "),a("p",[t._v("The HTML for the "),a("code",{staticClass:"inline-code-block"},[t._v("body")]),t._v(" tag for the third page should now look something like this:")]),t._v(" "),a("code-group",[a("code-block",{attrs:{title:"Page 3 HTML"}},[a("div",{staticClass:"language-html line-numbers-mode"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("global-layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("theme-default-content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("The Scribblings of a Monkey!!!"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 5 "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("h2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Example Post 5 preview "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("img")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/images/examples/example-post-5/example-post-5.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("alt")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Exmple Post 5 Post Picture"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/posts/page/2/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Prev "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("a")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!----\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("footer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-v-60ae214a")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("footer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("..."),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("footer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("div")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])]),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"next-steps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-steps"}},[t._v("#")]),t._v(" Next Steps")]),t._v(" "),a("p",[t._v("You may have noticed the styling of the Prev and Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links doesn't look too good, so in the next tutorial we'll begin styling these links. We'll also be adding left and right arrow icons to the Prev and Next "),a("span",{staticClass:"post-term-one"},[t._v("pagination")]),t._v(" links, respectively.")])],1)}),[],!1,null,"dd2f6eae",null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/9.73ae4bf4.js b/assets/js/9.73ae4bf4.js new file mode 100644 index 00000000..5bdf0b1d --- /dev/null +++ b/assets/js/9.73ae4bf4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{406:function(e,t,r){"use strict";r.d(t,"a",(function(){return s}));const s={props:{src:{type:String,required:!0},srcPlaceholder:{type:String,default:"data:,"},srcset:{type:String},intersectionOptions:{type:Object,default:()=>({})},usePicture:{type:Boolean,default:!1}},inheritAttrs:!1,data:()=>({observer:null,intersected:!1,loaded:!1}),computed:{srcImage(){return this.intersected&&this.src?this.src:this.srcPlaceholder},srcsetImage(){return!(!this.intersected||!this.srcset)&&this.srcset}},methods:{load(){this.$el.getAttribute("src")!==this.srcPlaceholder&&(this.loaded=!0,this.$emit("load"))},error(){this.$emit("error",this.$el)}},render(e){let t=e("img",{attrs:{src:this.srcImage,srcset:this.srcsetImage},domProps:this.$attrs,class:{"v-lazy-image":!0,"v-lazy-image-loaded":this.loaded},on:{load:this.load,error:this.error}});return this.usePicture?e("picture",{on:{load:this.load}},this.intersected?[this.$slots.default,t]:[t]):t},mounted(){"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(e=>{e[0].isIntersecting&&(this.intersected=!0,this.observer.disconnect(),this.$emit("intersect"))},this.intersectionOptions),this.observer.observe(this.$el))},destroyed(){"IntersectionObserver"in window&&this.observer.disconnect()}}},440:function(e,t,r){},499:function(e,t,r){"use strict";r(440)},531:function(e,t,r){"use strict";r.r(t);var s={components:{VLazyImage:r(406).a}},a=(r(499),r(18)),n=Object(a.a)(s,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"header",fn:function(){return[r("h1",{attrs:{id:"vuepress-tutorial-2-why-use-vuepress"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#vuepress-tutorial-2-why-use-vuepress"}},[e._v("#")]),e._v(" VuePress Tutorial 2 - Why Use VuePress?")])]},proxy:!0}])},[r("h2",{attrs:{id:"what-is-vuepress"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-is-vuepress"}},[e._v("#")]),e._v(" What is VuePress?")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" is a minimalistic "),r("span",{staticClass:"post-term-two"},[e._v("static site generator (SSG)")]),e._v(" with a Vue-powered "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/",target:"_blank",rel:"noopener noreferrer"}},[e._v("theming system"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Plugin API"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("p",[e._v("Originally, it was created to serve the documentation needs of "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue's"),r("OutboundLink")],1),e._v(" own sub projects, so it comes with a "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("default theme"),r("OutboundLink")],1),e._v(" optimized for writing technical documentation.")]),e._v(" "),r("p",[e._v("As well has being useful for writing technical documentation, it also has a "),r("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("blog plugin"),r("OutboundLink")],1),e._v(" which we'll be looking at in more detail in future tutorials.")]),e._v(" "),r("p",[e._v("Now, to clear up any confusion we'll define what an "),r("span",{staticClass:"post-term-two"},[e._v("SSG")]),e._v(" is, then we'll talk more about the "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/",target:"_blank",rel:"noopener noreferrer"}},[e._v("theming system"),r("OutboundLink")],1),e._v(" and the "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Plugin API"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("p",[e._v("After that we'll provide a list of some of the features of "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(", and then we'll give some quick comparisons with similar technologies.")]),e._v(" "),r("h2",{attrs:{id:"different-types-of-websites"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#different-types-of-websites"}},[e._v("#")]),e._v(" Different Types of Websites")]),e._v(" "),r("p",[e._v("Before we define what an "),r("span",{staticClass:"post-term-two"},[e._v("SSG")]),e._v(" is, let's first look at some different types of websites. This will allow us to get a better understanding of the pros and cons of using an "),r("span",{staticClass:"post-term-two"},[e._v("SSG")]),e._v(".")]),e._v(" "),r("p",[e._v("We'll mainly be looking at each type of website in terms of "),r("span",{staticClass:"post-term-one"},[e._v("search engine optimization (SEO)")]),e._v(", "),r("span",{staticClass:"post-term-one"},[e._v("speed")]),e._v(", and "),r("span",{staticClass:"post-term-one"},[e._v("ease of updating")]),e._v(".")]),e._v(" "),r("h3",{attrs:{id:"static-website"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#static-website"}},[e._v("#")]),e._v(" Static Website")]),e._v(" "),r("ul",[r("li",[e._v("Uses static HTML pages with possible CSS and JavaScript")]),e._v(" "),r("li",[e._v("Pages are uploaded to a content delivery network (CDN) or a web host")])]),e._v(" "),r("p",[e._v("Here's a simple diagram illustrating the process:")]),e._v(" "),r("div",{staticClass:"website-diagrams"},[r("v-lazy-image",{attrs:{src:e.$withBase("/images/vuepress-tutorials/tutorial-2/static-website-diagram-760w.png"),"src-placeholder":e.$withBase("/images/vuepress-tutorials/tutorial-2/static-website-diagram-232w.png"),alt:"Static Website Diagram"}})],1),e._v(" "),r("h4",{attrs:{id:"pros"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pros"}},[e._v("#")]),e._v(" Pros")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"post-term-one"},[e._v("SEO-friendly")]),e._v(" since a search engine can crawl the site and fully rendered HTML pages with content are provided")])]),e._v(" "),r("h4",{attrs:{id:"cons"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cons"}},[e._v("#")]),e._v(" Cons")]),e._v(" "),r("ul",[r("li",[e._v("Need to do a request to the server for each page a user visits which "),r("span",{staticClass:"post-term-one"},[e._v("slows")]),e._v(" down the site")]),e._v(" "),r("li",[r("span",{staticClass:"post-term-one"},[e._v("Difficult to update")]),e._v(" since you need to rewrite the same code on multiple pages, e.g., the footer")]),e._v(" "),r("li",[e._v("Has "),r("span",{staticClass:"post-term-one"},[e._v("limited functionality")]),e._v(" and generally doesn't contain dynamic data")])]),e._v(" "),r("h3",{attrs:{id:"single-page-application-spa"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#single-page-application-spa"}},[e._v("#")]),e._v(" Single-Page Application (SPA)")]),e._v(" "),r("ul",[r("li",[e._v("Typical "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://reactjs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("React"),r("OutboundLink")],1),e._v(" application")]),e._v(" "),r("li",[e._v("A single request is made to the server which returns a simple HTML page with the styles and scripts linked")]),e._v(" "),r("li",[e._v("The "),r("span",{staticClass:"post-term-three"},[e._v("SPA")]),e._v(" then handles rendering the page content in the browser, e.g., routing, data, etc.")])]),e._v(" "),r("p",[e._v("Simple diagram illustrating the process:")]),e._v(" "),r("div",{staticClass:"website-diagrams"},[r("v-lazy-image",{attrs:{src:e.$withBase("/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-760w.png"),"src-placeholder":e.$withBase("/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-232w.png"),alt:"Single Page Application Diagram"}})],1),e._v(" "),r("h4",{attrs:{id:"pros-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pros-2"}},[e._v("#")]),e._v(" Pros")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"post-term-one"},[e._v("Fast")]),e._v(", no extra requests are made to the server when navigating to new pages since the "),r("span",{staticClass:"post-term-three"},[e._v("SPA")]),e._v(" handles rendering the pages in the browser")]),e._v(" "),r("li",[e._v("Component driven which means "),r("span",{staticClass:"post-term-one"},[e._v("easier updating")]),e._v(", e.g., if you want to update the footer you only need to update it in one file")])]),e._v(" "),r("h4",{attrs:{id:"cons-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cons-2"}},[e._v("#")]),e._v(" Cons")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"post-term-one"},[e._v("More difficult")]),e._v(" for search engines to crawl and index the site for "),r("span",{staticClass:"post-term-one"},[e._v("SEO")]),e._v(" since the page returned by the server is a simple HTML page")])]),e._v(" "),r("h3",{attrs:{id:"server-side-rendered-ssr"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#server-side-rendered-ssr"}},[e._v("#")]),e._v(" Server-Side Rendered (SSR)")]),e._v(" "),r("ul",[r("li",[e._v("A traditional "),r("a",{attrs:{href:"https://www.php.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP"),r("OutboundLink")],1),e._v(" site uses this technique as well as a "),r("a",{attrs:{href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js"),r("OutboundLink")],1),e._v(" application using "),r("a",{attrs:{href:"https://expressjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Express"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://ejs.co/",target:"_blank",rel:"noopener noreferrer"}},[e._v("EJS"),r("OutboundLink")],1),e._v(" for templating")]),e._v(" "),r("li",[e._v("Returns an HTML page that is built on the fly for each request using templates and data")]),e._v(" "),r("li",[e._v("Each page returned is a static HTML page")])]),e._v(" "),r("p",[e._v("Simple diagram illustrating the process:")]),e._v(" "),r("div",{staticClass:"website-diagrams"},[r("v-lazy-image",{attrs:{src:e.$withBase("/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-760w.png"),"src-placeholder":e.$withBase("/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-232w.png"),alt:"Server-Side Rendered Diagram"}})],1),e._v(" "),r("h4",{attrs:{id:"pros-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pros-3"}},[e._v("#")]),e._v(" Pros")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"post-term-one"},[e._v("SEO-friendly")]),e._v(" since each request returns a fully rendered HTML page, so a search engine can easily crawl and index the site")]),e._v(" "),r("li",[r("span",{staticClass:"post-term-one"},[e._v("Easy to update")]),e._v(" since the server is using a templating system")])]),e._v(" "),r("h4",{attrs:{id:"cons-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cons-3"}},[e._v("#")]),e._v(" Cons")]),e._v(" "),r("ul",[r("li",[e._v("Since the server has to send back fully rendered HTML pages for each request, it can "),r("span",{staticClass:"post-term-one"},[e._v("slow")]),e._v(" down the page rendering")])]),e._v(" "),r("h3",{attrs:{id:"static-site-generator-ssg"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#static-site-generator-ssg"}},[e._v("#")]),e._v(" Static Site Generator (SSG)")]),e._v(" "),r("ul",[r("li",[e._v("An "),r("span",{staticClass:"post-term-two"},[e._v("SSG")]),e._v(" creates pre-rendered static HTML pages using a combination of templates, components, and data")]),e._v(" "),r("li",[e._v("These static HTML pages are generated at build-time, i.e., "),r("span",{staticClass:"post-term-one"},[e._v("before")]),e._v(" deployment")]),e._v(" "),r("li",[e._v("The static pages are then deployed to the web")])]),e._v(" "),r("p",[e._v("Simple diagram illustrating the process:")]),e._v(" "),r("div",{staticClass:"website-diagrams"},[r("v-lazy-image",{attrs:{src:e.$withBase("/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-760w.png"),"src-placeholder":e.$withBase("/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-232w.png"),alt:"Static Site Generator Diagram"}})],1),e._v(" "),r("h4",{attrs:{id:"pros-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pros-4"}},[e._v("#")]),e._v(" Pros")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"post-term-one"},[e._v("SEO-friendly")]),e._v(" since it returns fully rendered HTML which can then be crawled and indexed")]),e._v(" "),r("li",[e._v("Navigating to new pages is "),r("span",{staticClass:"post-term-one"},[e._v("fast")]),e._v(" since after the initial request the site behaves like a normal "),r("span",{staticClass:"post-term-three"},[e._v("SPA")])]),e._v(" "),r("li",[r("span",{staticClass:"post-term-one"},[e._v("Easy to update")]),e._v(" since the site is component driven")])]),e._v(" "),r("h4",{attrs:{id:"cons-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cons-4"}},[e._v("#")]),e._v(" Cons")]),e._v(" "),r("ul",[r("li",[e._v("Have to rebuild the static pages "),r("span",{staticClass:"post-term-one"},[e._v("evey time")]),e._v(" a change is made to the site, and the build time will "),r("span",{staticClass:"post-term-one"},[e._v("increase")]),e._v(" as more pages are added")])]),e._v(" "),r("h2",{attrs:{id:"use-cases-for-ssgs"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#use-cases-for-ssgs"}},[e._v("#")]),e._v(" Use Cases for SSGs")]),e._v(" "),r("p",[e._v("Since "),r("span",{staticClass:"post-term-two"},[e._v("SSGs")]),e._v(" create static HTML pages at build-time then behave like an "),r("span",{staticClass:"post-term-three"},[e._v("SPA")]),e._v(", they are suited for websites that "),r("span",{staticClass:"post-term-one"},[e._v("don't")]),e._v(" have a lot of frequent content changes.")]),e._v(" "),r("ul",[r("li",[e._v("Here are some examples:\n"),r("ul",[r("li",[e._v("Personal Website/Portfolio")]),e._v(" "),r("li",[e._v("Documentation")]),e._v(" "),r("li",[e._v("Blog")])])])]),e._v(" "),r("h2",{attrs:{id:"how-it-works-in-vuepress"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works-in-vuepress"}},[e._v("#")]),e._v(" How it Works in VuePress")]),e._v(" "),r("p",[e._v("Like other "),r("span",{staticClass:"post-term-two"},[e._v("SSGs")]),e._v(", the static HTML pages are rendered at build-time. Then the static HTML pages are deployed to the web.")]),e._v(" "),r("p",[e._v("Once the page is loaded, "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" takes control of the static content and the site behaves like an "),r("span",{staticClass:"post-term-three"},[e._v("SPA")]),e._v(". The "),r("span",{staticClass:"post-term-three"},[e._v("SPA")]),e._v(" is powered by "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(", "),r("a",{attrs:{href:"https://router.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue Router"),r("OutboundLink")],1),e._v(", and "),r("a",{attrs:{href:"https://webpack.js.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("p",[e._v("Each Markdown file gets compiled into HTML with "),r("a",{attrs:{href:"https://markdown-it.github.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("markdown-it"),r("OutboundLink")],1),e._v(" which is then processed as the template of a "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" component. This is what enables you to use "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" directly in your Markdown files and also makes it possible to embed dynamic content.")]),e._v(" "),r("h2",{attrs:{id:"theming"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#theming"}},[e._v("#")]),e._v(" Theming")]),e._v(" "),r("p",[e._v("A theme in "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" allows you to control how your project is structured. You can simply use the provided "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("default theme"),r("OutboundLink")],1),e._v(", use "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("theme inheritance"),r("OutboundLink")],1),e._v(" to create a child theme based on a parent theme, or "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/writing-a-theme.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("write your own theme"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("p",[e._v("Within a theme you are able to create directories that handle "),r("span",{staticClass:"post-term-one"},[e._v("global components")]),e._v(", "),r("span",{staticClass:"post-term-one"},[e._v("components")]),e._v(", "),r("span",{staticClass:"post-term-one"},[e._v("layouts")]),e._v(", "),r("span",{staticClass:"post-term-one"},[e._v("styles")]),e._v(", and "),r("span",{staticClass:"post-term-one"},[e._v("templates")]),e._v(". You can also create files for "),r("span",{staticClass:"post-term-one"},[e._v("theme configurations")]),e._v(" and "),r("span",{staticClass:"post-term-one"},[e._v("app level enhancements")]),e._v(". When writing your own theme the only file that is necessary is Layout.vue, everything else is up to. You can also publish your theme as an "),r("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),r("OutboundLink")],1),e._v(" package which allows other people to easily install it.")]),e._v(" "),r("p",[e._v("The "),r("RouterLink",{attrs:{to:"/"}},[e._v("Code Monkeys Blog")]),e._v(" is currently a child theme inherited from the default theme. Eventually, I would like to look into publishing it as an "),r("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),r("OutboundLink")],1),e._v(" package.")],1),e._v(" "),r("p",[e._v("We'll go over the directory structure, what each directory in a theme is used for, theme configuration, app level enhancement, and "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/inheritance.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("theme inheritance"),r("OutboundLink")],1),e._v(" in future tutorials.")]),e._v(" "),r("ul",[r("li",[e._v("Example themes you can check out:\n"),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-theme-meteorlxy.meteorlxy.cn/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-theme-meteorlxy"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vp-modern.z3by.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-theme-modern-blog"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://succinct.mflash.dev/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-theme-succinct"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-theme-hope.github.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-theme-hope"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-theme-mini.wxsm.space/",target:"_blank",rel:"noopener noreferrer"}},[e._v("vuepress-theme-mini"),r("OutboundLink")],1)])])])])]),e._v(" "),r("h2",{attrs:{id:"plugin-api"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#plugin-api"}},[e._v("#")]),e._v(" Plugin API")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Plugins"),r("OutboundLink")],1),e._v(" allow you to add "),r("span",{staticClass:"post-term-one"},[e._v("global-level functionality")]),e._v(" to "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(". You can configure them by passing in options. It's also possible to write your own and publish them as "),r("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),r("OutboundLink")],1),e._v(" packages.")]),e._v(" "),r("p",[e._v("We'll go over installing and configuring "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/",target:"_blank",rel:"noopener noreferrer"}},[e._v("plugins"),r("OutboundLink")],1),e._v(" in future tutorials.")]),e._v(" "),r("ul",[r("li",[e._v("Examples of some plugins:\n"),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vuepress-plugin-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("@vuepress/plugin-blog"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/official/plugin-active-header-links.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("@vuepress/plugin-active-header-links"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/official/plugin-back-to-top.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("@vuepress/plugin-back-to-top"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/plugin/official/plugin-search.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("@vuepress/plugin-search"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://vp-icon.goyfe.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("@goy/vuepress-plugin-svg-icons"),r("OutboundLink")],1)])])])])]),e._v(" "),r("h2",{attrs:{id:"features"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("p",[e._v("Here are some of the features that come with "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(":")]),e._v(" "),r("p",[e._v("Built-in Markdown Extensions")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/markdown.html#table-of-contents",target:"_blank",rel:"noopener noreferrer"}},[e._v("Table of Contents"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/markdown.html#custom-containers",target:"_blank",rel:"noopener noreferrer"}},[e._v("Custom Containers"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/markdown.html#line-highlighting-in-code-blocks",target:"_blank",rel:"noopener noreferrer"}},[e._v("Line Highlighting"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/markdown.html#line-numbers",target:"_blank",rel:"noopener noreferrer"}},[e._v("Line Numbers"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/markdown.html#import-code-snippets",target:"_blank",rel:"noopener noreferrer"}},[e._v("Import Code Snippets"),r("OutboundLink")],1)])])]),e._v(" "),r("p",[e._v("Ability to Use Vue In Markdown Files")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/using-vue.html#templating",target:"_blank",rel:"noopener noreferrer"}},[e._v("Templating"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/guide/using-vue.html#using-components",target:"_blank",rel:"noopener noreferrer"}},[e._v("Using Components"),r("OutboundLink")],1)])])]),e._v(" "),r("p",[e._v("Vue-powered Custom Theme System")]),e._v(" "),r("ul",[r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/writing-a-theme.html#site-and-page-metadata",target:"_blank",rel:"noopener noreferrer"}},[e._v("Metadata"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/writing-a-theme.html#content-excerpt",target:"_blank",rel:"noopener noreferrer"}},[e._v("Content Excerpt"),r("OutboundLink")],1)])])]),e._v(" "),r("p",[e._v("A Default Theme with")]),e._v(" "),r("ul",[r("li",[e._v("Responsive layout")]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#homepage",target:"_blank",rel:"noopener noreferrer"}},[e._v("Optional Homepage"),r("OutboundLink")],1)])]),e._v(" "),r("li",[e._v("Customizable "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#navbar",target:"_blank",rel:"noopener noreferrer"}},[e._v("Navbar"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#sidebar",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sidebar"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#built-in-search",target:"_blank",rel:"noopener noreferrer"}},[e._v("Simple Out-of-the-Box Header-Based Search"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#algolia-search",target:"_blank",rel:"noopener noreferrer"}},[e._v("Algolia Search"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#last-updated",target:"_blank",rel:"noopener noreferrer"}},[e._v("Last Updated"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#git-repository-and-edit-links",target:"_blank",rel:"noopener noreferrer"}},[e._v("Git Repository and Edit Links"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#custom-layout-for-specific-pages",target:"_blank",rel:"noopener noreferrer"}},[e._v("Custom Layout for Specific Pages"),r("OutboundLink")],1)])]),e._v(" "),r("li",[r("span",{staticClass:"external-link-wrap"},[r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/theme/default-theme-config.html#default-code-block",target:"_blank",rel:"noopener noreferrer"}},[e._v("Code Groups and Code Blocks"),r("OutboundLink")],1)])])]),e._v(" "),r("p",[e._v("It also has a "),r("a",{attrs:{href:"https://vuepress-theme-blog.billyyyyy3320.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("blog theme"),r("OutboundLink")],1),e._v(", numerous community themes, official plugins, and community plugins.")]),e._v(" "),r("p",[e._v("You can find a list of these themes, plugins, and more resources at "),r("a",{attrs:{href:"https://github.com/vuepress/awesome-vuepress",target:"_blank",rel:"noopener noreferrer"}},[e._v("Awesome VuePress"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("h2",{attrs:{id:"comparisons"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#comparisons"}},[e._v("#")]),e._v(" Comparisons")]),e._v(" "),r("p",[e._v("Here are some similar technologies and how they compare with "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(":")]),e._v(" "),r("p",[r("span",{staticClass:"external-link-headers"},[r("a",{attrs:{href:"https://nuxtjs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nuxt"),r("OutboundLink")],1)])]),e._v(" "),r("ul",[r("li",[e._v("Designed for building applications whereas "),r("a",{attrs:{href:"https://v1.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("VuePress"),r("OutboundLink")],1),e._v(" is focused on content-centric static sites with a focus on technical documentation")])]),e._v(" "),r("p",[r("span",{staticClass:"external-link-headers"},[r("a",{attrs:{href:"https://docsify.js.org/#/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docsify"),r("OutboundLink")],1),e._v(" / "),r("a",{attrs:{href:"https://docute.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docute"),r("OutboundLink")],1)])]),e._v(" "),r("ul",[r("li",[e._v("Both are runtime-driven, so they're not SEO-friendly")]),e._v(" "),r("li",[e._v("Good if SEO isn't a concern and you don't want to deal with installing dependencies")])]),e._v(" "),r("p",[r("span",{staticClass:"external-link-headers"},[r("a",{attrs:{href:"https://hexo.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Hexo"),r("OutboundLink")],1)])]),e._v(" "),r("ul",[r("li",[e._v("Static and string-based theming system, so we're unable to take advantage of "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" for layout and interactivity")]),e._v(" "),r("li",[e._v("Markdown rendering configuration is not that flexible")])]),e._v(" "),r("p",[r("span",{staticClass:"external-link-headers"},[r("a",{attrs:{href:"https://www.gitbook.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitBook"),r("OutboundLink")],1)])]),e._v(" "),r("ul",[r("li",[e._v("Development reload performance is not ideal with a large amount of files")]),e._v(" "),r("li",[e._v("Limiting navigation structure for the default theme")]),e._v(" "),r("li",[e._v("Theming system is not "),r("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue"),r("OutboundLink")],1),e._v(" based")])])])}),[],!1,null,"1f31566c",null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.256491cc.js b/assets/js/app.256491cc.js new file mode 100644 index 00000000..01bf0bfc --- /dev/null +++ b/assets/js/app.256491cc.js @@ -0,0 +1,49 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,s,a=e[0],l=e[1],u=e[2],p=0,d=[];p<a.length;p++)s=a[p],Object.prototype.hasOwnProperty.call(o,s)&&o[s]&&d.push(o[s][0]),o[s]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(t[r]=l[r]);for(c&&c(e);d.length;)d.shift()();return i.push.apply(i,u||[]),n()}function n(){for(var t,e=0;e<i.length;e++){for(var n=i[e],r=!0,a=1;a<n.length;a++){var l=n[a];0!==o[l]&&(r=!1)}r&&(i.splice(e--,1),t=s(s.s=n[0]))}return t}var r={},o={3:0},i=[];function s(e){if(r[e])return r[e].exports;var n=r[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.e=function(t){var e=[],n=o[t];if(0!==n)if(n)e.push(n[2]);else{var r=new Promise((function(e,r){n=o[t]=[e,r]}));e.push(n[2]=r);var i,a=document.createElement("script");a.charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.src=function(t){return s.p+"assets/js/"+({}[t]||t)+"."+{1:"330fc088",2:"848dd251",4:"f23131f6",5:"87c035ba",6:"470366e6",7:"decbbed9",8:"a8ce7c8d",9:"73ae4bf4",10:"ebee84b9",11:"d5c0a96b",12:"d6a93675",13:"3b595a15",14:"1ee24bfc",15:"96580589",16:"f48555d6",17:"cc4d42f1",18:"d11eb049",19:"2c32600e",20:"92ee06e3",21:"712767d5",22:"79d14440",23:"e8eeed0b",24:"8703bc51",25:"fee6ff8e",26:"7d6839f2",27:"738c91c9",28:"2333857e",29:"41859207",30:"a46fbbd9",31:"ef0ccef5",32:"609622c9",33:"6e7f24bc",34:"cab303ee",35:"d3a29ee8",36:"ee7b7393",37:"a8592e6c",38:"8ac14eba",39:"adfc8e53",40:"d524e8c2",41:"c172b375",42:"06b358e9",43:"b7dc16e8",44:"abceeaf3",45:"15ca6b5f",46:"c591d97d",47:"6dcb7d35",48:"64f74787",49:"0ff426b4",50:"fe3bfe20",51:"e8346319",52:"f6c5e3ae"}[t]+".js"}(t);var l=new Error;i=function(e){a.onerror=a.onload=null,clearTimeout(u);var n=o[t];if(0!==n){if(n){var r=e&&("load"===e.type?"missing":e.type),i=e&&e.target&&e.target.src;l.message="Loading chunk "+t+" failed.\n("+r+": "+i+")",l.name="ChunkLoadError",l.type=r,l.request=i,n[1](l)}o[t]=void 0}};var u=setTimeout((function(){i({type:"timeout",target:a})}),12e4);a.onerror=a.onload=i,document.head.appendChild(a)}return Promise.all(e)},s.m=t,s.c=r,s.d=function(t,e,n){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},s.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.t=function(t,e){if(1&e&&(t=s(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)s.d(n,r,function(e){return t[e]}.bind(null,r));return n},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="/",s.oe=function(t){throw console.error(t),t};var a=window.webpackJsonp=window.webpackJsonp||[],l=a.push.bind(a);a.push=e,a=a.slice();for(var u=0;u<a.length;u++)e(a[u]);var c=l;i.push([232,0]),n()}([function(t,e,n){"use strict";n.r(e);var r={computed:{layout:function(){return this.$page.path?this.$frontmatter.layout?this.$frontmatter.layout:"Layout":"NotFound"}}},o=n(18),i=Object(o.a)(r,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"global-layout"}},[e(this.layout,{tag:"component"}),this._v(" "),e("Footer")],1)}),[],!1,null,null,null);e.default=i.exports},function(t,e,n){"use strict"; +/*! + * Vue.js v2.6.14 + * (c) 2014-2021 Evan You + * Released under the MIT License. + */var r=Object.freeze({});function o(t){return null==t}function i(t){return null!=t}function s(t){return!0===t}function a(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function l(t){return null!==t&&"object"==typeof t}var u=Object.prototype.toString;function c(t){return"[object Object]"===u.call(t)}function p(t){return"[object RegExp]"===u.call(t)}function d(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return i(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||c(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function m(t){var e=parseFloat(t);return isNaN(e)?t:e}function g(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}g("slot,component",!0);var v=g("key,ref,slot,slot-scope,is");function y(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function w(t,e){return b.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var _=/-(\w)/g,x=k((function(t){return t.replace(_,(function(t,e){return e?e.toUpperCase():""}))})),P=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,S=k((function(t){return t.replace(C,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function I(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function O(t,e){for(var n in e)t[n]=e[n];return t}function M(t){for(var e={},n=0;n<t.length;n++)t[n]&&O(e,t[n]);return e}function A(t,e,n){}var j=function(t,e,n){return!1},$=function(t){return t};function L(t,e){if(t===e)return!0;var n=l(t),r=l(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var o=Array.isArray(t),i=Array.isArray(e);if(o&&i)return t.length===e.length&&t.every((function(t,n){return L(t,e[n])}));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(o||i)return!1;var s=Object.keys(t),a=Object.keys(e);return s.length===a.length&&s.every((function(n){return L(t[n],e[n])}))}catch(t){return!1}}function E(t,e){for(var n=0;n<t.length;n++)if(L(t[n],e))return n;return-1}function V(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}var R=["component","directive","filter"],N=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],D={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:j,isReservedAttr:j,isUnknownElement:j,getTagNamespace:A,parsePlatformTagName:$,mustUseProp:j,async:!0,_lifecycleHooks:N},F=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function H(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var U=new RegExp("[^"+F.source+".$_\\d]");var z,B="__proto__"in{},W="undefined"!=typeof window,q="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,J=q&&WXEnvironment.platform.toLowerCase(),G=W&&window.navigator.userAgent.toLowerCase(),Y=G&&/msie|trident/.test(G),Z=G&&G.indexOf("msie 9.0")>0,K=G&&G.indexOf("edge/")>0,X=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===J),Q=(G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G),G&&G.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(W)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===z&&(z=!W&&!q&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),z},ot=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var st,at="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);st="undefined"!=typeof Set&&it(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=A,ut=0,ct=function(){this.id=ut++,this.subs=[]};ct.prototype.addSub=function(t){this.subs.push(t)},ct.prototype.removeSub=function(t){y(this.subs,t)},ct.prototype.depend=function(){ct.target&&ct.target.addDep(this)},ct.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e<n;e++)t[e].update()},ct.target=null;var pt=[];function dt(t){pt.push(t),ct.target=t}function ft(){pt.pop(),ct.target=pt[pt.length-1]}var ht=function(t,e,n,r,o,i,s,a){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=s,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=a,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},mt={child:{configurable:!0}};mt.child.get=function(){return this.componentInstance},Object.defineProperties(ht.prototype,mt);var gt=function(t){void 0===t&&(t="");var e=new ht;return e.text=t,e.isComment=!0,e};function vt(t){return new ht(void 0,void 0,void 0,String(t))}function yt(t){var e=new ht(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var bt=Array.prototype,wt=Object.create(bt);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var e=bt[t];H(wt,t,(function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o,i=e.apply(this,n),s=this.__ob__;switch(t){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&s.observeArray(o),s.dep.notify(),i}))}));var kt=Object.getOwnPropertyNames(wt),_t=!0;function xt(t){_t=t}var Pt=function(t){this.value=t,this.dep=new ct,this.vmCount=0,H(t,"__ob__",this),Array.isArray(t)?(B?function(t,e){t.__proto__=e}(t,wt):function(t,e,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];H(t,i,e[i])}}(t,wt,kt),this.observeArray(t)):this.walk(t)};function Ct(t,e){var n;if(l(t)&&!(t instanceof ht))return w(t,"__ob__")&&t.__ob__ instanceof Pt?n=t.__ob__:_t&&!rt()&&(Array.isArray(t)||c(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new Pt(t)),e&&n&&n.vmCount++,n}function St(t,e,n,r,o){var i=new ct,s=Object.getOwnPropertyDescriptor(t,e);if(!s||!1!==s.configurable){var a=s&&s.get,l=s&&s.set;a&&!l||2!==arguments.length||(n=t[e]);var u=!o&&Ct(n);Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var e=a?a.call(t):n;return ct.target&&(i.depend(),u&&(u.dep.depend(),Array.isArray(e)&&Ot(e))),e},set:function(e){var r=a?a.call(t):n;e===r||e!=e&&r!=r||a&&!l||(l?l.call(t,e):n=e,u=!o&&Ct(e),i.notify())}})}}function Tt(t,e,n){if(Array.isArray(t)&&d(e))return t.length=Math.max(t.length,e),t.splice(e,1,n),n;if(e in t&&!(e in Object.prototype))return t[e]=n,n;var r=t.__ob__;return t._isVue||r&&r.vmCount?n:r?(St(r.value,e,n),r.dep.notify(),n):(t[e]=n,n)}function It(t,e){if(Array.isArray(t)&&d(e))t.splice(e,1);else{var n=t.__ob__;t._isVue||n&&n.vmCount||w(t,e)&&(delete t[e],n&&n.dep.notify())}}function Ot(t){for(var e=void 0,n=0,r=t.length;n<r;n++)(e=t[n])&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&Ot(e)}Pt.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)St(t,e[n])},Pt.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)Ct(t[e])};var Mt=D.optionMergeStrategies;function At(t,e){if(!e)return t;for(var n,r,o,i=at?Reflect.ownKeys(e):Object.keys(e),s=0;s<i.length;s++)"__ob__"!==(n=i[s])&&(r=t[n],o=e[n],w(t,n)?r!==o&&c(r)&&c(o)&&At(r,o):Tt(t,n,o));return t}function jt(t,e,n){return n?function(){var r="function"==typeof e?e.call(n,n):e,o="function"==typeof t?t.call(n,n):t;return r?At(r,o):o}:e?t?function(){return At("function"==typeof e?e.call(this,this):e,"function"==typeof t?t.call(this,this):t)}:e:t}function $t(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n?function(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(n):n}function Lt(t,e,n,r){var o=Object.create(t||null);return e?O(o,e):o}Mt.data=function(t,e,n){return n?jt(t,e,n):e&&"function"!=typeof e?t:jt(t,e)},N.forEach((function(t){Mt[t]=$t})),R.forEach((function(t){Mt[t+"s"]=Lt})),Mt.watch=function(t,e,n,r){if(t===tt&&(t=void 0),e===tt&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var o={};for(var i in O(o,t),e){var s=o[i],a=e[i];s&&!Array.isArray(s)&&(s=[s]),o[i]=s?s.concat(a):Array.isArray(a)?a:[a]}return o},Mt.props=Mt.methods=Mt.inject=Mt.computed=function(t,e,n,r){if(!t)return e;var o=Object.create(null);return O(o,t),e&&O(o,e),o},Mt.provide=jt;var Et=function(t,e){return void 0===e?t:e};function Vt(t,e,n){if("function"==typeof e&&(e=e.options),function(t,e){var n=t.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)"string"==typeof(o=n[r])&&(i[x(o)]={type:null});else if(c(n))for(var s in n)o=n[s],i[x(s)]=c(o)?o:{type:o};else 0;t.props=i}}(e),function(t,e){var n=t.inject;if(n){var r=t.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(c(n))for(var i in n){var s=n[i];r[i]=c(s)?O({from:i},s):{from:s}}else 0}}(e),function(t){var e=t.directives;if(e)for(var n in e){var r=e[n];"function"==typeof r&&(e[n]={bind:r,update:r})}}(e),!e._base&&(e.extends&&(t=Vt(t,e.extends,n)),e.mixins))for(var r=0,o=e.mixins.length;r<o;r++)t=Vt(t,e.mixins[r],n);var i,s={};for(i in t)a(i);for(i in e)w(t,i)||a(i);function a(r){var o=Mt[r]||Et;s[r]=o(t[r],e[r],n,r)}return s}function Rt(t,e,n,r){if("string"==typeof n){var o=t[e];if(w(o,n))return o[n];var i=x(n);if(w(o,i))return o[i];var s=P(i);return w(o,s)?o[s]:o[n]||o[i]||o[s]}}function Nt(t,e,n,r){var o=e[t],i=!w(n,t),s=n[t],a=Ut(Boolean,o.type);if(a>-1)if(i&&!w(o,"default"))s=!1;else if(""===s||s===S(t)){var l=Ut(String,o.type);(l<0||a<l)&&(s=!0)}if(void 0===s){s=function(t,e,n){if(!w(e,"default"))return;var r=e.default;0;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return"function"==typeof r&&"Function"!==Ft(e.type)?r.call(t):r}(r,o,t);var u=_t;xt(!0),Ct(s),xt(u)}return s}var Dt=/^\s*function (\w+)/;function Ft(t){var e=t&&t.toString().match(Dt);return e?e[1]:""}function Ht(t,e){return Ft(t)===Ft(e)}function Ut(t,e){if(!Array.isArray(e))return Ht(e,t)?0:-1;for(var n=0,r=e.length;n<r;n++)if(Ht(e[n],t))return n;return-1}function zt(t,e,n){dt();try{if(e)for(var r=e;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,t,e,n))return}catch(t){Wt(t,r,"errorCaptured hook")}}Wt(t,e,n)}finally{ft()}}function Bt(t,e,n,r,o){var i;try{(i=n?t.apply(e,n):t.call(e))&&!i._isVue&&f(i)&&!i._handled&&(i.catch((function(t){return zt(t,r,o+" (Promise/async)")})),i._handled=!0)}catch(t){zt(t,r,o)}return i}function Wt(t,e,n){if(D.errorHandler)try{return D.errorHandler.call(null,t,e,n)}catch(e){e!==t&&qt(e,null,"config.errorHandler")}qt(t,e,n)}function qt(t,e,n){if(!W&&!q||"undefined"==typeof console)throw t;console.error(t)}var Jt,Gt=!1,Yt=[],Zt=!1;function Kt(){Zt=!1;var t=Yt.slice(0);Yt.length=0;for(var e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&it(Promise)){var Xt=Promise.resolve();Jt=function(){Xt.then(Kt),X&&setTimeout(A)},Gt=!0}else if(Y||"undefined"==typeof MutationObserver||!it(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Jt="undefined"!=typeof setImmediate&&it(setImmediate)?function(){setImmediate(Kt)}:function(){setTimeout(Kt,0)};else{var Qt=1,te=new MutationObserver(Kt),ee=document.createTextNode(String(Qt));te.observe(ee,{characterData:!0}),Jt=function(){Qt=(Qt+1)%2,ee.data=String(Qt)},Gt=!0}function ne(t,e){var n;if(Yt.push((function(){if(t)try{t.call(e)}catch(t){zt(t,e,"nextTick")}else n&&n(e)})),Zt||(Zt=!0,Jt()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){n=t}))}var re=new st;function oe(t){!function t(e,n){var r,o,i=Array.isArray(e);if(!i&&!l(e)||Object.isFrozen(e)||e instanceof ht)return;if(e.__ob__){var s=e.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(i)for(r=e.length;r--;)t(e[r],n);else for(o=Object.keys(e),r=o.length;r--;)t(e[o[r]],n)}(t,re),re.clear()}var ie=k((function(t){var e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),r="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:n,capture:r,passive:e}}));function se(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(r))return Bt(r,null,arguments,e,"v-on handler");for(var o=r.slice(),i=0;i<o.length;i++)Bt(o[i],null,t,e,"v-on handler")}return n.fns=t,n}function ae(t,e,n,r,i,a){var l,u,c,p;for(l in t)u=t[l],c=e[l],p=ie(l),o(u)||(o(c)?(o(u.fns)&&(u=t[l]=se(u,a)),s(p.once)&&(u=t[l]=i(p.name,u,p.capture)),n(p.name,u,p.capture,p.passive,p.params)):u!==c&&(c.fns=u,t[l]=c));for(l in e)o(t[l])&&r((p=ie(l)).name,e[l],p.capture)}function le(t,e,n){var r;t instanceof ht&&(t=t.data.hook||(t.data.hook={}));var a=t[e];function l(){n.apply(this,arguments),y(r.fns,l)}o(a)?r=se([l]):i(a.fns)&&s(a.merged)?(r=a).fns.push(l):r=se([a,l]),r.merged=!0,t[e]=r}function ue(t,e,n,r,o){if(i(e)){if(w(e,n))return t[n]=e[n],o||delete e[n],!0;if(w(e,r))return t[n]=e[r],o||delete e[r],!0}return!1}function ce(t){return a(t)?[vt(t)]:Array.isArray(t)?function t(e,n){var r,l,u,c,p=[];for(r=0;r<e.length;r++)o(l=e[r])||"boolean"==typeof l||(u=p.length-1,c=p[u],Array.isArray(l)?l.length>0&&(pe((l=t(l,(n||"")+"_"+r))[0])&&pe(c)&&(p[u]=vt(c.text+l[0].text),l.shift()),p.push.apply(p,l)):a(l)?pe(c)?p[u]=vt(c.text+l):""!==l&&p.push(vt(l)):pe(l)&&pe(c)?p[u]=vt(c.text+l.text):(s(e._isVList)&&i(l.tag)&&o(l.key)&&i(n)&&(l.key="__vlist"+n+"_"+r+"__"),p.push(l)));return p}(t):void 0}function pe(t){return i(t)&&i(t.text)&&!1===t.isComment}function de(t,e){if(t){for(var n=Object.create(null),r=at?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){for(var s=t[i].from,a=e;a;){if(a._provided&&w(a._provided,s)){n[i]=a._provided[s];break}a=a.$parent}if(!a)if("default"in t[i]){var l=t[i].default;n[i]="function"==typeof l?l.call(e):l}else 0}}return n}}function fe(t,e){if(!t||!t.length)return{};for(var n={},r=0,o=t.length;r<o;r++){var i=t[r],s=i.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,i.context!==e&&i.fnContext!==e||!s||null==s.slot)(n.default||(n.default=[])).push(i);else{var a=s.slot,l=n[a]||(n[a]=[]);"template"===i.tag?l.push.apply(l,i.children||[]):l.push(i)}}for(var u in n)n[u].every(he)&&delete n[u];return n}function he(t){return t.isComment&&!t.asyncFactory||" "===t.text}function me(t){return t.isComment&&t.asyncFactory}function ge(t,e,n){var o,i=Object.keys(e).length>0,s=t?!!t.$stable:!i,a=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&n&&n!==r&&a===n.$key&&!i&&!n.$hasNormal)return n;for(var l in o={},t)t[l]&&"$"!==l[0]&&(o[l]=ve(e,l,t[l]))}else o={};for(var u in e)u in o||(o[u]=ye(e,u));return t&&Object.isExtensible(t)&&(t._normalized=o),H(o,"$stable",s),H(o,"$key",a),H(o,"$hasNormal",i),o}function ve(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({}),e=(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:ce(t))&&t[0];return t&&(!e||1===t.length&&e.isComment&&!me(e))?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ye(t,e){return function(){return t[e]}}function be(t,e){var n,r,o,s,a;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;r<o;r++)n[r]=e(t[r],r);else if("number"==typeof t)for(n=new Array(t),r=0;r<t;r++)n[r]=e(r+1,r);else if(l(t))if(at&&t[Symbol.iterator]){n=[];for(var u=t[Symbol.iterator](),c=u.next();!c.done;)n.push(e(c.value,n.length)),c=u.next()}else for(s=Object.keys(t),n=new Array(s.length),r=0,o=s.length;r<o;r++)a=s[r],n[r]=e(t[a],a,r);return i(n)||(n=[]),n._isVList=!0,n}function we(t,e,n,r){var o,i=this.$scopedSlots[t];i?(n=n||{},r&&(n=O(O({},r),n)),o=i(n)||("function"==typeof e?e():e)):o=this.$slots[t]||("function"==typeof e?e():e);var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function ke(t){return Rt(this.$options,"filters",t)||$}function _e(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}function xe(t,e,n,r,o){var i=D.keyCodes[e]||n;return o&&r&&!D.keyCodes[e]?_e(o,r):i?_e(i,t):r?S(r)!==e:void 0===t}function Pe(t,e,n,r,o){if(n)if(l(n)){var i;Array.isArray(n)&&(n=M(n));var s=function(s){if("class"===s||"style"===s||v(s))i=t;else{var a=t.attrs&&t.attrs.type;i=r||D.mustUseProp(e,a,s)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var l=x(s),u=S(s);l in i||u in i||(i[s]=n[s],o&&((t.on||(t.on={}))["update:"+s]=function(t){n[s]=t}))};for(var a in n)s(a)}else;return t}function Ce(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];return r&&!e||Te(r=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,null,this),"__static__"+t,!1),r}function Se(t,e,n){return Te(t,"__once__"+e+(n?"_"+n:""),!0),t}function Te(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!=typeof t[r]&&Ie(t[r],e+"_"+r,n);else Ie(t,e,n)}function Ie(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function Oe(t,e){if(e)if(c(e)){var n=t.on=t.on?O({},t.on):{};for(var r in e){var o=n[r],i=e[r];n[r]=o?[].concat(o,i):i}}else;return t}function Me(t,e,n,r){e=e||{$stable:!n};for(var o=0;o<t.length;o++){var i=t[o];Array.isArray(i)?Me(i,e,n):i&&(i.proxy&&(i.fn.proxy=!0),e[i.key]=i.fn)}return r&&(e.$key=r),e}function Ae(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeof r&&r&&(t[e[n]]=e[n+1])}return t}function je(t,e){return"string"==typeof t?e+t:t}function $e(t){t._o=Se,t._n=m,t._s=h,t._l=be,t._t=we,t._q=L,t._i=E,t._m=Ce,t._f=ke,t._k=xe,t._b=Pe,t._v=vt,t._e=gt,t._u=Me,t._g=Oe,t._d=Ae,t._p=je}function Le(t,e,n,o,i){var a,l=this,u=i.options;w(o,"_uid")?(a=Object.create(o))._original=o:(a=o,o=o._original);var c=s(u._compiled),p=!c;this.data=t,this.props=e,this.children=n,this.parent=o,this.listeners=t.on||r,this.injections=de(u.inject,o),this.slots=function(){return l.$slots||ge(t.scopedSlots,l.$slots=fe(n,o)),l.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return ge(t.scopedSlots,this.slots())}}),c&&(this.$options=u,this.$slots=this.slots(),this.$scopedSlots=ge(t.scopedSlots,this.$slots)),u._scopeId?this._c=function(t,e,n,r){var i=He(a,t,e,n,r,p);return i&&!Array.isArray(i)&&(i.fnScopeId=u._scopeId,i.fnContext=o),i}:this._c=function(t,e,n,r){return He(a,t,e,n,r,p)}}function Ee(t,e,n,r,o){var i=yt(t);return i.fnContext=n,i.fnOptions=r,e.slot&&((i.data||(i.data={})).slot=e.slot),i}function Ve(t,e){for(var n in e)t[x(n)]=e[n]}$e(Le.prototype);var Re={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;Re.prepatch(n,n)}else{(t.componentInstance=function(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;i(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Ze)).$mount(e?t.elm:void 0,e)}},prepatch:function(t,e){var n=e.componentOptions;!function(t,e,n,o,i){0;var s=o.data.scopedSlots,a=t.$scopedSlots,l=!!(s&&!s.$stable||a!==r&&!a.$stable||s&&t.$scopedSlots.$key!==s.$key||!s&&t.$scopedSlots.$key),u=!!(i||t.$options._renderChildren||l);t.$options._parentVnode=o,t.$vnode=o,t._vnode&&(t._vnode.parent=o);if(t.$options._renderChildren=i,t.$attrs=o.data.attrs||r,t.$listeners=n||r,e&&t.$options.props){xt(!1);for(var c=t._props,p=t.$options._propKeys||[],d=0;d<p.length;d++){var f=p[d],h=t.$options.props;c[f]=Nt(f,h,e,t)}xt(!0),t.$options.propsData=e}n=n||r;var m=t.$options._parentListeners;t.$options._parentListeners=n,Ye(t,n,m),u&&(t.$slots=fe(i,o.context),t.$forceUpdate());0}(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e,n=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,tn(r,"mounted")),t.data.keepAlive&&(n._isMounted?((e=r)._inactive=!1,nn.push(e)):Qe(r,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?function t(e,n){if(n&&(e._directInactive=!0,Xe(e)))return;if(!e._inactive){e._inactive=!0;for(var r=0;r<e.$children.length;r++)t(e.$children[r]);tn(e,"deactivated")}}(e,!0):e.$destroy())}},Ne=Object.keys(Re);function De(t,e,n,a,u){if(!o(t)){var c=n.$options._base;if(l(t)&&(t=c.extend(t)),"function"==typeof t){var p;if(o(t.cid)&&void 0===(t=function(t,e){if(s(t.error)&&i(t.errorComp))return t.errorComp;if(i(t.resolved))return t.resolved;var n=ze;n&&i(t.owners)&&-1===t.owners.indexOf(n)&&t.owners.push(n);if(s(t.loading)&&i(t.loadingComp))return t.loadingComp;if(n&&!i(t.owners)){var r=t.owners=[n],a=!0,u=null,c=null;n.$on("hook:destroyed",(function(){return y(r,n)}));var p=function(t){for(var e=0,n=r.length;e<n;e++)r[e].$forceUpdate();t&&(r.length=0,null!==u&&(clearTimeout(u),u=null),null!==c&&(clearTimeout(c),c=null))},d=V((function(n){t.resolved=Be(n,e),a?r.length=0:p(!0)})),h=V((function(e){i(t.errorComp)&&(t.error=!0,p(!0))})),m=t(d,h);return l(m)&&(f(m)?o(t.resolved)&&m.then(d,h):f(m.component)&&(m.component.then(d,h),i(m.error)&&(t.errorComp=Be(m.error,e)),i(m.loading)&&(t.loadingComp=Be(m.loading,e),0===m.delay?t.loading=!0:u=setTimeout((function(){u=null,o(t.resolved)&&o(t.error)&&(t.loading=!0,p(!1))}),m.delay||200)),i(m.timeout)&&(c=setTimeout((function(){c=null,o(t.resolved)&&h(null)}),m.timeout)))),a=!1,t.loading?t.loadingComp:t.resolved}}(p=t,c)))return function(t,e,n,r,o){var i=gt();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}(p,e,n,a,u);e=e||{},xn(t),i(e.model)&&function(t,e){var n=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(e.attrs||(e.attrs={}))[n]=e.model.value;var o=e.on||(e.on={}),s=o[r],a=e.model.callback;i(s)?(Array.isArray(s)?-1===s.indexOf(a):s!==a)&&(o[r]=[a].concat(s)):o[r]=a}(t.options,e);var d=function(t,e,n){var r=e.options.props;if(!o(r)){var s={},a=t.attrs,l=t.props;if(i(a)||i(l))for(var u in r){var c=S(u);ue(s,l,u,c,!0)||ue(s,a,u,c,!1)}return s}}(e,t);if(s(t.options.functional))return function(t,e,n,o,s){var a=t.options,l={},u=a.props;if(i(u))for(var c in u)l[c]=Nt(c,u,e||r);else i(n.attrs)&&Ve(l,n.attrs),i(n.props)&&Ve(l,n.props);var p=new Le(n,l,s,o,t),d=a.render.call(null,p._c,p);if(d instanceof ht)return Ee(d,n,p.parent,a,p);if(Array.isArray(d)){for(var f=ce(d)||[],h=new Array(f.length),m=0;m<f.length;m++)h[m]=Ee(f[m],n,p.parent,a,p);return h}}(t,d,e,n,a);var h=e.on;if(e.on=e.nativeOn,s(t.options.abstract)){var m=e.slot;e={},m&&(e.slot=m)}!function(t){for(var e=t.hook||(t.hook={}),n=0;n<Ne.length;n++){var r=Ne[n],o=e[r],i=Re[r];o===i||o&&o._merged||(e[r]=o?Fe(i,o):i)}}(e);var g=t.options.name||u;return new ht("vue-component-"+t.cid+(g?"-"+g:""),e,void 0,void 0,void 0,n,{Ctor:t,propsData:d,listeners:h,tag:u,children:a},p)}}}function Fe(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}function He(t,e,n,r,u,c){return(Array.isArray(n)||a(n))&&(u=r,r=n,n=void 0),s(c)&&(u=2),function(t,e,n,r,a){if(i(n)&&i(n.__ob__))return gt();i(n)&&i(n.is)&&(e=n.is);if(!e)return gt();0;Array.isArray(r)&&"function"==typeof r[0]&&((n=n||{}).scopedSlots={default:r[0]},r.length=0);2===a?r=ce(r):1===a&&(r=function(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}(r));var u,c;if("string"==typeof e){var p;c=t.$vnode&&t.$vnode.ns||D.getTagNamespace(e),u=D.isReservedTag(e)?new ht(D.parsePlatformTagName(e),n,r,void 0,void 0,t):n&&n.pre||!i(p=Rt(t.$options,"components",e))?new ht(e,n,r,void 0,void 0,t):De(p,n,t,r,e)}else u=De(e,n,t,r);return Array.isArray(u)?u:i(u)?(i(c)&&function t(e,n,r){e.ns=n,"foreignObject"===e.tag&&(n=void 0,r=!0);if(i(e.children))for(var a=0,l=e.children.length;a<l;a++){var u=e.children[a];i(u.tag)&&(o(u.ns)||s(r)&&"svg"!==u.tag)&&t(u,n,r)}}(u,c),i(n)&&function(t){l(t.style)&&oe(t.style);l(t.class)&&oe(t.class)}(n),u):gt()}(t,e,n,r,u)}var Ue,ze=null;function Be(t,e){return(t.__esModule||at&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function We(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(i(n)&&(i(n.componentOptions)||me(n)))return n}}function qe(t,e){Ue.$on(t,e)}function Je(t,e){Ue.$off(t,e)}function Ge(t,e){var n=Ue;return function r(){var o=e.apply(null,arguments);null!==o&&n.$off(t,r)}}function Ye(t,e,n){Ue=t,ae(e,n||{},qe,Je,Ge,t),Ue=void 0}var Ze=null;function Ke(t){var e=Ze;return Ze=t,function(){Ze=e}}function Xe(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Qe(t,e){if(e){if(t._directInactive=!1,Xe(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)Qe(t.$children[n]);tn(t,"activated")}}function tn(t,e){dt();var n=t.$options[e],r=e+" hook";if(n)for(var o=0,i=n.length;o<i;o++)Bt(n[o],t,null,t,r);t._hasHookEvent&&t.$emit("hook:"+e),ft()}var en=[],nn=[],rn={},on=!1,sn=!1,an=0;var ln=0,un=Date.now;if(W&&!Y){var cn=window.performance;cn&&"function"==typeof cn.now&&un()>document.createEvent("Event").timeStamp&&(un=function(){return cn.now()})}function pn(){var t,e;for(ln=un(),sn=!0,en.sort((function(t,e){return t.id-e.id})),an=0;an<en.length;an++)(t=en[an]).before&&t.before(),e=t.id,rn[e]=null,t.run();var n=nn.slice(),r=en.slice();an=en.length=nn.length=0,rn={},on=sn=!1,function(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Qe(t[e],!0)}(n),function(t){var e=t.length;for(;e--;){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&tn(r,"updated")}}(r),ot&&D.devtools&&ot.emit("flush")}var dn=0,fn=function(t,e,n,r,o){this.vm=t,o&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++dn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new st,this.newDepIds=new st,this.expression="","function"==typeof e?this.getter=e:(this.getter=function(t){if(!U.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}(e),this.getter||(this.getter=A)),this.value=this.lazy?void 0:this.get()};fn.prototype.get=function(){var t;dt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;zt(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&oe(t),ft(),this.cleanupDeps()}return t},fn.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},fn.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},fn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(t){var e=t.id;if(null==rn[e]){if(rn[e]=!0,sn){for(var n=en.length-1;n>an&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,ne(pn))}}(this)},fn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'+this.expression+'"';Bt(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var hn={enumerable:!0,configurable:!0,get:A,set:A};function mn(t,e,n){hn.get=function(){return this[e][n]},hn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,hn)}function gn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[];t.$parent&&xt(!1);var i=function(i){o.push(i);var s=Nt(i,e,n,t);St(r,i,s),i in t||mn(t,"_props",i)};for(var s in e)i(s);xt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?A:T(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;c(e=t._data="function"==typeof e?function(t,e){dt();try{return t.call(e,e)}catch(t){return zt(t,e,"data()"),{}}finally{ft()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);for(;o--;){var i=n[o];0,r&&w(r,i)||(s=void 0,36!==(s=(i+"").charCodeAt(0))&&95!==s&&mn(t,"_data",i))}var s;Ct(e,!0)}(t):Ct(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var o in e){var i=e[o],s="function"==typeof i?i:i.get;0,r||(n[o]=new fn(t,s||A,A,vn)),o in t||yn(t,o,i)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)kn(t,n,r[o]);else kn(t,n,r)}}(t,e.watch)}var vn={lazy:!0};function yn(t,e,n){var r=!rt();"function"==typeof n?(hn.get=r?bn(e):wn(n),hn.set=A):(hn.get=n.get?r&&!1!==n.cache?bn(e):wn(n.get):A,hn.set=n.set||A),Object.defineProperty(t,e,hn)}function bn(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),ct.target&&e.depend(),e.value}}function wn(t){return function(){return t.call(this,this)}}function kn(t,e,n,r){return c(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}var _n=0;function xn(t){var e=t.options;if(t.super){var n=xn(t.super);if(n!==t.superOptions){t.superOptions=n;var r=function(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!==r[o]&&(e||(e={}),e[o]=n[o]);return e}(t);r&&O(t.extendOptions,r),(e=t.options=Vt(n,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function Pn(t){this._init(t)}function Cn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name;var s=function(t){this._init(t)};return(s.prototype=Object.create(n.prototype)).constructor=s,s.cid=e++,s.options=Vt(n.options,t),s.super=n,s.options.props&&function(t){var e=t.options.props;for(var n in e)mn(t.prototype,"_props",n)}(s),s.options.computed&&function(t){var e=t.options.computed;for(var n in e)yn(t.prototype,n,e[n])}(s),s.extend=n.extend,s.mixin=n.mixin,s.use=n.use,R.forEach((function(t){s[t]=n[t]})),i&&(s.options.components[i]=s),s.superOptions=n.options,s.extendOptions=t,s.sealedOptions=O({},s.options),o[r]=s,s}}function Sn(t){return t&&(t.Ctor.options.name||t.tag)}function Tn(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!p(t)&&t.test(e)}function In(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var s=n[i];if(s){var a=s.name;a&&!e(a)&&On(n,i,r,o)}}}function On(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=_n++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Vt(xn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ye(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=fe(e._renderChildren,o),t.$scopedSlots=r,t._c=function(e,n,r,o){return He(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return He(t,e,n,r,o,!0)};var i=n&&n.data;St(t,"$attrs",i&&i.attrs||r,null,!0),St(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate"),function(t){var e=de(t.$options.inject,t);e&&(xt(!1),Object.keys(e).forEach((function(n){St(t,n,e[n])})),xt(!0))}(e),gn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),tn(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(Pn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Tt,t.prototype.$delete=It,t.prototype.$watch=function(t,e,n){if(c(e))return kn(this,t,e,n);(n=n||{}).user=!0;var r=new fn(this,t,e,n);if(n.immediate){var o='callback for immediate watcher "'+r.expression+'"';dt(),Bt(e,this,[r.value],this,o),ft()}return function(){r.teardown()}}}(Pn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o<i;o++)r.$on(t[o],n);else(r._events[t]||(r._events[t]=[])).push(n),e.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,e){var n=this;function r(){n.$off(t,r),e.apply(n,arguments)}return r.fn=e,n.$on(t,r),n},t.prototype.$off=function(t,e){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(t)){for(var r=0,o=t.length;r<o;r++)n.$off(t[r],e);return n}var i,s=n._events[t];if(!s)return n;if(!e)return n._events[t]=null,n;for(var a=s.length;a--;)if((i=s[a])===e||i.fn===e){s.splice(a,1);break}return n},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?I(n):n;for(var r=I(arguments,1),o='event handler for "'+t+'"',i=0,s=n.length;i<s;i++)Bt(n[i],e,r,e,o)}return e}}(Pn),function(t){t.prototype._update=function(t,e){var n=this,r=n.$el,o=n._vnode,i=Ke(n);n._vnode=t,n.$el=o?n.__patch__(o,t):n.__patch__(n.$el,t,e,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){tn(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||y(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),tn(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(Pn),function(t){$e(t.prototype),t.prototype.$nextTick=function(t){return ne(t,this)},t.prototype._render=function(){var t,e=this,n=e.$options,r=n.render,o=n._parentVnode;o&&(e.$scopedSlots=ge(o.data.scopedSlots,e.$slots,e.$scopedSlots)),e.$vnode=o;try{ze=e,t=r.call(e._renderProxy,e.$createElement)}catch(n){zt(n,e,"render"),t=e._vnode}finally{ze=null}return Array.isArray(t)&&1===t.length&&(t=t[0]),t instanceof ht||(t=gt()),t.parent=o,t}}(Pn);var Mn=[String,RegExp,Array],An={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Mn,exclude:Mn,max:[String,Number]},methods:{cacheVNode:function(){var t=this.cache,e=this.keys,n=this.vnodeToCache,r=this.keyToCache;if(n){var o=n.tag,i=n.componentInstance,s=n.componentOptions;t[r]={name:Sn(s),tag:o,componentInstance:i},e.push(r),this.max&&e.length>parseInt(this.max)&&On(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)On(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){In(t,(function(t){return Tn(e,t)}))})),this.$watch("exclude",(function(e){In(t,(function(t){return!Tn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=We(t),n=e&&e.componentOptions;if(n){var r=Sn(n),o=this.include,i=this.exclude;if(o&&(!r||!Tn(o,r))||i&&r&&Tn(i,r))return e;var s=this.cache,a=this.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;s[l]?(e.componentInstance=s[l].componentInstance,y(a,l),a.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return D}};Object.defineProperty(t,"config",e),t.util={warn:lt,extend:O,mergeOptions:Vt,defineReactive:St},t.set=Tt,t.delete=It,t.nextTick=ne,t.observable=function(t){return Ct(t),t},t.options=Object.create(null),R.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,O(t.options.components,An),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=I(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Vt(this.options,t),this}}(t),Cn(t),function(t){R.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&c(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Pn),Object.defineProperty(Pn.prototype,"$isServer",{get:rt}),Object.defineProperty(Pn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Pn,"FunctionalRenderContext",{value:Le}),Pn.version="2.6.14";var jn=g("style,class"),$n=g("input,textarea,option,select,progress"),Ln=g("contenteditable,draggable,spellcheck"),En=g("events,caret,typing,plaintext-only"),Vn=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Rn="http://www.w3.org/1999/xlink",Nn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Dn=function(t){return Nn(t)?t.slice(6,t.length):""},Fn=function(t){return null==t||!1===t};function Hn(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=Un(r.data,e));for(;i(n=n.parent);)n&&n.data&&(e=Un(e,n.data));return function(t,e){if(i(t)||i(e))return zn(t,Bn(e));return""}(e.staticClass,e.class)}function Un(t,e){return{staticClass:zn(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function zn(t,e){return t?e?t+" "+e:t:e||""}function Bn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r<o;r++)i(e=Bn(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):l(t)?function(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}var Wn={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},qn=g("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Jn=g("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Gn=function(t){return qn(t)||Jn(t)};var Yn=Object.create(null);var Zn=g("text,number,password,search,email,tel,url");var Kn=Object.freeze({createElement:function(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(Wn[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),Xn={create:function(t,e){Qn(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Qn(t,!0),Qn(e))},destroy:function(t){Qn(t,!0)}};function Qn(t,e){var n=t.data.ref;if(i(n)){var r=t.context,o=t.componentInstance||t.elm,s=r.$refs;e?Array.isArray(s[n])?y(s[n],o):s[n]===o&&(s[n]=void 0):t.data.refInFor?Array.isArray(s[n])?s[n].indexOf(o)<0&&s[n].push(o):s[n]=[o]:s[n]=o}}var tr=new ht("",{},[]),er=["create","activate","update","remove","destroy"];function nr(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&i(t.data)===i(e.data)&&function(t,e){if("input"!==t.tag)return!0;var n,r=i(n=t.data)&&i(n=n.attrs)&&n.type,o=i(n=e.data)&&i(n=n.attrs)&&n.type;return r===o||Zn(r)&&Zn(o)}(t,e)||s(t.isAsyncPlaceholder)&&o(e.asyncFactory.error))}function rr(t,e,n){var r,o,s={};for(r=e;r<=n;++r)i(o=t[r].key)&&(s[o]=r);return s}var or={create:ir,update:ir,destroy:function(t){ir(t,tr)}};function ir(t,e){(t.data.directives||e.data.directives)&&function(t,e){var n,r,o,i=t===tr,s=e===tr,a=ar(t.data.directives,t.context),l=ar(e.data.directives,e.context),u=[],c=[];for(n in l)r=a[n],o=l[n],r?(o.oldValue=r.value,o.oldArg=r.arg,ur(o,"update",e,t),o.def&&o.def.componentUpdated&&c.push(o)):(ur(o,"bind",e,t),o.def&&o.def.inserted&&u.push(o));if(u.length){var p=function(){for(var n=0;n<u.length;n++)ur(u[n],"inserted",e,t)};i?le(e,"insert",p):p()}c.length&&le(e,"postpatch",(function(){for(var n=0;n<c.length;n++)ur(c[n],"componentUpdated",e,t)}));if(!i)for(n in a)l[n]||ur(a[n],"unbind",t,t,s)}(t,e)}var sr=Object.create(null);function ar(t,e){var n,r,o=Object.create(null);if(!t)return o;for(n=0;n<t.length;n++)(r=t[n]).modifiers||(r.modifiers=sr),o[lr(r)]=r,r.def=Rt(e.$options,"directives",r.name);return o}function lr(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function ur(t,e,n,r,o){var i=t.def&&t.def[e];if(i)try{i(n.elm,t,n,r,o)}catch(r){zt(r,n.context,"directive "+t.name+" "+e+" hook")}}var cr=[Xn,or];function pr(t,e){var n=e.componentOptions;if(!(i(n)&&!1===n.Ctor.options.inheritAttrs||o(t.data.attrs)&&o(e.data.attrs))){var r,s,a=e.elm,l=t.data.attrs||{},u=e.data.attrs||{};for(r in i(u.__ob__)&&(u=e.data.attrs=O({},u)),u)s=u[r],l[r]!==s&&dr(a,r,s,e.data.pre);for(r in(Y||K)&&u.value!==l.value&&dr(a,"value",u.value),l)o(u[r])&&(Nn(r)?a.removeAttributeNS(Rn,Dn(r)):Ln(r)||a.removeAttribute(r))}}function dr(t,e,n,r){r||t.tagName.indexOf("-")>-1?fr(t,e,n):Vn(e)?Fn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ln(e)?t.setAttribute(e,function(t,e){return Fn(e)||"false"===e?"false":"contenteditable"===t&&En(e)?e:"true"}(e,n)):Nn(e)?Fn(n)?t.removeAttributeNS(Rn,Dn(e)):t.setAttributeNS(Rn,e,n):fr(t,e,n)}function fr(t,e,n){if(Fn(n))t.removeAttribute(e);else{if(Y&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var hr={create:pr,update:pr};function mr(t,e){var n=e.elm,r=e.data,s=t.data;if(!(o(r.staticClass)&&o(r.class)&&(o(s)||o(s.staticClass)&&o(s.class)))){var a=Hn(e),l=n._transitionClasses;i(l)&&(a=zn(a,Bn(l))),a!==n._prevClass&&(n.setAttribute("class",a),n._prevClass=a)}}var gr,vr={create:mr,update:mr};function yr(t,e,n){var r=gr;return function o(){var i=e.apply(null,arguments);null!==i&&kr(t,o,n,r)}}var br=Gt&&!(Q&&Number(Q[1])<=53);function wr(t,e,n,r){if(br){var o=ln,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}gr.addEventListener(t,e,et?{capture:n,passive:r}:n)}function kr(t,e,n,r){(r||gr).removeEventListener(t,e._wrapper||e,n)}function _r(t,e){if(!o(t.data.on)||!o(e.data.on)){var n=e.data.on||{},r=t.data.on||{};gr=e.elm,function(t){if(i(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}i(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ae(n,r,wr,kr,yr,e.context),gr=void 0}}var xr,Pr={create:_r,update:_r};function Cr(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var n,r,s=e.elm,a=t.data.domProps||{},l=e.data.domProps||{};for(n in i(l.__ob__)&&(l=e.data.domProps=O({},l)),a)n in l||(s[n]="");for(n in l){if(r=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===a[n])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===n&&"PROGRESS"!==s.tagName){s._value=r;var u=o(r)?"":String(r);Sr(s,u)&&(s.value=u)}else if("innerHTML"===n&&Jn(s.tagName)&&o(s.innerHTML)){(xr=xr||document.createElement("div")).innerHTML="<svg>"+r+"</svg>";for(var c=xr.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;c.firstChild;)s.appendChild(c.firstChild)}else if(r!==a[n])try{s[n]=r}catch(t){}}}}function Sr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(i(r)){if(r.number)return m(n)!==m(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Tr={create:Cr,update:Cr},Ir=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Or(t){var e=Mr(t.style);return t.staticStyle?O(t.staticStyle,e):e}function Mr(t){return Array.isArray(t)?M(t):"string"==typeof t?Ir(t):t}var Ar,jr=/^--/,$r=/\s*!important$/,Lr=function(t,e,n){if(jr.test(e))t.style.setProperty(e,n);else if($r.test(n))t.style.setProperty(S(e),n.replace($r,""),"important");else{var r=Vr(e);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)t.style[r]=n[o];else t.style[r]=n}},Er=["Webkit","Moz","ms"],Vr=k((function(t){if(Ar=Ar||document.createElement("div").style,"filter"!==(t=x(t))&&t in Ar)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<Er.length;n++){var r=Er[n]+e;if(r in Ar)return r}}));function Rr(t,e){var n=e.data,r=t.data;if(!(o(n.staticStyle)&&o(n.style)&&o(r.staticStyle)&&o(r.style))){var s,a,l=e.elm,u=r.staticStyle,c=r.normalizedStyle||r.style||{},p=u||c,d=Mr(e.data.style)||{};e.data.normalizedStyle=i(d.__ob__)?O({},d):d;var f=function(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=Or(o.data))&&O(r,n);(n=Or(t.data))&&O(r,n);for(var i=t;i=i.parent;)i.data&&(n=Or(i.data))&&O(r,n);return r}(e,!0);for(a in p)o(f[a])&&Lr(l,a,"");for(a in f)(s=f[a])!==p[a]&&Lr(l,a,null==s?"":s)}}var Nr={create:Rr,update:Rr},Dr=/\s+/;function Fr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Dr).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Hr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Dr).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function Ur(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&O(e,zr(t.name||"v")),O(e,t),e}return"string"==typeof t?zr(t):void 0}}var zr=k((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Br=W&&!Z,Wr="transition",qr="transitionend",Jr="animation",Gr="animationend";Br&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Wr="WebkitTransition",qr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Jr="WebkitAnimation",Gr="webkitAnimationEnd"));var Yr=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Zr(t){Yr((function(){Yr(t)}))}function Kr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Fr(t,e))}function Xr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Hr(t,e)}function Qr(t,e,n){var r=eo(t,e),o=r.type,i=r.timeout,s=r.propCount;if(!o)return n();var a="transition"===o?qr:Gr,l=0,u=function(){t.removeEventListener(a,c),n()},c=function(e){e.target===t&&++l>=s&&u()};setTimeout((function(){l<s&&u()}),i+1),t.addEventListener(a,c)}var to=/\b(transform|all)(,|$)/;function eo(t,e){var n,r=window.getComputedStyle(t),o=(r[Wr+"Delay"]||"").split(", "),i=(r[Wr+"Duration"]||"").split(", "),s=no(o,i),a=(r[Jr+"Delay"]||"").split(", "),l=(r[Jr+"Duration"]||"").split(", "),u=no(a,l),c=0,p=0;return"transition"===e?s>0&&(n="transition",c=s,p=i.length):"animation"===e?u>0&&(n="animation",c=u,p=l.length):p=(n=(c=Math.max(s,u))>0?s>u?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:c,propCount:p,hasTransform:"transition"===n&&to.test(r[Wr+"Property"])}}function no(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map((function(e,n){return ro(e)+ro(t[n])})))}function ro(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function oo(t,e){var n=t.elm;i(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=Ur(t.data.transition);if(!o(r)&&!i(n._enterCb)&&1===n.nodeType){for(var s=r.css,a=r.type,u=r.enterClass,c=r.enterToClass,p=r.enterActiveClass,d=r.appearClass,f=r.appearToClass,h=r.appearActiveClass,g=r.beforeEnter,v=r.enter,y=r.afterEnter,b=r.enterCancelled,w=r.beforeAppear,k=r.appear,_=r.afterAppear,x=r.appearCancelled,P=r.duration,C=Ze,S=Ze.$vnode;S&&S.parent;)C=S.context,S=S.parent;var T=!C._isMounted||!t.isRootInsert;if(!T||k||""===k){var I=T&&d?d:u,O=T&&h?h:p,M=T&&f?f:c,A=T&&w||g,j=T&&"function"==typeof k?k:v,$=T&&_||y,L=T&&x||b,E=m(l(P)?P.enter:P);0;var R=!1!==s&&!Z,N=ao(j),D=n._enterCb=V((function(){R&&(Xr(n,M),Xr(n,O)),D.cancelled?(R&&Xr(n,I),L&&L(n)):$&&$(n),n._enterCb=null}));t.data.show||le(t,"insert",(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];r&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),j&&j(n,D)})),A&&A(n),R&&(Kr(n,I),Kr(n,O),Zr((function(){Xr(n,I),D.cancelled||(Kr(n,M),N||(so(E)?setTimeout(D,E):Qr(n,a,D)))}))),t.data.show&&(e&&e(),j&&j(n,D)),R||N||D()}}}function io(t,e){var n=t.elm;i(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var r=Ur(t.data.transition);if(o(r)||1!==n.nodeType)return e();if(!i(n._leaveCb)){var s=r.css,a=r.type,u=r.leaveClass,c=r.leaveToClass,p=r.leaveActiveClass,d=r.beforeLeave,f=r.leave,h=r.afterLeave,g=r.leaveCancelled,v=r.delayLeave,y=r.duration,b=!1!==s&&!Z,w=ao(f),k=m(l(y)?y.leave:y);0;var _=n._leaveCb=V((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[t.key]=null),b&&(Xr(n,c),Xr(n,p)),_.cancelled?(b&&Xr(n,u),g&&g(n)):(e(),h&&h(n)),n._leaveCb=null}));v?v(x):x()}function x(){_.cancelled||(!t.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[t.key]=t),d&&d(n),b&&(Kr(n,u),Kr(n,p),Zr((function(){Xr(n,u),_.cancelled||(Kr(n,c),w||(so(k)?setTimeout(_,k):Qr(n,a,_)))}))),f&&f(n,_),b||w||_())}}function so(t){return"number"==typeof t&&!isNaN(t)}function ao(t){if(o(t))return!1;var e=t.fns;return i(e)?ao(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function lo(t,e){!0!==e.data.show&&oo(e)}var uo=function(t){var e,n,r={},l=t.modules,u=t.nodeOps;for(e=0;e<er.length;++e)for(r[er[e]]=[],n=0;n<l.length;++n)i(l[n][er[e]])&&r[er[e]].push(l[n][er[e]]);function c(t){var e=u.parentNode(t);i(e)&&u.removeChild(e,t)}function p(t,e,n,o,a,l,c){if(i(t.elm)&&i(l)&&(t=l[c]=yt(t)),t.isRootInsert=!a,!function(t,e,n,o){var a=t.data;if(i(a)){var l=i(t.componentInstance)&&a.keepAlive;if(i(a=a.hook)&&i(a=a.init)&&a(t,!1),i(t.componentInstance))return d(t,e),f(n,t.elm,o),s(l)&&function(t,e,n,o){var s,a=t;for(;a.componentInstance;)if(a=a.componentInstance._vnode,i(s=a.data)&&i(s=s.transition)){for(s=0;s<r.activate.length;++s)r.activate[s](tr,a);e.push(a);break}f(n,t.elm,o)}(t,e,n,o),!0}}(t,e,n,o)){var p=t.data,m=t.children,g=t.tag;i(g)?(t.elm=t.ns?u.createElementNS(t.ns,g):u.createElement(g,t),y(t),h(t,m,e),i(p)&&v(t,e),f(n,t.elm,o)):s(t.isComment)?(t.elm=u.createComment(t.text),f(n,t.elm,o)):(t.elm=u.createTextNode(t.text),f(n,t.elm,o))}}function d(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,m(t)?(v(t,e),y(t)):(Qn(t),e.push(t))}function f(t,e,n){i(t)&&(i(n)?u.parentNode(n)===t&&u.insertBefore(t,e,n):u.appendChild(t,e))}function h(t,e,n){if(Array.isArray(e)){0;for(var r=0;r<e.length;++r)p(e[r],n,t.elm,null,!0,e,r)}else a(t.text)&&u.appendChild(t.elm,u.createTextNode(String(t.text)))}function m(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return i(t.tag)}function v(t,n){for(var o=0;o<r.create.length;++o)r.create[o](tr,t);i(e=t.data.hook)&&(i(e.create)&&e.create(tr,t),i(e.insert)&&n.push(t))}function y(t){var e;if(i(e=t.fnScopeId))u.setStyleScope(t.elm,e);else for(var n=t;n;)i(e=n.context)&&i(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e),n=n.parent;i(e=Ze)&&e!==t.context&&e!==t.fnContext&&i(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e)}function b(t,e,n,r,o,i){for(;r<=o;++r)p(n[r],i,t,e,!1,n,r)}function w(t){var e,n,o=t.data;if(i(o))for(i(e=o.hook)&&i(e=e.destroy)&&e(t),e=0;e<r.destroy.length;++e)r.destroy[e](t);if(i(e=t.children))for(n=0;n<t.children.length;++n)w(t.children[n])}function k(t,e,n){for(;e<=n;++e){var r=t[e];i(r)&&(i(r.tag)?(_(r),w(r)):c(r.elm))}}function _(t,e){if(i(e)||i(t.data)){var n,o=r.remove.length+1;for(i(e)?e.listeners+=o:e=function(t,e){function n(){0==--n.listeners&&c(t)}return n.listeners=e,n}(t.elm,o),i(n=t.componentInstance)&&i(n=n._vnode)&&i(n.data)&&_(n,e),n=0;n<r.remove.length;++n)r.remove[n](t,e);i(n=t.data.hook)&&i(n=n.remove)?n(t,e):e()}else c(t.elm)}function x(t,e,n,r){for(var o=n;o<r;o++){var s=e[o];if(i(s)&&nr(t,s))return o}}function P(t,e,n,a,l,c){if(t!==e){i(e.elm)&&i(a)&&(e=a[l]=yt(e));var d=e.elm=t.elm;if(s(t.isAsyncPlaceholder))i(e.asyncFactory.resolved)?T(t.elm,e,n):e.isAsyncPlaceholder=!0;else if(s(e.isStatic)&&s(t.isStatic)&&e.key===t.key&&(s(e.isCloned)||s(e.isOnce)))e.componentInstance=t.componentInstance;else{var f,h=e.data;i(h)&&i(f=h.hook)&&i(f=f.prepatch)&&f(t,e);var g=t.children,v=e.children;if(i(h)&&m(e)){for(f=0;f<r.update.length;++f)r.update[f](t,e);i(f=h.hook)&&i(f=f.update)&&f(t,e)}o(e.text)?i(g)&&i(v)?g!==v&&function(t,e,n,r,s){var a,l,c,d=0,f=0,h=e.length-1,m=e[0],g=e[h],v=n.length-1,y=n[0],w=n[v],_=!s;for(0;d<=h&&f<=v;)o(m)?m=e[++d]:o(g)?g=e[--h]:nr(m,y)?(P(m,y,r,n,f),m=e[++d],y=n[++f]):nr(g,w)?(P(g,w,r,n,v),g=e[--h],w=n[--v]):nr(m,w)?(P(m,w,r,n,v),_&&u.insertBefore(t,m.elm,u.nextSibling(g.elm)),m=e[++d],w=n[--v]):nr(g,y)?(P(g,y,r,n,f),_&&u.insertBefore(t,g.elm,m.elm),g=e[--h],y=n[++f]):(o(a)&&(a=rr(e,d,h)),o(l=i(y.key)?a[y.key]:x(y,e,d,h))?p(y,r,t,m.elm,!1,n,f):nr(c=e[l],y)?(P(c,y,r,n,f),e[l]=void 0,_&&u.insertBefore(t,c.elm,m.elm)):p(y,r,t,m.elm,!1,n,f),y=n[++f]);d>h?b(t,o(n[v+1])?null:n[v+1].elm,n,f,v,r):f>v&&k(e,d,h)}(d,g,v,n,c):i(v)?(i(t.text)&&u.setTextContent(d,""),b(d,null,v,0,v.length-1,n)):i(g)?k(g,0,g.length-1):i(t.text)&&u.setTextContent(d,""):t.text!==e.text&&u.setTextContent(d,e.text),i(h)&&i(f=h.hook)&&i(f=f.postpatch)&&f(t,e)}}}function C(t,e,n){if(s(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r<e.length;++r)e[r].data.hook.insert(e[r])}var S=g("attrs,class,staticClass,staticStyle,key");function T(t,e,n,r){var o,a=e.tag,l=e.data,u=e.children;if(r=r||l&&l.pre,e.elm=t,s(e.isComment)&&i(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(i(l)&&(i(o=l.hook)&&i(o=o.init)&&o(e,!0),i(o=e.componentInstance)))return d(e,n),!0;if(i(a)){if(i(u))if(t.hasChildNodes())if(i(o=l)&&i(o=o.domProps)&&i(o=o.innerHTML)){if(o!==t.innerHTML)return!1}else{for(var c=!0,p=t.firstChild,f=0;f<u.length;f++){if(!p||!T(p,u[f],n,r)){c=!1;break}p=p.nextSibling}if(!c||p)return!1}else h(e,u,n);if(i(l)){var m=!1;for(var g in l)if(!S(g)){m=!0,v(e,n);break}!m&&l.class&&oe(l.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,n,a){if(!o(e)){var l,c=!1,d=[];if(o(t))c=!0,p(e,d);else{var f=i(t.nodeType);if(!f&&nr(t,e))P(t,e,d,null,null,a);else{if(f){if(1===t.nodeType&&t.hasAttribute("data-server-rendered")&&(t.removeAttribute("data-server-rendered"),n=!0),s(n)&&T(t,e,d))return C(e,d,!0),t;l=t,t=new ht(u.tagName(l).toLowerCase(),{},[],void 0,l)}var h=t.elm,g=u.parentNode(h);if(p(e,d,h._leaveCb?null:g,u.nextSibling(h)),i(e.parent))for(var v=e.parent,y=m(e);v;){for(var b=0;b<r.destroy.length;++b)r.destroy[b](v);if(v.elm=e.elm,y){for(var _=0;_<r.create.length;++_)r.create[_](tr,v);var x=v.data.hook.insert;if(x.merged)for(var S=1;S<x.fns.length;S++)x.fns[S]()}else Qn(v);v=v.parent}i(g)?k([t],0,0):i(t.tag)&&w(t)}}return C(e,d,c),e.elm}i(t)&&w(t)}}({nodeOps:Kn,modules:[hr,vr,Pr,Tr,Nr,W?{create:lo,activate:lo,remove:function(t,e){!0!==t.data.show?io(t,e):e()}}:{}].concat(cr)});Z&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&yo(t,"input")}));var co={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?le(n,"postpatch",(function(){co.componentUpdated(t,e,n)})):po(t,e,n.context),t._vOptions=[].map.call(t.options,mo)):("textarea"===n.tag||Zn(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",go),t.addEventListener("compositionend",vo),t.addEventListener("change",vo),Z&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){po(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,mo);if(o.some((function(t,e){return!L(t,r[e])})))(t.multiple?e.value.some((function(t){return ho(t,o)})):e.value!==e.oldValue&&ho(e.value,o))&&yo(t,"change")}}};function po(t,e,n){fo(t,e,n),(Y||K)&&setTimeout((function(){fo(t,e,n)}),0)}function fo(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,s,a=0,l=t.options.length;a<l;a++)if(s=t.options[a],o)i=E(r,mo(s))>-1,s.selected!==i&&(s.selected=i);else if(L(mo(s),r))return void(t.selectedIndex!==a&&(t.selectedIndex=a));o||(t.selectedIndex=-1)}}function ho(t,e){return e.every((function(e){return!L(e,t)}))}function mo(t){return"_value"in t?t._value:t.value}function go(t){t.target.composing=!0}function vo(t){t.target.composing&&(t.target.composing=!1,yo(t.target,"input"))}function yo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function bo(t){return!t.componentInstance||t.data&&t.data.transition?t:bo(t.componentInstance._vnode)}var wo={model:co,show:{bind:function(t,e,n){var r=e.value,o=(n=bo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,oo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=bo(n)).data&&n.data.transition?(n.data.show=!0,r?oo(n,(function(){t.style.display=t.__vOriginalDisplay})):io(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},ko={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function _o(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?_o(We(e.children)):t}function xo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[x(i)]=o[i];return e}function Po(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Co=function(t){return t.tag||me(t)},So=function(t){return"show"===t.name},To={name:"transition",props:ko,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Co)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=_o(o);if(!i)return o;if(this._leaving)return Po(t,o);var s="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?s+"comment":s+i.tag:a(i.key)?0===String(i.key).indexOf(s)?i.key:s+i.key:i.key;var l=(i.data||(i.data={})).transition=xo(this),u=this._vnode,c=_o(u);if(i.data.directives&&i.data.directives.some(So)&&(i.data.show=!0),c&&c.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,c)&&!me(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var p=c.data.transition=O({},l);if("out-in"===r)return this._leaving=!0,le(p,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Po(t,o);if("in-out"===r){if(me(i))return u;var d,f=function(){d()};le(l,"afterEnter",f),le(l,"enterCancelled",f),le(p,"delayLeave",(function(t){d=t}))}}return o}}},Io=O({tag:String,moveClass:String},ko);function Oo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Mo(t){t.data.newPos=t.elm.getBoundingClientRect()}function Ao(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete Io.mode;var jo={Transition:To,TransitionGroup:{props:Io,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ke(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],s=xo(this),a=0;a<o.length;a++){var l=o[a];if(l.tag)if(null!=l.key&&0!==String(l.key).indexOf("__vlist"))i.push(l),n[l.key]=l,(l.data||(l.data={})).transition=s;else;}if(r){for(var u=[],c=[],p=0;p<r.length;p++){var d=r[p];d.data.transition=s,d.data.pos=d.elm.getBoundingClientRect(),n[d.key]?u.push(d):c.push(d)}this.kept=t(e,null,u),this.removed=c}return t(e,null,i)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Oo),t.forEach(Mo),t.forEach(Ao),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var n=t.elm,r=n.style;Kr(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(qr,n._moveCb=function t(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(qr,t),n._moveCb=null,Xr(n,e))})}})))},methods:{hasMove:function(t,e){if(!Br)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){Hr(n,t)})),Fr(n,e),n.style.display="none",this.$el.appendChild(n);var r=eo(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};Pn.config.mustUseProp=function(t,e,n){return"value"===n&&$n(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Pn.config.isReservedTag=Gn,Pn.config.isReservedAttr=jn,Pn.config.getTagNamespace=function(t){return Jn(t)?"svg":"math"===t?"math":void 0},Pn.config.isUnknownElement=function(t){if(!W)return!0;if(Gn(t))return!1;if(t=t.toLowerCase(),null!=Yn[t])return Yn[t];var e=document.createElement(t);return t.indexOf("-")>-1?Yn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Yn[t]=/HTMLUnknownElement/.test(e.toString())},O(Pn.options.directives,wo),O(Pn.options.components,jo),Pn.prototype.__patch__=W?uo:A,Pn.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=gt),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new fn(t,r,A,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,tn(t,"mounted")),t}(this,t=t&&W?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},W&&setTimeout((function(){D.devtools&&ot&&ot.emit("init",Pn)}),0),e.a=Pn},function(t,e,n){var r=n(5),o=n(25).f,i=n(22),s=n(16),a=n(90),l=n(137),u=n(86);t.exports=function(t,e){var n,c,p,d,f,h=t.target,m=t.global,g=t.stat;if(n=m?r:g?r[h]||a(h,{}):(r[h]||{}).prototype)for(c in e){if(d=e[c],p=t.noTargetGet?(f=o(n,c))&&f.value:n[c],!u(m?c:h+(g?".":"#")+c,t.forced)&&void 0!==p){if(typeof d==typeof p)continue;l(d,p)}(t.sham||p&&p.sham)&&i(d,"sham",!0),s(n,c,d,t)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(5),o=n(68),i=n(9),s=n(69),a=n(91),l=n(129),u=o("wks"),c=r.Symbol,p=l?c:c&&c.withoutSetter||s;t.exports=function(t){return i(u,t)&&(a||"string"==typeof u[t])||(a&&i(c,t)?u[t]=c[t]:u[t]=p("Symbol."+t)),u[t]}},function(t,e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||function(){return this}()||Function("return this")()},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(3);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,n){var r=n(6);t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,n){var r=n(13),o={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return o.call(r(t),e)}},function(t,e,n){var r=n(7),o=n(131),i=n(8),s=n(70),a=Object.defineProperty;e.f=r?a:function(t,e,n){if(i(t),e=s(e),i(n),o)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(99),o=n(16),i=n(249);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(t,e,n){"use strict";var r=n(186),o=Object.prototype.toString;function i(t){return"[object Array]"===o.call(t)}function s(t){return void 0===t}function a(t){return null!==t&&"object"==typeof t}function l(t){if("[object Object]"!==o.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function u(t){return"[object Function]"===o.call(t)}function c(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),i(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}t.exports={isArray:i,isArrayBuffer:function(t){return"[object ArrayBuffer]"===o.call(t)},isBuffer:function(t){return null!==t&&!s(t)&&null!==t.constructor&&!s(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:a,isPlainObject:l,isUndefined:s,isDate:function(t){return"[object Date]"===o.call(t)},isFile:function(t){return"[object File]"===o.call(t)},isBlob:function(t){return"[object Blob]"===o.call(t)},isFunction:u,isStream:function(t){return a(t)&&u(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:c,merge:function t(){var e={};function n(n,r){l(e[r])&&l(n)?e[r]=t(e[r],n):l(n)?e[r]=t({},n):i(n)?e[r]=n.slice():e[r]=n}for(var r=0,o=arguments.length;r<o;r++)c(arguments[r],n);return e},extend:function(t,e,n){return c(e,(function(e,o){t[o]=n&&"function"==typeof e?r(e,n):e})),t},trim:function(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}}},function(t,e,n){var r=n(28);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";var r=n(152).charAt,o=n(15),i=n(39),s=n(136),a=i.set,l=i.getterFor("String Iterator");s(String,"String",(function(t){a(this,{type:"String Iterator",string:o(t),index:0})}),(function(){var t,e=l(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(53);t.exports=function(t){if(r(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},function(t,e,n){var r=n(5),o=n(22),i=n(9),s=n(90),a=n(95),l=n(39),u=l.get,c=l.enforce,p=String(String).split("String");(t.exports=function(t,e,n,a){var l,u=!!a&&!!a.unsafe,d=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),(l=c(n)).source||(l.source=p.join("string"==typeof e?e:""))),t!==r?(u?!f&&t[e]&&(d=!0):delete t[e],d?t[e]=n:o(t,e,n)):d?t[e]=n:s(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||a(this)}))},function(t,e,n){var r=n(5),o=n(153),i=n(128),s=n(22),a=n(4),l=a("iterator"),u=a("toStringTag"),c=i.values;for(var p in o){var d=r[p],f=d&&d.prototype;if(f){if(f[l]!==c)try{s(f,l,c)}catch(t){f[l]=c}if(f[u]||s(f,u,p),o[p])for(var h in i)if(f[h]!==i[h])try{s(f,h,i[h])}catch(t){f[h]=i[h]}}}},function(t,e,n){"use strict";function r(t,e,n,r,o,i,s,a){var l,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),s?(l=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=l):o&&(l=a?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(t,e){return l.call(e),c(t,e)}}else{var p=u.beforeCreate;u.beforeCreate=p?[].concat(p,l):[l]}return{exports:t,options:u}}n.d(e,"a",(function(){return r}))},function(t,e,n){var r=n(72),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var r=n(52),o=n(28);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(7),o=n(10),i=n(56);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(5),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t]):r[t]&&r[t][e]}},function(t,e,n){var r=n(165),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){var r=n(7),o=n(96),i=n(56),s=n(21),a=n(70),l=n(9),u=n(131),c=Object.getOwnPropertyDescriptor;e.f=r?c:function(t,e){if(t=s(t),e=a(e),u)try{return c(t,e)}catch(t){}if(l(t,e))return i(!o.f.call(t,e),t[e])}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,n){"use strict";var r=n(2),o=n(40).filter;r({target:"Array",proto:!0,forced:!n(79)("filter")},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){t.exports=!1},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(23);t.exports=r("navigator","userAgent")||""},function(t,e,n){var r,o=n(8),i=n(130),s=n(94),a=n(54),l=n(135),u=n(92),c=n(73),p=c("IE_PROTO"),d=function(){},f=function(t){return"<script>"+t+"<\/script>"},h=function(t){t.write(f("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}m=document.domain&&r?h(r):function(){var t,e=u("iframe");if(e.style)return e.style.display="none",l.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(f("document.F=Object")),t.close(),t.F}()||h(r);for(var t=s.length;t--;)delete m.prototype[s[t]];return m()};a[p]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(d.prototype=o(t),n=new d,d.prototype=null,n[p]=t):n=m(),void 0===e?n:i(n,e)}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){throw 1},1)}))}},function(t,e,n){"use strict";var r=n(2),o=n(5),i=n(23),s=n(29),a=n(7),l=n(91),u=n(3),c=n(9),p=n(57),d=n(6),f=n(53),h=n(8),m=n(13),g=n(21),v=n(70),y=n(15),b=n(56),w=n(32),k=n(71),_=n(50),x=n(160),P=n(97),C=n(25),S=n(10),T=n(96),I=n(22),O=n(16),M=n(68),A=n(73),j=n(54),$=n(69),L=n(4),E=n(161),V=n(162),R=n(74),N=n(39),D=n(40).forEach,F=A("hidden"),H=L("toPrimitive"),U=N.set,z=N.getterFor("Symbol"),B=Object.prototype,W=o.Symbol,q=i("JSON","stringify"),J=C.f,G=S.f,Y=x.f,Z=T.f,K=M("symbols"),X=M("op-symbols"),Q=M("string-to-symbol-registry"),tt=M("symbol-to-string-registry"),et=M("wks"),nt=o.QObject,rt=!nt||!nt.prototype||!nt.prototype.findChild,ot=a&&u((function(){return 7!=w(G({},"a",{get:function(){return G(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=J(B,e);r&&delete B[e],G(t,e,n),r&&t!==B&&G(B,e,r)}:G,it=function(t,e){var n=K[t]=w(W.prototype);return U(n,{type:"Symbol",tag:t,description:e}),a||(n.description=e),n},st=function(t,e,n){t===B&&st(X,e,n),h(t);var r=v(e);return h(n),c(K,r)?(n.enumerable?(c(t,F)&&t[F][r]&&(t[F][r]=!1),n=w(n,{enumerable:b(0,!1)})):(c(t,F)||G(t,F,b(1,{})),t[F][r]=!0),ot(t,r,n)):G(t,r,n)},at=function(t,e){h(t);var n=g(e),r=k(n).concat(pt(n));return D(r,(function(e){a&&!lt.call(n,e)||st(t,e,n[e])})),t},lt=function(t){var e=v(t),n=Z.call(this,e);return!(this===B&&c(K,e)&&!c(X,e))&&(!(n||!c(this,e)||!c(K,e)||c(this,F)&&this[F][e])||n)},ut=function(t,e){var n=g(t),r=v(e);if(n!==B||!c(K,r)||c(X,r)){var o=J(n,r);return!o||!c(K,r)||c(n,F)&&n[F][r]||(o.enumerable=!0),o}},ct=function(t){var e=Y(g(t)),n=[];return D(e,(function(t){c(K,t)||c(j,t)||n.push(t)})),n},pt=function(t){var e=t===B,n=Y(e?X:g(t)),r=[];return D(n,(function(t){!c(K,t)||e&&!c(B,t)||r.push(K[t])})),r};(l||(O((W=function(){if(this instanceof W)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?y(arguments[0]):void 0,e=$(t),n=function(t){this===B&&n.call(X,t),c(this,F)&&c(this[F],e)&&(this[F][e]=!1),ot(this,e,b(1,t))};return a&&rt&&ot(B,e,{configurable:!0,set:n}),it(e,t)}).prototype,"toString",(function(){return z(this).tag})),O(W,"withoutSetter",(function(t){return it($(t),t)})),T.f=lt,S.f=st,C.f=ut,_.f=x.f=ct,P.f=pt,E.f=function(t){return it(L(t),t)},a&&(G(W.prototype,"description",{configurable:!0,get:function(){return z(this).description}}),s||O(B,"propertyIsEnumerable",lt,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:W}),D(k(et),(function(t){V(t)})),r({target:"Symbol",stat:!0,forced:!l},{for:function(t){var e=y(t);if(c(Q,e))return Q[e];var n=W(e);return Q[e]=n,tt[n]=e,n},keyFor:function(t){if(!f(t))throw TypeError(t+" is not a symbol");if(c(tt,t))return tt[t]},useSetter:function(){rt=!0},useSimple:function(){rt=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!a},{create:function(t,e){return void 0===e?w(t):at(w(t),e)},defineProperty:st,defineProperties:at,getOwnPropertyDescriptor:ut}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:ct,getOwnPropertySymbols:pt}),r({target:"Object",stat:!0,forced:u((function(){P.f(1)}))},{getOwnPropertySymbols:function(t){return P.f(m(t))}}),q)&&r({target:"JSON",stat:!0,forced:!l||u((function(){var t=W();return"[null]"!=q([t])||"{}"!=q({a:t})||"{}"!=q(Object(t))}))},{stringify:function(t,e,n){for(var r,o=[t],i=1;arguments.length>i;)o.push(arguments[i++]);if(r=e,(d(e)||void 0!==t)&&!f(t))return p(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!f(e))return e}),o[1]=e,q.apply(null,o)}});W.prototype[H]||I(W.prototype,H,W.prototype.valueOf),R(W,"Symbol"),j[F]=!0},function(t,e,n){var r=n(276),o=n(279);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(372),o=n(184),i=/[T ]/,s=/:/,a=/^(\d{2})$/,l=[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],u=/^(\d{4})/,c=[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],p=/^-(\d{2})$/,d=/^-?(\d{3})$/,f=/^-?(\d{2})-?(\d{2})$/,h=/^-?W(\d{2})$/,m=/^-?W(\d{2})-?(\d{1})$/,g=/^(\d{2}([.,]\d*)?)$/,v=/^(\d{2}):?(\d{2}([.,]\d*)?)$/,y=/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,b=/([Z+-].*)$/,w=/^(Z)$/,k=/^([+-])(\d{2})$/,_=/^([+-])(\d{2}):?(\d{2})$/;function x(t,e,n){e=e||0,n=n||0;var r=new Date(0);r.setUTCFullYear(t,0,4);var o=7*e+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}t.exports=function(t,e){if(o(t))return new Date(t.getTime());if("string"!=typeof t)return new Date(t);var n=(e||{}).additionalDigits;n=null==n?2:Number(n);var P=function(t){var e,n={},r=t.split(i);s.test(r[0])?(n.date=null,e=r[0]):(n.date=r[0],e=r[1]);if(e){var o=b.exec(e);o?(n.time=e.replace(o[1],""),n.timezone=o[1]):n.time=e}return n}(t),C=function(t,e){var n,r=l[e],o=c[e];if(n=u.exec(t)||o.exec(t)){var i=n[1];return{year:parseInt(i,10),restDateString:t.slice(i.length)}}if(n=a.exec(t)||r.exec(t)){var s=n[1];return{year:100*parseInt(s,10),restDateString:t.slice(s.length)}}return{year:null}}(P.date,n),S=C.year,T=function(t,e){if(null===e)return null;var n,r,o,i;if(0===t.length)return(r=new Date(0)).setUTCFullYear(e),r;if(n=p.exec(t))return r=new Date(0),o=parseInt(n[1],10)-1,r.setUTCFullYear(e,o),r;if(n=d.exec(t)){r=new Date(0);var s=parseInt(n[1],10);return r.setUTCFullYear(e,0,s),r}if(n=f.exec(t)){r=new Date(0),o=parseInt(n[1],10)-1;var a=parseInt(n[2],10);return r.setUTCFullYear(e,o,a),r}if(n=h.exec(t))return i=parseInt(n[1],10)-1,x(e,i);if(n=m.exec(t)){i=parseInt(n[1],10)-1;var l=parseInt(n[2],10)-1;return x(e,i,l)}return null}(C.restDateString,S);if(T){var I,O=T.getTime(),M=0;if(P.time&&(M=function(t){var e,n,r;if(e=g.exec(t))return(n=parseFloat(e[1].replace(",",".")))%24*36e5;if(e=v.exec(t))return n=parseInt(e[1],10),r=parseFloat(e[2].replace(",",".")),n%24*36e5+6e4*r;if(e=y.exec(t)){n=parseInt(e[1],10),r=parseInt(e[2],10);var o=parseFloat(e[3].replace(",","."));return n%24*36e5+6e4*r+1e3*o}return null}(P.time)),P.timezone)I=6e4*function(t){var e,n;if(e=w.exec(t))return 0;if(e=k.exec(t))return n=60*parseInt(e[2],10),"+"===e[1]?-n:n;if(e=_.exec(t))return n=60*parseInt(e[2],10)+parseInt(e[3],10),"+"===e[1]?-n:n;return 0}(P.timezone);else{var A=O+M,j=new Date(A);I=r(j);var $=new Date(A);$.setDate(j.getDate()+1);var L=r($)-r(j);L>0&&(I+=L)}return new Date(O+M+I)}return new Date(t)}},function(t,e,n){"use strict";var r=n(2),o=n(87);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},function(t,e,n){"use strict";var r=n(2),o=n(6),i=n(57),s=n(134),a=n(19),l=n(21),u=n(78),c=n(4),p=n(79)("slice"),d=c("species"),f=[].slice,h=Math.max;r({target:"Array",proto:!0,forced:!p},{slice:function(t,e){var n,r,c,p=l(this),m=a(p.length),g=s(t,m),v=s(void 0===e?m:e,m);if(i(p)&&("function"!=typeof(n=p.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[d])&&(n=void 0):n=void 0,n===Array||void 0===n))return f.call(p,g,v);for(r=new(void 0===n?Array:n)(h(v-g,0)),c=0;g<v;g++,c++)g in p&&u(r,c,p[g]);return r.length=c,r}})},function(t,e,n){var r,o,i,s=n(234),a=n(5),l=n(6),u=n(22),c=n(9),p=n(89),d=n(73),f=n(54),h=a.WeakMap;if(s||p.state){var m=p.state||(p.state=new h),g=m.get,v=m.has,y=m.set;r=function(t,e){if(v.call(m,t))throw new TypeError("Object already initialized");return e.facade=t,y.call(m,t,e),e},o=function(t){return g.call(m,t)||{}},i=function(t){return v.call(m,t)}}else{var b=d("state");f[b]=!0,r=function(t,e){if(c(t,b))throw new TypeError("Object already initialized");return e.facade=t,u(t,b,e),e},o=function(t){return c(t,b)?t[b]:{}},i=function(t){return c(t,b)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!l(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var r=n(76),o=n(52),i=n(13),s=n(19),a=n(154),l=[].push,u=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,p=6==t,d=7==t,f=5==t||p;return function(h,m,g,v){for(var y,b,w=i(h),k=o(w),_=r(m,g,3),x=s(k.length),P=0,C=v||a,S=e?C(h,x):n||d?C(h,0):void 0;x>P;P++)if((f||P in k)&&(b=_(y=k[P],P,w),t))if(e)S[P]=b;else if(b)switch(t){case 3:return!0;case 5:return y;case 6:return P;case 2:l.call(S,y)}else switch(t){case 4:return!1;case 7:l.call(S,y)}return p?-1:u||c?c:S}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r,o,i=n(5),s=n(31),a=i.process,l=i.Deno,u=a&&a.versions||l&&l.version,c=u&&u.v8;c?o=(r=c.split("."))[0]<4?1:r[0]+r[1]:s&&(!(r=s.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=s.match(/Chrome\/(\d+)/))&&(o=r[1]),t.exports=o&&+o},function(t,e,n){"use strict";var r=n(2),o=n(7),i=n(5),s=n(9),a=n(6),l=n(10).f,u=n(137),c=i.Symbol;if(o&&"function"==typeof c&&(!("description"in c.prototype)||void 0!==c().description)){var p={},d=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof d?new c(t):void 0===t?c():c(t);return""===t&&(p[e]=!0),e};u(d,c);var f=d.prototype=c.prototype;f.constructor=d;var h=f.toString,m="Symbol(test)"==String(c("test")),g=/^Symbol\((.*)\)[^)]+$/;l(f,"description",{configurable:!0,get:function(){var t=a(this)?this.valueOf():this,e=h.call(t);if(s(p,t))return"";var n=m?e.slice(7,-1):e.replace(g,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:d})}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));n(38),n(11),n(65),n(163),n(14);var r=n(61);function o(t,e){if(t){if("string"==typeof t)return Object(r.a)(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(r.a)(t,e):void 0}}},function(t,e,n){"use strict";var r=n(369),o=n(370),i=n(183);t.exports={formats:i,parse:o,stringify:r}},function(t,e,n){"use strict";var r=n(2),o=n(158);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},function(t,e,n){var r=n(5),o=n(153),i=n(158),s=n(22);for(var a in o){var l=r[a],u=l&&l.prototype;if(u&&u.forEach!==i)try{s(u,"forEach",i)}catch(t){u.forEach=i}}},function(t,e,n){n(2)({target:"Array",stat:!0},{isArray:n(57)})},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(133),o=n(94).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){var r=n(59),o=n(262),i=n(263),s=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":s&&s in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(3),o=n(30),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},function(t,e,n){var r=n(23),o=n(129);t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return"function"==typeof e&&Object(t)instanceof e}},function(t,e){t.exports={}},function(t,e){t.exports={}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(30);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){n(162)("iterator")},function(t,e,n){var r=n(24).Symbol;t.exports=r},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));n(48);var r=n(61);n(34),n(43),n(11),n(58),n(14),n(17),n(163);var o=n(44);function i(t){return function(t){if(Array.isArray(t))return Object(r.a)(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Object(o.a)(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(t,e,n){"use strict";function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";var r=n(2),o=n(40).map;r({target:"Array",proto:!0,forced:!n(79)("map")},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(2),o=n(40).some;r({target:"Array",proto:!0,forced:!n(33)("some")},{some:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(210),o=n(3),i=n(8),s=n(72),a=n(19),l=n(15),u=n(28),c=n(211),p=n(258),d=n(212),f=n(4)("replace"),h=Math.max,m=Math.min,g="$0"==="a".replace(/./,"$0"),v=!!/./[f]&&""===/./[f]("a","$0");r("replace",(function(t,e,n){var r=v?"$":"$0";return[function(t,n){var r=u(this),o=null==t?void 0:t[f];return void 0!==o?o.call(t,r,n):e.call(l(r),t,n)},function(t,o){var u=i(this),f=l(t);if("string"==typeof o&&-1===o.indexOf(r)&&-1===o.indexOf("$<")){var g=n(e,u,f,o);if(g.done)return g.value}var v="function"==typeof o;v||(o=l(o));var y=u.global;if(y){var b=u.unicode;u.lastIndex=0}for(var w=[];;){var k=d(u,f);if(null===k)break;if(w.push(k),!y)break;""===l(k[0])&&(u.lastIndex=c(f,a(u.lastIndex),b))}for(var _,x="",P=0,C=0;C<w.length;C++){k=w[C];for(var S=l(k[0]),T=h(m(s(k.index),f.length),0),I=[],O=1;O<k.length;O++)I.push(void 0===(_=k[O])?_:String(_));var M=k.groups;if(v){var A=[S].concat(I,T,f);void 0!==M&&A.push(M);var j=l(o.apply(void 0,A))}else j=p(S,f,T,I,M,o);T>=P&&(x+=f.slice(P,T)+j,P=T+S.length)}return x+f.slice(P)}]}),!!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!g||v)},function(t,e,n){var r=n(7),o=n(10).f,i=Function.prototype,s=i.toString,a=/^\s*function ([^ (]*)/;r&&!("name"in i)&&o(i,"name",{configurable:!0,get:function(){try{return s.call(this).match(a)[1]}catch(t){return""}}})},function(t,e,n){var r=n(2),o=n(13),i=n(71);r({target:"Object",stat:!0,forced:n(3)((function(){i(1)}))},{keys:function(t){return i(o(t))}})},function(t,e,n){var r=n(110);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e,n){var r=n(29),o=n(89);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.16.0",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},function(t,e,n){var r=n(132),o=n(53);t.exports=function(t){var e=r(t,"string");return o(e)?e:String(e)}},function(t,e,n){var r=n(133),o=n(94);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(68),o=n(69),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,e,n){var r=n(10).f,o=n(9),i=n(4)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){var r=n(8),o=n(236);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,i){return r(n),o(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},function(t,e,n){var r=n(26);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(30),o=n(5);t.exports="process"==r(o.process)},function(t,e,n){"use strict";var r=n(70),o=n(10),i=n(56);t.exports=function(t,e,n){var s=r(e);s in t?o.f(t,s,i(0,n)):t[s]=n}},function(t,e,n){var r=n(3),o=n(4),i=n(42),s=o("species");t.exports=function(t){return i>=51||!r((function(){var e=[];return(e.constructor={})[s]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e,n){var r=n(266),o=n(267),i=n(268),s=n(269),a=n(270);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,t.exports=l},function(t,e,n){var r=n(122);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(35)(Object,"create");t.exports=r},function(t,e,n){var r=n(288);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,i=/^0o[0-7]+$/i,s=parseInt,a="object"==typeof global&&global&&global.Object===Object&&global,l="object"==typeof self&&self&&self.Object===Object&&self,u=a||l||Function("return this")(),c=Object.prototype.toString,p=Math.max,d=Math.min,f=function(){return u.Date.now()};function h(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function m(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==c.call(t)}(t))return NaN;if(h(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=h(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var a=o.test(t);return a||i.test(t)?s(t.slice(2),a?2:8):r.test(t)?NaN:+t}t.exports=function(t,e,n){var r,o,i,s,a,l,u=0,c=!1,g=!1,v=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=r,i=o;return r=o=void 0,u=e,s=t.apply(i,n)}function b(t){return u=t,a=setTimeout(k,e),c?y(t):s}function w(t){var n=t-l;return void 0===l||n>=e||n<0||g&&t-u>=i}function k(){var t=f();if(w(t))return _(t);a=setTimeout(k,function(t){var n=e-(t-l);return g?d(n,i-(t-u)):n}(t))}function _(t){return a=void 0,v&&r?y(t):(r=o=void 0,s)}function x(){var t=f(),n=w(t);if(r=arguments,o=this,l=t,n){if(void 0===a)return b(l);if(g)return a=setTimeout(k,e),y(l)}return void 0===a&&(a=setTimeout(k,e)),s}return e=m(e)||0,h(n)&&(c=!!n.leading,i=(g="maxWait"in n)?p(m(n.maxWait)||0,e):i,v="trailing"in n?!!n.trailing:v),x.cancel=function(){void 0!==a&&clearTimeout(a),u=0,r=l=o=a=void 0},x.flush=function(){return void 0===a?s:_(f())},x}},function(t,e,n){var r,o; +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */void 0===(o="function"==typeof(r=function(){var t,e,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(t,e,n){return t<e?e:t>n?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var l=n.render(!e),u=l.querySelector(r.barSelector),c=r.speed,p=r.easing;return l.offsetWidth,s((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),a(u,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,c,p)),1===t?(a(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){a(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),c)}),c)):setTimeout(e,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,s=e.querySelector(r.barSelector),l=t?"-100":i(n.status||0),c=document.querySelector(r.parent);return a(s,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&d(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(e),e},n.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&d(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var s=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),a=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function l(t,e){return("string"==typeof t?t:p(t)).indexOf(" "+e+" ")>=0}function u(t,e){var n=p(t),r=n+e;l(n,e)||(t.className=r.substring(1))}function c(t,e){var n,r=p(t);l(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function p(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function d(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){var r=n(3),o=/#|\.prototype\./,i=function(t,e){var n=a[s(t)];return n==u||n!=l&&("function"==typeof e?r(e):!!e)},s=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},a=i.data={},l=i.NATIVE="N",u=i.POLYFILL="P";t.exports=i},function(t,e,n){"use strict";var r,o,i=n(15),s=n(118),a=n(209),l=n(68),u=n(32),c=n(39).get,p=n(217),d=n(218),f=RegExp.prototype.exec,h=l("native-string-replace",String.prototype.replace),m=f,g=(r=/a/,o=/b*/g,f.call(r,"a"),f.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),v=a.UNSUPPORTED_Y||a.BROKEN_CARET,y=void 0!==/()??/.exec("")[1];(g||y||v||p||d)&&(m=function(t){var e,n,r,o,a,l,p,d=this,b=c(d),w=i(t),k=b.raw;if(k)return k.lastIndex=d.lastIndex,e=m.call(k,w),d.lastIndex=k.lastIndex,e;var _=b.groups,x=v&&d.sticky,P=s.call(d),C=d.source,S=0,T=w;if(x&&(-1===(P=P.replace("y","")).indexOf("g")&&(P+="g"),T=w.slice(d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==w.charAt(d.lastIndex-1))&&(C="(?: "+C+")",T=" "+T,S++),n=new RegExp("^(?:"+C+")",P)),y&&(n=new RegExp("^"+C+"$(?!\\s)",P)),g&&(r=d.lastIndex),o=f.call(x?n:d,T),x?o?(o.input=o.input.slice(S),o[0]=o[0].slice(S),o.index=d.lastIndex,d.lastIndex+=o[0].length):d.lastIndex=0:g&&o&&(d.lastIndex=d.global?o.index+o[0].length:r),y&&o&&o.length>1&&h.call(o[0],n,(function(){for(a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(o[a]=void 0)})),o&&_)for(o.groups=l=u(null),a=0;a<_.length;a++)l[(p=_[a])[0]]=o[p[1]];return o}),t.exports=m},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(5),o=n(90),i=r["__core-js_shared__"]||o("__core-js_shared__",{});t.exports=i},function(t,e,n){var r=n(5);t.exports=function(t,e){try{Object.defineProperty(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){var r=n(42),o=n(3);t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){var r=n(5),o=n(6),i=r.document,s=o(i)&&o(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},function(t,e,n){var r=n(21),o=n(19),i=n(134),s=function(t){return function(e,n,s){var a,l=r(e),u=o(l.length),c=i(s,u);if(t&&n!=n){for(;u>c;)if((a=l[c++])!=a)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}};t.exports={includes:s(!0),indexOf:s(!1)}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){var r=n(89),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return o.call(t)}),t.exports=r.inspectSource},function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(9),o=n(13),i=n(73),s=n(140),a=i("IE_PROTO"),l=Object.prototype;t.exports=s?Object.getPrototypeOf:function(t){return t=o(t),r(t,a)?t[a]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?l:null}},function(t,e,n){var r={};r[n(4)("toStringTag")]="z",t.exports="[object z]"===String(r)},function(t,e,n){var r=n(261),o=n(41),i=Object.prototype,s=i.hasOwnProperty,a=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(t){return o(t)&&s.call(t,"callee")&&!a.call(t,"callee")};t.exports=l},function(t,e,n){var r=n(35)(n(24),"Map");t.exports=r},function(t,e,n){var r=n(51),o=n(49);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(280),o=n(287),i=n(289),s=n(290),a=n(291);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,t.exports=l},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(222),o=n(307),i=n(124);t.exports=function(t){return i(t)?r(t):o(t)}},function(t,e,n){(function(t){var r=n(24),o=n(303),i=e&&!e.nodeType&&e,s=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=s&&s.exports===i?r.Buffer:void 0,l=(a?a.isBuffer:void 0)||o;t.exports=l}).call(this,n(172)(t))},function(t,e,n){var r=n(304),o=n(305),i=n(306),s=i&&i.isTypedArray,a=s?o(s):r;t.exports=a},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(20),o=n(110),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(s.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(51),o=n(41);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(2),o=n(7);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperty:n(10).f})},function(t,e,n){var r=n(377);t.exports=function(t){return r(t,{weekStartsOn:1})}},function(t,e,n){var r=n(20),o=n(109),i=n(315),s=n(318);t.exports=function(t,e){return r(t)?t:o(t,e)?[t]:i(s(t))}},function(t,e,n){var r=n(4),o=n(32),i=n(10),s=r("unscopables"),a=Array.prototype;null==a[s]&&i.f(a,s,{configurable:!0,value:o(null)}),t.exports=function(t){a[s][t]=!0}},function(t,e,n){var r=n(8),o=n(26),i=n(4)("species");t.exports=function(t,e){var n,s=r(t).constructor;return void 0===s||null==(n=r(s)[i])?e:o(n)}},function(t,e,n){var r=n(208);t.exports=function(t){if(r(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,e,n){var r=n(4)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,n){"use strict";var r=n(8);t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){"use strict";var r=n(2),o=n(3),i=n(57),s=n(6),a=n(13),l=n(19),u=n(78),c=n(154),p=n(79),d=n(4),f=n(42),h=d("isConcatSpreadable"),m=f>=51||!o((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),g=p("concat"),v=function(t){if(!s(t))return!1;var e=t[h];return void 0!==e?!!e:i(t)};r({target:"Array",proto:!0,forced:!m||!g},{concat:function(t){var e,n,r,o,i,s=a(this),p=c(s,0),d=0;for(e=-1,r=arguments.length;e<r;e++)if(v(i=-1===e?s:arguments[e])){if(d+(o=l(i.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<o;n++,d++)n in i&&u(p,d,i[n])}else{if(d>=9007199254740991)throw TypeError("Maximum allowed index exceeded");u(p,d++,i)}return p.length=d,p}})},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},function(t,e,n){var r=n(264),o=n(314),i=n(88),s=n(20),a=n(323);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?s(t)?o(t[0],t[1]):r(t):a(t)}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(102),o=n(108);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},function(t,e,n){var r=n(113),o=n(67);t.exports=function(t,e){for(var n=0,i=(e=r(e,t)).length;null!=t&&n<i;)t=t[o(e[n++])];return n&&n==i?t:void 0}},function(t,e,n){var r=n(28),o=n(15),i="["+n(127)+"]",s=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),l=function(t){return function(e){var n=o(r(e));return 1&t&&(n=n.replace(s,"")),2&t&&(n=n.replace(a,"")),n}};t.exports={start:l(1),end:l(2),trim:l(3)}},function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},function(t,e,n){"use strict";var r=n(21),o=n(114),i=n(55),s=n(39),a=n(136),l=s.set,u=s.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){l(this,{type:"Array Iterator",target:r(t),index:0,kind:e})}),(function(){var t=u(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(t,e,n){var r=n(91);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var r=n(7),o=n(10),i=n(8),s=n(71);t.exports=r?Object.defineProperties:function(t,e){i(t);for(var n,r=s(e),a=r.length,l=0;a>l;)o.f(t,n=r[l++],e[n]);return t}},function(t,e,n){var r=n(7),o=n(3),i=n(92);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var r=n(6),o=n(53),i=n(233),s=n(4)("toPrimitive");t.exports=function(t,e){if(!r(t)||o(t))return t;var n,a=t[s];if(void 0!==a){if(void 0===e&&(e="default"),n=a.call(t,e),!r(n)||o(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),i(t,e)}},function(t,e,n){var r=n(9),o=n(21),i=n(93).indexOf,s=n(54);t.exports=function(t,e){var n,a=o(t),l=0,u=[];for(n in a)!r(s,n)&&r(a,n)&&u.push(n);for(;e.length>l;)r(a,n=e[l++])&&(~i(u,n)||u.push(n));return u}},function(t,e,n){var r=n(72),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},function(t,e,n){var r=n(23);t.exports=r("document","documentElement")},function(t,e,n){"use strict";var r=n(2),o=n(235),i=n(98),s=n(75),a=n(74),l=n(22),u=n(16),c=n(4),p=n(29),d=n(55),f=n(139),h=f.IteratorPrototype,m=f.BUGGY_SAFARI_ITERATORS,g=c("iterator"),v=function(){return this};t.exports=function(t,e,n,c,f,y,b){o(n,e,c);var w,k,_,x=function(t){if(t===f&&I)return I;if(!m&&t in S)return S[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},P=e+" Iterator",C=!1,S=t.prototype,T=S[g]||S["@@iterator"]||f&&S[f],I=!m&&T||x(f),O="Array"==e&&S.entries||T;if(O&&(w=i(O.call(new t)),h!==Object.prototype&&w.next&&(p||i(w)===h||(s?s(w,h):"function"!=typeof w[g]&&l(w,g,v)),a(w,P,!0,!0),p&&(d[P]=v))),"values"==f&&T&&"values"!==T.name&&(C=!0,I=function(){return T.call(this)}),p&&!b||S[g]===I||l(S,g,I),d[e]=I,f)if(k={values:x("values"),keys:y?I:x("keys"),entries:x("entries")},b)for(_ in k)(m||C||!(_ in S))&&u(S,_,k[_]);else r({target:e,proto:!0,forced:m||C},k);return k}},function(t,e,n){var r=n(9),o=n(138),i=n(25),s=n(10);t.exports=function(t,e){for(var n=o(e),a=s.f,l=i.f,u=0;u<n.length;u++){var c=n[u];r(t,c)||a(t,c,l(e,c))}}},function(t,e,n){var r=n(23),o=n(50),i=n(97),s=n(8);t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(s(t)),n=i.f;return n?e.concat(n(t)):e}},function(t,e,n){"use strict";var r,o,i,s=n(3),a=n(98),l=n(22),u=n(9),c=n(4),p=n(29),d=c("iterator"),f=!1;[].keys&&("next"in(i=[].keys())?(o=a(a(i)))!==Object.prototype&&(r=o):f=!0);var h=null==r||s((function(){var t={};return r[d].call(t)!==t}));h&&(r={}),p&&!h||u(r,d)||l(r,d,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:f}},function(t,e,n){var r=n(3);t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var r=n(5);t.exports=r.Promise},function(t,e,n){var r=n(4),o=n(55),i=r("iterator"),s=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||s[i]===t)}},function(t,e,n){var r=n(144),o=n(55),i=n(4)("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[r(t)]}},function(t,e,n){var r=n(99),o=n(30),i=n(4)("toStringTag"),s="Arguments"==o(function(){return arguments}());t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?n:s?o(e):"Object"==(r=o(e))&&"function"==typeof e.callee?"Arguments":r}},function(t,e,n){var r=n(8);t.exports=function(t){var e=t.return;if(void 0!==e)return r(e.call(t)).value}},function(t,e,n){var r=n(4)("iterator"),o=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}},function(t,e,n){var r,o,i,s,a=n(5),l=n(3),u=n(76),c=n(135),p=n(92),d=n(148),f=n(77),h=a.setImmediate,m=a.clearImmediate,g=a.process,v=a.MessageChannel,y=a.Dispatch,b=0,w={};try{r=a.location}catch(t){}var k=function(t){if(w.hasOwnProperty(t)){var e=w[t];delete w[t],e()}},_=function(t){return function(){k(t)}},x=function(t){k(t.data)},P=function(t){a.postMessage(String(t),r.protocol+"//"+r.host)};h&&m||(h=function(t){for(var e=[],n=arguments.length,r=1;n>r;)e.push(arguments[r++]);return w[++b]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},o(b),b},m=function(t){delete w[t]},f?o=function(t){g.nextTick(_(t))}:y&&y.now?o=function(t){y.now(_(t))}:v&&!d?(s=(i=new v).port2,i.port1.onmessage=x,o=u(s.postMessage,s,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts&&r&&"file:"!==r.protocol&&!l(P)?(o=P,a.addEventListener("message",x,!1)):o="onreadystatechange"in p("script")?function(t){c.appendChild(p("script")).onreadystatechange=function(){c.removeChild(this),k(t)}}:function(t){setTimeout(_(t),0)}),t.exports={set:h,clear:m}},function(t,e,n){var r=n(31);t.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(r)},function(t,e,n){var r=n(8),o=n(6),i=n(150);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){"use strict";var r=n(26),o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},function(t,e,n){var r=function(t){"use strict";var e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",s=r.toStringTag||"@@toStringTag";function a(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{a({},"")}catch(t){a=function(t,e,n){return t[e]=n}}function l(t,e,n,r){var o=e&&e.prototype instanceof p?e:p,i=Object.create(o.prototype),s=new x(r||[]);return i._invoke=function(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return C()}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var a=w(s,n);if(a){if(a===c)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=u(t,e,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===c)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}(t,n,s),i}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=l;var c={};function p(){}function d(){}function f(){}var h={};a(h,o,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(P([])));g&&g!==e&&n.call(g,o)&&(h=g);var v=f.prototype=p.prototype=Object.create(h);function y(t){["next","throw","return"].forEach((function(e){a(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var r;this._invoke=function(o,i){function s(){return new e((function(r,s){!function r(o,i,s,a){var l=u(t[o],t,i);if("throw"!==l.type){var c=l.arg,p=c.value;return p&&"object"==typeof p&&n.call(p,"__await")?e.resolve(p.__await).then((function(t){r("next",t,s,a)}),(function(t){r("throw",t,s,a)})):e.resolve(p).then((function(t){c.value=t,s(c)}),(function(t){return r("throw",t,s,a)}))}a(l.arg)}(o,i,r,s)}))}return r=r?r.then(s,s):s()}}function w(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,w(t,e),"throw"===e.method))return c;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=u(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,c;var o=r.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,c):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,c)}function k(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function _(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(k,this),this.reset(!0)}function P(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r<t.length;)if(n.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=void 0,e.done=!0,e};return i.next=i}}return{next:C}}function C(){return{value:void 0,done:!0}}return d.prototype=f,a(v,"constructor",f),a(f,"constructor",d),d.displayName=a(f,s,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===d||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,a(t,s,"GeneratorFunction")),t.prototype=Object.create(v),t},t.awrap=function(t){return{__await:t}},y(b.prototype),a(b.prototype,i,(function(){return this})),t.AsyncIterator=b,t.async=function(e,n,r,o,i){void 0===i&&(i=Promise);var s=new b(l(e,n,r,o),i);return t.isGeneratorFunction(n)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},y(v),a(v,s,"Generator"),a(v,o,(function(){return this})),a(v,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},t.values=P,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(_),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function r(n,r){return s.type="throw",s.arg=t,e.next=n,r&&(e.method="next",e.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var a=n.call(i,"catchLoc"),l=n.call(i,"finallyLoc");if(a&&l){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(a){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var s=i?i.completion:{};return s.type=t,s.arg=e,i?(this.method="next",this.next=i.finallyLoc,c):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),c},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),c}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;_(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:P(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},t}(t.exports);try{regeneratorRuntime=r}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}},function(t,e,n){var r=n(72),o=n(15),i=n(28),s=function(t){return function(e,n){var s,a,l=o(i(e)),u=r(n),c=l.length;return u<0||u>=c?t?"":void 0:(s=l.charCodeAt(u))<55296||s>56319||u+1===c||(a=l.charCodeAt(u+1))<56320||a>57343?t?l.charAt(u):s:t?l.slice(u,u+2):a-56320+(s-55296<<10)+65536}};t.exports={codeAt:s(!1),charAt:s(!0)}},function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,e,n){var r=n(250);t.exports=function(t,e){return new(r(t))(0===e?0:e)}},function(t,e,n){var r=n(2),o=n(7),i=n(138),s=n(21),a=n(25),l=n(78);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var e,n,r=s(t),o=a.f,u=i(r),c={},p=0;u.length>p;)void 0!==(n=o(r,e=u[p++]))&&l(c,e,n);return c}})},function(t,e,n){var r=n(2),o=n(3),i=n(13),s=n(98),a=n(140);r({target:"Object",stat:!0,forced:o((function(){s(1)})),sham:!a},{getPrototypeOf:function(t){return s(i(t))}})},function(t,e,n){"use strict";var r=n(2),o=n(251).left,i=n(33),s=n(42),a=n(77);r({target:"Array",proto:!0,forced:!i("reduce")||!a&&s>79&&s<83},{reduce:function(t){return o(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(40).forEach,o=n(33)("forEach");t.exports=o?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){var r=n(3);t.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){var r=n(21),o=n(50).f,i={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(t){return s.slice()}}(t):o(r(t))}},function(t,e,n){var r=n(4);e.f=r},function(t,e,n){var r=n(255),o=n(9),i=n(161),s=n(10).f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});o(e,t)||s(e,t,{value:i.f(t)})}},function(t,e,n){var r=n(2),o=n(256);r({target:"Array",stat:!0,forced:!n(146)((function(t){Array.from(t)}))},{from:o})},function(t,e,n){n(2)({target:"Object",stat:!0,sham:!n(7)},{create:n(32)})},function(t,e){var n="object"==typeof global&&global&&global.Object===Object&&global;t.exports=n},function(t,e,n){var r=n(80),o=n(271),i=n(272),s=n(273),a=n(274),l=n(275);function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=o,u.prototype.delete=i,u.prototype.get=s,u.prototype.has=a,u.prototype.set=l,t.exports=u},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(292),o=n(41);t.exports=function t(e,n,i,s,a){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,i,s,t,a))}},function(t,e,n){var r=n(170),o=n(295),i=n(171);t.exports=function(t,e,n,s,a,l){var u=1&n,c=t.length,p=e.length;if(c!=p&&!(u&&p>c))return!1;var d=l.get(t),f=l.get(e);if(d&&f)return d==e&&f==t;var h=-1,m=!0,g=2&n?new r:void 0;for(l.set(t,e),l.set(e,t);++h<c;){var v=t[h],y=e[h];if(s)var b=u?s(y,v,h,e,t,l):s(v,y,h,t,e,l);if(void 0!==b){if(b)continue;m=!1;break}if(g){if(!o(e,(function(t,e){if(!i(g,e)&&(v===t||a(v,t,n,s,l)))return g.push(e)}))){m=!1;break}}else if(v!==y&&!a(v,y,n,s,l)){m=!1;break}}return l.delete(t),l.delete(e),m}},function(t,e,n){var r=n(103),o=n(293),i=n(294);function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=o,s.prototype.has=i,t.exports=s},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(35)(n(24),"Set");t.exports=r},function(t,e,n){var r=n(49);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(2),o=n(5),i=n(31),s=[].slice,a=function(t){return function(e,n){var r=arguments.length>2,o=r?s.call(arguments,2):void 0;return t(r?function(){("function"==typeof e?e:Function(e)).apply(this,o)}:e,n)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:a(o.setTimeout),setInterval:a(o.setInterval)})},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",s="day",a="week",l="month",u="quarter",c="year",p="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(r,l),i=n-o<0,s=e.clone().add(r+(i?-1:1),l);return+(-(r+(n-o)/(i?o-s:s-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:l,y:c,w:a,d:s,D:p,h:i,m:o,s:r,ms:n,Q:u}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},y="en",b={};b[y]=m;var w=function(t){return t instanceof P},k=function(t,e,n){var r;if(!t)return y;if("string"==typeof t)b[t]&&(r=t),e&&(b[t]=e,r=t);else{var o=t.name;b[o]=t,r=o}return!n&&r&&(y=r),r||!n&&y},_=function(t,e){if(w(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new P(n)},x=v;x.l=k,x.i=w,x.w=function(t,e){return _(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var P=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var g=m.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(x.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(f);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return x},g.isValid=function(){return!(this.$d.toString()===d)},g.isSame=function(t,e){var n=_(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return _(t)<this.startOf(e)},g.isBefore=function(t,e){return this.endOf(e)<_(t)},g.$g=function(t,e,n){return x.u(t)?this[e]:this.set(n,t)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(t,e){var n=this,u=!!x.u(e)||e,d=x.p(t),f=function(t,e){var r=x.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return u?r:r.endOf(s)},h=function(t,e){return x.w(n.toDate()[t].apply(n.toDate("s"),(u?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},m=this.$W,g=this.$M,v=this.$D,y="set"+(this.$u?"UTC":"");switch(d){case c:return u?f(1,0):f(31,11);case l:return u?f(1,g):f(0,g+1);case a:var b=this.$locale().weekStart||0,w=(m<b?m+7:m)-b;return f(u?v-w:v+(6-w),g);case s:case p:return h(y+"Hours",0);case i:return h(y+"Minutes",1);case o:return h(y+"Seconds",2);case r:return h(y+"Milliseconds",3);default:return this.clone()}},g.endOf=function(t){return this.startOf(t,!1)},g.$set=function(t,e){var a,u=x.p(t),d="set"+(this.$u?"UTC":""),f=(a={},a[s]=d+"Date",a[p]=d+"Date",a[l]=d+"Month",a[c]=d+"FullYear",a[i]=d+"Hours",a[o]=d+"Minutes",a[r]=d+"Seconds",a[n]=d+"Milliseconds",a)[u],h=u===s?this.$D+(e-this.$W):e;if(u===l||u===c){var m=this.clone().set(p,1);m.$d[f](h),m.init(),this.$d=m.set(p,Math.min(this.$D,m.daysInMonth())).$d}else f&&this.$d[f](h);return this.init(),this},g.set=function(t,e){return this.clone().$set(t,e)},g.get=function(t){return this[x.p(t)]()},g.add=function(n,u){var p,d=this;n=Number(n);var f=x.p(u),h=function(t){var e=_(d);return x.w(e.date(e.date()+Math.round(t*n)),d)};if(f===l)return this.set(l,this.$M+n);if(f===c)return this.set(c,this.$y+n);if(f===s)return h(1);if(f===a)return h(7);var m=(p={},p[o]=t,p[i]=e,p[r]=1e3,p)[f]||1,g=this.$d.getTime()+n*m;return x.w(g,this)},g.subtract=function(t,e){return this.add(-1*t,e)},g.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||d;var r=t||"YYYY-MM-DDTHH:mm:ssZ",o=x.z(this),i=this.$H,s=this.$m,a=this.$M,l=n.weekdays,u=n.months,c=function(t,n,o,i){return t&&(t[n]||t(e,r))||o[n].substr(0,i)},p=function(t){return x.s(i%12||12,t,"0")},f=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},m={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:x.s(a+1,2,"0"),MMM:c(n.monthsShort,a,u,3),MMMM:c(u,a),D:this.$D,DD:x.s(this.$D,2,"0"),d:String(this.$W),dd:c(n.weekdaysMin,this.$W,l,2),ddd:c(n.weekdaysShort,this.$W,l,3),dddd:l[this.$W],H:String(i),HH:x.s(i,2,"0"),h:p(1),hh:p(2),a:f(i,s,!0),A:f(i,s,!1),m:String(s),mm:x.s(s,2,"0"),s:String(this.$s),ss:x.s(this.$s,2,"0"),SSS:x.s(this.$ms,3,"0"),Z:o};return r.replace(h,(function(t,e){return e||m[t]||o.replace(":","")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(n,p,d){var f,h=x.p(p),m=_(n),g=(m.utcOffset()-this.utcOffset())*t,v=this-m,y=x.m(this,m);return y=(f={},f[c]=y/12,f[l]=y,f[u]=y/3,f[a]=(v-g)/6048e5,f[s]=(v-g)/864e5,f[i]=v/e,f[o]=v/t,f[r]=v/1e3,f)[h]||v,d?y:x.a(y)},g.daysInMonth=function(){return this.endOf(l).$D},g.$locale=function(){return b[this.$L]},g.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=k(t,e,!0);return r&&(n.$L=r),n},g.clone=function(){return x.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},m}(),C=P.prototype;return _.prototype=C,[["$ms",n],["$s",r],["$m",o],["$H",i],["$W",s],["$M",l],["$y",c],["$D",p]].forEach((function(t){C[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),_.extend=function(t,e){return t.$i||(t(e,P,_),t.$i=!0),_},_.locale=k,_.isDayjs=w,_.unix=function(t){return _(1e3*t)},_.en=b[y],_.Ls=b,_.p={},_}()},function(t,e,n){"use strict";var r=Object.prototype.hasOwnProperty,o=Array.isArray,i=function(){for(var t=[],e=0;e<256;++e)t.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return t}(),s=function(t,e){for(var n=e&&e.plainObjects?Object.create(null):{},r=0;r<t.length;++r)void 0!==t[r]&&(n[r]=t[r]);return n};t.exports={arrayToObject:s,assign:function(t,e){return Object.keys(e).reduce((function(t,n){return t[n]=e[n],t}),t)},combine:function(t,e){return[].concat(t,e)},compact:function(t){for(var e=[{obj:{o:t},prop:"o"}],n=[],r=0;r<e.length;++r)for(var i=e[r],s=i.obj[i.prop],a=Object.keys(s),l=0;l<a.length;++l){var u=a[l],c=s[u];"object"==typeof c&&null!==c&&-1===n.indexOf(c)&&(e.push({obj:s,prop:u}),n.push(c))}return function(t){for(;t.length>1;){var e=t.pop(),n=e.obj[e.prop];if(o(n)){for(var r=[],i=0;i<n.length;++i)void 0!==n[i]&&r.push(n[i]);e.obj[e.prop]=r}}}(e),t},decode:function(t,e,n){var r=t.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(t){return r}},encode:function(t,e,n){if(0===t.length)return t;var r="string"==typeof t?t:String(t);if("iso-8859-1"===n)return escape(r).replace(/%u[0-9a-f]{4}/gi,(function(t){return"%26%23"+parseInt(t.slice(2),16)+"%3B"}));for(var o="",s=0;s<r.length;++s){var a=r.charCodeAt(s);45===a||46===a||95===a||126===a||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122?o+=r.charAt(s):a<128?o+=i[a]:a<2048?o+=i[192|a>>6]+i[128|63&a]:a<55296||a>=57344?o+=i[224|a>>12]+i[128|a>>6&63]+i[128|63&a]:(s+=1,a=65536+((1023&a)<<10|1023&r.charCodeAt(s)),o+=i[240|a>>18]+i[128|a>>12&63]+i[128|a>>6&63]+i[128|63&a])}return o},isBuffer:function(t){return!(!t||"object"!=typeof t)&&!!(t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer(t))},isRegExp:function(t){return"[object RegExp]"===Object.prototype.toString.call(t)},merge:function t(e,n,i){if(!n)return e;if("object"!=typeof n){if(o(e))e.push(n);else{if(!e||"object"!=typeof e)return[e,n];(i&&(i.plainObjects||i.allowPrototypes)||!r.call(Object.prototype,n))&&(e[n]=!0)}return e}if(!e||"object"!=typeof e)return[e].concat(n);var a=e;return o(e)&&!o(n)&&(a=s(e,i)),o(e)&&o(n)?(n.forEach((function(n,o){if(r.call(e,o)){var s=e[o];s&&"object"==typeof s&&n&&"object"==typeof n?e[o]=t(s,n,i):e.push(n)}else e[o]=n})),e):Object.keys(n).reduce((function(e,o){var s=n[o];return r.call(e,o)?e[o]=t(e[o],s,i):e[o]=s,e}),a)}}},function(t,e,n){"use strict";var r=String.prototype.replace,o=/%20/g;t.exports={default:"RFC3986",formatters:{RFC1738:function(t){return r.call(t,o,"+")},RFC3986:function(t){return t}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},function(t,e){t.exports=function(t){return t instanceof Date}},function(t,e,n){var r=n(36),o=n(112);t.exports=function(t){var e=r(t),n=e.getFullYear(),i=new Date(0);i.setFullYear(n+1,0,4),i.setHours(0,0,0,0);var s=o(i),a=new Date(0);a.setFullYear(n,0,4),a.setHours(0,0,0,0);var l=o(a);return e.getTime()>=s.getTime()?n+1:e.getTime()>=l.getTime()?n:n-1}},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(12);function o(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var s=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),s.push(o(e)+"="+o(t))})))})),i=s.join("&")}if(i){var a=t.indexOf("#");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";var r=n(12),o=n(389),i={"Content-Type":"application/x-www-form-urlencoded"};function s(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var a,l={adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(a=n(190)),a),transformRequest:[function(t,e){return o(e,"Accept"),o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(s(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(s(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};l.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){l.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){l.headers[t]=r.merge(i)})),t.exports=l},function(t,e,n){"use strict";var r=n(12),o=n(390),i=n(392),s=n(187),a=n(393),l=n(396),u=n(397),c=n(191);t.exports=function(t){return new Promise((function(e,n){var p=t.data,d=t.headers;r.isFormData(p)&&delete d["Content-Type"];var f=new XMLHttpRequest;if(t.auth){var h=t.auth.username||"",m=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+m)}var g=a(t.baseURL,t.url);if(f.open(t.method.toUpperCase(),s(g,t.params,t.paramsSerializer),!0),f.timeout=t.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in f?l(f.getAllResponseHeaders()):null,i={data:t.responseType&&"text"!==t.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:r,config:t,request:f};o(e,n,i),f=null}},f.onabort=function(){f&&(n(c("Request aborted",t,"ECONNABORTED",f)),f=null)},f.onerror=function(){n(c("Network Error",t,null,f)),f=null},f.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(c(e,t,"ECONNABORTED",f)),f=null},r.isStandardBrowserEnv()){var v=(t.withCredentials||u(g))&&t.xsrfCookieName?i.read(t.xsrfCookieName):void 0;v&&(d[t.xsrfHeaderName]=v)}if("setRequestHeader"in f&&r.forEach(d,(function(t,e){void 0===p&&"content-type"===e.toLowerCase()?delete d[e]:f.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(f.withCredentials=!!t.withCredentials),t.responseType)try{f.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&f.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){f&&(f.abort(),n(t),f=null)})),p||(p=null),f.send(p)}))}},function(t,e,n){"use strict";var r=n(391);t.exports=function(t,e,n,o,i){var s=new Error(t);return r(s,e,n,o,i)}},function(t,e,n){"use strict";var r=n(12);t.exports=function(t,e){e=e||{};var n={},o=["url","method","data"],i=["headers","auth","proxy","params"],s=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],a=["validateStatus"];function l(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function u(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=l(void 0,t[o])):n[o]=l(t[o],e[o])}r.forEach(o,(function(t){r.isUndefined(e[t])||(n[t]=l(void 0,e[t]))})),r.forEach(i,u),r.forEach(s,(function(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=l(void 0,t[o])):n[o]=l(void 0,e[o])})),r.forEach(a,(function(r){r in e?n[r]=l(t[r],e[r]):r in t&&(n[r]=l(void 0,t[r]))}));var c=o.concat(i).concat(s).concat(a),p=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===c.indexOf(t)}));return r.forEach(p,u),n}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e,n){n(2)({target:"Object",stat:!0},{setPrototypeOf:n(75)})},function(t,e,n){var r=n(2),o=n(23),i=n(26),s=n(8),a=n(6),l=n(32),u=n(402),c=n(3),p=o("Reflect","construct"),d=c((function(){function t(){}return!(p((function(){}),[],t)instanceof t)})),f=!c((function(){p((function(){}))})),h=d||f;r({target:"Reflect",stat:!0,forced:h,sham:h},{construct:function(t,e){i(t),s(e);var n=arguments.length<3?t:i(arguments[2]);if(f&&!d)return p(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(u.apply(t,r))}var o=n.prototype,c=l(a(o)?o:Object.prototype),h=Function.apply.call(t,c,e);return a(h)?h:c}})},function(t,e,n){},function(t,e,n){},function(t,e,n){var r=n(259),o=n(121),i=n(326),s=n(333),a=n(342),l=n(227),u=i((function(t){var e=l(t);return a(e)&&(e=void 0),s(r(t,1,a,!0),o(e,2))}));t.exports=u},function(t,e,n){var r=n(348),o={autoSetContainer:!1,appendToBody:!0},i={install:function(t){t.prototype.$clipboardConfig=o,t.prototype.$copyText=function(t,e){return new Promise((function(n,i){var s=document.createElement("button"),a=new r(s,{text:function(){return t},action:function(){return"copy"},container:"object"==typeof e?e:document.body});a.on("success",(function(t){a.destroy(),n(t)})),a.on("error",(function(t){a.destroy(),i(t)})),o.appendToBody&&document.body.appendChild(s),s.click(),o.appendToBody&&document.body.removeChild(s)}))},t.directive("clipboard",{bind:function(t,e,n){if("success"===e.arg)t._vClipboard_success=e.value;else if("error"===e.arg)t._vClipboard_error=e.value;else{var i=new r(t,{text:function(){return e.value},action:function(){return"cut"===e.arg?"cut":"copy"},container:o.autoSetContainer?t:void 0});i.on("success",(function(e){var n=t._vClipboard_success;n&&n(e)})),i.on("error",(function(e){var n=t._vClipboard_error;n&&n(e)})),t._vClipboard=i}},update:function(t,e){"success"===e.arg?t._vClipboard_success=e.value:"error"===e.arg?t._vClipboard_error=e.value:(t._vClipboard.text=function(){return e.value},t._vClipboard.action=function(){return"cut"===e.arg?"cut":"copy"})},unbind:function(t,e){"success"===e.arg?delete t._vClipboard_success:"error"===e.arg?delete t._vClipboard_error:(t._vClipboard.destroy(),delete t._vClipboard)}})},config:o};t.exports=i},function(t,e,n){function r(){var t;try{t=e.storage.debug}catch(t){}return!t&&"undefined"!=typeof process&&"env"in process&&(t=process.env.DEBUG),t}(e=t.exports=n(367)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),!n)return;var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))})),t.splice(i,0,r)},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=r,e.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(r())},function(t,e,n){var r=n(371),o=n(376),i=n(185),s=n(36),a=n(379),l=n(380);var u={M:function(t){return t.getMonth()+1},MM:function(t){return d(t.getMonth()+1,2)},Q:function(t){return Math.ceil((t.getMonth()+1)/3)},D:function(t){return t.getDate()},DD:function(t){return d(t.getDate(),2)},DDD:function(t){return r(t)},DDDD:function(t){return d(r(t),3)},d:function(t){return t.getDay()},E:function(t){return t.getDay()||7},W:function(t){return o(t)},WW:function(t){return d(o(t),2)},YY:function(t){return d(t.getFullYear(),4).substr(2)},YYYY:function(t){return d(t.getFullYear(),4)},GG:function(t){return String(i(t)).substr(2)},GGGG:function(t){return i(t)},H:function(t){return t.getHours()},HH:function(t){return d(t.getHours(),2)},h:function(t){var e=t.getHours();return 0===e?12:e>12?e%12:e},hh:function(t){return d(u.h(t),2)},m:function(t){return t.getMinutes()},mm:function(t){return d(t.getMinutes(),2)},s:function(t){return t.getSeconds()},ss:function(t){return d(t.getSeconds(),2)},S:function(t){return Math.floor(t.getMilliseconds()/100)},SS:function(t){return d(Math.floor(t.getMilliseconds()/10),2)},SSS:function(t){return d(t.getMilliseconds(),3)},Z:function(t){return p(t.getTimezoneOffset(),":")},ZZ:function(t){return p(t.getTimezoneOffset())},X:function(t){return Math.floor(t.getTime()/1e3)},x:function(t){return t.getTime()}};function c(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|]$/g,""):t.replace(/\\/g,"")}function p(t,e){e=e||"";var n=t>0?"-":"+",r=Math.abs(t),o=r%60;return n+d(Math.floor(r/60),2)+e+d(o,2)}function d(t,e){for(var n=Math.abs(t).toString();n.length<e;)n="0"+n;return n}t.exports=function(t,e,n){var r=e?String(e):"YYYY-MM-DDTHH:mm:ss.SSSZ",o=(n||{}).locale,i=l.format.formatters,p=l.format.formattingTokensRegExp;o&&o.format&&o.format.formatters&&(i=o.format.formatters,o.format.formattingTokensRegExp&&(p=o.format.formattingTokensRegExp));var d=s(t);return a(d)?function(t,e,n){var r,o,i=t.match(n),s=i.length;for(r=0;r<s;r++)o=e[i[r]]||u[i[r]],i[r]=o||c(i[r]);return function(t){for(var e="",n=0;n<s;n++)i[n]instanceof Function?e+=i[n](t,u):e+=i[n];return e}}(r,i,p)(d):"Invalid Date"}},function(t,e,n){t.exports=n(384)},function(t,e,n){function r(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(t.exports=r=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=r=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),r(e)}n(34),n(43),n(11),n(58),n(14),n(17),t.exports=r,t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e,n){"use strict";var r=n(2),o=n(93).includes,i=n(114);r({target:"Array",proto:!0},{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("includes")},function(t,e,n){"use strict";var r=n(2),o=n(116),i=n(28),s=n(15);r({target:"String",proto:!0,forced:!n(117)("includes")},{includes:function(t){return!!~s(i(this)).indexOf(s(o(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(2),o=n(93).indexOf,i=n(33),s=[].indexOf,a=!!s&&1/[1].indexOf(1,-0)<0,l=i("indexOf");r({target:"Array",proto:!0,forced:a||!l},{indexOf:function(t){return a?s.apply(this,arguments)||0:o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(2),o=n(52),i=n(21),s=n(33),a=[].join,l=o!=Object,u=s("join",",");r({target:"Array",proto:!0,forced:l||!u},{join:function(t){return a.call(i(this),void 0===t?",":t)}})},function(t,e,n){var r=n(6),o=n(30),i=n(4)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},function(t,e,n){var r=n(3),o=function(t,e){return RegExp(t,e)};e.UNSUPPORTED_Y=r((function(){var t=o("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=r((function(){var t=o("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,n){"use strict";n(37);var r=n(16),o=n(87),i=n(3),s=n(4),a=n(22),l=s("species"),u=RegExp.prototype;t.exports=function(t,e,n,c){var p=s(t),d=!i((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),f=d&&!i((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return e=!0,null},n[p](""),!e}));if(!d||!f||n){var h=/./[p],m=e(p,""[t],(function(t,e,n,r,i){var s=e.exec;return s===o||s===u.exec?d&&!i?{done:!0,value:h.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}));r(String.prototype,t,m[0]),r(u,p,m[1])}c&&a(u[p],"sham",!0)}},function(t,e,n){"use strict";var r=n(152).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},function(t,e,n){var r=n(30),o=n(87);t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},function(t,e,n){var r=n(16),o=Date.prototype,i=o.toString,s=o.getTime;"Invalid Date"!=String(new Date(NaN))&&r(o,"toString",(function(){var t=s.call(this);return t==t?i.call(this):"Invalid Date"}))},function(t,e,n){"use strict";var r=n(16),o=n(8),i=n(15),s=n(3),a=n(118),l=RegExp.prototype,u=l.toString,c=s((function(){return"/a/b"!=u.call({source:"a",flags:"b"})})),p="toString"!=u.name;(c||p)&&r(RegExp.prototype,"toString",(function(){var t=o(this),e=i(t.source),n=t.flags;return"/"+e+"/"+i(void 0===n&&t instanceof RegExp&&!("flags"in l)?a.call(t):n)}),{unsafe:!0})},function(t,e,n){"use strict";var r=n(2),o=n(26),i=n(13),s=n(19),a=n(15),l=n(3),u=n(363),c=n(33),p=n(364),d=n(365),f=n(42),h=n(366),m=[],g=m.sort,v=l((function(){m.sort(void 0)})),y=l((function(){m.sort(null)})),b=c("sort"),w=!l((function(){if(f)return f<70;if(!(p&&p>3)){if(d)return!0;if(h)return h<603;var t,e,n,r,o="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)m.push({k:e+r,v:n})}for(m.sort((function(t,e){return e.v-t.v})),r=0;r<m.length;r++)e=m[r].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return"DGBEFHACIJK"!==o}}));r({target:"Array",proto:!0,forced:v||!y||!b||!w},{sort:function(t){void 0!==t&&o(t);var e=i(this);if(w)return void 0===t?g.call(e):g.call(e,t);var n,r,l=[],c=s(e.length);for(r=0;r<c;r++)r in e&&l.push(e[r]);for(n=(l=u(l,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:a(e)>a(n)?1:-1}}(t))).length,r=0;r<n;)e[r]=l[r++];for(;r<c;)delete e[r++];return e}})},function(t,e,n){"use strict";var r=n(23),o=n(10),i=n(4),s=n(7),a=i("species");t.exports=function(t){var e=r(t),n=o.f;s&&e&&!e[a]&&n(e,a,{configurable:!0,get:function(){return this}})}},function(t,e,n){var r=n(3);t.exports=r((function(){var t=RegExp(".","string".charAt(0));return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,n){var r=n(3);t.exports=r((function(){var t=RegExp("(?<a>b)","string".charAt(5));return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,n){var r=n(120),o=n(20);t.exports=function(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}},function(t,e,n){var r=n(301),o=n(221),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols,a=s?function(t){return null==t?[]:(t=Object(t),r(s(t),(function(e){return i.call(t,e)})))}:o;t.exports=a},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(302),o=n(100),i=n(20),s=n(106),a=n(123),l=n(107),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),c=!n&&o(t),p=!n&&!c&&s(t),d=!n&&!c&&!p&&l(t),f=n||c||p||d,h=f?r(t.length,String):[],m=h.length;for(var g in t)!e&&!u.call(t,g)||f&&("length"==g||p&&("offset"==g||"parent"==g)||d&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||a(g,m))||h.push(g);return h}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(125);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},function(t,e,n){var r=n(35),o=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=o},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(2),o=n(345);r({global:!0,forced:parseInt!=o},{parseInt:o})},function(t,e,n){"use strict";var r=n(7),o=n(5),i=n(86),s=n(16),a=n(9),l=n(30),u=n(230),c=n(53),p=n(132),d=n(3),f=n(32),h=n(50).f,m=n(25).f,g=n(10).f,v=n(126).trim,y=o.Number,b=y.prototype,w="Number"==l(f(b)),k=function(t){if(c(t))throw TypeError("Cannot convert a Symbol value to a number");var e,n,r,o,i,s,a,l,u=p(t,"number");if("string"==typeof u&&u.length>2)if(43===(e=(u=v(u)).charCodeAt(0))||45===e){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+u}for(s=(i=u.slice(2)).length,a=0;a<s;a++)if((l=i.charCodeAt(a))<48||l>o)return NaN;return parseInt(i,r)}return+u};if(i("Number",!y(" 0o1")||!y("0b1")||y("+0x1"))){for(var _,x=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof x&&(w?d((function(){b.valueOf.call(n)})):"Number"!=l(n))?u(new y(k(e)),n,x):k(e)},P=r?h(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),C=0;P.length>C;C++)a(y,_=P[C])&&!a(x,_)&&g(x,_,m(y,_));x.prototype=b,b.constructor=x,s(o,"Number",x)}},function(t,e,n){var r=n(6),o=n(75);t.exports=function(t,e,n){var i,s;return o&&"function"==typeof(i=e.constructor)&&i!==n&&r(s=i.prototype)&&s!==n.prototype&&o(t,s),t}},function(t,e,n){var r=n(173)(Object.getPrototypeOf,Object);t.exports=r},function(t,e,n){t.exports=n(405)},function(t,e,n){var r=n(6);t.exports=function(t,e){var n,o;if("string"===e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if("string"!==e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(5),o=n(95),i=r.WeakMap;t.exports="function"==typeof i&&/native code/.test(o(i))},function(t,e,n){"use strict";var r=n(139).IteratorPrototype,o=n(32),i=n(56),s=n(74),a=n(55),l=function(){return this};t.exports=function(t,e,n){var u=e+" Iterator";return t.prototype=o(r,{next:i(1,n)}),s(t,u,!1,!0),a[u]=l,t}},function(t,e,n){var r=n(6);t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,n){"use strict";var r,o,i,s,a=n(2),l=n(29),u=n(5),c=n(23),p=n(141),d=n(16),f=n(238),h=n(75),m=n(74),g=n(216),v=n(6),y=n(26),b=n(239),w=n(95),k=n(240),_=n(146),x=n(115),P=n(147).set,C=n(241),S=n(149),T=n(243),I=n(150),O=n(244),M=n(39),A=n(86),j=n(4),$=n(245),L=n(77),E=n(42),V=j("species"),R="Promise",N=M.get,D=M.set,F=M.getterFor(R),H=p&&p.prototype,U=p,z=H,B=u.TypeError,W=u.document,q=u.process,J=I.f,G=J,Y=!!(W&&W.createEvent&&u.dispatchEvent),Z="function"==typeof PromiseRejectionEvent,K=!1,X=A(R,(function(){var t=w(U),e=t!==String(U);if(!e&&66===E)return!0;if(l&&!z.finally)return!0;if(E>=51&&/native code/.test(t))return!1;var n=new U((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))};return(n.constructor={})[V]=r,!(K=n.then((function(){}))instanceof r)||!e&&$&&!Z})),Q=X||!_((function(t){U.all(t).catch((function(){}))})),tt=function(t){var e;return!(!v(t)||"function"!=typeof(e=t.then))&&e},et=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;C((function(){for(var r=t.value,o=1==t.state,i=0;n.length>i;){var s,a,l,u=n[i++],c=o?u.ok:u.fail,p=u.resolve,d=u.reject,f=u.domain;try{c?(o||(2===t.rejection&&it(t),t.rejection=1),!0===c?s=r:(f&&f.enter(),s=c(r),f&&(f.exit(),l=!0)),s===u.promise?d(B("Promise-chain cycle")):(a=tt(s))?a.call(s,p,d):p(s)):d(r)}catch(t){f&&!l&&f.exit(),d(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&rt(t)}))}},nt=function(t,e,n){var r,o;Y?((r=W.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),u.dispatchEvent(r)):r={promise:e,reason:n},!Z&&(o=u["on"+t])?o(r):"unhandledrejection"===t&&T("Unhandled promise rejection",n)},rt=function(t){P.call(u,(function(){var e,n=t.facade,r=t.value;if(ot(t)&&(e=O((function(){L?q.emit("unhandledRejection",r,n):nt("unhandledrejection",n,r)})),t.rejection=L||ot(t)?2:1,e.error))throw e.value}))},ot=function(t){return 1!==t.rejection&&!t.parent},it=function(t){P.call(u,(function(){var e=t.facade;L?q.emit("rejectionHandled",e):nt("rejectionhandled",e,t.value)}))},st=function(t,e,n){return function(r){t(e,r,n)}},at=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,et(t,!0))},lt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw B("Promise can't be resolved itself");var r=tt(e);r?C((function(){var n={done:!1};try{r.call(e,st(lt,n,t),st(at,n,t))}catch(e){at(n,e,t)}})):(t.value=e,t.state=1,et(t,!1))}catch(e){at({done:!1},e,t)}}};if(X&&(z=(U=function(t){b(this,U,R),y(t),r.call(this);var e=N(this);try{t(st(lt,e),st(at,e))}catch(t){at(e,t)}}).prototype,(r=function(t){D(this,{type:R,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=f(z,{then:function(t,e){var n=F(this),r=J(x(this,U));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=L?q.domain:void 0,n.parent=!0,n.reactions.push(r),0!=n.state&&et(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r,e=N(t);this.promise=t,this.resolve=st(lt,e),this.reject=st(at,e)},I.f=J=function(t){return t===U||t===i?new o(t):G(t)},!l&&"function"==typeof p&&H!==Object.prototype)){s=H.then,K||(d(H,"then",(function(t,e){var n=this;return new U((function(t,e){s.call(n,t,e)})).then(t,e)}),{unsafe:!0}),d(H,"catch",z.catch,{unsafe:!0}));try{delete H.constructor}catch(t){}h&&h(H,z)}a({global:!0,wrap:!0,forced:X},{Promise:U}),m(U,R,!1,!0),g(R),i=c(R),a({target:R,stat:!0,forced:X},{reject:function(t){var e=J(this);return e.reject.call(void 0,t),e.promise}}),a({target:R,stat:!0,forced:l||X},{resolve:function(t){return S(l&&this===i?U:this,t)}}),a({target:R,stat:!0,forced:Q},{all:function(t){var e=this,n=J(e),r=n.resolve,o=n.reject,i=O((function(){var n=y(e.resolve),i=[],s=0,a=1;k(t,(function(t){var l=s++,u=!1;i.push(void 0),a++,n.call(e,t).then((function(t){u||(u=!0,i[l]=t,--a||r(i))}),o)})),--a||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=J(e),r=n.reject,o=O((function(){var o=y(e.resolve);k(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},function(t,e,n){var r=n(16);t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},function(t,e,n){var r=n(8),o=n(142),i=n(19),s=n(76),a=n(143),l=n(145),u=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var c,p,d,f,h,m,g,v=n&&n.that,y=!(!n||!n.AS_ENTRIES),b=!(!n||!n.IS_ITERATOR),w=!(!n||!n.INTERRUPTED),k=s(e,v,1+y+w),_=function(t){return c&&l(c),new u(!0,t)},x=function(t){return y?(r(t),w?k(t[0],t[1],_):k(t[0],t[1])):w?k(t,_):k(t)};if(b)c=t;else{if("function"!=typeof(p=a(t)))throw TypeError("Target is not iterable");if(o(p)){for(d=0,f=i(t.length);f>d;d++)if((h=x(t[d]))&&h instanceof u)return h;return new u(!1)}c=p.call(t)}for(m=c.next;!(g=m.call(c)).done;){try{h=x(g.value)}catch(t){throw l(c),t}if("object"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},function(t,e,n){var r,o,i,s,a,l,u,c,p=n(5),d=n(25).f,f=n(147).set,h=n(148),m=n(242),g=n(77),v=p.MutationObserver||p.WebKitMutationObserver,y=p.document,b=p.process,w=p.Promise,k=d(p,"queueMicrotask"),_=k&&k.value;_||(r=function(){var t,e;for(g&&(t=b.domain)&&t.exit();o;){e=o.fn,o=o.next;try{e()}catch(t){throw o?s():i=void 0,t}}i=void 0,t&&t.enter()},h||g||m||!v||!y?w&&w.resolve?((u=w.resolve(void 0)).constructor=w,c=u.then,s=function(){c.call(u,r)}):s=g?function(){b.nextTick(r)}:function(){f.call(p,r)}:(a=!0,l=y.createTextNode(""),new v(r).observe(l,{characterData:!0}),s=function(){l.data=a=!a})),t.exports=_||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,s()),i=e}},function(t,e,n){var r=n(31);t.exports=/web0s(?!.*chrome)/i.test(r)},function(t,e,n){var r=n(5);t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e){t.exports="object"==typeof window},function(t,e,n){var r=n(2),o=n(247);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(t,e,n){"use strict";var r=n(7),o=n(3),i=n(71),s=n(97),a=n(96),l=n(13),u=n(52),c=Object.assign,p=Object.defineProperty;t.exports=!c||o((function(){if(r&&1!==c({b:1},c(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=c({},t)[n]||"abcdefghijklmnopqrst"!=i(c({},e)).join("")}))?function(t,e){for(var n=l(t),o=arguments.length,c=1,p=s.f,d=a.f;o>c;)for(var f,h=u(arguments[c++]),m=p?i(h).concat(p(h)):i(h),g=m.length,v=0;g>v;)f=m[v++],r&&!d.call(h,f)||(n[f]=h[f]);return n}:c},function(t,e,n){"use strict";var r=n(2),o=n(29),i=n(141),s=n(3),a=n(23),l=n(115),u=n(149),c=n(16);if(r({target:"Promise",proto:!0,real:!0,forced:!!i&&s((function(){i.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=l(this,a("Promise")),n="function"==typeof t;return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}}),!o&&"function"==typeof i){var p=a("Promise").prototype.finally;i.prototype.finally!==p&&c(i.prototype,"finally",p,{unsafe:!0})}},function(t,e,n){"use strict";var r=n(99),o=n(144);t.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},function(t,e,n){var r=n(6),o=n(57),i=n(4)("species");t.exports=function(t){var e;return o(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!o(e.prototype)?r(e)&&null===(e=e[i])&&(e=void 0):e=void 0),void 0===e?Array:e}},function(t,e,n){var r=n(26),o=n(13),i=n(52),s=n(19),a=function(t){return function(e,n,a,l){r(n);var u=o(e),c=i(u),p=s(u.length),d=t?p-1:0,f=t?-1:1;if(a<2)for(;;){if(d in c){l=c[d],d+=f;break}if(d+=f,t?d<0:p<=d)throw TypeError("Reduce of empty array with no initial value")}for(;t?d>=0:p>d;d+=f)d in c&&(l=n(l,c[d],d,u));return l}};t.exports={left:a(!1),right:a(!0)}},function(t,e,n){"use strict";var r,o=n(2),i=n(25).f,s=n(19),a=n(15),l=n(116),u=n(28),c=n(117),p=n(29),d="".startsWith,f=Math.min,h=c("startsWith");o({target:"String",proto:!0,forced:!!(p||h||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!h},{startsWith:function(t){var e=a(u(this));l(t);var n=s(f(arguments.length>1?arguments[1]:void 0,e.length)),r=a(t);return d?d.call(e,r,n):e.slice(n,n+r.length)===r}})},function(t,e,n){var r=n(2),o=n(159),i=n(3),s=n(6),a=n(254).onFreeze,l=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){l(1)})),sham:!o},{freeze:function(t){return l&&s(t)?l(a(t)):t}})},function(t,e,n){var r=n(2),o=n(54),i=n(6),s=n(9),a=n(10).f,l=n(50),u=n(160),c=n(69),p=n(159),d=!1,f=c("meta"),h=0,m=Object.isExtensible||function(){return!0},g=function(t){a(t,f,{value:{objectID:"O"+h++,weakData:{}}})},v=t.exports={enable:function(){v.enable=function(){},d=!0;var t=l.f,e=[].splice,n={};n[f]=1,t(n).length&&(l.f=function(n){for(var r=t(n),o=0,i=r.length;o<i;o++)if(r[o]===f){e.call(r,o,1);break}return r},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,f)){if(!m(t))return"F";if(!e)return"E";g(t)}return t[f].objectID},getWeakData:function(t,e){if(!s(t,f)){if(!m(t))return!0;if(!e)return!1;g(t)}return t[f].weakData},onFreeze:function(t){return p&&d&&m(t)&&!s(t,f)&&g(t),t}};o[f]=!0},function(t,e,n){var r=n(5);t.exports=r},function(t,e,n){"use strict";var r=n(76),o=n(13),i=n(257),s=n(142),a=n(19),l=n(78),u=n(143);t.exports=function(t){var e,n,c,p,d,f,h=o(t),m="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,b=u(h),w=0;if(y&&(v=r(v,g>2?arguments[2]:void 0,2)),null==b||m==Array&&s(b))for(n=new m(e=a(h.length));e>w;w++)f=y?v(h[w],w):h[w],l(n,w,f);else for(d=(p=b.call(h)).next,n=new m;!(c=d.call(p)).done;w++)f=y?i(p,v,[c.value,w],!0):c.value,l(n,w,f);return n.length=w,n}},function(t,e,n){var r=n(8),o=n(145);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){throw o(t),e}}},function(t,e,n){var r=n(13),o=Math.floor,i="".replace,s=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,l,u,c){var p=n+t.length,d=l.length,f=a;return void 0!==u&&(u=r(u),f=s),i.call(c,f,(function(r,i){var s;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(p);case"<":s=u[i.slice(1,-1)];break;default:var a=+i;if(0===a)return r;if(a>d){var c=o(a/10);return 0===c?r:c<=d?void 0===l[c-1]?i.charAt(1):l[c-1]+i.charAt(1):r}s=l[a-1]}return void 0===s?"":s}))}},function(t,e,n){var r=n(120),o=n(260);t.exports=function t(e,n,i,s,a){var l=-1,u=e.length;for(i||(i=o),a||(a=[]);++l<u;){var c=e[l];n>0&&i(c)?n>1?t(c,n-1,i,s,a):r(a,c):s||(a[a.length]=c)}return a}},function(t,e,n){var r=n(59),o=n(100),i=n(20),s=r?r.isConcatSpreadable:void 0;t.exports=function(t){return i(t)||o(t)||!!(s&&t&&t[s])}},function(t,e,n){var r=n(51),o=n(41);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(59),o=Object.prototype,i=o.hasOwnProperty,s=o.toString,a=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,a),n=t[a];try{t[a]=void 0;var r=!0}catch(t){}var o=s.call(t);return r&&(e?t[a]=n:delete t[a]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r=n(265),o=n(313),i=n(176);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(166),o=n(168);t.exports=function(t,e,n,i){var s=n.length,a=s,l=!i;if(null==t)return!a;for(t=Object(t);s--;){var u=n[s];if(l&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++s<a;){var c=(u=n[s])[0],p=t[c],d=u[1];if(l&&u[2]){if(void 0===p&&!(c in t))return!1}else{var f=new r;if(i)var h=i(p,d,c,t,e,f);if(!(void 0===h?o(d,p,3,i,f):h))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(81),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(81);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(81);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(81);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(80);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(80),o=n(101),i=n(103);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<199)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(102),o=n(277),i=n(49),s=n(167),a=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,p=u.hasOwnProperty,d=RegExp("^"+c.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?d:a).test(s(t))}},function(t,e,n){var r,o=n(278),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(24)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(281),o=n(80),i=n(101);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(282),o=n(283),i=n(284),s=n(285),a=n(286);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,t.exports=l},function(t,e,n){var r=n(82);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(82),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(82),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},function(t,e,n){var r=n(82);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(83);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(83);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(83);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(83);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},function(t,e,n){var r=n(166),o=n(169),i=n(296),s=n(299),a=n(309),l=n(20),u=n(106),c=n(107),p="[object Object]",d=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,f,h,m){var g=l(t),v=l(e),y=g?"[object Array]":a(t),b=v?"[object Array]":a(e),w=(y="[object Arguments]"==y?p:y)==p,k=(b="[object Arguments]"==b?p:b)==p,_=y==b;if(_&&u(t)){if(!u(e))return!1;g=!0,w=!1}if(_&&!w)return m||(m=new r),g||c(t)?o(t,e,n,f,h,m):i(t,e,y,n,f,h,m);if(!(1&n)){var x=w&&d.call(t,"__wrapped__"),P=k&&d.call(e,"__wrapped__");if(x||P){var C=x?t.value():t,S=P?e.value():e;return m||(m=new r),h(C,S,n,f,m)}}return!!_&&(m||(m=new r),s(t,e,n,f,h,m))}},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e,n){var r=n(59),o=n(297),i=n(122),s=n(169),a=n(298),l=n(104),u=r?r.prototype:void 0,c=u?u.valueOf:void 0;t.exports=function(t,e,n,r,u,p,d){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!p(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var f=a;case"[object Set]":var h=1&r;if(f||(f=l),t.size!=e.size&&!h)return!1;var m=d.get(t);if(m)return m==e;r|=2,d.set(t,e);var g=s(f(t),f(e),r,u,p,d);return d.delete(t),g;case"[object Symbol]":if(c)return c.call(t)==c.call(e)}return!1}},function(t,e,n){var r=n(24).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e,n){var r=n(300),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,s,a){var l=1&n,u=r(t),c=u.length;if(c!=r(e).length&&!l)return!1;for(var p=c;p--;){var d=u[p];if(!(l?d in e:o.call(e,d)))return!1}var f=a.get(t),h=a.get(e);if(f&&h)return f==e&&h==t;var m=!0;a.set(t,e),a.set(e,t);for(var g=l;++p<c;){var v=t[d=u[p]],y=e[d];if(i)var b=l?i(y,v,d,e,t,a):i(v,y,d,t,e,a);if(!(void 0===b?v===y||s(v,y,n,i,a):b)){m=!1;break}g||(g="constructor"==d)}if(m&&!g){var w=t.constructor,k=e.constructor;w==k||!("constructor"in t)||!("constructor"in e)||"function"==typeof w&&w instanceof w&&"function"==typeof k&&k instanceof k||(m=!1)}return a.delete(t),a.delete(e),m}},function(t,e,n){var r=n(219),o=n(220),i=n(105);t.exports=function(t){return r(t,i,o)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var s=t[n];e(s,n,t)&&(i[o++]=s)}return i}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(51),o=n(108),i=n(41),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&o(t.length)&&!!s[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(165),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===o&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=a}).call(this,n(172)(t))},function(t,e,n){var r=n(223),o=n(308),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(173)(Object.keys,Object);t.exports=r},function(t,e,n){var r=n(310),o=n(101),i=n(311),s=n(174),a=n(312),l=n(51),u=n(167),c=u(r),p=u(o),d=u(i),f=u(s),h=u(a),m=l;(r&&"[object DataView]"!=m(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=m(new o)||i&&"[object Promise]"!=m(i.resolve())||s&&"[object Set]"!=m(new s)||a&&"[object WeakMap]"!=m(new a))&&(m=function(t){var e=l(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case c:return"[object DataView]";case p:return"[object Map]";case d:return"[object Promise]";case f:return"[object Set]";case h:return"[object WeakMap]"}return e}),t.exports=m},function(t,e,n){var r=n(35)(n(24),"DataView");t.exports=r},function(t,e,n){var r=n(35)(n(24),"Promise");t.exports=r},function(t,e,n){var r=n(35)(n(24),"WeakMap");t.exports=r},function(t,e,n){var r=n(175),o=n(105);t.exports=function(t){for(var e=o(t),n=e.length;n--;){var i=e[n],s=t[i];e[n]=[i,s,r(s)]}return e}},function(t,e,n){var r=n(168),o=n(224),i=n(320),s=n(109),a=n(175),l=n(176),u=n(67);t.exports=function(t,e){return s(t)&&a(e)?l(u(t),e):function(n){var s=o(n,t);return void 0===s&&s===e?i(n,t):r(e,s,3)}}},function(t,e,n){var r=n(316),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,s=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=s},function(t,e,n){var r=n(317);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(103);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var s=t.apply(this,r);return n.cache=i.set(o,s)||i,s};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},function(t,e,n){var r=n(319);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(59),o=n(225),i=n(20),s=n(110),a=r?r.prototype:void 0,l=a?a.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(s(e))return l?l.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e,n){var r=n(321),o=n(322);t.exports=function(t,e){return null!=t&&o(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(113),o=n(100),i=n(20),s=n(123),a=n(108),l=n(67);t.exports=function(t,e,n){for(var u=-1,c=(e=r(e,t)).length,p=!1;++u<c;){var d=l(e[u]);if(!(p=null!=t&&n(t,d)))break;t=t[d]}return p||++u!=c?p:!!(c=null==t?0:t.length)&&a(c)&&s(d,c)&&(i(t)||o(t))}},function(t,e,n){var r=n(324),o=n(325),i=n(109),s=n(67);t.exports=function(t){return i(t)?r(s(t)):o(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(125);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e,n){var r=n(88),o=n(327),i=n(329);t.exports=function(t,e){return i(o(t,e,r),t+"")}},function(t,e,n){var r=n(328),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,s=-1,a=o(i.length-e,0),l=Array(a);++s<a;)l[s]=i[e+s];s=-1;for(var u=Array(e+1);++s<e;)u[s]=i[s];return u[e]=n(l),r(t,this,u)}}},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(330),o=n(332)(r);t.exports=o},function(t,e,n){var r=n(331),o=n(226),i=n(88),s=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=s},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(170),o=n(334),i=n(339),s=n(171),a=n(340),l=n(104);t.exports=function(t,e,n){var u=-1,c=o,p=t.length,d=!0,f=[],h=f;if(n)d=!1,c=i;else if(p>=200){var m=e?null:a(t);if(m)return l(m);d=!1,c=s,h=new r}else h=e?[]:f;t:for(;++u<p;){var g=t[u],v=e?e(g):g;if(g=n||0!==g?g:0,d&&v==v){for(var y=h.length;y--;)if(h[y]===v)continue t;e&&h.push(v),f.push(g)}else c(h,v,n)||(h!==f&&h.push(v),f.push(g))}return f}},function(t,e,n){var r=n(335);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(336),o=n(337),i=n(338);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}},function(t,e){t.exports=function(t,e,n){for(var r=-1,o=null==t?0:t.length;++r<o;)if(n(e,t[r]))return!0;return!1}},function(t,e,n){var r=n(174),o=n(341),i=n(104),s=r&&1/i(new r([,-0]))[1]==1/0?function(t){return new r(t)}:o;t.exports=s},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(124),o=n(41);t.exports=function(t){return o(t)&&r(t)}},function(t,e,n){var r=n(2),o=n(3),i=n(21),s=n(25).f,a=n(7),l=o((function(){s(1)}));r({target:"Object",stat:!0,forced:!a||l,sham:!a},{getOwnPropertyDescriptor:function(t,e){return s(i(t),e)}})},function(t,e,n){var r=n(2),o=n(7);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:n(130)})},function(t,e,n){var r=n(5),o=n(15),i=n(126).trim,s=n(127),a=r.parseInt,l=/^[+-]?0[Xx]/,u=8!==a(s+"08")||22!==a(s+"0x16");t.exports=u?function(t,e){var n=i(o(t));return a(n,e>>>0||(l.test(n)?16:10))}:a},function(t,e,n){"use strict";n(178)},function(t,e,n){},function(t,e,n){ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +t.exports=function(){return e={134:function(t,e,n){"use strict";n.d(e,{default:function(){return h}}),e=n(279);var r=n.n(e),o=(e=n(370),n.n(e)),i=(e=n(817),n.n(e));function s(t){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var l=function(){function t(e){!function(e){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this),this.resolveOptions(e),this.initSelection()}var e,n;return e=t,(n=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"createFakeElement",value:function(){var t="rtl"===document.documentElement.getAttribute("dir");return this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px",t=window.pageYOffset||document.documentElement.scrollTop,this.fakeElem.style.top="".concat(t,"px"),this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.fakeElem}},{key:"selectFake",value:function(){var t=this,e=this.createFakeElement();this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.container.appendChild(e),this.selectedText=i()(e),this.copyText(),this.removeFake()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=i()(this.target),this.copyText()}},{key:"copyText",value:function(){var t;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==s(t)||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}])&&a(e.prototype,n),t}();function u(t){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function c(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function p(t,e){return(p=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(t){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function f(t,e){if(t="data-clipboard-".concat(t),e.hasAttribute(t))return e.getAttribute(t)}var h=function(){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&p(t,e)}(s,r());var t,e,n,i=function(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=d(t);return n=e?(n=d(this).constructor,Reflect.construct(r,arguments,n)):r.apply(this,arguments),r=this,!(n=n)||"object"!==u(n)&&"function"!=typeof n?function(t){if(void 0!==t)return t;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(r):n}}(s);function s(t,e){var n;return function(t){if(!(t instanceof s))throw new TypeError("Cannot call a class as a function")}(this),(n=i.call(this)).resolveOptions(e),n.listenClick(t),n}return t=s,n=[{key:"isSupported",value:function(){var t="string"==typeof(t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"])?[t]:t,e=!!document.queryCommandSupported;return t.forEach((function(t){e=e&&!!document.queryCommandSupported(t)})),e}}],(e=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===u(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=o()(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){t=t.delegateTarget||t.currentTarget,this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(t){return f("action",t)}},{key:"defaultTarget",value:function(t){if(t=f("target",t))return document.querySelector(t)}},{key:"defaultText",value:function(t){return f("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}])&&c(t.prototype,e),n&&c(t,n),s}()},828:function(t){var e;"undefined"==typeof Element||Element.prototype.matches||((e=Element.prototype).matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector),t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var r=n(828);function o(t,e,n,o,i){var s=function(t,e,n,o){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&o.call(t,n)}}.apply(this,arguments);return t.addEventListener(n,s,i),{destroy:function(){t.removeEventListener(n,s,i)}}}t.exports=function(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return o(t,e,n,r,i)})))}},879:function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var r=n(879),o=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!r.string(e))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(t))return u=e,c=n,(l=t).addEventListener(u,c),{destroy:function(){l.removeEventListener(u,c)}};if(r.nodeList(t))return i=t,s=e,a=n,Array.prototype.forEach.call(i,(function(t){t.addEventListener(s,a)})),{destroy:function(){Array.prototype.forEach.call(i,(function(t){t.removeEventListener(s,a)}))}};if(r.string(t))return t=t,e=e,n=n,o(document.body,t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var i,s,a,l,u,c}},817:function(t){t.exports=function(t){var e,n="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),n=window.getSelection(),(e=document.createRange()).selectNodeContents(t),n.removeAllRanges(),n.addRange(e),n.toString());return n}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function o(){r.off(t,o),e.apply(n,arguments)}return o._=e,this.on(t,o,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],o=[];if(r&&e)for(var i=0,s=r.length;i<s;i++)r[i].fn!==e&&r[i].fn._!==e&&o.push(r[i]);return o.length?n[t]=o:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},n={},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},t.d=function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},t.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},t(134).default;function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{}};return e[r](o,o.exports,t),o.exports}var e,n}()},function(t,e,n){},function(t,e,n){},function(t,e,n){"use strict";n(179)},function(t,e,n){},function(t,e,n){"use strict";var r=n(2),o=n(40).every;r({target:"Array",proto:!0,forced:!n(33)("every")},{every:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){},function(t,e,n){},function(t,e,n){"use strict";n(180)},function(t,e,n){var r=n(358),o=n(359),i=n(360),s=n(121),a=n(231),l=n(20),u=n(106),c=n(102),p=n(49),d=n(107);t.exports=function(t,e,n){var f=l(t),h=f||u(t)||d(t);if(e=s(e,4),null==n){var m=t&&t.constructor;n=h?f?new m:[]:p(t)&&c(m)?o(a(t)):{}}return(h?r:i)(t,(function(t,r,o){return e(n,t,r,o)})),n}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(49),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e,n){var r=n(361),o=n(105);t.exports=function(t,e){return t&&r(t,e,o)}},function(t,e,n){var r=n(362)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var o=-1,i=Object(e),s=r(e),a=s.length;a--;){var l=s[t?a:++o];if(!1===n(i[l],l,i))break}return e}}},function(t,e){var n=Math.floor,r=function(t,e){var s=t.length,a=n(s/2);return s<8?o(t,e):i(r(t.slice(0,a),e),r(t.slice(a),e),e)},o=function(t,e){for(var n,r,o=t.length,i=1;i<o;){for(r=i,n=t[i];r&&e(t[r-1],n)>0;)t[r]=t[--r];r!==i++&&(t[r]=n)}return t},i=function(t,e,n){for(var r=t.length,o=e.length,i=0,s=0,a=[];i<r||s<o;)i<r&&s<o?a.push(n(t[i],e[s])<=0?t[i++]:e[s++]):a.push(i<r?t[i++]:e[s++]);return a};t.exports=r},function(t,e,n){var r=n(31).match(/firefox\/(\d+)/i);t.exports=!!r&&+r[1]},function(t,e,n){var r=n(31);t.exports=/MSIE|Trident/.test(r)},function(t,e,n){var r=n(31).match(/AppleWebKit\/(\d+)\./);t.exports=!!r&&+r[1]},function(t,e,n){var r;function o(t){function n(){if(n.enabled){var t=n,o=+new Date,i=o-(r||o);t.diff=i,t.prev=r,t.curr=o,r=o;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var l=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;l++;var o=e.formatters[r];if("function"==typeof o){var i=s[l];n=o.call(t,i),s.splice(l,1),l--}return n})),e.formatArgs.call(t,s);var u=n.log||e.log||console.log.bind(console);u.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=o.debug=o.default=o).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,o=0;o<r;o++)n[o]&&("-"===(t=n[o].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(368),e.names=[],e.skips=[],e.formatters={}},function(t,e){var n=1e3,r=6e4,o=60*r,i=24*o;function s(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,e){e=e||{};var a,l=typeof t;if("string"===l&&t.length>0)return function(t){if((t=String(t)).length>100)return;var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(!e)return;var s=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*i;case"hours":case"hour":case"hrs":case"hr":case"h":return s*o;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(t);if("number"===l&&!1===isNaN(t))return e.long?s(a=t,i,"day")||s(a,o,"hour")||s(a,r,"minute")||s(a,n,"second")||a+" ms":function(t){if(t>=i)return Math.round(t/i)+"d";if(t>=o)return Math.round(t/o)+"h";if(t>=r)return Math.round(t/r)+"m";if(t>=n)return Math.round(t/n)+"s";return t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";var r=n(182),o=n(183),i=Object.prototype.hasOwnProperty,s={brackets:function(t){return t+"[]"},comma:"comma",indices:function(t,e){return t+"["+e+"]"},repeat:function(t){return t}},a=Array.isArray,l=Array.prototype.push,u=function(t,e){l.apply(t,a(e)?e:[e])},c=Date.prototype.toISOString,p={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,formatter:o.formatters[o.default],indices:!1,serializeDate:function(t){return c.call(t)},skipNulls:!1,strictNullHandling:!1},d=function t(e,n,o,i,s,l,c,d,f,h,m,g,v){var y=e;if("function"==typeof c?y=c(n,y):y instanceof Date?y=h(y):"comma"===o&&a(y)&&(y=y.join(",")),null===y){if(i)return l&&!g?l(n,p.encoder,v):n;y=""}if("string"==typeof y||"number"==typeof y||"boolean"==typeof y||r.isBuffer(y))return l?[m(g?n:l(n,p.encoder,v))+"="+m(l(y,p.encoder,v))]:[m(n)+"="+m(String(y))];var b,w=[];if(void 0===y)return w;if(a(c))b=c;else{var k=Object.keys(y);b=d?k.sort(d):k}for(var _=0;_<b.length;++_){var x=b[_];s&&null===y[x]||(a(y)?u(w,t(y[x],"function"==typeof o?o(n,x):n,o,i,s,l,c,d,f,h,m,g,v)):u(w,t(y[x],n+(f?"."+x:"["+x+"]"),o,i,s,l,c,d,f,h,m,g,v)))}return w};t.exports=function(t,e){var n,r=t,l=function(t){if(!t)return p;if(null!==t.encoder&&void 0!==t.encoder&&"function"!=typeof t.encoder)throw new TypeError("Encoder has to be a function.");var e=t.charset||p.charset;if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=o.default;if(void 0!==t.format){if(!i.call(o.formatters,t.format))throw new TypeError("Unknown format option provided.");n=t.format}var r=o.formatters[n],s=p.filter;return("function"==typeof t.filter||a(t.filter))&&(s=t.filter),{addQueryPrefix:"boolean"==typeof t.addQueryPrefix?t.addQueryPrefix:p.addQueryPrefix,allowDots:void 0===t.allowDots?p.allowDots:!!t.allowDots,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:p.charsetSentinel,delimiter:void 0===t.delimiter?p.delimiter:t.delimiter,encode:"boolean"==typeof t.encode?t.encode:p.encode,encoder:"function"==typeof t.encoder?t.encoder:p.encoder,encodeValuesOnly:"boolean"==typeof t.encodeValuesOnly?t.encodeValuesOnly:p.encodeValuesOnly,filter:s,formatter:r,serializeDate:"function"==typeof t.serializeDate?t.serializeDate:p.serializeDate,skipNulls:"boolean"==typeof t.skipNulls?t.skipNulls:p.skipNulls,sort:"function"==typeof t.sort?t.sort:null,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:p.strictNullHandling}}(e);"function"==typeof l.filter?r=(0,l.filter)("",r):a(l.filter)&&(n=l.filter);var c,f=[];if("object"!=typeof r||null===r)return"";c=e&&e.arrayFormat in s?e.arrayFormat:e&&"indices"in e?e.indices?"indices":"repeat":"indices";var h=s[c];n||(n=Object.keys(r)),l.sort&&n.sort(l.sort);for(var m=0;m<n.length;++m){var g=n[m];l.skipNulls&&null===r[g]||u(f,d(r[g],g,h,l.strictNullHandling,l.skipNulls,l.encode?l.encoder:null,l.filter,l.sort,l.allowDots,l.serializeDate,l.formatter,l.encodeValuesOnly,l.charset))}var v=f.join(l.delimiter),y=!0===l.addQueryPrefix?"?":"";return l.charsetSentinel&&("iso-8859-1"===l.charset?y+="utf8=%26%2310003%3B&":y+="utf8=%E2%9C%93&"),v.length>0?y+v:""}},function(t,e,n){"use strict";var r=n(182),o=Object.prototype.hasOwnProperty,i={allowDots:!1,allowPrototypes:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(t){return t.replace(/&#(\d+);/g,(function(t,e){return String.fromCharCode(parseInt(e,10))}))},a=function(t,e,n){if(t){var r=n.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,i=/(\[[^[\]]*])/g,s=/(\[[^[\]]*])/.exec(r),a=s?r.slice(0,s.index):r,l=[];if(a){if(!n.plainObjects&&o.call(Object.prototype,a)&&!n.allowPrototypes)return;l.push(a)}for(var u=0;null!==(s=i.exec(r))&&u<n.depth;){if(u+=1,!n.plainObjects&&o.call(Object.prototype,s[1].slice(1,-1))&&!n.allowPrototypes)return;l.push(s[1])}return s&&l.push("["+r.slice(s.index)+"]"),function(t,e,n){for(var r=e,o=t.length-1;o>=0;--o){var i,s=t[o];if("[]"===s&&n.parseArrays)i=[].concat(r);else{i=n.plainObjects?Object.create(null):{};var a="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,l=parseInt(a,10);n.parseArrays||""!==a?!isNaN(l)&&s!==a&&String(l)===a&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(i=[])[l]=r:i[a]=r:i={0:r}}r=i}return r}(l,e,n)}};t.exports=function(t,e){var n=function(t){if(!t)return i;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new Error("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?i.charset:t.charset;return{allowDots:void 0===t.allowDots?i.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:i.allowPrototypes,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:i.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:i.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:i.comma,decoder:"function"==typeof t.decoder?t.decoder:i.decoder,delimiter:"string"==typeof t.delimiter||r.isRegExp(t.delimiter)?t.delimiter:i.delimiter,depth:"number"==typeof t.depth?t.depth:i.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:i.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:i.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:i.strictNullHandling}}(e);if(""===t||null==t)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof t?function(t,e){var n,a={},l=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,u=e.parameterLimit===1/0?void 0:e.parameterLimit,c=l.split(e.delimiter,u),p=-1,d=e.charset;if(e.charsetSentinel)for(n=0;n<c.length;++n)0===c[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===c[n]?d="utf-8":"utf8=%26%2310003%3B"===c[n]&&(d="iso-8859-1"),p=n,n=c.length);for(n=0;n<c.length;++n)if(n!==p){var f,h,m=c[n],g=m.indexOf("]="),v=-1===g?m.indexOf("="):g+1;-1===v?(f=e.decoder(m,i.decoder,d),h=e.strictNullHandling?null:""):(f=e.decoder(m.slice(0,v),i.decoder,d),h=e.decoder(m.slice(v+1),i.decoder,d)),h&&e.interpretNumericEntities&&"iso-8859-1"===d&&(h=s(h)),h&&e.comma&&h.indexOf(",")>-1&&(h=h.split(",")),o.call(a,f)?a[f]=r.combine(a[f],h):a[f]=h}return a}(t,n):t,u=n.plainObjects?Object.create(null):{},c=Object.keys(l),p=0;p<c.length;++p){var d=c[p],f=a(d,l[d],n);u=r.merge(u,f,n)}return r.compact(u)}},function(t,e,n){var r=n(36),o=n(373),i=n(374);t.exports=function(t){var e=r(t);return i(e,o(e))+1}},function(t,e){t.exports=function(t){var e=new Date(t.getTime()),n=e.getTimezoneOffset();return e.setSeconds(0,0),6e4*n+e.getTime()%6e4}},function(t,e,n){var r=n(36);t.exports=function(t){var e=r(t),n=new Date(0);return n.setFullYear(e.getFullYear(),0,1),n.setHours(0,0,0,0),n}},function(t,e,n){var r=n(375);t.exports=function(t,e){var n=r(t),o=r(e),i=n.getTime()-6e4*n.getTimezoneOffset(),s=o.getTime()-6e4*o.getTimezoneOffset();return Math.round((i-s)/864e5)}},function(t,e,n){var r=n(36);t.exports=function(t){var e=r(t);return e.setHours(0,0,0,0),e}},function(t,e,n){var r=n(36),o=n(112),i=n(378);t.exports=function(t){var e=r(t),n=o(e).getTime()-i(e).getTime();return Math.round(n/6048e5)+1}},function(t,e,n){var r=n(36);t.exports=function(t,e){var n=e&&Number(e.weekStartsOn)||0,o=r(t),i=o.getDay(),s=(i<n?7:0)+i-n;return o.setDate(o.getDate()-s),o.setHours(0,0,0,0),o}},function(t,e,n){var r=n(185),o=n(112);t.exports=function(t){var e=r(t),n=new Date(0);return n.setFullYear(e,0,4),n.setHours(0,0,0,0),o(n)}},function(t,e,n){var r=n(184);t.exports=function(t){if(r(t))return!isNaN(t);throw new TypeError(toString.call(t)+" is not an instance of Date")}},function(t,e,n){var r=n(381),o=n(382);t.exports={distanceInWords:r(),format:o()}},function(t,e){t.exports=function(){var t={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};return{localize:function(e,n,r){var o;return r=r||{},o="string"==typeof t[e]?t[e]:1===n?t[e].one:t[e].other.replace("{{count}}",n),r.addSuffix?r.comparison>0?"in "+o:o+" ago":o}}}},function(t,e,n){var r=n(383);t.exports=function(){var t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Su","Mo","Tu","We","Th","Fr","Sa"],o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],s=["AM","PM"],a=["am","pm"],l=["a.m.","p.m."],u={MMM:function(e){return t[e.getMonth()]},MMMM:function(t){return e[t.getMonth()]},dd:function(t){return n[t.getDay()]},ddd:function(t){return o[t.getDay()]},dddd:function(t){return i[t.getDay()]},A:function(t){return t.getHours()/12>=1?s[1]:s[0]},a:function(t){return t.getHours()/12>=1?a[1]:a[0]},aa:function(t){return t.getHours()/12>=1?l[1]:l[0]}};return["M","D","DDD","d","Q","W"].forEach((function(t){u[t+"o"]=function(e,n){return function(t){var e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"}(n[t](e))}})),{formatters:u,formattingTokensRegExp:r(u)}}},function(t,e){var n=["M","MM","Q","D","DD","DDD","DDDD","d","E","W","WW","YY","YYYY","GG","GGGG","H","HH","h","hh","m","mm","s","ss","S","SS","SSS","Z","ZZ","X","x"];t.exports=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);var o=n.concat(e).sort().reverse();return new RegExp("(\\[[^\\[]*\\])|(\\\\)?("+o.join("|")+"|.)","g")}},function(t,e,n){"use strict";var r=n(12),o=n(186),i=n(385),s=n(192);function a(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var l=a(n(189));l.Axios=i,l.create=function(t){return a(s(l.defaults,t))},l.Cancel=n(193),l.CancelToken=n(398),l.isCancel=n(188),l.all=function(t){return Promise.all(t)},l.spread=n(399),l.isAxiosError=n(400),t.exports=l,t.exports.default=l},function(t,e,n){"use strict";var r=n(12),o=n(187),i=n(386),s=n(387),a=n(192);function l(t){this.defaults=t,this.interceptors={request:new i,response:new i}}l.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},l.prototype.getUri=function(t){return t=a(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){l.prototype[t]=function(e,n){return this.request(a(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){l.prototype[t]=function(e,n,r){return this.request(a(r||{},{method:t,url:e,data:n}))}})),t.exports=l},function(t,e,n){"use strict";var r=n(12);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(12),o=n(388),i=n(188),s=n(189);function a(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||s.adapter)(t).then((function(e){return a(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(a(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(12);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";var r=n(12);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(191);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},function(t,e,n){"use strict";var r=n(12);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,s){var a=[];a.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(394),o=n(395);t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(12),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,i,s={};return t?(r.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e){if(s[e]&&o.indexOf(e)>=0)return;s[e]="set-cookie"===e?(s[e]?s[e]:[]).concat([n]):s[e]?s[e]+", "+n:n}})),s):s}},function(t,e,n){"use strict";var r=n(12);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";var r=n(193);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";t.exports=function(t){return"object"==typeof t&&!0===t.isAxiosError}},function(t,e,n){},function(t,e,n){"use strict";var r=n(26),o=n(6),i=[].slice,s={},a=function(t,e,n){if(!(e in s)){for(var r=[],o=0;o<e;o++)r[o]="a["+o+"]";s[e]=Function("C,a","return new C("+r.join(",")+")")}return s[e](t,n)};t.exports=Function.bind||function(t){var e=r(this),n=i.call(arguments,1),s=function(){var r=n.concat(i.call(arguments));return this instanceof s?a(e,r.length,r):e.apply(t,r)};return o(e.prototype)&&(s.prototype=e.prototype),s}},function(t,e,n){"use strict";n(196)},function(t,e,n){"use strict";n(197)},function(t,e,n){"use strict";n.r(e);n(128),n(237),n(246),n(248),n(11);function r(t,e,n,r,o,i,s){try{var a=t[i](s),l=a.value}catch(t){return void n(t)}a.done?e(l):Promise.resolve(l).then(r,o)}function o(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var s=t.apply(e,n);function a(t){r(s,o,i,a,l,"next",t)}function l(t){r(s,o,i,a,l,"throw",t)}a(void 0)}))}}n(151),n(38),n(14),n(17),n(62),n(27);var i=n(1);function s(t,e){for(var n in e)t[n]=e[n];return t}var a=/[!'()*]/g,l=function(t){return"%"+t.charCodeAt(0).toString(16)},u=/%2C/g,c=function(t){return encodeURIComponent(t).replace(a,l).replace(u,",")};function p(t){try{return decodeURIComponent(t)}catch(t){0}return t}var d=function(t){return null==t||"object"==typeof t?t:String(t)};function f(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=p(n.shift()),o=n.length>0?p(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function h(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return c(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(c(e)):r.push(c(e)+"="+c(t)))})),r.join("&")}return c(e)+"="+c(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var m=/\/?$/;function g(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(t){}var s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:w(e,o),matched:t?b(t):[]};return n&&(s.redirectedFrom=w(n,o)),Object.freeze(s)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var y=g(null,{path:"/"});function b(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||h)(r)+o}function k(t,e,n){return e===y?t===e:!!e&&(t.path&&e.path?t.path.replace(m,"")===e.path.replace(m,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var s=e[n];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?_(i,s):String(i)===String(s)}))}function x(t){for(var e=0;e<t.matched.length;e++){var n=t.matched[e];for(var r in n.instances){var o=n.instances[r],i=n.enteredCbs[r];if(o&&i){delete n.enteredCbs[r];for(var s=0;s<i.length;s++)o._isBeingDestroyed||i[s](o)}}}}var P={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var a=o.$createElement,l=n.name,u=o.$route,c=o._routerViewCache||(o._routerViewCache={}),p=0,d=!1;o&&o._routerRoot!==o;){var f=o.$vnode?o.$vnode.data:{};f.routerView&&p++,f.keepAlive&&o._directInactive&&o._inactive&&(d=!0),o=o.$parent}if(i.routerViewDepth=p,d){var h=c[l],m=h&&h.component;return m?(h.configProps&&C(m,i,h.route,h.configProps),a(m,i,r)):a()}var g=u.matched[p],v=g&&g.components[l];if(!g||!v)return c[l]=null,a();c[l]={component:v},i.registerRouteInstance=function(t,e){var n=g.instances[l];(e&&n!==t||!e&&n===t)&&(g.instances[l]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){g.instances[l]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==g.instances[l]&&(g.instances[l]=t.componentInstance),x(u)};var y=g.props&&g.props[l];return y&&(s(c[l],{route:u,configProps:y}),C(v,i,u,y)),a(v,i,r)}};function C(t,e,n,r){var o=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(n,r);if(o){o=e.props=s({},o);var i=e.attrs=e.attrs||{};for(var a in o)t.props&&a in t.props||(i[a]=o[a],delete o[a])}}function S(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),s=0;s<i.length;s++){var a=i[s];".."===a?o.pop():"."!==a&&o.push(a)}return""!==o[0]&&o.unshift(""),o.join("/")}function T(t){return t.replace(/\/\//g,"/")}var I=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},O=z,M=E,A=function(t,e){return R(E(t,e),e)},j=R,$=U,L=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function E(t,e){for(var n,r=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(n=L.exec(t));){var l=n[0],u=n[1],c=n.index;if(s+=t.slice(i,c),i=c+l.length,u)s+=u[1];else{var p=t[i],d=n[2],f=n[3],h=n[4],m=n[5],g=n[6],v=n[7];s&&(r.push(s),s="");var y=null!=d&&null!=p&&p!==d,b="+"===g||"*"===g,w="?"===g||"*"===g,k=n[2]||a,_=h||m;r.push({name:f||o++,prefix:d||"",delimiter:k,optional:w,repeat:b,partial:y,asterisk:!!v,pattern:_?D(_):v?".*":"[^"+N(k)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&r.push(s),r}function V(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function R(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)"object"==typeof t[r]&&(n[r]=new RegExp("^(?:"+t[r].pattern+")$",H(e)));return function(e,r){for(var o="",i=e||{},s=(r||{}).pretty?V:encodeURIComponent,a=0;a<t.length;a++){var l=t[a];if("string"!=typeof l){var u,c=i[l.name];if(null==c){if(l.optional){l.partial&&(o+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(I(c)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(c)+"`");if(0===c.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var p=0;p<c.length;p++){if(u=s(c[p]),!n[a].test(u))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(u)+"`");o+=(0===p?l.prefix:l.delimiter)+u}}else{if(u=l.asterisk?encodeURI(c).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(c),!n[a].test(u))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+u+'"');o+=l.prefix+u}}else o+=l}return o}}function N(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function D(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function F(t,e){return t.keys=e,t}function H(t){return t&&t.sensitive?"":"i"}function U(t,e,n){I(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=N(a);else{var l=N(a.prefix),u="(?:"+a.pattern+")";e.push(a),a.repeat&&(u+="(?:"+l+u+")*"),i+=u=a.optional?a.partial?l+"("+u+")?":"(?:"+l+"("+u+"))?":l+"("+u+")"}}var c=N(n.delimiter||"/"),p=i.slice(-c.length)===c;return r||(i=(p?i.slice(0,-c.length):i)+"(?:"+c+"(?=$))?"),i+=o?"$":r&&p?"":"(?="+c+"|$)",F(new RegExp("^"+i,H(n)),e)}function z(t,e,n){return I(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?function(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return F(t,e)}(t,e):I(t)?function(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push(z(t[o],e,n).source);return F(new RegExp("(?:"+r.join("|")+")",H(n)),e)}(t,e,n):function(t,e,n){return U(E(t,n),e,n)}(t,e,n)}O.parse=M,O.compile=A,O.tokensToFunction=j,O.tokensToRegExp=$;var B=Object.create(null);function W(t,e,n){e=e||{};try{var r=B[t]||(B[t]=O.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),r(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function q(t,e,n,r){var o="string"==typeof t?{path:t}:t;if(o._normalized)return o;if(o.name){var i=(o=s({},t)).params;return i&&"object"==typeof i&&(o.params=s({},i)),o}if(!o.path&&o.params&&e){(o=s({},o))._normalized=!0;var a=s(s({},e.params),o.params);if(e.name)o.name=e.name,o.params=a;else if(e.matched.length){var l=e.matched[e.matched.length-1].path;o.path=W(l,a,e.path)}else 0;return o}var u=function(t){var e="",n="",r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",p=u.path?S(u.path,c,n||o.append):c,h=function(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(t){r={}}for(var i in e){var s=e[i];r[i]=Array.isArray(s)?s.map(d):d(s)}return r}(u.query,o.query,r&&r.options.parseQuery),m=o.hash||u.hash;return m&&"#"!==m.charAt(0)&&(m="#"+m),{_normalized:!0,path:p,query:h,hash:m}}var J,G=function(){},Y={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,l=o.href,u={},c=n.options.linkActiveClass,p=n.options.linkExactActiveClass,d=null==c?"router-link-active":c,f=null==p?"router-link-exact-active":p,h=null==this.activeClass?d:this.activeClass,v=null==this.exactActiveClass?f:this.exactActiveClass,y=a.redirectedFrom?g(null,q(a.redirectedFrom),null,n):a;u[v]=k(r,y,this.exactPath),u[h]=this.exact||this.exactPath?u[v]:function(t,e){return 0===t.path.replace(m,"/").indexOf(e.path.replace(m,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=u[v]?this.ariaCurrentValue:null,w=function(t){Z(t)&&(e.replace?n.replace(i,G):n.push(i,G))},_={click:Z};Array.isArray(this.event)?this.event.forEach((function(t){_[t]=w})):_[this.event]=w;var x={class:u},P=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:l,route:a,navigate:w,isActive:u[h],isExactActive:u[v]});if(P){if(1===P.length)return P[0];if(P.length>1||!P.length)return 0===P.length?t():t("span",{},P)}if("a"===this.tag)x.on=_,x.attrs={href:l,"aria-current":b};else{var C=function t(e){var n;if(e)for(var r=0;r<e.length;r++){if("a"===(n=e[r]).tag)return n;if(n.children&&(n=t(n.children)))return n}}(this.$slots.default);if(C){C.isStatic=!1;var S=C.data=s({},C.data);for(var T in S.on=S.on||{},S.on){var I=S.on[T];T in _&&(S.on[T]=Array.isArray(I)?I:[I])}for(var O in _)O in S.on?S.on[O].push(_[O]):S.on[O]=w;var M=C.data.attrs=s({},C.data.attrs);M.href=l,M["aria-current"]=b}else x.on=_}return t(this.tag,x,this.$slots.default)}};function Z(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}var K="undefined"!=typeof window;function X(t,e,n,r,o){var i=e||[],s=n||Object.create(null),a=r||Object.create(null);t.forEach((function(t){!function t(e,n,r,o,i,s){var a=o.path,l=o.name;0;var u=o.pathToRegexpOptions||{},c=function(t,e,n){n||(t=t.replace(/\/$/,""));if("/"===t[0])return t;if(null==e)return t;return T(e.path+"/"+t)}(a,i,u.strict);"boolean"==typeof o.caseSensitive&&(u.sensitive=o.caseSensitive);var p={path:c,regex:Q(c,u),components:o.components||{default:o.component},alias:o.alias?"string"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:l,parent:i,matchAs:s,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};o.children&&o.children.forEach((function(o){var i=s?T(s+"/"+o.path):void 0;t(e,n,r,o,p,i)}));n[p.path]||(e.push(p.path),n[p.path]=p);if(void 0!==o.alias)for(var d=Array.isArray(o.alias)?o.alias:[o.alias],f=0;f<d.length;++f){0;var h={path:d[f],children:o.children};t(e,n,r,h,i,p.path||"/")}l&&(r[l]||(r[l]=p))}(i,s,a,t,o)}));for(var l=0,u=i.length;l<u;l++)"*"===i[l]&&(i.push(i.splice(l,1)[0]),u--,l--);return{pathList:i,pathMap:s,nameMap:a}}function Q(t,e){return O(t,[],e)}function tt(t,e){var n=X(t),r=n.pathList,o=n.pathMap,i=n.nameMap;function s(t,n,s){var a=q(t,n,!1,e),u=a.name;if(u){var c=i[u];if(!c)return l(null,a);var p=c.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof a.params&&(a.params={}),n&&"object"==typeof n.params)for(var d in n.params)!(d in a.params)&&p.indexOf(d)>-1&&(a.params[d]=n.params[d]);return a.path=W(c.path,a.params),l(c,a,s)}if(a.path){a.params={};for(var f=0;f<r.length;f++){var h=r[f],m=o[h];if(et(m.regex,a.path,a.params))return l(m,a,s)}}return l(null,a)}function a(t,n){var r=t.redirect,o="function"==typeof r?r(g(t,n,null,e)):r;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return l(null,n);var a=o,u=a.name,c=a.path,p=n.query,d=n.hash,f=n.params;if(p=a.hasOwnProperty("query")?a.query:p,d=a.hasOwnProperty("hash")?a.hash:d,f=a.hasOwnProperty("params")?a.params:f,u){i[u];return s({_normalized:!0,name:u,query:p,hash:d,params:f},void 0,n)}if(c){var h=function(t,e){return S(t,e.parent?e.parent.path:"/",!0)}(c,t);return s({_normalized:!0,path:W(h,f),query:p,hash:d},void 0,n)}return l(null,n)}function l(t,n,r){return t&&t.redirect?a(t,r||n):t&&t.matchAs?function(t,e,n){var r=s({_normalized:!0,path:W(n,e.params)});if(r){var o=r.matched,i=o[o.length-1];return e.params=r.params,l(i,e)}return l(null,e)}(0,n,t.matchAs):g(t,n,r,e)}return{match:s,addRoute:function(t,e){var n="object"!=typeof t?i[t]:void 0;X([e||t],r,o,i,n),n&&n.alias.length&&X(n.alias.map((function(t){return{path:t,children:[e]}})),r,o,i,n)},getRoutes:function(){return r.map((function(t){return o[t]}))},addRoutes:function(t){X(t,r,o,i)}}}function et(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(var o=1,i=r.length;o<i;++o){var s=t.keys[o-1];s&&(n[s.name||"pathMatch"]="string"==typeof r[o]?p(r[o]):r[o])}return!0}var nt=K&&window.performance&&window.performance.now?window.performance:Date;function rt(){return nt.now().toFixed(3)}var ot=rt();function it(){return ot}function st(t){return ot=t}var at=Object.create(null);function lt(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),n=s({},window.history.state);return n.key=it(),window.history.replaceState(n,"",e),window.addEventListener("popstate",pt),function(){window.removeEventListener("popstate",pt)}}function ut(t,e,n,r){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=it();if(t)return at[t]}(),s=o.call(t,e,n,r?i:null);s&&("function"==typeof s.then?s.then((function(t){gt(t,i)})).catch((function(t){0})):gt(s,i))}))}}function ct(){var t=it();t&&(at[t]={x:window.pageXOffset,y:window.pageYOffset})}function pt(t){ct(),t.state&&t.state.key&&st(t.state.key)}function dt(t){return ht(t.x)||ht(t.y)}function ft(t){return{x:ht(t.x)?t.x:window.pageXOffset,y:ht(t.y)?t.y:window.pageYOffset}}function ht(t){return"number"==typeof t}var mt=/^#\d/;function gt(t,e){var n,r="object"==typeof t;if(r&&"string"==typeof t.selector){var o=mt.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var n=document.documentElement.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-n.left-e.x,y:r.top-n.top-e.y}}(o,i={x:ht((n=i).x)?n.x:0,y:ht(n.y)?n.y:0})}else dt(t)&&(e=ft(t))}else r&&dt(t)&&(e=ft(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var vt,yt=K&&((-1===(vt=window.navigator.userAgent).indexOf("Android 2.")&&-1===vt.indexOf("Android 4.0")||-1===vt.indexOf("Mobile Safari")||-1!==vt.indexOf("Chrome")||-1!==vt.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState);function bt(t,e){ct();var n=window.history;try{if(e){var r=s({},n.state);r.key=it(),n.replaceState(r,"",t)}else n.pushState({key:st(rt())},"",t)}catch(n){window.location[e?"replace":"assign"](t)}}function wt(t){bt(t,!0)}function kt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}var _t={redirected:2,aborted:4,cancelled:8,duplicated:16};function xt(t,e){return Ct(t,e,_t.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return St.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Pt(t,e){return Ct(t,e,_t.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Ct(t,e,n,r){var o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}var St=["params","query","hash"];function Tt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function It(t,e){return Tt(t)&&t._isRouter&&(null==e||t.type===e)}function Ot(t){return function(e,n,r){var o=!1,i=0,s=null;Mt(t,(function(t,e,n,a){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,u=$t((function(e){var o;((o=e).__esModule||jt&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:J.extend(e),n.components[a]=e,--i<=0&&r()})),c=$t((function(t){var e="Failed to resolve async component "+a+": "+t;s||(s=Tt(t)?t:new Error(e),r(s))}));try{l=t(u,c)}catch(t){c(t)}if(l)if("function"==typeof l.then)l.then(u,c);else{var p=l.component;p&&"function"==typeof p.then&&p.then(u,c)}}})),o||r()}}function Mt(t,e){return At(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function At(t){return Array.prototype.concat.apply([],t)}var jt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function $t(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Lt=function(t,e){this.router=t,this.base=function(t){if(!t)if(K){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Et(t,e,n,r){var o=Mt(t,(function(t,r,o,i){var s=function(t,e){"function"!=typeof t&&(t=J.extend(t));return t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map((function(t){return n(t,r,o,i)})):n(s,r,o,i)}));return At(r?o.reverse():o)}function Vt(t,e){if(e)return function(){return t.apply(e,arguments)}}Lt.prototype.listen=function(t){this.cb=t},Lt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Lt.prototype.onError=function(t){this.errorCbs.push(t)},Lt.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(It(t,_t.redirected)&&i===y||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Lt.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i=function(t){!It(t)&&Tt(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},s=t.matched.length-1,a=o.matched.length-1;if(k(t,o)&&s===a&&t.matched[s]===o.matched[a])return this.ensureURL(),i(function(t,e){var n=Ct(t,e,_t.duplicated,'Avoided redundant navigation to current location: "'+t.fullPath+'".');return n.name="NavigationDuplicated",n}(o,t));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n<r&&t[n]===e[n];n++);return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}(this.current.matched,t.matched),u=l.updated,c=l.deactivated,p=l.activated,d=[].concat(function(t){return Et(t,"beforeRouteLeave",Vt,!0)}(c),this.router.beforeHooks,function(t){return Et(t,"beforeRouteUpdate",Vt)}(u),p.map((function(t){return t.beforeEnter})),Ot(p)),f=function(e,n){if(r.pending!==t)return i(Pt(o,t));try{e(t,o,(function(e){!1===e?(r.ensureURL(!0),i(function(t,e){return Ct(t,e,_t.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(o,t))):Tt(e)?(r.ensureURL(!0),i(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(i(xt(o,t)),"object"==typeof e&&e.replace?r.replace(e):r.push(e)):n(e)}))}catch(t){i(t)}};kt(d,f,(function(){kt(function(t){return Et(t,"beforeRouteEnter",(function(t,e,n,r){return function(t,e,n){return function(r,o,i){return t(r,o,(function(t){"function"==typeof t&&(e.enteredCbs[n]||(e.enteredCbs[n]=[]),e.enteredCbs[n].push(t)),i(t)}))}}(t,n,r)}))}(p).concat(r.router.resolveHooks),f,(function(){if(r.pending!==t)return i(Pt(o,t));r.pending=null,e(t),r.router.app&&r.router.app.$nextTick((function(){x(t)}))}))}))},Lt.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Lt.prototype.setupListeners=function(){},Lt.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=y,this.pending=null};var Rt=function(t){function e(e,n){t.call(this,e,n),this._startLocation=Nt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=yt&&n;r&&this.listeners.push(lt());var o=function(){var n=t.current,o=Nt(t.base);t.current===y&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ut(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){bt(T(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){wt(T(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Nt(this.base)!==this.current.fullPath){var e=T(this.base+this.current.fullPath);t?bt(e):wt(e)}},e.prototype.getCurrentLocation=function(){return Nt(this.base)},e}(Lt);function Nt(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(T(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Dt=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Nt(t);if(!/^\/#/.test(e))return window.location.replace(T(t+"/#"+e)),!0}(this.base)||Ft()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=yt&&e;n&&this.listeners.push(lt());var r=function(){var e=t.current;Ft()&&t.transitionTo(Ht(),(function(r){n&&ut(t.router,r,e,!0),yt||Bt(r.fullPath)}))},o=yt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ht()!==e&&(t?zt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ht()},e}(Lt);function Ft(){var t=Ht();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ht(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ut(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function zt(t){yt?bt(Ut(t)):window.location.hash=t}function Bt(t){yt?wt(Ut(t)):window.location.replace(Ut(t))}var Wt=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){It(t,_t.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Lt),qt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=tt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!yt&&!1!==t.fallback,this.fallback&&(e="hash"),K||(e="abstract"),this.mode=e,e){case"history":this.history=new Rt(this,t.base);break;case"hash":this.history=new Dt(this,t.base,this.fallback);break;case"abstract":this.history=new Wt(this,t.base);break;default:0}},Jt={currentRoute:{configurable:!0}};function Gt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}qt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Jt.currentRoute.get=function(){return this.history&&this.history.current},qt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Rt||n instanceof Dt){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;yt&&o&&"fullPath"in t&&ut(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},qt.prototype.beforeEach=function(t){return Gt(this.beforeHooks,t)},qt.prototype.beforeResolve=function(t){return Gt(this.resolveHooks,t)},qt.prototype.afterEach=function(t){return Gt(this.afterHooks,t)},qt.prototype.onReady=function(t,e){this.history.onReady(t,e)},qt.prototype.onError=function(t){this.history.onError(t)},qt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},qt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},qt.prototype.go=function(t){this.history.go(t)},qt.prototype.back=function(){this.go(-1)},qt.prototype.forward=function(){this.go(1)},qt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},qt.prototype.resolve=function(t,e,n){var r=q(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?T(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},qt.prototype.getRoutes=function(){return this.matcher.getRoutes()},qt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},qt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(qt.prototype,Jt),qt.install=function t(e){if(!t.installed||J!==e){t.installed=!0,J=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",P),e.component("RouterLink",Y);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},qt.version="3.5.2",qt.isNavigationFailure=It,qt.NavigationFailureType=_t,qt.START_LOCATION=y,K&&window.Vue&&window.Vue.use(qt);var Yt=qt;n(155),n(156),n(157),n(66),n(252),n(46),n(47),n(253);function Zt(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}n(34),n(43),n(58);var Kt=n(60),Xt=(n(164),n(37),n(64),n(204),n(205),{NotFound:function(){return n.e(24).then(n.bind(null,525))},Layout:function(){return Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,415))},GlobalLayout:function(){return Promise.resolve().then(n.bind(null,0))},IndexPost:function(){return Promise.all([n.e(0),n.e(1),n.e(2),n.e(6)]).then(n.bind(null,523))},Post:function(){return Promise.all([n.e(0),n.e(1),n.e(2),n.e(4)]).then(n.bind(null,522))},Topics:function(){return Promise.all([n.e(0),n.e(1),n.e(2),n.e(13)]).then(n.bind(null,526))}}),Qt={"v-7e7ee8f3":function(){return n.e(25).then(n.bind(null,527))},"v-04d71d8e":function(){return n.e(27).then(n.bind(null,538))},"v-a3e7481e":function(){return n.e(26).then(n.bind(null,528))},"v-598fc2bb":function(){return n.e(29).then(n.bind(null,539))},"v-61183936":function(){return n.e(28).then(n.bind(null,540))},"v-3065fce5":function(){return n.e(30).then(n.bind(null,541))},"v-cff0c136":function(){return n.e(31).then(n.bind(null,542))},"v-0875843e":function(){return n.e(32).then(n.bind(null,543))},"v-3a10803e":function(){return n.e(33).then(n.bind(null,544))},"v-ea911d36":function(){return n.e(34).then(n.bind(null,545))},"v-ffcf8bf6":function(){return n.e(35).then(n.bind(null,546))},"v-685a6f36":function(){return n.e(36).then(n.bind(null,547))},"v-b5b6f4d2":function(){return n.e(37).then(n.bind(null,548))},"v-afe09dd6":function(){return n.e(38).then(n.bind(null,549))},"v-aa0a46da":function(){return n.e(39).then(n.bind(null,550))},"v-9e5d98e2":function(){return n.e(41).then(n.bind(null,551))},"v-a433efde":function(){return n.e(40).then(n.bind(null,552))},"v-988741e6":function(){return n.e(42).then(n.bind(null,553))},"v-92b0eaea":function(){return n.e(43).then(n.bind(null,554))},"v-8cda93ee":function(){return n.e(44).then(n.bind(null,555))},"v-87043cf2":function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,529))},"v-812de5f6":function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,530))},"v-12481376":function(){return Promise.all([n.e(0),n.e(9)]).then(n.bind(null,531))},"v-00c26c4e":function(){return n.e(45).then(n.bind(null,556))},"v-21e52425":function(){return n.e(46).then(n.bind(null,557))},"v-b9fea476":function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,532))},"v-4cee5205":function(){return n.e(47).then(n.bind(null,558))},"v-63ec48b6":function(){return Promise.all([n.e(0),n.e(11)]).then(n.bind(null,533))},"v-0dd9ecf6":function(){return n.e(49).then(n.bind(null,559))},"v-77f77fe5":function(){return n.e(48).then(n.bind(null,560))},"v-241c3765":function(){return n.e(50).then(n.bind(null,561))},"v-74f372c4":function(){return Promise.all([n.e(0),n.e(17)]).then(n.bind(null,524))},"v-7bfcfe46":function(){return Promise.all([n.e(0),n.e(5)]).then(n.bind(null,521))},"v-c3c5b284":function(){return n.e(51).then(n.bind(null,562))},"v-0830e2fe":function(){return Promise.all([n.e(0),n.e(19)]).then(n.bind(null,563))},"v-66307a7e":function(){return Promise.all([n.e(0),n.e(20)]).then(n.bind(null,534))},"v-593469de":function(){return Promise.all([n.e(0),n.e(18)]).then(n.bind(null,564))},"v-45cc3a44":function(){return Promise.all([n.e(0),n.e(21)]).then(n.bind(null,565))},"v-2e6657c4":function(){return Promise.all([n.e(0),n.e(22)]).then(n.bind(null,566))},"v-0a007c4e":function(){return Promise.all([n.e(0),n.e(23)]).then(n.bind(null,567))}};function te(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ee=/-(\w)/g,ne=te((function(t){return t.replace(ee,(function(t,e){return e?e.toUpperCase():""}))})),re=/\B([A-Z])/g,oe=te((function(t){return t.replace(re,"-$1").toLowerCase()})),ie=te((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function se(t,e){if(e)return t(e)?t(e):e.includes("-")?t(ie(ne(e))):t(ie(e))||t(oe(e))}var ae=Object.assign({},Xt,Qt),le=function(t){return ae[t]},ue=function(t){return Qt[t]},ce=function(t){return Xt[t]},pe=function(t){return i.a.component(t)};function de(t){return se(ue,t)}function fe(t){return se(ce,t)}function he(t){return se(le,t)}function me(t){return se(pe,t)}function ge(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return Promise.all(e.filter((function(t){return t})).map(function(){var t=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(me(e)||!he(e)){t.next=5;break}return t.next=3,he(e)();case 3:n=t.sent,i.a.component(e,n.default);case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()))}n(48);var ve=n(44);function ye(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i=[],s=!0,a=!1;try{for(n=n.call(t);!(s=(r=n.next()).done)&&(i.push(r.value),!e||i.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==n.return||n.return()}finally{if(a)throw o}}return i}}(t,e)||Object(ve.a)(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}n(207),n(119);var be=n(198),we=n.n(be),ke={created:function(){if(this.siteMeta=this.$site.headTags.filter((function(t){return"meta"===ye(t,1)[0]})).map((function(t){var e=ye(t,2);e[0];return e[1]})),this.$ssrContext){var t=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(e=t)?e.map((function(t){var e="<meta";return Object.keys(t).forEach((function(n){e+=" ".concat(n,'="').concat(t[n],'"')})),e+">"})).join("\n "):"",this.$ssrContext.canonicalLink=xe(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Kt.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=Pe(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return we()([{name:"description",content:this.$description}],t,this.siteMeta,Ce)},updateCanonicalLink:function(){_e(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",xe(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){Pe(null,this.currentMetaTags),_e()}};function _e(){var t=document.querySelector("link[rel='canonical']");t&&t.remove()}function xe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?'<link href="'.concat(t,'" rel="canonical" />'):""}function Pe(t,e){if(e&&Object(Kt.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function Ce(t){for(var e=0,n=["name","property","itemprop"];e<n.length;e++){var r=n[e];if(t.hasOwnProperty(r))return t[r]+r}return JSON.stringify(t)}n(63);var Se=n(84),Te=n.n(Se),Ie={mounted:function(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:Te()((function(){this.setActiveHash()}),300),setActiveHash:function(){for(var t=this,e=[].slice.call(document.querySelectorAll(".sidebar-link")),n=[].slice.call(document.querySelectorAll(".header-anchor")).filter((function(t){return e.some((function(e){return e.hash===t.hash}))})),r=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),o=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),i=window.innerHeight+r,s=0;s<n.length;s++){var a=n[s],l=n[s+1],u=0===s&&0===r||r>=a.parentElement.offsetTop+10&&(!l||r<l.parentElement.offsetTop-10),c=decodeURIComponent(this.$route.hash);if(u&&c!==decodeURIComponent(a.hash)){var p=a;if(i===o)for(var d=s+1;d<n.length;d++)if(c===decodeURIComponent(n[d].hash))return;return this.$vuepress.$set("disableScrollBehavior",!0),void this.$router.replace(decodeURIComponent(p.hash),(function(){t.$nextTick((function(){t.$vuepress.$set("disableScrollBehavior",!1)}))}))}}}},beforeDestroy:function(){window.removeEventListener("scroll",this.onScroll)}},Oe=(n(65),n(85)),Me=n.n(Oe),Ae={mounted:function(){var t=this;Me.a.configure({showSpinner:!1}),this.$router.beforeEach((function(t,e,n){t.path===e.path||i.a.component(t.name)||Me.a.start(),n()})),this.$router.afterEach((function(){Me.a.done(),t.isSidebarOpen=!1}))}};n(343),n(344),n(111);function je(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function $e(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Le(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?$e(Object(n),!0).forEach((function(e){je(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}n(177),n(228);var Ee={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:function(){return{success:!1,originalBackground:null,originalTransition:null}},computed:{alignStyle:function(){var t={};return t[this.options.align]="7.5px",t},iconClass:function(){return this.options.staticIcon?"":"hover"}},mounted:function(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy:function(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb:function(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard:function(t){var e=this;if(navigator.clipboard)navigator.clipboard.writeText(this.code).then((function(){e.setSuccessTransitions()}),(function(){}));else{var n=document.createElement("textarea");document.body.appendChild(n),n.value=this.code,n.select(),document.execCommand("Copy"),n.remove(),this.setSuccessTransitions()}},setSuccessTransitions:function(){var t=this;if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";var e=this.hexToRgb(this.options.backgroundColor);this.parent.style.background="rgba(".concat(e.r,", ").concat(e.g,", ").concat(e.b,", 0.1)")}this.success=!0,this.successTimeout=setTimeout((function(){t.options.backgroundTransition&&(t.parent.style.background=t.originalBackground,t.parent.style.transition=t.originalTransition),t.success=!1}),500)}}},Ve=(n(346),n(18)),Re=Object(Ve.a)(Ee,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"code-copy"},[n("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[n("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),n("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),n("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Ne=(n(347),[ke,Ie,Ae,{updated:function(){this.update()},methods:{update:function(){setTimeout((function(){document.querySelectorAll('div[class*="language-"] pre').forEach((function(t){if(!t.classList.contains("code-copy-added")){var e=new(i.a.extend(Re));e.options=Le({},{align:"bottom",color:"#eb7132",backgroundTransition:!0,backgroundColor:"#eb7132",successText:"Copied to Clipboard!",staticIcon:!0}),e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)}}))}),100)}}}]),De=n(0);!function(t,e,n){var r;switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),(r=t[e]).push.apply(r,Object(Kt.a)(n));break;default:throw new Error("Unknown option name.")}}(De.default,"mixins",Ne);var Fe=[{name:"v-7e7ee8f3",path:"/climbing-stairs-solution-1/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-7e7ee8f3").then(n)}},{path:"/climbing-stairs-solution-1/index.html",redirect:"/climbing-stairs-solution-1/"},{path:"/_posts/leetcode/climbing-stairs-solution-1.html",redirect:"/climbing-stairs-solution-1/"},{name:"v-04d71d8e",path:"/contains-duplicate/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-04d71d8e").then(n)}},{path:"/contains-duplicate/index.html",redirect:"/contains-duplicate/"},{path:"/_posts/leetcode/contains-duplicate.html",redirect:"/contains-duplicate/"},{name:"v-a3e7481e",path:"/climbing-stairs-solution-2/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-a3e7481e").then(n)}},{path:"/climbing-stairs-solution-2/index.html",redirect:"/climbing-stairs-solution-2/"},{path:"/_posts/leetcode/climbing-stairs-solution-2.html",redirect:"/climbing-stairs-solution-2/"},{name:"v-598fc2bb",path:"/reverse-string/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-598fc2bb").then(n)}},{path:"/reverse-string/index.html",redirect:"/reverse-string/"},{path:"/_posts/leetcode/reverse-string.html",redirect:"/reverse-string/"},{name:"v-61183936",path:"/remove-duplicates-from-sorted-array/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-61183936").then(n)}},{path:"/remove-duplicates-from-sorted-array/index.html",redirect:"/remove-duplicates-from-sorted-array/"},{path:"/_posts/leetcode/remove-duplicates-from-sorted-array.html",redirect:"/remove-duplicates-from-sorted-array/"},{name:"v-3065fce5",path:"/single-number/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-3065fce5").then(n)}},{path:"/single-number/index.html",redirect:"/single-number/"},{path:"/_posts/leetcode/single-number.html",redirect:"/single-number/"},{name:"v-cff0c136",path:"/valid-anagram/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-cff0c136").then(n)}},{path:"/valid-anagram/index.html",redirect:"/valid-anagram/"},{path:"/_posts/leetcode/valid-anagram.html",redirect:"/valid-anagram/"},{name:"v-0875843e",path:"/installing-fnm/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-0875843e").then(n)}},{path:"/installing-fnm/index.html",redirect:"/installing-fnm/"},{path:"/_posts/nodejs/installing-fnm.html",redirect:"/installing-fnm/"},{name:"v-3a10803e",path:"/installing-nvm/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-3a10803e").then(n)}},{path:"/installing-nvm/index.html",redirect:"/installing-nvm/"},{path:"/_posts/nodejs/installing-nvm.html",redirect:"/installing-nvm/"},{name:"v-ea911d36",path:"/installing-yarn-1/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-ea911d36").then(n)}},{path:"/installing-yarn-1/index.html",redirect:"/installing-yarn-1/"},{path:"/_posts/nodejs/installing-yarn-1.html",redirect:"/installing-yarn-1/"},{name:"v-ffcf8bf6",path:"/raspberry-pi-configuring-settings/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-ffcf8bf6").then(n)}},{path:"/raspberry-pi-configuring-settings/index.html",redirect:"/raspberry-pi-configuring-settings/"},{path:"/_posts/raspberry-pi/raspberry-pi-configuring-settings.html",redirect:"/raspberry-pi-configuring-settings/"},{name:"v-685a6f36",path:"/vuepress-tutorial-1/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-685a6f36").then(n)}},{path:"/vuepress-tutorial-1/index.html",redirect:"/vuepress-tutorial-1/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-1.html",redirect:"/vuepress-tutorial-1/"},{name:"v-b5b6f4d2",path:"/vuepress-tutorial-10/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-b5b6f4d2").then(n)}},{path:"/vuepress-tutorial-10/index.html",redirect:"/vuepress-tutorial-10/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-10.html",redirect:"/vuepress-tutorial-10/"},{name:"v-afe09dd6",path:"/vuepress-tutorial-11/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-afe09dd6").then(n)}},{path:"/vuepress-tutorial-11/index.html",redirect:"/vuepress-tutorial-11/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-11.html",redirect:"/vuepress-tutorial-11/"},{name:"v-aa0a46da",path:"/vuepress-tutorial-12/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-aa0a46da").then(n)}},{path:"/vuepress-tutorial-12/index.html",redirect:"/vuepress-tutorial-12/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-12.html",redirect:"/vuepress-tutorial-12/"},{name:"v-9e5d98e2",path:"/vuepress-tutorial-14/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-9e5d98e2").then(n)}},{path:"/vuepress-tutorial-14/index.html",redirect:"/vuepress-tutorial-14/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-14.html",redirect:"/vuepress-tutorial-14/"},{name:"v-a433efde",path:"/vuepress-tutorial-13/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-a433efde").then(n)}},{path:"/vuepress-tutorial-13/index.html",redirect:"/vuepress-tutorial-13/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-13.html",redirect:"/vuepress-tutorial-13/"},{name:"v-988741e6",path:"/vuepress-tutorial-15/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-988741e6").then(n)}},{path:"/vuepress-tutorial-15/index.html",redirect:"/vuepress-tutorial-15/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-15.html",redirect:"/vuepress-tutorial-15/"},{name:"v-92b0eaea",path:"/vuepress-tutorial-16/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-92b0eaea").then(n)}},{path:"/vuepress-tutorial-16/index.html",redirect:"/vuepress-tutorial-16/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-16.html",redirect:"/vuepress-tutorial-16/"},{name:"v-8cda93ee",path:"/vuepress-tutorial-17/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-8cda93ee").then(n)}},{path:"/vuepress-tutorial-17/index.html",redirect:"/vuepress-tutorial-17/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-17.html",redirect:"/vuepress-tutorial-17/"},{name:"v-87043cf2",path:"/vuepress-tutorial-18/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-87043cf2").then(n)}},{path:"/vuepress-tutorial-18/index.html",redirect:"/vuepress-tutorial-18/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-18.html",redirect:"/vuepress-tutorial-18/"},{name:"v-812de5f6",path:"/vuepress-tutorial-19/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-812de5f6").then(n)}},{path:"/vuepress-tutorial-19/index.html",redirect:"/vuepress-tutorial-19/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-19.html",redirect:"/vuepress-tutorial-19/"},{name:"v-12481376",path:"/vuepress-tutorial-2/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-12481376").then(n)}},{path:"/vuepress-tutorial-2/index.html",redirect:"/vuepress-tutorial-2/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-2.html",redirect:"/vuepress-tutorial-2/"},{name:"v-00c26c4e",path:"/vuepress-tutorial-20/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-00c26c4e").then(n)}},{path:"/vuepress-tutorial-20/index.html",redirect:"/vuepress-tutorial-20/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-20.html",redirect:"/vuepress-tutorial-20/"},{name:"v-21e52425",path:"/vuepress-tutorial-3/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-21e52425").then(n)}},{path:"/vuepress-tutorial-3/index.html",redirect:"/vuepress-tutorial-3/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-3.html",redirect:"/vuepress-tutorial-3/"},{name:"v-b9fea476",path:"/vuepress-tutorial-6/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-b9fea476").then(n)}},{path:"/vuepress-tutorial-6/index.html",redirect:"/vuepress-tutorial-6/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-6.html",redirect:"/vuepress-tutorial-6/"},{name:"v-4cee5205",path:"/vuepress-tutorial-4/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-4cee5205").then(n)}},{path:"/vuepress-tutorial-4/index.html",redirect:"/vuepress-tutorial-4/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-4.html",redirect:"/vuepress-tutorial-4/"},{name:"v-63ec48b6",path:"/vuepress-tutorial-7/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-63ec48b6").then(n)}},{path:"/vuepress-tutorial-7/index.html",redirect:"/vuepress-tutorial-7/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-7.html",redirect:"/vuepress-tutorial-7/"},{name:"v-0dd9ecf6",path:"/vuepress-tutorial-8/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-0dd9ecf6").then(n)}},{path:"/vuepress-tutorial-8/index.html",redirect:"/vuepress-tutorial-8/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-8.html",redirect:"/vuepress-tutorial-8/"},{name:"v-77f77fe5",path:"/vuepress-tutorial-5/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-77f77fe5").then(n)}},{path:"/vuepress-tutorial-5/index.html",redirect:"/vuepress-tutorial-5/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-5.html",redirect:"/vuepress-tutorial-5/"},{name:"v-241c3765",path:"/vuepress-tutorial-9/",component:De.default,beforeEnter:function(t,e,n){ge("Post","v-241c3765").then(n)}},{path:"/vuepress-tutorial-9/index.html",redirect:"/vuepress-tutorial-9/"},{path:"/_posts/vuepress-tutorials/vuepress-tutorial-9.html",redirect:"/vuepress-tutorial-9/"},{name:"v-74f372c4",path:"/contact/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-74f372c4").then(n)}},{path:"/contact/index.html",redirect:"/contact/"},{name:"v-7bfcfe46",path:"/donate/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-7bfcfe46").then(n)}},{path:"/donate/index.html",redirect:"/donate/"},{name:"v-c3c5b284",path:"/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-c3c5b284").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-0830e2fe",path:"/resources/foss/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-0830e2fe").then(n)}},{path:"/resources/foss/index.html",redirect:"/resources/foss/"},{name:"v-66307a7e",path:"/resources/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-66307a7e").then(n)}},{path:"/resources/index.html",redirect:"/resources/"},{name:"v-593469de",path:"/resources/bitcoin/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-593469de").then(n)}},{path:"/resources/bitcoin/index.html",redirect:"/resources/bitcoin/"},{name:"v-45cc3a44",path:"/resources/nostr/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-45cc3a44").then(n)}},{path:"/resources/nostr/index.html",redirect:"/resources/nostr/"},{name:"v-2e6657c4",path:"/resources/privacy/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-2e6657c4").then(n)}},{path:"/resources/privacy/index.html",redirect:"/resources/privacy/"},{name:"v-0a007c4e",path:"/resources/webdev/",component:De.default,beforeEnter:function(t,e,n){ge("Layout","v-0a007c4e").then(n)}},{path:"/resources/webdev/index.html",redirect:"/resources/webdev/"},{name:"v-1f814451",path:"/posts/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1f814451").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/index.html",redirect:"/posts/"},{name:"v-b7de8ed4",path:"/topics/",component:De.default,beforeEnter:function(t,e,n){ge("Topics","v-b7de8ed4").then(n)},meta:{pid:"topics",id:"topics"}},{path:"/topics/index.html",redirect:"/topics/"},{name:"v-f9cc3e38",path:"/topics/LeetCode/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-f9cc3e38").then(n)},meta:{pid:"topics",id:"LeetCode"}},{path:"/topics/LeetCode/index.html",redirect:"/topics/LeetCode/"},{name:"v-2aa8ee60",path:"/topics/Node.js/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-2aa8ee60").then(n)},meta:{pid:"topics",id:"Node.js"}},{path:"/topics/Node.js/index.html",redirect:"/topics/Node.js/"},{name:"v-5fcac9bd",path:"/topics/Raspberry-Pi/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-5fcac9bd").then(n)},meta:{pid:"topics",id:"Raspberry-Pi"}},{path:"/topics/Raspberry-Pi/index.html",redirect:"/topics/Raspberry-Pi/"},{name:"v-de06e508",path:"/topics/VuePress/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-de06e508").then(n)},meta:{pid:"topics",id:"VuePress"}},{path:"/topics/VuePress/index.html",redirect:"/topics/VuePress/"},{name:"v-1ba3844c",path:"/posts/page/2/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba3844c").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/2/index.html",redirect:"/posts/page/2/"},{name:"v-1ba3846b",path:"/posts/page/3/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba3846b").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/3/index.html",redirect:"/posts/page/3/"},{name:"v-1ba3848a",path:"/posts/page/4/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba3848a").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/4/index.html",redirect:"/posts/page/4/"},{name:"v-1ba384a9",path:"/posts/page/5/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba384a9").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/5/index.html",redirect:"/posts/page/5/"},{name:"v-1ba384c8",path:"/posts/page/6/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba384c8").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/6/index.html",redirect:"/posts/page/6/"},{name:"v-1ba384e7",path:"/posts/page/7/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-1ba384e7").then(n)},meta:{pid:"posts",id:"posts"}},{path:"/posts/page/7/index.html",redirect:"/posts/page/7/"},{name:"v-4a9fa74e",path:"/topics/LeetCode/page/2/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-4a9fa74e").then(n)},meta:{pid:"topics",id:"LeetCode"}},{path:"/topics/LeetCode/page/2/index.html",redirect:"/topics/LeetCode/page/2/"},{name:"v-7b32b67e",path:"/topics/VuePress/page/2/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-7b32b67e").then(n)},meta:{pid:"topics",id:"VuePress"}},{path:"/topics/VuePress/page/2/index.html",redirect:"/topics/VuePress/page/2/"},{name:"v-7b32b640",path:"/topics/VuePress/page/3/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-7b32b640").then(n)},meta:{pid:"topics",id:"VuePress"}},{path:"/topics/VuePress/page/3/index.html",redirect:"/topics/VuePress/page/3/"},{name:"v-7b32b602",path:"/topics/VuePress/page/4/",component:De.default,beforeEnter:function(t,e,n){ge("IndexPost","v-7b32b602").then(n)},meta:{pid:"topics",id:"VuePress"}},{path:"/topics/VuePress/page/4/index.html",redirect:"/topics/VuePress/page/4/"},{path:"*",component:De.default}],He={title:"Code Monkeys",description:"Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵",base:"/",headTags:[["meta",{name:"charset",content:"utf-8"}],["meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}],["meta",{name:"author",content:"J the Code Monkey"}],["link",{rel:"icon",type:"image/png",href:"/favicon-16x16.png",sizes:"16x16"}],["link",{rel:"icon",type:"image/png",href:"/favicon-32x32.png",sizes:"32x32"}],["link",{rel:"apple-touch-icon",href:"/apple-touch-icon.png"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-precomposed.png"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-180x180-precomposed.png",sizes:"180x180"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-152x152-precomposed.png",sizes:"152x152"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-144x144-precomposed.png",sizes:"144x144"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-120x120-precomposed.png",sizes:"120x120"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-114x114-precomposed.png",sizes:"114x114"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-76x76-precomposed.png",sizes:"76x76"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-72x72-precomposed.png",sizes:"72x72"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-60x60-precomposed.png",sizes:"60x60"}],["link",{rel:"apple-touch-icon-precomposed",href:"/apple-touch-icon-57x57-precomposed.png",sizes:"57x57"}],["link",{rel:"manifest",href:"/site.webmanifest"}],["link",{rel:"mask-icon",href:"/safari-pinned-tab.svg",color:"#1f2229"}],["meta",{name:"apple-mobile-web-app-title",content:"Code Monkeys"}],["meta",{name:"application-name",content:"Code Monkeys"}],["meta",{name:"msapplication-TileColor",content:"#1f2229"}],["meta",{name:"msapplication-TileImage",content:"/mstile-144x144.png"}],["meta",{name:"theme-color",content:"#1f2229"}],["meta",{name:"msapplication-config",content:"/browserconfig.xml"}],["meta",{property:"og:title",content:"Code Monkeys"}],["meta",{property:"og:type",content:"website"}],["meta",{property:"og:image",content:"https://codemonkeys.tech/images/code-monkeys-logos/code-monkeys-blog-open-graph.png"}],["meta",{property:"og:image:width",content:"1200"}],["meta",{property:"og:image:height",content:"630"}],["meta",{property:"og:image:alt",content:"Code Monkeys Blog Open Graph Image"}],["meta",{property:"og:url",content:"https://codemonkeys.tech"}],["meta",{property:"og:description",content:"Learn to Code like a Monkey by joining the Code Monkeys Community!!! We create videos, tutorials, blog posts, etc. to help others learn about code and other tech related topics! Start Monkeying Around Today!!! 🐵"}],["meta",{property:"og:site_name",content:"Code Monkeys"}],["meta",{name:"twitter:card",content:"summary_large_image"}],["meta",{name:"twitter:title",content:"Code Monkeys"}],["meta",{name:"twitter:description",content:"Start Monkeying Around Today!!! 🐵"}],["meta",{name:"twitter:url",content:"https://codemonkeys.tech"}],["meta",{name:"twitter:site",content:"@codemonkeystech"}],["meta",{name:"twitter:image",content:"https://codemonkeys.tech/images/code-monkeys-logos/code-monkeys-blog-twitter-summary-large.png"}],["meta",{name:"twitter:image:alt",content:"Code Monkeys Blog Twitter Summary Large Image"}],["meta",{name:"twitter:creator",content:"@codemonkeystech"}],["link",{href:"//codefence.io/codefence.css",rel:"stylesheet"}],["script",{defer:"",type:"text/javascript",src:"//codefence.io/codefence.js"}],["link",{rel:"alternate",type:"application/atom+xml",href:"https://codemonkeys.tech/atom.xml",title:"Code Monkeys Atom Feed"}],["link",{rel:"alternate",type:"application/json",href:"https://codemonkeys.tech/rss.xml",title:"Code Monkeys JSON Feed"}],["link",{rel:"alternate",type:"application/rss+xml",href:"https://codemonkeys.tech/rss.xml",title:"Code Monkeys RSS Feed"}]],pages:[{title:"Climbing Stairs Solution 1",frontmatter:{title:"Climbing Stairs Solution 1",date:"2021-06-30T16:43:32.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the first Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒",preview:"You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps...",img:"leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post.png",placeholder:"leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-90w.png",alt:"LeetCode - Climbing Stairs Solution 1 Post Picture",linkImg:"leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png",linkImgAlt:"LeetCode - Climbing Stairs Solution 1 Image",videoURL:"https://www.youtube-nocookie.com/embed/jUP9BAs2GbE",canonicalUrl:"https://codemonkeys.tech/climbing-stairs-solution-1/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/climbing-stairs-solution-1/",redirectFrom:"/posts/2021/06/30/climbing-stairs-solution-1/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Climbing Stairs Solution 1"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Climbing Stairs Solution 1 Image"},{property:"og:url",content:"https://codemonkeys.tech/climbing-stairs-solution-1/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the first Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Climbing Stairs Solution 1"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the first Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/climbing-stairs-solution-1/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Climbing Stairs Solution 1 Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/climbing-stairs-solution-1.html",relativePath:"_posts/leetcode/climbing-stairs-solution-1.md",key:"v-7e7ee8f3",path:"/climbing-stairs-solution-1/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"Thought Process",slug:"thought-process"},{level:2,title:"Implementation",slug:"implementation"},{level:2,title:"Downsides",slug:"downsides"}],numberOfCommits:10,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Contains Duplicate",frontmatter:{title:"Contains Duplicate",date:"2021-08-06T18:24:00.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Contains Duplicate! 🍌🐒",preview:"Given an integer array nums, return true if any value appears at least twice, and return false if every...",img:"leetcode/06-contains-duplicate/leetcode-contains-duplicate-post.png",placeholder:"leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-90w.png",alt:"LeetCode - Contains Duplicate Post Picture",linkImg:"leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png",linkImgAlt:"LeetCode - Contains Duplicate Solution Image",videoURL:"https://www.youtube-nocookie.com/embed/P_SCtMIgZJs",canonicalUrl:"https://codemonkeys.tech/contains-duplicate/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/contains-duplicate/",redirectFrom:"/posts/2021/08/06/contains-duplicate/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Contains Duplicate"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Contains Duplicate Solution Image"},{property:"og:url",content:"https://codemonkeys.tech/contains-duplicate/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Contains Duplicate! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Contains Duplicate"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Contains Duplicate! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/contains-duplicate/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Contains Duplicate Solution Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/contains-duplicate.html",relativePath:"_posts/leetcode/contains-duplicate.md",key:"v-04d71d8e",path:"/contains-duplicate/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"Thought Process",slug:"thought-process"},{level:2,title:"Implementation",slug:"implementation"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Climbing Stairs Solution 2",frontmatter:{title:"Climbing Stairs Solution 2",date:"2021-07-01T15:45:32.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the second Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒",preview:"You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps...",img:"leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post.png",placeholder:"leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-90w.png",alt:"LeetCode - Climbing Stairs Solution 2 Post Picture",linkImg:"leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png",linkImgAlt:"LeetCode - Climbing Stairs Solution 2 Image",videoURL:"https://www.youtube-nocookie.com/embed/_dhZdGNFV-g",canonicalUrl:"https://codemonkeys.tech/climbing-stairs-solution-2/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/climbing-stairs-solution-2/",redirectFrom:"/posts/2021/07/01/climbing-stairs-solution-2/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Climbing Stairs Solution 2"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Climbing Stairs Solution 2 Image"},{property:"og:url",content:"https://codemonkeys.tech/climbing-stairs-solution-2/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the second Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Climbing Stairs Solution 2"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the second Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/climbing-stairs-solution-2/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Climbing Stairs Solution 2 Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/climbing-stairs-solution-2.html",relativePath:"_posts/leetcode/climbing-stairs-solution-2.md",key:"v-a3e7481e",path:"/climbing-stairs-solution-2/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"Thought Process",slug:"thought-process"},{level:2,title:"Implementation",slug:"implementation"},{level:2,title:"Analysis",slug:"analysis"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Reverse String",frontmatter:{title:"Reverse String",date:"2021-08-11T15:35:00.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Reverse String! 🍌🐒",preview:"Write a function that reverses a string. The input string is given as an array of characters. Ex) 1 Input...",img:"leetcode/07-reverse-string/leetcode-reverse-string-post.png",placeholder:"leetcode/07-reverse-string/leetcode-reverse-string-post-90w.png",alt:"LeetCode - Reverse String Post Picture",linkImg:"leetcode/07-reverse-string/leetcode-reverse-string-post-link.png",linkImgAlt:"LeetCode - Reverse String Solution Image",videoURL:"https://www.youtube-nocookie.com/embed/Ue3XmMvLwsY",canonicalUrl:"https://codemonkeys.tech/reverse-string/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/reverse-string/",redirectFrom:"/posts/2021/08/11/reverse-string/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Reverse String"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/07-reverse-string/leetcode-reverse-string-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Reverse String Solution Image"},{property:"og:url",content:"https://codemonkeys.tech/reverse-string/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Reverse String! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Reverse String"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Reverse String! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/reverse-string/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/07-reverse-string/leetcode-reverse-string-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Reverse String Solution Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/reverse-string.html",relativePath:"_posts/leetcode/reverse-string.md",key:"v-598fc2bb",path:"/reverse-string/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"What is a printable ASCII Character?",slug:"what-is-a-printable-ascii-character"},{level:2,title:"What does In-Place Mean?",slug:"what-does-in-place-mean"},{level:2,title:"Thought Process",slug:"thought-process"},{level:2,title:"Implementation",slug:"implementation"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Remove Duplicates from Sorted Array",frontmatter:{title:"Remove Duplicates from Sorted Array",date:"2021-07-03T17:25:34.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Remove Duplicates from Sorted Array! 🍌🐒",preview:"Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each...",img:"leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post.png",placeholder:"leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-90w.png",alt:"LeetCode - Remove Duplicates from Sorted Array Post Picture",linkImg:"leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png",linkImgAlt:"LeetCode - Remove Duplicates from Sorted Array Solution Image",videoURL:"https://www.youtube-nocookie.com/embed/ApBQCp1RfnA",canonicalUrl:"https://codemonkeys.tech/remove-duplicates-from-sorted-array/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/remove-duplicates-from-sorted-array/",redirectFrom:"/posts/2021/07/03/remove-duplicates-from-sorted-array/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Remove Duplicates from Sorted Array"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Remove Duplicates from Sorted Array Solution Image"},{property:"og:url",content:"https://codemonkeys.tech/remove-duplicates-from-sorted-array/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Remove Duplicates from Sorted Array! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Remove Duplicates from Sorted Array"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Remove Duplicates from Sorted Array! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/remove-duplicates-from-sorted-array/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Remove Duplicates from Sorted Array Solution Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/remove-duplicates-from-sorted-array.html",relativePath:"_posts/leetcode/remove-duplicates-from-sorted-array.md",key:"v-61183936",path:"/remove-duplicates-from-sorted-array/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"What does In-Place mean?",slug:"what-does-in-place-mean"},{level:2,title:"Removing (or Moving) Duplicates & Maintaining Relative Order",slug:"removing-or-moving-duplicates-maintaining-relative-order"},{level:2,title:"How to Modify nums In-Place?",slug:"how-to-modify-nums-in-place"},{level:2,title:"Implementation",slug:"implementation"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Single Number",frontmatter:{title:"Single Number",date:"2021-06-29T17:23:42.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Single Number! 🍌🐒",preview:"Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single...",img:"leetcode/01-single-number/leetcode-single-number-post.png",placeholder:"leetcode/01-single-number/leetcode-single-number-post-90w.png",alt:"LeetCode - Single Number Post Picture",linkImg:"leetcode/01-single-number/leetcode-single-number-post-link.png",linkImgAlt:"LeetCode - Single Number Solution Image",videoURL:"https://www.youtube-nocookie.com/embed/K6TuMWpnmqQ",canonicalUrl:"https://codemonkeys.tech/single-number/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/single-number/",redirectFrom:"/posts/2021/06/29/single-number/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Single Number"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/01-single-number/leetcode-single-number-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Single Number Solution Image"},{property:"og:url",content:"https://codemonkeys.tech/single-number/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Single Number! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Single Number"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Single Number! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/single-number/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/01-single-number/leetcode-single-number-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Single Number Solution Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/single-number.html",relativePath:"_posts/leetcode/single-number.md",key:"v-3065fce5",path:"/single-number/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"What does Linear Runtime Mean?",slug:"what-does-linear-runtime-mean"},{level:2,title:"What does Using Constant Extra Space Mean?",slug:"what-does-using-constant-extra-space-mean"},{level:2,title:"Thought Process",slug:"thought-process"},{level:2,title:"Implementation",slug:"implementation"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Valid Anagram",frontmatter:{title:"Valid Anagram",date:"2021-07-02T18:15:23.000Z",topic:"LeetCode",description:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Valid Anagram! 🍌🐒",preview:"Given two strings s and t, return true if t is an anagram of s, and false otherwise. Ex 1) Input...",img:"leetcode/04-valid-anagram/leetcode-valid-anagram-post.png",placeholder:"leetcode/04-valid-anagram/leetcode-valid-anagram-post-90w.png",alt:"LeetCode - Valid Anagram Post Picture",linkImg:"leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png",linkImgAlt:"LeetCode - Valid Anagram Solution Image",videoURL:"https://www.youtube-nocookie.com/embed/Bh4f8Ui1gOU",canonicalUrl:"https://codemonkeys.tech/valid-anagram/",mathjax:{presets:"\\def\\lr#1#2#3{\\left#1#2\\right#3}"},permalink:"/valid-anagram/",redirectFrom:"/posts/2021/07/02/valid-anagram/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Valid Anagram"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"LeetCode - Valid Anagram Solution Image"},{property:"og:url",content:"https://codemonkeys.tech/valid-anagram/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Valid Anagram! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Valid Anagram"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Valid Anagram! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/valid-anagram/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png"},{name:"twitter:image:alt",content:"LeetCode - Valid Anagram Solution Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/leetcode/valid-anagram.html",relativePath:"_posts/leetcode/valid-anagram.md",key:"v-cff0c136",path:"/valid-anagram/",headers:[{level:2,title:"Links",slug:"links"},{level:2,title:"Problem Description",slug:"problem-description"},{level:2,title:"Examples",slug:"examples"},{level:2,title:"Constraints",slug:"constraints"},{level:2,title:"What is an Anagram?",slug:"what-is-an-anagram"},{level:2,title:"Assumptions",slug:"assumptions"},{level:2,title:"How to Check if t is an Anagram of s?",slug:"how-to-check-if-t-is-an-anagram-of-s"},{level:3,title:"How to Check if s and t contain the same letters?",slug:"how-to-check-if-s-and-t-contain-the-same-letters"},{level:2,title:"Implementation",slug:"implementation"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"Installing Fast Node Manager (fnm)",frontmatter:{title:"Installing Fast Node Manager (fnm)",date:"2021-12-08T21:27:15.000Z",topic:"Node.js",description:"Hey fellow Code Monkeys!!! 🐵 Want to switch between Node versions extremely fast, then check out Installing Fast Node Manager (fnm)! 🍌🐒",preview:"Fast Node Manager (fnm) is a fast and simple Node version manager built in Rust. For those of you who haven't read...",img:"nodejs/02-installing-fnm/nodejs-installing-fnm-post.png",placeholder:"nodejs/02-installing-fnm/nodejs-installing-fnm-post-90w.png",alt:"Node.js - Installing Fast Node Manager (fnm) Post Picture",linkImg:"nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png",linkImgAlt:"Node.js - Installing Fast Node Manager (fnm) Image",canonicalUrl:"https://codemonkeys.tech/installing-fnm/",permalink:"/installing-fnm/",redirectFrom:"/posts/2021/12/08/installing-fnm/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Installing Fast Node Manager (fnm)"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"Node.js - Installing Fast Node Manager (fnm) Image"},{property:"og:url",content:"https://codemonkeys.tech/installing-fnm/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to switch between Node versions extremely fast, then check out Installing Fast Node Manager (fnm)! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Installing Fast Node Manager (fnm)"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to switch between Node versions extremely fast, then check out Installing Fast Node Manager (fnm)! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/installing-fnm/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png"},{name:"twitter:image:alt",content:"Node.js - Installing Fast Node Manager (fnm) Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/nodejs/installing-fnm.html",relativePath:"_posts/nodejs/installing-fnm.md",key:"v-0875843e",path:"/installing-fnm/",headers:[{level:2,title:"Why use fnm?",slug:"why-use-fnm"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Linux",slug:"linux"},{level:3,title:"macOS",slug:"macos"},{level:3,title:"Windows",slug:"windows"},{level:2,title:"Shell Setup",slug:"shell-setup"},{level:3,title:"Bash",slug:"bash"},{level:3,title:"Zsh",slug:"zsh"},{level:3,title:"Fish Shell",slug:"fish-shell"},{level:3,title:"PowerShell",slug:"powershell"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Completions",slug:"completions"},{level:3,title:"Bash",slug:"bash-2"},{level:3,title:"Zsh",slug:"zsh-2"}],numberOfCommits:8,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"Installing Node Version Manager (nvm)",frontmatter:{title:"Installing Node Version Manager (nvm)",date:"2021-12-07T22:01:15.000Z",topic:"Node.js",description:"Hey fellow Code Monkeys!!! 🐵 Want to be able to easily install and switch between Node versions, then check out Installing Node Version Manager (nvm)! 🍌🐒",preview:"A Node version manager allows you to easily install and switch between numerous versions of Node.js. This is useful...",img:"nodejs/01-installing-nvm/nodejs-installing-nvm-post.png",placeholder:"nodejs/01-installing-nvm/nodejs-installing-nvm-post-90w.png",alt:"Node.js - Installing Node Version Manager (nvm) Post Picture",linkImg:"nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png",linkImgAlt:"Node.js - Installing Node Version Manager (nvm) Image",canonicalUrl:"https://codemonkeys.tech/installing-nvm/",permalink:"installing-nvm/",redirectFrom:"/posts/2021/12/07/installing-nvm/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Installing Node Version Manager (nvm)"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"Node.js - Installing Node Version Manager (nvm) Image"},{property:"og:url",content:"https://codemonkeys.tech/installing-nvm/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to be able to easily install and switch between Node versions, then check out Installing Node Version Manager (nvm)! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Installing Node Version Manager (nvm)"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to be able to easily install and switch between Node versions, then check out Installing Node Version Manager (nvm)! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/installing-nvm/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png"},{name:"twitter:image:alt",content:"Node.js - Installing Node Version Manager (nvm) Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/nodejs/installing-nvm.html",relativePath:"_posts/nodejs/installing-nvm.md",key:"v-3a10803e",path:"/installing-nvm/",headers:[{level:2,title:"Why use a Node Version Manager?",slug:"why-use-a-node-version-manager"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Linux Dependencies",slug:"linux-dependencies"},{level:3,title:"macOS Dependencies",slug:"macos-dependencies"},{level:3,title:"System Version",slug:"system-version"},{level:3,title:"Install and Update Script",slug:"install-and-update-script"},{level:3,title:"Verify Installation",slug:"verify-installation"},{level:3,title:"Troubleshooting",slug:"troubleshooting"},{level:2,title:"Usage",slug:"usage"},{level:3,title:"Check nvm Version",slug:"check-nvm-version"},{level:3,title:"List Remote Versions",slug:"list-remote-versions"},{level:3,title:"Install Versions",slug:"install-versions"},{level:3,title:"List Installed Versions",slug:"list-installed-versions"},{level:3,title:"Use a Version",slug:"use-a-version"},{level:3,title:"Check Active Version",slug:"check-active-version"},{level:3,title:"Set Aliases",slug:"set-aliases"},{level:3,title:"Get Path to Version",slug:"get-path-to-version"},{level:3,title:"Uninstall Versions",slug:"uninstall-versions"},{level:2,title:"Uninstall nvm",slug:"uninstall-nvm"}],numberOfCommits:8,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"Installing Yarn 1",frontmatter:{title:"Installing Yarn 1",date:"2021-12-28T22:56:00.000Z",topic:"Node.js",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and use Yarn 1, then check out this post! 🍌🐒",preview:"Before discussing Yarn in more detail, let's first define what a package manager is and what it handles for us. A pacakage...",img:"nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post.png",placeholder:"nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-90w.png",alt:"Node.js - Installing Yarn 1 Post Picture",linkImg:"nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png",linkImgAlt:"Node.js - Installing Yarn 1 Image",canonicalUrl:"https://codemonkeys.tech/installing-yarn-1/",permalink:"/installing-yarn-1/",redirectFrom:"/posts/2021/12/28/installing-yarn-1/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Installing Yarn 1"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"Node.js - Installing Yarn 1 Image"},{property:"og:url",content:"https://codemonkeys.tech/installing-yarn-1/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and use Yarn 1, then check out this post! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Installing Yarn 1"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and use Yarn 1, then check out this post! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/installing-yarn-1/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png"},{name:"twitter:image:alt",content:"Node.js - Installing Yarn 1 Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/nodejs/installing-yarn-1.html",relativePath:"_posts/nodejs/installing-yarn-1.md",key:"v-ea911d36",path:"/installing-yarn-1/",headers:[{level:2,title:"What is a Package Manager?",slug:"what-is-a-package-manager"},{level:2,title:"What is Yarn?",slug:"what-is-yarn"},{level:2,title:"Timeline of Yarn and npm Development",slug:"timeline-of-yarn-and-npm-development"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Platform Installation Notes",slug:"platform-installation-notes"},{level:2,title:"Usage",slug:"usage"},{level:3,title:"Help Commands",slug:"help-commands"},{level:3,title:"Check Yarn Version",slug:"check-yarn-version"},{level:3,title:"Setting a Local Version",slug:"setting-a-local-version"},{level:3,title:"Updating the .gitignore File",slug:"updating-the-gitignore-file"},{level:3,title:"Adding a .gitattributes File",slug:"adding-a-gitattributes-file"},{level:3,title:"Creating a New Project",slug:"creating-a-new-project"},{level:3,title:"Adding Packages",slug:"adding-packages"},{level:3,title:"Listing Added Packages",slug:"listing-added-packages"},{level:3,title:"Upgrading Packages",slug:"upgrading-packages"},{level:3,title:"Removing Packages",slug:"removing-packages"},{level:3,title:"Installing All Project Packages",slug:"installing-all-project-packages"},{level:3,title:"Running Scripts",slug:"running-scripts"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"Configuring Settings",frontmatter:{title:"Configuring Settings",date:"2022-12-20T15:02:00.000Z",topic:"Raspberry-Pi",description:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning how to configure the settings for your Raspberry Pi, then check out the Configuring Settings post! 🍌🐒",preview:"In this tutorial we're going to learn how to configure various settings for a Raspberry Pi using standard Debian commands...",img:"raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post.png",placeholder:"raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-90w.png",alt:"Raspberry Pi - Configuring Settings Post Picture",linkImg:"raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png",linkImgAlt:"Raspberry Pi - Configuring Settings Image",canonicalUrl:"https://codemonkeys.tech/raspberry-pi-configuring-settings/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"Configuring Settings"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"Raspberry Pi - Configuring Settings Image"},{property:"og:url",content:"https://codemonkeys.tech/raspberry-pi-configuring-settings/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning how to configure the settings for your Raspberry Pi, then check out the Configuring Settings post! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"Configuring Settings"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning how to configure the settings for your Raspberry Pi, then check out the Configuring Settings post! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/raspberry-pi-configuring-settings/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png"},{name:"twitter:image:alt",content:"Raspberry Pi - Configuring Settings Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/raspberry-pi/raspberry-pi-configuring-settings.html",relativePath:"_posts/raspberry-pi/raspberry-pi-configuring-settings.md",key:"v-ffcf8bf6",path:"/raspberry-pi-configuring-settings/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Assumptions",slug:"assumptions"},{level:2,title:"Username",slug:"username"},{level:3,title:"Enable root User",slug:"enable-root-user"},{level:3,title:"Logout",slug:"logout"},{level:3,title:"Update Username",slug:"update-username"},{level:3,title:"Update home Directory",slug:"update-home-directory"},{level:3,title:"Disable root User",slug:"disable-root-user"},{level:2,title:"Password",slug:"password"},{level:2,title:"Hostname",slug:"hostname"},{level:3,title:"hosts File",slug:"hosts-file"},{level:3,title:"hostname File",slug:"hostname-file"},{level:2,title:"Enable and Start SSH",slug:"enable-and-start-ssh"},{level:3,title:"Enable SSH",slug:"enable-ssh"},{level:3,title:"Start SSH",slug:"start-ssh"},{level:2,title:"Configure WiFi",slug:"configure-wifi"},{level:3,title:"wpa_supplicant.conf",slug:"wpa-supplicant-conf"},{level:3,title:"Unblock WiFi",slug:"unblock-wifi"},{level:3,title:"Test Connection",slug:"test-connection"},{level:2,title:"Locale Settings",slug:"locale-settings"},{level:3,title:"Time Zone",slug:"time-zone"},{level:3,title:"Keyboard Layout",slug:"keyboard-layout"},{level:2,title:"Conclusion",slug:"conclusion"}],numberOfCommits:5,id:"posts",pid:"posts",lastUpdated:"4/27/2023, 6:35:58 PM"},{title:"VuePress Tutorial 1 - Introduction",frontmatter:{title:"VuePress Tutorial 1 - Introduction",date:"2021-09-24T16:26:30.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning Vuepress, then check out VuePress Tutorial 1 - Introduction! 🍌🐒",preview:"Welcome to our VuePress series! In this series we'll be developing the Code Monkeys Blog starting from the basics...",img:"vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post.png",placeholder:"vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-90w.png",alt:"VuePress Tutorial 1 - Introduction Post Picture",linkImg:"vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png",linkImgAlt:"VuePress Tutorial 1 - Introduction Image",videoURL:"https://www.youtube-nocookie.com/embed/RvIb2BJAbz8",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-1/",permalink:"/vuepress-tutorial-1/",redirectFrom:"/posts/2021/09/24/vuepress-tutorial-1/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 1 - Introduction"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 1 - Introduction Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-1/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning Vuepress, then check out VuePress Tutorial 1 - Introduction! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 1 - Introduction"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 If you're interested in learning Vuepress, then check out VuePress Tutorial 1 - Introduction! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-1/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 1 - Introduction Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-1.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-1.md",key:"v-685a6f36",path:"/vuepress-tutorial-1/",headers:[{level:2,title:"What We'll be Developing",slug:"what-we-ll-be-developing"},{level:2,title:"Why Create a Blog?",slug:"why-create-a-blog"},{level:2,title:"What We'll be Covering",slug:"what-we-ll-be-covering"},{level:2,title:"Nice to Know",slug:"nice-to-know"},{level:2,title:"How to Use these Tutorials",slug:"how-to-use-these-tutorials"},{level:2,title:"Updates",slug:"updates"},{level:2,title:"Resources",slug:"resources"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 10 - Homepage Styling Part 2",frontmatter:{title:"VuePress Tutorial 10 - Homepage Styling Part 2",date:"2022-09-02T21:56:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to continue the homepage styling for your VuePress site, then check out VuePress Tutorial 10 - Homepage Styling Part 2! 🍌🐒",preview:"In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global...",img:"vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post.png",placeholder:"vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-90w.png",alt:"VuePress Tutorial 10 - Homepage Styling Part 2 Post Picture",linkImg:"vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png",linkImgAlt:"VuePress Tutorial 10 - Homepage Styling Part 2 Image",videoURL:"https://www.youtube-nocookie.com/embed/yIrI2BC_UVY",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-10/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 10 - Homepage Styling Part 2"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 10 - Homepage Styling Part 2 Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-10/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to continue the homepage styling for your VuePress site, then check out VuePress Tutorial 10 - Homepage Styling Part 2! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 10 - Homepage Styling Part 2"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to continue the homepage styling for your VuePress site, then check out VuePress Tutorial 10 - Homepage Styling Part 2! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-10/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 10 - Homepage Styling Part 2 Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-10.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-10.md",key:"v-b5b6f4d2",path:"/vuepress-tutorial-10/",headers:[{level:2,title:"Homepage Styling Recap",slug:"homepage-styling-recap"},{level:2,title:"Homepage Styling Updates",slug:"homepage-styling-updates"},{level:3,title:"Fixing the Main Card Placement",slug:"fixing-the-main-card-placement"},{level:3,title:"Adding Hover Effects",slug:"adding-hover-effects"},{level:3,title:"Adding Gradient Background",slug:"adding-gradient-background"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:8,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 11 - Sticky Footer",frontmatter:{title:"VuePress Tutorial 11 - Sticky Footer",date:"2022-09-05T20:04:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to make your footer stick to the bottom of the page, then check out VuePress Tutorial 11 - Sticky Footer! 🍌🐒",preview:"We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into...",img:"vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post.png",placeholder:"vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-90w.png",alt:"VuePress Tutorial 11 - Sticky Footer Post Picture",linkImg:"vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png",linkImgAlt:"VuePress Tutorial 11 - Sticky Footer Image",videoURL:"https://www.youtube-nocookie.com/embed/_2FFh3ss5VM",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-11/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 11 - Sticky Footer"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 11 - Sticky Footer Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-11/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to make your footer stick to the bottom of the page, then check out VuePress Tutorial 11 - Sticky Footer! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 11 - Sticky Footer"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to make your footer stick to the bottom of the page, then check out VuePress Tutorial 11 - Sticky Footer! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-11/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 11 - Sticky Footer Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-11.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-11.md",key:"v-afe09dd6",path:"/vuepress-tutorial-11/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"What is a Sticky Footer?",slug:"what-is-a-sticky-footer"},{level:2,title:"Sticky Footer Styling",slug:"sticky-footer-styling"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:5,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 12 - Highlight SVGs on Hover",frontmatter:{title:"VuePress Tutorial 12 - Highlight SVGs on Hover",date:"2022-09-08T18:18:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to add a highlight effect when hovering over SVGs, then check out VuePress Tutorial 12 - Highlight SVGs on Hover! 🍌🐒",preview:"We're now ready to add a highlight effect when hovering over the SVG icons. The method we'll be using doesn't require a lot of...",img:"vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post.png",placeholder:"vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-90w.png",alt:"VuePress Tutorial 12 - Highlight SVGs on Hover Post Picture",linkImg:"vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png",linkImgAlt:"VuePress Tutorial 12 - Highlight SVGs on Hover Image",videoURL:"https://www.youtube-nocookie.com/embed/T4ytJl4nA7A",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-12/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 12 - Highlight SVGs on Hover"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 12 - Highlight SVGs on Hover Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-12/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to add a highlight effect when hovering over SVGs, then check out VuePress Tutorial 12 - Highlight SVGs on Hover! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 12 - Highlight SVGs on Hover"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to add a highlight effect when hovering over SVGs, then check out VuePress Tutorial 12 - Highlight SVGs on Hover! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-12/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 12 - Highlight SVGs on Hover Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-12.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-12.md",key:"v-aa0a46da",path:"/vuepress-tutorial-12/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Manual Editing",slug:"manual-editing"},{level:3,title:"Icon Example",slug:"icon-example"},{level:3,title:"Icon Styles",slug:"icon-styles"},{level:2,title:"Automated Editing",slug:"automated-editing"},{level:3,title:"CLI Command",slug:"cli-command"},{level:3,title:"Optimized Icon Example",slug:"optimized-icon-example"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:9,id:"posts",pid:"posts",lastUpdated:"7/17/2024, 4:04:50 AM"},{title:"VuePress Tutorial 14 - Dropdown Menu Styling",frontmatter:{title:"VuePress Tutorial 14 - Dropdown Menu Styling",date:"2022-09-15T22:17:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the dropdown menu for your VuePress site, then check out VuePress Tutorial 14 - Dropdown Menu Styling! 🍌🐒",preview:"If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling...",img:"vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post.png",placeholder:"vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-90w.png",alt:"VuePress Tutorial 14 - Dropdown Menu Styling Post Picture",linkImg:"vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png",linkImgAlt:"VuePress Tutorial 14 - Dropdown Menu Styling Image",videoURL:"https://www.youtube-nocookie.com/embed/FMoBn_QVzlk",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-14/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 14 - Dropdown Menu Styling"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 14 - Dropdown Menu Styling Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-14/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the dropdown menu for your VuePress site, then check out VuePress Tutorial 14 - Dropdown Menu Styling! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 14 - Dropdown Menu Styling"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the dropdown menu for your VuePress site, then check out VuePress Tutorial 14 - Dropdown Menu Styling! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-14/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 14 - Dropdown Menu Styling Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-14.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-14.md",key:"v-9e5d98e2",path:"/vuepress-tutorial-14/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Force Dropdown Menu to Hover",slug:"force-dropdown-menu-to-hover"},{level:2,title:"Nav Dropdown",slug:"nav-dropdown"},{level:3,title:"HTML Location",slug:"html-location"},{level:3,title:"Styling",slug:"styling"},{level:2,title:"Dropdown Item",slug:"dropdown-item"},{level:3,title:"HTML Location",slug:"html-location-2"},{level:3,title:"Styling",slug:"styling-2"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:6,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 13 - Navbar Styling",frontmatter:{title:"VuePress Tutorial 13 - Navbar Styling",date:"2022-09-11T17:11:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the navbar for your VuePress site, then check out VuePress Tutorial 13 - Navbar Styling! 🍌🐒",preview:"Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling...",img:"vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post.png",placeholder:"vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-90w.png",alt:"VuePress Tutorial 13 - Navbar Styling Post Picture",linkImg:"vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png",linkImgAlt:"VuePress Tutorial 13 - Navbar Styling Image",videoURL:"https://www.youtube-nocookie.com/embed/q4CfOgerFuw",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-13/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 13 - Navbar Styling"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 13 - Navbar Styling Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-13/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the navbar for your VuePress site, then check out VuePress Tutorial 13 - Navbar Styling! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 13 - Navbar Styling"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the navbar for your VuePress site, then check out VuePress Tutorial 13 - Navbar Styling! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-13/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 13 - Navbar Styling Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-13.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-13.md",key:"v-a433efde",path:"/vuepress-tutorial-13/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Navbar Class",slug:"navbar-class"},{level:3,title:"HTML Location",slug:"html-location"},{level:3,title:"Styling",slug:"styling"},{level:2,title:"Site Name Class",slug:"site-name-class"},{level:3,title:"HTML Location",slug:"html-location-2"},{level:3,title:"Styling",slug:"styling-2"},{level:2,title:"Links Class",slug:"links-class"},{level:3,title:"HTML Location",slug:"html-location-3"},{level:3,title:"Styling",slug:"styling-3"},{level:2,title:"Search Box Class",slug:"search-box-class"},{level:3,title:"HTML Location",slug:"html-location-4"},{level:3,title:"Styling",slug:"styling-4"},{level:2,title:"Nav Links Class",slug:"nav-links-class"},{level:3,title:"HTML Location",slug:"html-location-5"},{level:3,title:"Styling",slug:"styling-5"},{level:2,title:"Nav Item Class",slug:"nav-item-class"},{level:3,title:"HTML Location",slug:"html-location-6"},{level:3,title:"Styling",slug:"styling-6"},{level:2,title:"Dropdown Title Class",slug:"dropdown-title-class"},{level:3,title:"HTML Location",slug:"html-location-7"},{level:3,title:"Styling",slug:"styling-7"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:4,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 15 - Blog Plugin",frontmatter:{title:"VuePress Tutorial 15 - Blog Plugin",date:"2022-09-21T12:26:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and configure the blog plugin for your VuePress site, then check out VuePress Tutorial 15 - Blog Plugin! 🍌🐒",preview:"It's now time to install and begin the process of configuring @vuepress/plugin-blog. We're going to start by describing...",img:"vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post.png",placeholder:"vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-90w.png",alt:"VuePress Tutorial 15 - Blog Plugin Post Picture",linkImg:"vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png",linkImgAlt:"VuePress Tutorial 15 - Blog Plugin Image",videoURL:"https://www.youtube-nocookie.com/embed/tkSN1zC6v2A",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-15/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 15 - Blog Plugin"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 15 - Blog Plugin Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-15/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and configure the blog plugin for your VuePress site, then check out VuePress Tutorial 15 - Blog Plugin! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 15 - Blog Plugin"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and configure the blog plugin for your VuePress site, then check out VuePress Tutorial 15 - Blog Plugin! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-15/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 15 - Blog Plugin Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-15.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-15.md",key:"v-988741e6",path:"/vuepress-tutorial-15/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Features",slug:"features"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Using the Tutorials Repo",slug:"using-the-tutorials-repo"},{level:3,title:"Using the Installation Command",slug:"using-the-installation-command"},{level:3,title:"Updated package.json File",slug:"updated-package-json-file"},{level:3,title:"Automatically Installed Plugins",slug:"automatically-installed-plugins"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Document Classification",slug:"document-classification"},{level:2,title:"Permalinks",slug:"permalinks"},{level:3,title:"Template Variables",slug:"template-variables"},{level:3,title:"Default Configuration",slug:"default-configuration"},{level:3,title:"Global Configuration",slug:"global-configuration"},{level:3,title:"Local Configuration",slug:"local-configuration"},{level:2,title:"Directory Classification",slug:"directory-classification"},{level:3,title:"directories",slug:"directories"},{level:3,title:"id",slug:"id"},{level:3,title:"dirname",slug:"dirname"},{level:3,title:"path",slug:"path"},{level:3,title:"Creating the IndexPost Layout",slug:"creating-the-indexpost-layout"},{level:3,title:"layout",slug:"layout"},{level:3,title:"Creating the Post Layout",slug:"creating-the-post-layout"},{level:3,title:"itemLayout",slug:"itemlayout"},{level:3,title:"itemPermalink",slug:"itempermalink"},{level:3,title:"Summary of URLs and Layouts",slug:"summary-of-urls-and-layouts"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:8,id:"posts",pid:"posts",lastUpdated:"7/17/2024, 4:04:50 AM"},{title:"VuePress Tutorial 16 - Pagination",frontmatter:{title:"VuePress Tutorial 16 - Pagination",date:"2022-09-30T20:07:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to learn about the pagination feature provided by the blog plugin, then check out VuePress Tutorial 16 - Pagination! 🍌🐒",preview:"Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blog...",img:"vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post.png",placeholder:"vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-90w.png",alt:"VuePress Tutorial 16 - Pagination Post Picture",linkImg:"vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png",linkImgAlt:"VuePress Tutorial 16 - Pagination Image",videoURL:"https://www.youtube-nocookie.com/embed/n07CETnl4I0",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-16/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 16 - Pagination"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 16 - Pagination Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-16/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn about the pagination feature provided by the blog plugin, then check out VuePress Tutorial 16 - Pagination! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 16 - Pagination"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn about the pagination feature provided by the blog plugin, then check out VuePress Tutorial 16 - Pagination! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-16/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 16 - Pagination Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-16.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-16.md",key:"v-92b0eaea",path:"/vuepress-tutorial-16/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Pagination Configuration",slug:"pagination-configuration"},{level:3,title:"pagination",slug:"pagination"},{level:3,title:"lengthPerPage",slug:"lengthperpage"},{level:3,title:"layout",slug:"layout"},{level:3,title:"prevText",slug:"prevtext"},{level:3,title:"nextText",slug:"nexttext"},{level:2,title:"Client API",slug:"client-api"},{level:3,title:"$pagination",slug:"pagination-2"},{level:3,title:"pages",slug:"pages"},{level:3,title:"length",slug:"length"},{level:3,title:"hasPrev",slug:"hasprev"},{level:3,title:"prevLink",slug:"prevlink"},{level:3,title:"hasNext",slug:"hasnext"},{level:3,title:"nextLink",slug:"nextlink"},{level:3,title:"getSpecificPageLink()",slug:"getspecificpagelink"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:5,id:"posts",pid:"posts",lastUpdated:"7/10/2024, 12:50:35 AM"},{title:"VuePress Tutorial 17 - IndexPost Layout",frontmatter:{title:"VuePress Tutorial 17 - IndexPost Layout",date:"2022-10-17T14:12:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to start developing the IndexPost layout component, then check out VuePress Tutorial 17 - IndexPost Layout! 🍌🐒",preview:"We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped...",img:"vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post.png",placeholder:"vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-90w.png",alt:"VuePress Tutorial 17 - IndexPost Layout Post Picture",linkImg:"vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png",linkImgAlt:"VuePress Tutorial 17 - IndexPost Layout Image",videoURL:"https://www.youtube-nocookie.com/embed/mIx_utuexDc",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-17/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 17 - IndexPost Layout"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 17 - IndexPost Layout Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-17/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to start developing the IndexPost layout component, then check out VuePress Tutorial 17 - IndexPost Layout! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 17 - IndexPost Layout"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to start developing the IndexPost layout component, then check out VuePress Tutorial 17 - IndexPost Layout! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-17/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 17 - IndexPost Layout Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-17.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-17.md",key:"v-8cda93ee",path:"/vuepress-tutorial-17/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Naming the Component",slug:"naming-the-component"},{level:2,title:"Looping Over Pagination Pages",slug:"looping-over-pagination-pages"},{level:3,title:"Using the v-for Directive",slug:"using-the-v-for-directive"},{level:3,title:"Using the key Attribute",slug:"using-the-key-attribute"},{level:3,title:"Determining a Tag",slug:"determining-a-tag"},{level:3,title:"Using a Root Element",slug:"using-a-root-element"},{level:3,title:"Adding the Loop",slug:"adding-the-loop"},{level:3,title:"Entry Page HTML",slug:"entry-page-html"},{level:3,title:"Page 2 HTML",slug:"page-2-html"},{level:2,title:"Post Titles",slug:"post-titles"},{level:3,title:"Adding Titles to Post Files",slug:"adding-titles-to-post-files"},{level:3,title:"Adding Titles to $page Variables",slug:"adding-titles-to-page-variables"},{level:3,title:"Displaying Post Titles",slug:"displaying-post-titles"},{level:3,title:"Entry Page HTML",slug:"entry-page-html-2"},{level:3,title:"Page 2 HTML",slug:"page-2-html-2"},{level:2,title:"Post Previews",slug:"post-previews"},{level:3,title:"Adding Previews to Post Files",slug:"adding-previews-to-post-files"},{level:3,title:"Adding Previews to $page Variables",slug:"adding-previews-to-page-variables"},{level:3,title:"Displaying Post Previews",slug:"displaying-post-previews"},{level:3,title:"Entry Page HTML",slug:"entry-page-html-3"},{level:3,title:"Page 2 HTML",slug:"page-2-html-3"},{level:2,title:"IndexPost Styling",slug:"indexpost-styling"},{level:3,title:"Adding theme-default-content",slug:"adding-theme-default-content"},{level:3,title:"theme-default-content Styles",slug:"theme-default-content-styles"},{level:2,title:"IndexPost Heading",slug:"indexpost-heading"},{level:3,title:"Displaying the Heading",slug:"displaying-the-heading"},{level:3,title:"Entry Page HTML",slug:"entry-page-html-4"},{level:3,title:"Page 2 HTML",slug:"page-2-html-4"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:3,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 18 - IndexPost Images",frontmatter:{title:"VuePress Tutorial 18 - IndexPost Images",date:"2022-11-09T22:15:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add images to the IndexPost layout component, then check out VuePress Tutorial 18 - IndexPost Images! 🍌🐒",preview:"In this tutorial we're going to continue the development of the IndexPost layout component by using the globally...",img:"vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post.png",placeholder:"vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-90w.png",alt:"VuePress Tutorial 18 - IndexPost Images Post Picture",linkImg:"vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png",linkImgAlt:"VuePress Tutorial 18 - IndexPost Images Image",videoURL:"https://www.youtube-nocookie.com/embed/bJt3yUymxc4",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-18/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 18 - IndexPost Images"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 18 - IndexPost Images Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-18/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add images to the IndexPost layout component, then check out VuePress Tutorial 18 - IndexPost Images! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 18 - IndexPost Images"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add images to the IndexPost layout component, then check out VuePress Tutorial 18 - IndexPost Images! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-18/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 18 - IndexPost Images Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-18.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-18.md",key:"v-87043cf2",path:"/vuepress-tutorial-18/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Adding Post Images",slug:"adding-post-images"},{level:3,title:"Adding an Examples Directory",slug:"adding-an-examples-directory"},{level:3,title:"Example Post 1",slug:"example-post-1"},{level:3,title:"Example Post 2",slug:"example-post-2"},{level:3,title:"Example Post 3",slug:"example-post-3"},{level:2,title:"Post Images",slug:"post-images"},{level:3,title:"Adding Img and Alt to Post Files",slug:"adding-img-and-alt-to-post-files"},{level:3,title:"Adding Img and Alt to $page Variables",slug:"adding-img-and-alt-to-page-variables"},{level:3,title:"Displaying Images",slug:"displaying-images"},{level:3,title:"Entry Page HTML",slug:"entry-page-html"},{level:3,title:"Page 2 HTML",slug:"page-2-html"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:6,id:"posts",pid:"posts",lastUpdated:"4/19/2023, 5:45:03 PM"},{title:"VuePress Tutorial 19 - Pagination Links",frontmatter:{title:"VuePress Tutorial 19 - Pagination Links",date:"2022-11-19T20:47:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add the pagination links to the IndexPost layout component, then check out VuePress Tutorial 19 - Pagination Links! 🍌🐒",preview:"Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually...",img:"vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post.png",placeholder:"vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-90w.png",alt:"VuePress Tutorial 19 - Pagination Links Post Picture",linkImg:"vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png",linkImgAlt:"VuePress Tutorial 19 - Pagination Links Image",videoURL:"https://www.youtube-nocookie.com/embed/lnYvXvmFpZo",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-19/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 19 - Pagination Links"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 19 - Pagination Links Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-19/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add the pagination links to the IndexPost layout component, then check out VuePress Tutorial 19 - Pagination Links! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 19 - Pagination Links"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add the pagination links to the IndexPost layout component, then check out VuePress Tutorial 19 - Pagination Links! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-19/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 19 - Pagination Links Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-19.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-19.md",key:"v-812de5f6",path:"/vuepress-tutorial-19/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Adding More Example Pages",slug:"adding-more-example-pages"},{level:3,title:"Adding Titles and Frontmatter",slug:"adding-titles-and-frontmatter"},{level:3,title:"Adding Images",slug:"adding-images"},{level:3,title:"Viewing the Pagination Pages",slug:"viewing-the-pagination-pages"},{level:2,title:"Displaying Pagination Links",slug:"displaying-pagination-links"},{level:3,title:"Entry Page HTML",slug:"entry-page-html"},{level:3,title:"Page 2 HTML",slug:"page-2-html"},{level:3,title:"Page 3 HTML",slug:"page-3-html"},{level:3,title:"Next Steps",slug:"next-steps"}],numberOfCommits:4,id:"posts",pid:"posts",lastUpdated:"4/19/2023, 5:45:03 PM"},{title:"VuePress Tutorial 2 - Why Use VuePress?",frontmatter:{title:"VuePress Tutorial 2 - Why Use VuePress?",date:"2021-11-24T20:50:30.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Wondering if you should use VuePress, then check out VuePress Tutorial 2 - Why Use VuePress? 🍌🐒",preview:"VuePress is a minimalistic static site generator (SSG) with a Vue-powered theming system and Plugin API. Originally...",img:"vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post.png",placeholder:"vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-90w.png",alt:"VuePress Tutorial 2 - Why Use VuePress? Post Picture",linkImg:"vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png",linkImgAlt:"VuePress Tutorial 2 - Why Use VuePress? Image",videoURL:"https://www.youtube-nocookie.com/embed/6r1OQznmLpA",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-2/",permalink:"/vuepress-tutorial-2/",redirectFrom:"/posts/2021/11/24/vuepress-tutorial-2/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 2 - Why Use VuePress?"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 2 - Why Use VuePress? Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-2/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Wondering if you should use VuePress, then check out VuePress Tutorial 2 - Why Use VuePress? 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 2 - Why Use VuePress?"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Wondering if you should use VuePress, then check out VuePress Tutorial 2 - Why Use VuePress? 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-2/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 2 - Why Use VuePress? Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-2.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-2.md",key:"v-12481376",path:"/vuepress-tutorial-2/",headers:[{level:2,title:"What is VuePress?",slug:"what-is-vuepress"},{level:2,title:"Different Types of Websites",slug:"different-types-of-websites"},{level:3,title:"Static Website",slug:"static-website"},{level:3,title:"Single-Page Application (SPA)",slug:"single-page-application-spa"},{level:3,title:"Server-Side Rendered (SSR)",slug:"server-side-rendered-ssr"},{level:3,title:"Static Site Generator (SSG)",slug:"static-site-generator-ssg"},{level:2,title:"Use Cases for SSGs",slug:"use-cases-for-ssgs"},{level:2,title:"How it Works in VuePress",slug:"how-it-works-in-vuepress"},{level:2,title:"Theming",slug:"theming"},{level:2,title:"Plugin API",slug:"plugin-api"},{level:2,title:"Features",slug:"features"},{level:2,title:"Comparisons",slug:"comparisons"}],numberOfCommits:10,id:"posts",pid:"posts",lastUpdated:"4/19/2023, 5:45:03 PM"},{title:"VuePress Tutorial 20 - Pagination Links Styling",frontmatter:{title:"VuePress Tutorial 20 - Pagination Links Styling",date:"2022-11-23T19:23:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to style the pagination links, then check out VuePress Tutorial 20 - Pagination Links Styling! 🍌🐒",preview:"We're going to begin the process of styling the Prev and Next pagination links that we added to each of the...",img:"vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post.png",placeholder:"vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-90w.png",alt:"VuePress Tutorial 20 - Pagination Links Styling Post Picture",linkImg:"vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png",linkImgAlt:"VuePress Tutorial 20 - Pagination Links Styling Image",videoURL:"https://www.youtube-nocookie.com/embed/Iui9-GBirrU",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-20/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 20 - Pagination Links Styling"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 20 - Pagination Links Styling Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-20/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to style the pagination links, then check out VuePress Tutorial 20 - Pagination Links Styling! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 20 - Pagination Links Styling"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to learn how to style the pagination links, then check out VuePress Tutorial 20 - Pagination Links Styling! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-20/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 20 - Pagination Links Styling Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-20.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-20.md",key:"v-00c26c4e",path:"/vuepress-tutorial-20/",headers:[{level:2,title:"What We're Doing",slug:"what-we-re-doing"},{level:2,title:"Pagination Class",slug:"pagination-class"},{level:2,title:"Left and Right Arrow Icons",slug:"left-and-right-arrow-icons"},{level:3,title:"Downloading the Icons",slug:"downloading-the-icons"},{level:3,title:"Updating the Icons Directory",slug:"updating-the-icons-directory"},{level:3,title:"Displaying the Icons",slug:"displaying-the-icons"},{level:3,title:"Styling the Icons",slug:"styling-the-icons"},{level:2,title:"Optimizing the Icons",slug:"optimizing-the-icons"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:5,id:"posts",pid:"posts",lastUpdated:"7/3/2024, 3:26:36 PM"},{title:"VuePress Tutorial 3 - Set Up and Installation",frontmatter:{title:"VuePress Tutorial 3 - Set Up and Installation",date:"2022-01-16T05:40:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Ready to set up and install VuePress, then check out VuePress Tutorial 3 - Set Up and Installation! 🍌🐒",preview:"First we'll be going over how to create a repository on GitHub. If you plan on using these tutorials as guides and want to...",img:"vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post.png",placeholder:"vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-90w.png",alt:"VuePress Tutorial 3 - Set Up and Installation Post Picture",linkImg:"vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png",linkImgAlt:"VuePress Tutorial 3 - Set Up and Installation Image",videoURL:"https://www.youtube-nocookie.com/embed/DRzBWUZjIPY ",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-3/",permalink:"/vuepress-tutorial-3/",redirectFrom:"/posts/2022/01/16/vuepress-tutorial-3/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 3 - Set Up and Installation"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 3 - Set Up and Installation Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-3/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to set up and install VuePress, then check out VuePress Tutorial 3 - Set Up and Installation! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 3 - Set Up and Installation"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Ready to set up and install VuePress, then check out VuePress Tutorial 3 - Set Up and Installation! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-3/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 3 - Set Up and Installation Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-3.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-3.md",key:"v-21e52425",path:"/vuepress-tutorial-3/",headers:[{level:2,title:"Setting Up and Using GitHub",slug:"setting-up-and-using-github"},{level:3,title:"Creating a Repository",slug:"creating-a-repository"},{level:3,title:"Cloning a Repository",slug:"cloning-a-repository"},{level:3,title:"Downloading Tutorials from GitHub",slug:"downloading-tutorials-from-github"},{level:3,title:"Cloning and Using Tutorials from GitHub",slug:"cloning-and-using-tutorials-from-github"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Checking Node Version",slug:"checking-node-version"},{level:3,title:"Checking Yarn Version",slug:"checking-yarn-version"},{level:3,title:"Installing Tutorial Packages",slug:"installing-tutorial-packages"},{level:2,title:"Installing VuePress",slug:"installing-vuepress"},{level:3,title:"Quick Start",slug:"quick-start"},{level:3,title:"Manual Installation",slug:"manual-installation"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:10,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"VuePress Tutorial 6 - Homepage Layout",frontmatter:{title:"VuePress Tutorial 6 - Homepage Layout",date:"2022-02-03T05:06:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the default theme homepage layout for VuePress, then check out VuePress Tutorial 6 - Homepage Layout! 🍌🐒",preview:"In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default theme...",img:"vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post.png",placeholder:"vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-90w.png",alt:"VuePress Tutorial 6 - Homepage Layout Post Picture",linkImg:"vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png",linkImgAlt:"VuePress Tutorial 6 - Homepage Layout Image",videoURL:"https://www.youtube-nocookie.com/embed/u7hN8zrvjlY",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-6/",permalink:"/vuepress-tutorial-6/",redirectFrom:"/posts/2022/02/03/vuepress-tutorial-6/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 6 - Homepage Layout"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 6 - Homepage Layout Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-6/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the default theme homepage layout for VuePress, then check out VuePress Tutorial 6 - Homepage Layout! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 6 - Homepage Layout"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the default theme homepage layout for VuePress, then check out VuePress Tutorial 6 - Homepage Layout! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-6/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 6 - Homepage Layout Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-6.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-6.md",key:"v-b9fea476",path:"/vuepress-tutorial-6/",headers:[{level:2,title:"What is a VuePress Theme?",slug:"what-is-a-vuepress-theme"},{level:2,title:"Homepage Layout",slug:"homepage-layout"},{level:3,title:"Using the Homepage Layout",slug:"using-the-homepage-layout"},{level:3,title:"YAML Frontmatter Blocks",slug:"yaml-frontmatter-blocks"},{level:3,title:"Alternative Frontmatter Formats",slug:"alternative-frontmatter-formats"},{level:3,title:"Homepage Layout Changes",slug:"homepage-layout-changes"},{level:3,title:"Adding an Image",slug:"adding-an-image"},{level:3,title:"Adding a Title",slug:"adding-a-title"},{level:3,title:"Adding a Tagline",slug:"adding-a-tagline"},{level:3,title:"Adding an Action Button",slug:"adding-an-action-button"},{level:3,title:"Adding Features",slug:"adding-features"},{level:3,title:"Adding a Footer",slug:"adding-a-footer"},{level:3,title:"Final Homepage Layout",slug:"final-homepage-layout"},{level:3,title:"Homepage Layout Notes",slug:"homepage-layout-notes"},{level:3,title:"Next Steps",slug:"next-steps"}],numberOfCommits:13,id:"posts",pid:"posts",lastUpdated:"7/10/2024, 12:50:35 AM"},{title:"VuePress Tutorial 4 - Directory Structure",frontmatter:{title:"VuePress Tutorial 4 - Directory Structure",date:"2022-01-22T16:55:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to structure your VuePress site, then check out VuePress Tutorial 4 - Directory Structure! 🍌🐒",preview:"We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the...",img:"vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post.png",placeholder:"vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-90w.png",alt:"VuePress Tutorial 4 - Directory Structure Post Picture",linkImg:"vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png",linkImgAlt:"VuePress Tutorial 4 - Directory Structure Image",videoURL:"https://www.youtube-nocookie.com/embed/l85a0TgxBgo",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-4/",permalink:"/vuepress-tutorial-4/",redirectFrom:"/posts/2022/01/22/vuepress-tutorial-4/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 4 - Directory Structure"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 4 - Directory Structure Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-4/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to structure your VuePress site, then check out VuePress Tutorial 4 - Directory Structure! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 4 - Directory Structure"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to structure your VuePress site, then check out VuePress Tutorial 4 - Directory Structure! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-4/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 4 - Directory Structure Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-4.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-4.md",key:"v-4cee5205",path:"/vuepress-tutorial-4/",headers:[{level:2,title:"Current Directory Structure",slug:"current-directory-structure"},{level:2,title:"Contents of the package.json File",slug:"contents-of-the-package-json-file"},{level:2,title:"Recommended Directory Structure",slug:"recommended-directory-structure"},{level:2,title:"Recommended Directory Structure for Themes",slug:"recommended-directory-structure-for-themes"},{level:2,title:"Default Page Routing",slug:"default-page-routing"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:12,id:"posts",pid:"posts",lastUpdated:"7/17/2024, 4:04:50 AM"},{title:"VuePress Tutorial 7 - Navbar Logo and Links",frontmatter:{title:"VuePress Tutorial 7 - Navbar Logo and Links",date:"2022-03-12T17:46:45.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to configure the navbar for VuePress, then check out VuePress Tutorial 7 - Navbar Logo and Links! 🍌🐒",preview:"In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default theme...",img:"vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post.png",placeholder:"vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-90w.png",alt:"VuePress Tutorial 7 - Navbar Logo and Links Post Picture",linkImg:"vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png",linkImgAlt:"VuePress Tutorial 7 - Navbar Logo and Links Image",videoURL:"https://www.youtube-nocookie.com/embed/-lhoODib66o",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-7/",permalink:"/vuepress-tutorial-7/",redirectFrom:"/posts/2022/03/12/vuepress-tutorial-7/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 7 - Navbar Logo and Links"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 7 - Navbar Logo and Links Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-7/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to configure the navbar for VuePress, then check out VuePress Tutorial 7 - Navbar Logo and Links! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 7 - Navbar Logo and Links"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to configure the navbar for VuePress, then check out VuePress Tutorial 7 - Navbar Logo and Links! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-7/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 7 - Navbar Logo and Links Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-7.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-7.md",key:"v-63ec48b6",path:"/vuepress-tutorial-7/",headers:[{level:2,title:"What is a Navbar?",slug:"what-is-a-navbar"},{level:2,title:"Navbar Logo and Site Title",slug:"navbar-logo-and-site-title"},{level:2,title:"Navbar Links",slug:"navbar-links"},{level:3,title:"Internal Links",slug:"internal-links"},{level:3,title:"External Links",slug:"external-links"},{level:3,title:"Dropdown Menus",slug:"dropdown-menus"},{level:3,title:"Dropdown Menu Subgroups",slug:"dropdown-menu-subgroups"},{level:2,title:"Disabling the Navbar",slug:"disabling-the-navbar"},{level:3,title:"Globally",slug:"globally"},{level:3,title:"Locally",slug:"locally"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:11,id:"posts",pid:"posts",lastUpdated:"4/19/2023, 6:07:16 PM"},{title:"VuePress Tutorial 8 - Custom Footer",frontmatter:{title:"VuePress Tutorial 8 - Custom Footer",date:"2022-04-06T16:58:30.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to create a custom footer for your VuePress site, then check out VuePress Tutorial 8 - Custom Footer! 🍌🐒",preview:"Now it's time to start building the custom footer component for the site. Before creating the footer component, we're...",img:"vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post.png",placeholder:"vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-90w.png",alt:"VuePress Tutorial 8 - Custom Footer Post Picture",linkImg:"vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png",linkImgAlt:"VuePress Tutorial 8 - Custom Footer Image",videoURL:"https://www.youtube-nocookie.com/embed/atFFL2mGFks",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-8/",permalink:"/vuepress-tutorial-8/",redirectFrom:"/posts/2022/04/06/vuepress-tutorial-8/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 8 - Custom Footer"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 8 - Custom Footer Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-8/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to create a custom footer for your VuePress site, then check out VuePress Tutorial 8 - Custom Footer! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 8 - Custom Footer"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to create a custom footer for your VuePress site, then check out VuePress Tutorial 8 - Custom Footer! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-8/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 8 - Custom Footer Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-8.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-8.md",key:"v-0dd9ecf6",path:"/vuepress-tutorial-8/",headers:[{level:2,title:"What is a Footer?",slug:"what-is-a-footer"},{level:2,title:"Homepage Layout Footer",slug:"homepage-layout-footer"},{level:2,title:"Rich-text Footer",slug:"rich-text-footer"},{level:2,title:"VuePress Blog Theme Footer",slug:"vuepress-blog-theme-footer"},{level:2,title:"Custom Footer",slug:"custom-footer"},{level:3,title:"Writing a Theme",slug:"writing-a-theme"},{level:3,title:"Basics of Plugins",slug:"basics-of-plugins"},{level:3,title:"VuePress Plugin - SVG Icons",slug:"vuepress-plugin-svg-icons"},{level:3,title:"Footer Component",slug:"footer-component"},{level:3,title:"Theme Inheritance",slug:"theme-inheritance"},{level:3,title:"Using the Global Layout",slug:"using-the-global-layout"},{level:3,title:"Next Steps",slug:"next-steps"}],numberOfCommits:14,id:"posts",pid:"posts",lastUpdated:"7/17/2024, 4:04:50 AM"},{title:"VuePress Tutorial 5 - Configuration Basics",frontmatter:{title:"VuePress Tutorial 5 - Configuration Basics",date:"2022-01-26T17:54:00.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the configuration basics for VuePress, then check out VuePress Tutorial 5 - Configuration Basics! 🍌🐒",preview:'Currently, the site consists of a homepage with a title saying "Hello VuePress", and a search box which builds an index from...',img:"vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post.png",placeholder:"vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-90w.png",alt:"VuePress Tutorial 5 - Configuration Basics Post Picture",linkImg:"vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png",linkImgAlt:"VuePress Tutorial 5 - Configuration Basics Image",videoURL:"https://www.youtube-nocookie.com/embed/XRzg--ppLcY",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-5/",permalink:"/vuepress-tutorial-5/",redirectFrom:"/posts/2022/01/26/vuepress-tutorial-5/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 5 - Configuration Basics"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 5 - Configuration Basics Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-5/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the configuration basics for VuePress, then check out VuePress Tutorial 5 - Configuration Basics! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 5 - Configuration Basics"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn about the configuration basics for VuePress, then check out VuePress Tutorial 5 - Configuration Basics! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-5/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 5 - Configuration Basics Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-5.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-5.md",key:"v-77f77fe5",path:"/vuepress-tutorial-5/",headers:[{level:2,title:"Adding a Config File",slug:"adding-a-config-file"},{level:2,title:"Config File Properties",slug:"config-file-properties"},{level:3,title:"Title",slug:"title"},{level:3,title:"Description",slug:"description"},{level:3,title:"Head",slug:"head"},{level:2,title:"Updated Config File",slug:"updated-config-file"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:12,id:"posts",pid:"posts",lastUpdated:"7/10/2024, 12:50:35 AM"},{title:"VuePress Tutorial 9 - Styling the Homepage",frontmatter:{title:"VuePress Tutorial 9 - Styling the Homepage",date:"2022-08-31T01:45:30.000Z",topic:"VuePress",description:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the homepage for your VuePress site, then check out VuePress Tutorial 9 - Styling the Homepage! 🍌🐒",preview:"The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files...",img:"vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post.png",placeholder:"vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-90w.png",alt:"VuePress Tutorial 9 - Styling the Homepage Post Picture",linkImg:"vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png",linkImgAlt:"VuePress Tutorial 9 - Styling the Homepage Image",videoURL:"https://www.youtube-nocookie.com/embed/lerpWz1uKtw",canonicalUrl:"https://codemonkeys.tech/vuepress-tutorial-9/",author:"J the Code Monkey",sidebar:"auto",meta:[{property:"og:title",content:"VuePress Tutorial 9 - Styling the Homepage"},{property:"og:type",content:"website"},{property:"og:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"628"},{property:"og:image:alt",content:"VuePress Tutorial 9 - Styling the Homepage Image"},{property:"og:url",content:"https://codemonkeys.tech/vuepress-tutorial-9/"},{property:"og:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the homepage for your VuePress site, then check out VuePress Tutorial 9 - Styling the Homepage! 🍌🐒"},{property:"og:site_name",content:"Code Monkeys"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:title",content:"VuePress Tutorial 9 - Styling the Homepage"},{name:"twitter:description",content:"Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the homepage for your VuePress site, then check out VuePress Tutorial 9 - Styling the Homepage! 🍌🐒"},{name:"twitter:url",content:"https://codemonkeys.tech/vuepress-tutorial-9/"},{name:"twitter:site",content:"@codemonkeystech"},{name:"twitter:image",content:"https://codemonkeys.tech/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png"},{name:"twitter:image:alt",content:"VuePress Tutorial 9 - Styling the Homepage Image"},{name:"twitter:creator",content:"@codemonkeystech"},{name:"author",content:"J the Code Monkey"}],layout:"Post",permalink:"/:slug"},regularPath:"/_posts/vuepress-tutorials/vuepress-tutorial-9.html",relativePath:"_posts/vuepress-tutorials/vuepress-tutorial-9.md",key:"v-241c3765",path:"/vuepress-tutorial-9/",headers:[{level:2,title:"Styling Files",slug:"styling-files"},{level:3,title:"palette.styl",slug:"palette-styl"},{level:3,title:"Creating the palette.styl File",slug:"creating-the-palette-styl-file"},{level:3,title:"index.styl",slug:"index-styl"},{level:3,title:"Creating the index.styl File",slug:"creating-the-index-styl-file"},{level:2,title:"Overriding",slug:"overriding"},{level:3,title:"palette.styl",slug:"palette-styl-2"},{level:3,title:"index.styl",slug:"index-styl-2"},{level:2,title:"Homepage Styles",slug:"homepage-styles"},{level:3,title:"palette.styl",slug:"palette-styl-3"},{level:3,title:"index.styl",slug:"index-styl-3"},{level:2,title:"Next Steps",slug:"next-steps"}],numberOfCommits:7,id:"posts",pid:"posts",lastUpdated:"4/18/2023, 9:45:45 PM"},{title:"Contact",frontmatter:{title:"Contact",description:"Want to contact your fellow Code Monkeys? Then check out these contact methods which include free and open source software with an emphasis on private and secure communication! 📞🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/contact/",meta:[]},regularPath:"/contact/",relativePath:"contact/index.md",key:"v-74f372c4",path:"/contact/",headers:[{level:2,title:"Socials 🐵",slug:"socials-🐵"},{level:2,title:"Primary PGP Key 🔐",slug:"primary-pgp-key-🔐"}],lastUpdated:"7/15/2024, 11:52:01 PM"},{title:"Donate",frontmatter:{title:"Donate",description:"If you've found our content helpful and would like to support us, then you can donate here! All donations will go towards maintaining an adequate 🍌 supply!",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/donate/",meta:[]},regularPath:"/donate/",relativePath:"donate/index.md",key:"v-7bfcfe46",path:"/donate/",headers:[{level:2,title:"Crypto 🔗",slug:"crypto-🔗"},{level:2,title:"Fiat 💵",slug:"fiat-💵"}],lastUpdated:"7/10/2024, 12:50:35 AM"},{title:"Home",frontmatter:{home:!0,heroImage:"/images/code-monkeys-logos/code-monkeys-full-logo-260w.png",heroAlt:"Code Monkeys Full Logo",tagline:"Let's get down to Monkey Business",actionText:"Learn to Code like a Monkey →",actionLink:"/topics/",features:[{title:"Learn"},{title:"Code"},{title:"Share"}],canonicalUrl:"https://codemonkeys.tech/",meta:[]},regularPath:"/",relativePath:"index.md",key:"v-c3c5b284",path:"/",lastUpdated:"4/19/2023, 7:40:26 PM"},{title:"Free and Open Source Software (FOSS)",frontmatter:{title:"Free and Open Source Software (FOSS)",description:"Ready to learn about free and open source software (FOSS)? These resources will explain what FOSS is, why it's important, and provide you with some useful applications! 💻🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/foss/",meta:[]},regularPath:"/resources/foss/",relativePath:"resources/foss/index.md",key:"v-0830e2fe",path:"/resources/foss/",headers:[{level:2,title:"Education",slug:"education"}],lastUpdated:"4/25/2023, 2:58:44 AM"},{title:"Resources",frontmatter:{title:"Resources",description:"Ready to take your Code Monkey skills to the next level? Then check out these useful resources which include free and open source software recommendations! 💻🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/",meta:[]},regularPath:"/resources/",relativePath:"resources/index.md",key:"v-66307a7e",path:"/resources/",headers:[{level:2,title:"Bitcoin",slug:"bitcoin"},{level:2,title:"Free and Open Source Software (FOSS)",slug:"free-and-open-source-software-foss"},{level:2,title:"Notes and Other Stuff Transmitted by Relays (Nostr)",slug:"notes-and-other-stuff-transmitted-by-relays-nostr"},{level:2,title:"Privacy",slug:"privacy"},{level:2,title:"Web Development",slug:"web-development"}],lastUpdated:"4/25/2023, 2:58:44 AM"},{title:"Bitcoin",frontmatter:{title:"Bitcoin",description:"Ready to go down the Bitcoin rabbit hole? These resources include free and open source software recommendations that allow you to interact with Bitcoin in a sovereign and private way! ₿🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/bitcoin/",meta:[]},regularPath:"/resources/bitcoin/",relativePath:"resources/bitcoin/index.md",key:"v-593469de",path:"/resources/bitcoin/",headers:[{level:2,title:"Blockchain Explorers",slug:"blockchain-explorers"},{level:2,title:"Books",slug:"books"},{level:2,title:"Collaborative Custody",slug:"collaborative-custody"},{level:2,title:"Dashboard",slug:"dashboard"},{level:2,title:"Education",slug:"education"},{level:2,title:"Entertainment",slug:"entertainment"},{level:2,title:"Hardware Wallets",slug:"hardware-wallets"},{level:2,title:"Jobs",slug:"jobs"},{level:2,title:"Media",slug:"media"},{level:2,title:"Meetups",slug:"meetups"},{level:2,title:"Nodes",slug:"nodes"},{level:2,title:"Payment Processors",slug:"payment-processors"},{level:2,title:"Peer-to-Peer (P2P) Exchanges",slug:"peer-to-peer-p2p-exchanges"},{level:3,title:"Reviews",slug:"reviews"},{level:3,title:"Exchanges",slug:"exchanges"},{level:2,title:"Podcasts",slug:"podcasts"},{level:2,title:"Products",slug:"products"},{level:2,title:"Website",slug:"website"},{level:2,title:"Seed Storage",slug:"seed-storage"},{level:3,title:"Reviews",slug:"reviews-2"},{level:3,title:"Storage Devices",slug:"storage-devices"},{level:2,title:"Software Wallets",slug:"software-wallets"},{level:3,title:"Lightning and On-Chain",slug:"lightning-and-on-chain"},{level:3,title:"Lightning Only",slug:"lightning-only"},{level:3,title:"On-Chain Only",slug:"on-chain-only"},{level:2,title:"Statistics",slug:"statistics"},{level:2,title:"Support",slug:"support"}],lastUpdated:"5/9/2024, 7:25:02 PM"},{title:"Notes and Other Stuff Transmitted by Relays (Nostr)",frontmatter:{title:"Notes and Other Stuff Transmitted by Relays (Nostr)",description:"Ready to learn about Notes and Other Stuff Transmitted by Relays (Nostr)? These resources will explain what Nostr is, why it's important, and provide you with some useful applications! 🗒️🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/nostr/",meta:[]},regularPath:"/resources/nostr/",relativePath:"resources/nostr/index.md",key:"v-45cc3a44",path:"/resources/nostr/",headers:[{level:2,title:"Clients",slug:"clients"},{level:2,title:"Documentation",slug:"documentation"},{level:2,title:"Protocol",slug:"protocol"}],lastUpdated:"4/25/2023, 2:58:44 AM"},{title:"Privacy",frontmatter:{title:"Privacy",description:"Ready to learn how to counter global mass surveillance? These resources will explain what privacy is, why it's important, and provide you with some useful tools! 🔒🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/nostr/",meta:[]},regularPath:"/resources/privacy/",relativePath:"resources/privacy/index.md",key:"v-2e6657c4",path:"/resources/privacy/",headers:[{level:2,title:"Android Web Browsers",slug:"android-web-browsers"},{level:2,title:"App Stores",slug:"app-stores"},{level:2,title:"Card Aliasing",slug:"card-aliasing"},{level:2,title:"Cloud Storage",slug:"cloud-storage"},{level:2,title:"Desktop Web Browsers",slug:"desktop-web-browsers"},{level:2,title:"Electronic SIM (eSIM)",slug:"electronic-sim-esim"},{level:2,title:"Email",slug:"email"},{level:2,title:"Email Aliasing",slug:"email-aliasing"},{level:2,title:"Encryption",slug:"encryption"},{level:2,title:"File Sharing",slug:"file-sharing"},{level:2,title:"Guides",slug:"guides"},{level:2,title:"iOS Web Browsers",slug:"ios-web-browsers"},{level:2,title:"Messengers",slug:"messengers"},{level:2,title:"Mobile Phone",slug:"mobile-phone"},{level:2,title:"Notes",slug:"notes"},{level:2,title:"Operating Systems",slug:"operating-systems"},{level:2,title:"Operating Systems (Live)",slug:"operating-systems-live"},{level:2,title:"Password Managers",slug:"password-managers"},{level:2,title:"Phone Number Aliasing",slug:"phone-number-aliasing"},{level:2,title:"Prebuilt Computers",slug:"prebuilt-computers"},{level:2,title:"Search Engines",slug:"search-engines"},{level:2,title:"Two-Factor Authentication (2FA)",slug:"two-factor-authentication-2fa"},{level:3,title:"Software",slug:"software"},{level:3,title:"Hardware",slug:"hardware"},{level:2,title:"VPNs",slug:"vpns"}],lastUpdated:"5/4/2023, 10:20:58 PM"},{title:"Web Development",frontmatter:{title:"Web Development",description:"Ready to learn about web development? These resources will explain what web development is, why it's important, and provide you with some useful tools for learning! 🕸️🐒",sidebar:"auto",canonicalUrl:"https://codemonkeys.tech/resources/webdev/",meta:[]},regularPath:"/resources/webdev/",relativePath:"resources/webdev/index.md",key:"v-0a007c4e",path:"/resources/webdev/",headers:[{level:2,title:"Tutorials",slug:"tutorials"}],lastUpdated:"4/25/2023, 2:58:44 AM"},{frontmatter:{layout:"IndexPost",title:"All Posts",description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/",meta:[]},regularPath:"/posts/",key:"v-1f814451",path:"/posts/"},{frontmatter:{layout:"Topics",title:"Topics",description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/",topicDetails:[{title:"LeetCode",summary:"You'll find detailed LeetCode solutions here including code, notes, links, diagrams, animations, & anything else that may be helpful!",logo:"leetcode/topic/leetcode-topic-logo.png",placeholder:"leetcode/topic/leetcode-topic-logo-90w.png",alt:"LeetCode Topic Logo"},{title:"Node.js",summary:"Learn about Node.js concepts like installation, versioning, and more!",logo:"nodejs/topic/nodejs-topic-logo.png",placeholder:"nodejs/topic/nodejs-topic-logo-90w.png",alt:"Node.js Topic Logo"},{title:"Raspberry Pi",summary:"Learn about Raspberry Pi concepts like installing an OS, configuring settings, and more!",logo:"raspberry-pi/topic/raspberry-pi-topic-logo.png",placeholder:"raspberry-pi/topic/raspberry-pi-topic-logo-90w.png",alt:"Raspberry Pi Topic Logo"},{title:"VuePress",summary:"Learn VuePress concepts & how to develop the Code Monkeys Blog by following along with these tutorials!",logo:"vuepress-tutorials/topic/vuepress-topic-logo.png",placeholder:"vuepress-tutorials/topic/vuepress-topic-logo-90w.png",alt:"VuePress Topic Logo"}],meta:[]},regularPath:"/topics/",key:"v-b7de8ed4",path:"/topics/"},{frontmatter:{layout:"IndexPost",title:"LeetCode | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/LeetCode/"},regularPath:"/topics/LeetCode/",key:"v-f9cc3e38",path:"/topics/LeetCode/"},{frontmatter:{layout:"IndexPost",title:"Node.js | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/Node.js/"},regularPath:"/topics/Node.js/",key:"v-2aa8ee60",path:"/topics/Node.js/"},{frontmatter:{layout:"IndexPost",title:"Raspberry-Pi | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/Raspberry-Pi/"},regularPath:"/topics/Raspberry-Pi/",key:"v-5fcac9bd",path:"/topics/Raspberry-Pi/"},{frontmatter:{layout:"IndexPost",title:"VuePress | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/VuePress/"},regularPath:"/topics/VuePress/",key:"v-de06e508",path:"/topics/VuePress/"},{frontmatter:{layout:"IndexPost",title:"Page 2 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/2/"},regularPath:"/posts/page/2/",key:"v-1ba3844c",path:"/posts/page/2/"},{frontmatter:{layout:"IndexPost",title:"Page 3 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/3/"},regularPath:"/posts/page/3/",key:"v-1ba3846b",path:"/posts/page/3/"},{frontmatter:{layout:"IndexPost",title:"Page 4 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/4/"},regularPath:"/posts/page/4/",key:"v-1ba3848a",path:"/posts/page/4/"},{frontmatter:{layout:"IndexPost",title:"Page 5 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/5/"},regularPath:"/posts/page/5/",key:"v-1ba384a9",path:"/posts/page/5/"},{frontmatter:{layout:"IndexPost",title:"Page 6 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/6/"},regularPath:"/posts/page/6/",key:"v-1ba384c8",path:"/posts/page/6/"},{frontmatter:{layout:"IndexPost",title:"Page 7 - All Posts",meta:[],description:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",canonicalUrl:"https://codemonkeys.tech/posts/page/7/"},regularPath:"/posts/page/7/",key:"v-1ba384e7",path:"/posts/page/7/"},{frontmatter:{layout:"IndexPost",title:"Page 2 - LeetCode | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/LeetCode/page/2/"},regularPath:"/topics/LeetCode/page/2/",key:"v-4a9fa74e",path:"/topics/LeetCode/page/2/"},{frontmatter:{layout:"IndexPost",title:"Page 2 - VuePress | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/VuePress/page/2/"},regularPath:"/topics/VuePress/page/2/",key:"v-7b32b67e",path:"/topics/VuePress/page/2/"},{frontmatter:{layout:"IndexPost",title:"Page 3 - VuePress | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/VuePress/page/3/"},regularPath:"/topics/VuePress/page/3/",key:"v-7b32b640",path:"/topics/VuePress/page/3/"},{frontmatter:{layout:"IndexPost",title:"Page 4 - VuePress | Topics",meta:[],description:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",canonicalUrl:"https://codemonkeys.tech/topics/VuePress/page/4/"},regularPath:"/topics/VuePress/page/4/",key:"v-7b32b602",path:"/topics/VuePress/page/4/"}],themeConfig:{domain:"https://codemonkeys.tech/",defaultAuthor:"J the Code Monkey",allPostsDescription:"Here's all of the posts we've made so far! Find a post that peeks your interest and start monkeying around! 📝🐒",topicsDescription:"Here you can view the various topics we've covered so far! Find a topic that interests you and start learning and coding today! Be sure to grab a banana! 🍌",logo:"/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-200w.png",nav:[{text:"Topics",link:"/topics/"},{text:"Posts",items:[{text:"All Posts",link:"/posts/"},{text:"By Topic",items:[{text:"LeetCode",link:"/topics/LeetCode/"},{text:"Node.js",link:"/topics/Node.js/"},{text:"Raspberry Pi",link:"/topics/Raspberry-Pi/"},{text:"VuePress",link:"/topics/VuePress/"}]}]},{text:"Resources",items:[{text:"Topics",link:"/resources/"},{text:"By Topic",items:[{text:"Bitcoin",link:"/resources/bitcoin/"},{text:"FOSS",link:"/resources/foss/"},{text:"Nostr",link:"/resources/nostr/"},{text:"Privacy",link:"/resources/privacy/"},{text:"Web Dev",link:"/resources/webdev/"}]}]},{text:"Contact",link:"/contact/"},{text:"Donate",link:"/donate/"}]}},Ue=n(199),ze=n.n(Ue);n(349);i.a.component("Footer",(function(){return Promise.all([n.e(0),n.e(12)]).then(n.bind(null,535))})),i.a.component("CodeBlock",(function(){return Promise.all([n.e(0),n.e(15)]).then(n.bind(null,536))})),i.a.component("Badge",(function(){return Promise.all([n.e(0),n.e(14)]).then(n.bind(null,568))})),i.a.component("CodeGroup",(function(){return Promise.all([n.e(0),n.e(16)]).then(n.bind(null,537))}));n(350),n(229);var Be={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:function(){return{scrollTop:null}},computed:{show:function(){return this.scrollTop>this.threshold}},mounted:function(){var t=this;this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",Te()((function(){t.scrollTop=t.getScrollTop()}),100))},methods:{getScrollTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},scrollToTop:function(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},We=(n(351),Object(Ve.a)(Be,(function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[this.show?e("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[e("g",{attrs:{transform:"translate(-229 -126.358)"}},[e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"5fd4ef0c",null).exports),qe=(n(352),{}),Je=(n(353),n(213),n(214),n(354),n(355),{props:{color:{required:!1,default:"rgb(66, 185, 131)"}}}),Ge=(n(356),Object(Ve.a)(Je,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports),Ye={name:"Mermaid",props:{id:{type:String,required:!0},graph:{type:String,required:!0}},data:function(){return{svg:void 0}},render:function(t){return void 0===this.svg?t("Loading"):t("div",{domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted:function(){var t=this;n.e(52).then(n.t.bind(null,520,7)).then((function(e){e.initialize(Le({startOnLoad:!0},{}));var n=document.createElement("div");document.body.appendChild(n),e.render(t.id,t.graph,(function(e){t.svg=e,document.body.removeChild(n)}),n)}))},components:{Loading:Ge}};function Ze(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=Object(ve.a)(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){a=!0,i=t},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}var Ke=n(357),Xe={name:"VueCustomTooltip",props:{label:String,active:{type:Boolean,default:!0},sticky:Boolean,multiline:Boolean,underlined:Boolean,abbreviation:Boolean,position:{type:String,default:"is-top",validator:function(t){return["is-top","is-bottom","is-left","is-right"].indexOf(t)>-1}},size:{type:String,default:"is-medium",validator:function(t){return["is-small","is-medium","is-large"].indexOf(t)>-1}}},data:function(){return{labelText:this.label||null,isActive:this.active||!0,isSticky:this.sticky||!1,isMultiline:this.multiline||!1,isUnderlined:this.underlined||!1,isAbbreviation:this.abbreviation||!1,hasPosition:this.position||"is-top",hasSize:this.size||"is-medium"}},computed:{dynamicStyles:function(){return{"--vue-custom-tooltip-color":this.$vueCustomTooltip&&this.$vueCustomTooltip.hasOwnProperty("color")?this.$vueCustomTooltip.color:null,"--vue-custom-tooltip-background":this.$vueCustomTooltip&&this.$vueCustomTooltip.hasOwnProperty("background")?this.$vueCustomTooltip.background:null,"--vue-custom-tooltip-border-radius":this.$vueCustomTooltip&&this.$vueCustomTooltip.hasOwnProperty("borderRadius")?this.$vueCustomTooltip.borderRadius:null,"--vue-custom-tooltip-font-weight":this.$vueCustomTooltip&&this.$vueCustomTooltip.hasOwnProperty("fontWeight")?this.$vueCustomTooltip.fontWeight:null}}},watch:{label:{handler:function(t){this.labelText=t},immediate:!0},active:{handler:function(t){this.isActive=t},immediate:!0},sticky:{handler:function(t){this.isSticky=t},immediate:!0},multiline:{handler:function(t){this.isMultiline=t},immediate:!0},underlined:{handler:function(t){this.isUnderlined=t},immediate:!0},abbreviation:{handler:function(t){this.isAbbreviation=t},immediate:!0},position:{handler:function(t){this.hasPosition=t},immediate:!0},size:{handler:function(t){this.hasSize=t},immediate:!0}}};function Qe(t,e,n,r,o,i,s,a,l,u){"boolean"!=typeof s&&(l=a,a=s,s=!1);var c,p="function"==typeof n?n.options:n;if(t&&t.render&&(p.render=t.render,p.staticRenderFns=t.staticRenderFns,p._compiled=!0,o&&(p.functional=!0)),r&&(p._scopeId=r),i?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(i)},p._ssrRegister=c):e&&(c=s?function(t){e.call(this,u(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),c)if(p.functional){var d=p.render;p.render=function(t,e){return c.call(e),d(t,e)}}else{var f=p.beforeCreate;p.beforeCreate=f?[].concat(f,c):[c]}return n}var tn,en="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function nn(t){return function(t,e){return function(t,e){var n=en?e.media||"default":t,r=rn[n]||(rn[n]={ids:new Set,styles:[]});if(!r.ids.has(t)){r.ids.add(t);var o=e.source;if(e.map&&(o+="\n/*# sourceURL="+e.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+" */"),r.element||(r.element=document.createElement("style"),r.element.type="text/css",e.media&&r.element.setAttribute("media",e.media),void 0===tn&&(tn=document.head||document.getElementsByTagName("head")[0]),tn.appendChild(r.element)),"styleSheet"in r.element)r.styles.push(o),r.element.styleSheet.cssText=r.styles.filter(Boolean).join("\n");else{var i=r.ids.size-1,s=document.createTextNode(o),a=r.element.childNodes;a[i]&&r.element.removeChild(a[i]),a.length?r.element.insertBefore(s,a[i]):r.element.appendChild(s)}}}(t,e)}}var rn={};var on=Qe({render:function(){var t=this,e=t.$createElement;return(t._self._c||e)(t.isAbbreviation?"abbr":"span",{tag:"component",class:[t.hasPosition,t.hasSize,{"vue-custom-tooltip":t.isActive&&t.labelText,"is-sticky":t.isSticky,"has-multiline":t.isMultiline,"is-underlined":t.isUnderlined||t.isAbbreviation}],style:[t.dynamicStyles,{cursor:t.isAbbreviation?"help":"pointer"}],attrs:{"data-label":t.labelText,"aria-label":t.labelText,role:"tooltip"}},[t._t("default")],2)},staticRenderFns:[]},(function(t){t&&(t("data-v-60bf38c6_0",{source:".vue-custom-tooltip{--vue-custom-tooltip-color:#fff;--vue-custom-tooltip-background:#000;--vue-custom-tooltip-border-radius:100px;--vue-custom-tooltip-font-weight:400}",map:void 0,media:void 0}),t("data-v-60bf38c6_1",{source:".vue-custom-tooltip{position:relative;display:inline-block;text-decoration-line:none!important}.vue-custom-tooltip.is-top:after,.vue-custom-tooltip.is-top:before{top:auto;right:auto;bottom:calc(100% + 5px + 2px);left:50%;transform:translateX(-50%)}.vue-custom-tooltip.is-top:before{border-top:5px solid #000;border-top:5px solid var(--vue-custom-tooltip-background);border-right:5px solid transparent;border-left:5px solid transparent;bottom:calc(100% + 2px)}.vue-custom-tooltip.is-top.has-multiline.is-small:after{width:140px}.vue-custom-tooltip.is-top.has-multiline.is-medium:after{width:250px;padding:.6rem 1.25rem .65rem}.vue-custom-tooltip.is-top.has-multiline.is-large:after{width:480px;padding:0.6rem 1rem 0.65rem}.vue-custom-tooltip.is-right:after,.vue-custom-tooltip.is-right:before{top:50%;right:auto;bottom:auto;left:calc(100% + 5px + 2px);transform:translateY(-50%)}.vue-custom-tooltip.is-right:before{border-top:5px solid transparent;border-right:5px solid #000;border-right:5px solid var(--vue-custom-tooltip-background);border-bottom:5px solid transparent;left:calc(100% + 2px)}.vue-custom-tooltip.is-right.has-multiline.is-small:after{width:140px}.vue-custom-tooltip.is-right.has-multiline.is-medium:after{width:250px;padding:.6rem 1.25rem .65rem}.vue-custom-tooltip.is-right.has-multiline.is-large:after{width:480px;padding:0.6rem 1rem 0.65rem}.vue-custom-tooltip.is-bottom:after,.vue-custom-tooltip.is-bottom:before{top:calc(100% + 5px + 2px);right:auto;bottom:auto;left:50%;transform:translateX(-50%)}.vue-custom-tooltip.is-bottom:before{border-right:5px solid transparent;border-bottom:5px solid #000;border-bottom:5px solid var(--vue-custom-tooltip-background);border-left:5px solid transparent;top:calc(100% + 2px)}.vue-custom-tooltip.is-bottom.has-multiline.is-small:after{width:140px}.vue-custom-tooltip.is-bottom.has-multiline.is-medium:after{width:250px;padding:.6rem 1.25rem .65rem}.vue-custom-tooltip.is-bottom.has-multiline.is-large:after{width:480px;padding:0.6rem 1rem 0.65rem}.vue-custom-tooltip.is-left:after,.vue-custom-tooltip.is-left:before{top:50%;right:calc(100% + 5px + 2px);bottom:auto;left:auto;transform:translateY(-50%)}.vue-custom-tooltip.is-left:before{border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000;border-left:5px solid var(--vue-custom-tooltip-background);right:calc(100% + 2px)}.vue-custom-tooltip.is-left.has-multiline.is-small:after{width:140px}.vue-custom-tooltip.is-left.has-multiline.is-medium:after{width:250px;padding:.6rem 1.25rem .65rem}.vue-custom-tooltip.is-left.has-multiline.is-large:after{width:480px;padding:0.6rem 1rem 0.65rem}.vue-custom-tooltip.is-underlined{border-bottom:1px dotted #000;border-bottom:1px dotted var(--vue-custom-tooltip-background);line-height:1.2}.vue-custom-tooltip:after,.vue-custom-tooltip:before{position:absolute;content:'';opacity:0;visibility:hidden;pointer-events:none;transition:opacity 86ms ease-out,visibility 86ms ease-out}.vue-custom-tooltip:before{z-index:889}.vue-custom-tooltip:after{content:attr(data-label);color:#fff;color:var(--vue-custom-tooltip-color);background:#000;background:var(--vue-custom-tooltip-background);width:auto;max-width:100vw;padding:.35rem .75rem .45rem;border-radius:100px;border-radius:var(--vue-custom-tooltip-border-radius);font-size:.85rem!important;font-weight:400;font-weight:var(--vue-custom-tooltip-font-weight);line-height:1.3;letter-spacing:normal!important;text-transform:none;box-shadow:0 1px 2px 1px rgba(0,1,0,.2);z-index:888;white-space:nowrap}.vue-custom-tooltip:not([data-label='']):hover:after,.vue-custom-tooltip:not([data-label='']):hover:before{opacity:1;visibility:visible}:disabled .vue-custom-tooltip{pointer-events:none}.vue-custom-tooltip:not([data-label='']).is-sticky:after,.vue-custom-tooltip:not([data-label='']).is-sticky:before{opacity:1;visibility:visible}.vue-custom-tooltip.has-multiline:after{display:block;padding:.5rem .75rem .65rem;text-align:center;line-height:1.4;white-space:pre-wrap}",map:void 0,media:void 0}))}),Xe,void 0,!1,void 0,!1,nn,void 0,void 0),sn={name:"VueCustomTooltip",color:"#fff",background:"#000",borderRadius:12,fontWeight:400},an=function(t,e){if(!an.installed&&!t.prototype.$isServer){an.installed=!0;var n=Object.assign({},e),r=/^#(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;n.hasOwnProperty("color")&&!r.test(n.color)&&delete n.color,n.hasOwnProperty("background")&&!r.test(n.background)&&delete n.background;n.hasOwnProperty("borderRadius")&&!/^[0-9]+$/.test(n.borderRadius)&&delete n.borderRadius;n.hasOwnProperty("fontWeight")&&!/^[1-9]{1}00$/.test(n.fontWeight)&&delete n.fontWeight;var o=Object.assign({},sn,n);o.borderRadius=o.borderRadius+"px",t.prototype.$vueCustomTooltip=o,t.component(o.name,on)}},ln={install:an},un=null;"undefined"!=typeof window?un=window.Vue:"undefined"!=typeof global&&(un=global.Vue),un&&un.use(ln,sn),on.install=an;var cn=on;function pn(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function dn(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function fn(t,e,n){return e&&dn(t.prototype,e),n&&dn(t,n),t}var hn={topics:{LeetCode:{key:"LeetCode",scope:"topics",path:"/topics/LeetCode/",pageKeys:["v-7e7ee8f3","v-04d71d8e","v-a3e7481e","v-598fc2bb","v-61183936","v-3065fce5","v-cff0c136"]},"Node.js":{key:"Node.js",scope:"topics",path:"/topics/Node.js/",pageKeys:["v-0875843e","v-3a10803e","v-ea911d36"]},"Raspberry-Pi":{key:"Raspberry-Pi",scope:"topics",path:"/topics/Raspberry-Pi/",pageKeys:["v-ffcf8bf6"]},VuePress:{key:"VuePress",scope:"topics",path:"/topics/VuePress/",pageKeys:["v-685a6f36","v-b5b6f4d2","v-afe09dd6","v-aa0a46da","v-9e5d98e2","v-a433efde","v-988741e6","v-92b0eaea","v-8cda93ee","v-87043cf2","v-812de5f6","v-12481376","v-00c26c4e","v-21e52425","v-b9fea476","v-4cee5205","v-63ec48b6","v-0dd9ecf6","v-77f77fe5","v-241c3765"]}}},mn=function(){function t(e,n){var r=this;pn(this,t),this._metaMap=Object.assign({},e),Object.keys(this._metaMap).forEach((function(t){var e=r._metaMap[t].pageKeys;r._metaMap[t].pages=e.map((function(t){return function(t,e){for(var n=0;n<t.length;n++){var r=t[n];if(r.key===e)return r}return{path:"",frontmatter:{}}}(n,t)}))}))}return fn(t,[{key:"length",get:function(){return Object.keys(this._metaMap).length}},{key:"map",get:function(){return this._metaMap}},{key:"pages",get:function(){return this.list}},{key:"list",get:function(){return this.toArray()}},{key:"toArray",value:function(){var t=this,e=[];return Object.keys(this._metaMap).forEach((function(n){var r=t._metaMap[n],o=r.pages,i=r.path;e.push({name:n,pages:o,path:i})})),e}},{key:"getItemByName",value:function(t){return this._metaMap[t]}}]),t}(),gn=(n(215),{posts:function(t,e){var r=n(181);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1},topics:function(t,e){var r=n(181);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1}}),vn={posts:function(t,e,n){return t.pid===n&&t.id===e},topics:function(t,e,n){var r=e;return["topic"].some((function(e){var n=t.frontmatter[e];return Array.isArray(n)?n.some((function(t){return t==r})):n==r}))}},yn=[{pid:"posts",id:"posts",filter:vn.posts,sorter:gn.posts,pages:[{path:"/posts/",interval:[0,4]},{path:"/posts/page/2/",interval:[5,9]},{path:"/posts/page/3/",interval:[10,14]},{path:"/posts/page/4/",interval:[15,19]},{path:"/posts/page/5/",interval:[20,24]},{path:"/posts/page/6/",interval:[25,29]},{path:"/posts/page/7/",interval:[30,31]}],prevText:"Prev",nextText:"Next"},{pid:"topics",id:"LeetCode",filter:vn.topics,sorter:gn.topics,pages:[{path:"/topics/LeetCode/",interval:[0,4]},{path:"/topics/LeetCode/page/2/",interval:[5,7]}],prevText:"Prev",nextText:"Next"},{pid:"topics",id:"Node.js",filter:vn.topics,sorter:gn.topics,pages:[{path:"/topics/Node.js/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"topics",id:"Raspberry-Pi",filter:vn.topics,sorter:gn.topics,pages:[{path:"/topics/Raspberry-Pi/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"topics",id:"VuePress",filter:vn.topics,sorter:gn.topics,pages:[{path:"/topics/VuePress/",interval:[0,4]},{path:"/topics/VuePress/page/2/",interval:[5,9]},{path:"/topics/VuePress/page/3/",interval:[10,14]},{path:"/topics/VuePress/page/4/",interval:[15,19]}],prevText:"Prev",nextText:"Next"}],bn=n(200),wn=n.n(bn)()("plugin-blog:pagination"),kn=function(){function t(e,n,r){pn(this,t),wn("pagination",e);var o=e.pages,i=e.prevText,s=e.nextText,a=r.path;this._prevText=i,this._nextText=s;for(var l=0,u=o.length;l<u;l++){if(o[l].path===a){this.paginationIndex=l;break}}this.paginationIndex||(this.paginationIndex=0),this._paginationPages=o,this._currentPage=o[this.paginationIndex],this._matchedPages=n.filter((function(t){return e.filter(t,e.id,e.pid)})).sort(e.sorter)}return fn(t,[{key:"setIndexPage",value:function(t){this._indexPage=t}},{key:"length",get:function(){return this._paginationPages.length}},{key:"pages",get:function(){var t=ye(this._currentPage.interval,2),e=t[0],n=t[1];return this._matchedPages.slice(e,n+1)}},{key:"hasPrev",get:function(){return 0!==this.paginationIndex}},{key:"prevLink",get:function(){return this.hasPrev?this.paginationIndex-1==0&&this._indexPage?this._indexPage:this._paginationPages[this.paginationIndex-1].path:null}},{key:"hasNext",get:function(){return this.paginationIndex!==this.length-1}},{key:"nextLink",get:function(){return this.hasNext?this._paginationPages[this.paginationIndex+1].path:null}},{key:"prevText",get:function(){return this._prevText}},{key:"nextText",get:function(){return this._nextText}},{key:"getSpecificPageLink",value:function(t){return this._paginationPages[t].path}}]),t}(),_n=new(function(){function t(e){pn(this,t),this.paginations=e}return fn(t,[{key:"pages",get:function(){return i.a.$vuepress.$get("siteData").pages}},{key:"getPagination",value:function(t,e,n){wn("id",e),wn("pid",t);var r=this.paginations.filter((function(n){return n.id===e&&n.pid===t}))[0];return new kn(r,this.pages,n)}}]),t}())(yn),xn={comment:{enabled:!0,service:"vssue"},email:{enabled:!1},feed:{rss:!1,atom:!1,json:!1}}; +/** + * vue-class-component v7.2.6 + * (c) 2015-present Evan You + * @license MIT + */ +function Pn(t){return(Pn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Cn(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Sn(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function Tn(){return"undefined"!=typeof Reflect&&Reflect.defineMetadata&&Reflect.getOwnMetadataKeys}function In(t,e){On(t,e),Object.getOwnPropertyNames(e.prototype).forEach((function(n){On(t.prototype,e.prototype,n)})),Object.getOwnPropertyNames(e).forEach((function(n){On(t,e,n)}))}function On(t,e,n){(n?Reflect.getOwnMetadataKeys(e,n):Reflect.getOwnMetadataKeys(e)).forEach((function(r){var o=n?Reflect.getOwnMetadata(r,e,n):Reflect.getOwnMetadata(r,e);n?Reflect.defineMetadata(r,o,t,n):Reflect.defineMetadata(r,o,t)}))}var Mn={__proto__:[]}instanceof Array;function An(t){return function(e,n,r){var o="function"==typeof e?e:e.constructor;o.__decorators__||(o.__decorators__=[]),"number"!=typeof r&&(r=void 0),o.__decorators__.push((function(e){return t(e,n,r)}))}}function jn(t,e){var n=e.prototype._init;e.prototype._init=function(){var e=this,n=Object.getOwnPropertyNames(t);if(t.$options.props)for(var r in t.$options.props)t.hasOwnProperty(r)||n.push(r);n.forEach((function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){t[n]=e},configurable:!0})}))};var r=new e;e.prototype._init=n;var o={};return Object.keys(r).forEach((function(t){void 0!==r[t]&&(o[t]=r[t])})),o}var $n=["data","beforeCreate","created","beforeMount","mounted","beforeDestroy","destroyed","beforeUpdate","updated","activated","deactivated","render","errorCaptured","serverPrefetch"];function Ln(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.name=e.name||t._componentTag||t.name;var n=t.prototype;Object.getOwnPropertyNames(n).forEach((function(t){if("constructor"!==t)if($n.indexOf(t)>-1)e[t]=n[t];else{var r=Object.getOwnPropertyDescriptor(n,t);void 0!==r.value?"function"==typeof r.value?(e.methods||(e.methods={}))[t]=r.value:(e.mixins||(e.mixins=[])).push({data:function(){return Cn({},t,r.value)}}):(r.get||r.set)&&((e.computed||(e.computed={}))[t]={get:r.get,set:r.set})}})),(e.mixins||(e.mixins=[])).push({data:function(){return jn(this,t)}});var r=t.__decorators__;r&&(r.forEach((function(t){return t(e)})),delete t.__decorators__);var o=Object.getPrototypeOf(t.prototype),s=o instanceof i.a?o.constructor:i.a,a=s.extend(e);return Vn(a,t,s),Tn()&&In(a,t),a}var En={prototype:!0,arguments:!0,callee:!0,caller:!0};function Vn(t,e,n){Object.getOwnPropertyNames(e).forEach((function(r){if(!En[r]){var o=Object.getOwnPropertyDescriptor(t,r);if(!o||o.configurable){var i,s,a=Object.getOwnPropertyDescriptor(e,r);if(!Mn){if("cid"===r)return;var l=Object.getOwnPropertyDescriptor(n,r);if(i=a.value,s=Pn(i),null!=i&&("object"===s||"function"===s)&&l&&l.value===a.value)return}0,Object.defineProperty(t,r,a)}}}))}function Rn(t){return"function"==typeof t?Ln(t):function(e){return Ln(e,t)}}Rn.registerHooks=function(t){$n.push.apply($n,Sn(t))};var Nn=Rn;function Dn(t){return An((function(e,n){void 0===e.inject&&(e.inject={}),Array.isArray(e.inject)||(e.inject[n]=t||n)}))}function Fn(t){var e=function(){var n=this,r="function"==typeof t?t.call(this):t;for(var o in(r=Object.create(r||null)).__reactiveInject__=this.__reactiveInject__||{},e.managed)r[e.managed[o]]=this[o];var i=function(t){r[e.managedReactive[t]]=s[t],Object.defineProperty(r.__reactiveInject__,e.managedReactive[t],{enumerable:!0,get:function(){return n[t]}})},s=this;for(var o in e.managedReactive)i(o);return r};return e.managed={},e.managedReactive={},e}function Hn(t){return"function"!=typeof t||!t.managed&&!t.managedReactive}var Un="undefined"!=typeof Reflect&&void 0!==Reflect.getMetadata;function zn(t,e,n){if(Un&&!Array.isArray(t)&&"function"!=typeof t&&void 0===t.type){var r=Reflect.getMetadata("design:type",e,n);r!==Object&&(t.type=r)}}function Bn(t){return void 0===t&&(t={}),function(e,n){zn(t,e,n),An((function(e,n){(e.props||(e.props={}))[n]=t}))(e,n)}}function Wn(t,e){void 0===e&&(e={});var n=e.deep,r=void 0!==n&&n,o=e.immediate,i=void 0!==o&&o;return An((function(e,n){"object"!=typeof e.watch&&(e.watch=Object.create(null));var o=e.watch;"object"!=typeof o[t]||Array.isArray(o[t])?void 0===o[t]&&(o[t]=[]):o[t]=[o[t]],o[t].push({handler:n,deep:r,immediate:i})}))}var qn=n(45);const Jn=(t,e)=>`${t}${Object(qn.stringify)(e,{addQueryPrefix:!0})}`,Gn=(t,e)=>`${t.replace(/\/$/,"")}/${e.replace(/^\//,"")}`;var Yn=n(201),Zn=n.n(Yn);const Kn=t=>Zn()(t,"YYYY-MM-DD HH:mm:ss"),Xn=t=>(t.split("#")[0]||"").split("?")[0]||""; +/*! + * vue-i18n v8.25.0 + * (c) 2021 kazuya kawaguchi + * Released under the MIT License. + */ +var Qn=["compactDisplay","currency","currencyDisplay","currencySign","localeMatcher","notation","numberingSystem","signDisplay","style","unit","unitDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits"];function tr(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}var er=Array.isArray;function nr(t){return null!==t&&"object"==typeof t}function rr(t){return"string"==typeof t}var or=Object.prototype.toString;function ir(t){return"[object Object]"===or.call(t)}function sr(t){return null==t}function ar(t){return"function"==typeof t}function lr(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=null,r=null;return 1===t.length?nr(t[0])||er(t[0])?r=t[0]:"string"==typeof t[0]&&(n=t[0]):2===t.length&&("string"==typeof t[0]&&(n=t[0]),(nr(t[1])||er(t[1]))&&(r=t[1])),{locale:n,params:r}}function ur(t){return JSON.parse(JSON.stringify(t))}function cr(t,e){return!!~t.indexOf(e)}var pr=Object.prototype.hasOwnProperty;function dr(t,e){return pr.call(t,e)}function fr(t){for(var e=arguments,n=Object(t),r=1;r<arguments.length;r++){var o=e[r];if(null!=o){var i=void 0;for(i in o)dr(o,i)&&(nr(o[i])?n[i]=fr(n[i],o[i]):n[i]=o[i])}}return n}function hr(t,e){if(t===e)return!0;var n=nr(t),r=nr(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var o=er(t),i=er(e);if(o&&i)return t.length===e.length&&t.every((function(t,n){return hr(t,e[n])}));if(o||i)return!1;var s=Object.keys(t),a=Object.keys(e);return s.length===a.length&&s.every((function(n){return hr(t[n],e[n])}))}catch(t){return!1}}function mr(t){return null!=t&&Object.keys(t).forEach((function(e){"string"==typeof t[e]&&(t[e]=t[e].replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"))})),t}var gr={beforeCreate:function(){var t=this.$options;if(t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n)if(t.i18n instanceof Wr){if(t.__i18n)try{var e=t.i18n&&t.i18n.messages?t.i18n.messages:{};t.__i18n.forEach((function(t){e=fr(e,JSON.parse(t))})),Object.keys(e).forEach((function(n){t.i18n.mergeLocaleMessage(n,e[n])}))}catch(t){0}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(ir(t.i18n)){var n=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Wr?this.$root.$i18n:null;if(n&&(t.i18n.root=this.$root,t.i18n.formatter=n.formatter,t.i18n.fallbackLocale=n.fallbackLocale,t.i18n.formatFallbackMessages=n.formatFallbackMessages,t.i18n.silentTranslationWarn=n.silentTranslationWarn,t.i18n.silentFallbackWarn=n.silentFallbackWarn,t.i18n.pluralizationRules=n.pluralizationRules,t.i18n.preserveDirectiveContent=n.preserveDirectiveContent),t.__i18n)try{var r=t.i18n&&t.i18n.messages?t.i18n.messages:{};t.__i18n.forEach((function(t){r=fr(r,JSON.parse(t))})),t.i18n.messages=r}catch(t){0}var o=t.i18n.sharedMessages;o&&ir(o)&&(t.i18n.messages=fr(t.i18n.messages,o)),this._i18n=new Wr(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),n&&n.onComponentInstanceCreated(this._i18n)}else 0;else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Wr?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Wr&&(this._i18n=t.parent.$i18n)},beforeMount:function(){var t=this.$options;t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n?(t.i18n instanceof Wr||ir(t.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Wr||t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Wr)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},mounted:function(){this!==this.$root&&this.$options.__INTLIFY_META__&&this.$el&&this.$el.setAttribute("data-intlify",this.$options.__INTLIFY_META__)},beforeDestroy:function(){if(this._i18n){var t=this;this.$nextTick((function(){t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher)}))}}},vr={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(t,e){var n=e.data,r=e.parent,o=e.props,i=e.slots,s=r.$i18n;if(s){var a=o.path,l=o.locale,u=o.places,c=i(),p=s.i(a,l,function(t){var e;for(e in t)if("default"!==e)return!1;return Boolean(e)}(c)||u?function(t,e){var n=e?function(t){0;return Array.isArray(t)?t.reduce(br,{}):Object.assign({},t)}(e):{};if(!t)return n;var r=(t=t.filter((function(t){return t.tag||""!==t.text.trim()}))).every(wr);0;return t.reduce(r?yr:br,n)}(c.default,u):c),d=o.tag&&!0!==o.tag||!1===o.tag?o.tag:"span";return d?t(d,n,p):p}}};function yr(t,e){return e.data&&e.data.attrs&&e.data.attrs.place&&(t[e.data.attrs.place]=e),t}function br(t,e,n){return t[n]=e,t}function wr(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var kr,_r={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(t,e){var n=e.props,r=e.parent,o=e.data,i=r.$i18n;if(!i)return null;var s=null,a=null;rr(n.format)?s=n.format:nr(n.format)&&(n.format.key&&(s=n.format.key),a=Object.keys(n.format).reduce((function(t,e){var r;return cr(Qn,e)?Object.assign({},t,((r={})[e]=n.format[e],r)):t}),null));var l=n.locale||i.locale,u=i._ntp(n.value,l,s,a),c=u.map((function(t,e){var n,r=o.scopedSlots&&o.scopedSlots[t.type];return r?r(((n={})[t.type]=t.value,n.index=e,n.parts=u,n)):t.value})),p=n.tag&&!0!==n.tag||!1===n.tag?n.tag:"span";return p?t(p,{attrs:o.attrs,class:o.class,staticClass:o.staticClass},c):c}};function xr(t,e,n){Sr(t,n)&&Tr(t,e,n)}function Pr(t,e,n,r){if(Sr(t,n)){var o=n.context.$i18n;(function(t,e){var n=e.context;return t._locale===n.$i18n.locale})(t,n)&&hr(e.value,e.oldValue)&&hr(t._localeMessage,o.getLocaleMessage(o.locale))||Tr(t,e,n)}}function Cr(t,e,n,r){if(n.context){var o=n.context.$i18n||{};e.modifiers.preserve||o.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t._vt,t._locale=void 0,delete t._locale,t._localeMessage=void 0,delete t._localeMessage}else tr("Vue instance does not exists in VNode context")}function Sr(t,e){var n=e.context;return n?!!n.$i18n||(tr("VueI18n instance does not exists in Vue instance"),!1):(tr("Vue instance does not exists in VNode context"),!1)}function Tr(t,e,n){var r,o,i=function(t){var e,n,r,o;rr(t)?e=t:ir(t)&&(e=t.path,n=t.locale,r=t.args,o=t.choice);return{path:e,locale:n,args:r,choice:o}}(e.value),s=i.path,a=i.locale,l=i.args,u=i.choice;if(s||a||l)if(s){var c=n.context;t._vt=t.textContent=null!=u?(r=c.$i18n).tc.apply(r,[s,u].concat(Ir(a,l))):(o=c.$i18n).t.apply(o,[s].concat(Ir(a,l))),t._locale=c.$i18n.locale,t._localeMessage=c.$i18n.getLocaleMessage(c.$i18n.locale)}else tr("`path` is required in v-t directive");else tr("value type not supported")}function Ir(t,e){var n=[];return t&&n.push(t),e&&(Array.isArray(e)||ir(e))&&n.push(e),n}function Or(t){Or.installed=!0;var e;(kr=t).version&&Number(kr.version.split(".")[0]);(e=kr).prototype.hasOwnProperty("$i18n")||Object.defineProperty(e.prototype,"$i18n",{get:function(){return this._i18n}}),e.prototype.$t=function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];var r=this.$i18n;return r._t.apply(r,[t,r.locale,r._getMessages(),this].concat(e))},e.prototype.$tc=function(t,e){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];var o=this.$i18n;return o._tc.apply(o,[t,o.locale,o._getMessages(),this,e].concat(n))},e.prototype.$te=function(t,e){var n=this.$i18n;return n._te(t,n.locale,n._getMessages(),e)},e.prototype.$d=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).d.apply(e,[t].concat(n))},e.prototype.$n=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this.$i18n).n.apply(e,[t].concat(n))},kr.mixin(gr),kr.directive("t",{bind:xr,update:Pr,unbind:Cr}),kr.component(vr.name,vr),kr.component(_r.name,_r),kr.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}var Mr=function(){this._caches=Object.create(null)};Mr.prototype.interpolate=function(t,e){if(!e)return[t];var n=this._caches[t];return n||(n=function(t){var e=[],n=0,r="";for(;n<t.length;){var o=t[n++];if("{"===o){r&&e.push({type:"text",value:r}),r="";var i="";for(o=t[n++];void 0!==o&&"}"!==o;)i+=o,o=t[n++];var s="}"===o,a=Ar.test(i)?"list":s&&jr.test(i)?"named":"unknown";e.push({value:i,type:a})}else"%"===o?"{"!==t[n]&&(r+=o):r+=o}return r&&e.push({type:"text",value:r}),e}(t),this._caches[t]=n),function(t,e){var n=[],r=0,o=Array.isArray(e)?"list":nr(e)?"named":"unknown";if("unknown"===o)return n;for(;r<t.length;){var i=t[r];switch(i.type){case"text":n.push(i.value);break;case"list":n.push(e[parseInt(i.value,10)]);break;case"named":"named"===o&&n.push(e[i.value]);break;case"unknown":0}r++}return n}(n,e)};var Ar=/^(?:\d)+/,jr=/^(?:\w)+/;var $r=[];$r[0]={ws:[0],ident:[3,0],"[":[4],eof:[7]},$r[1]={ws:[1],".":[2],"[":[4],eof:[7]},$r[2]={ws:[2],ident:[3,0],0:[3,0],number:[3,0]},$r[3]={ident:[3,0],0:[3,0],number:[3,0],ws:[1,1],".":[2,1],"[":[4,1],eof:[7,1]},$r[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],eof:8,else:[4,0]},$r[5]={"'":[4,0],eof:8,else:[5,0]},$r[6]={'"':[4,0],eof:8,else:[6,0]};var Lr=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Er(t){if(null==t)return"eof";switch(t.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return t;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}function Vr(t){var e,n,r,o=t.trim();return("0"!==t.charAt(0)||!isNaN(t))&&(r=o,Lr.test(r)?(n=(e=o).charCodeAt(0))!==e.charCodeAt(e.length-1)||34!==n&&39!==n?e:e.slice(1,-1):"*"+o)}var Rr=function(){this._cache=Object.create(null)};Rr.prototype.parsePath=function(t){var e=this._cache[t];return e||(e=function(t){var e,n,r,o,i,s,a,l=[],u=-1,c=0,p=0,d=[];function f(){var e=t[u+1];if(5===c&&"'"===e||6===c&&'"'===e)return u++,r="\\"+e,d[0](),!0}for(d[1]=function(){void 0!==n&&(l.push(n),n=void 0)},d[0]=function(){void 0===n?n=r:n+=r},d[2]=function(){d[0](),p++},d[3]=function(){if(p>0)p--,c=4,d[0]();else{if(p=0,void 0===n)return!1;if(!1===(n=Vr(n)))return!1;d[1]()}};null!==c;)if(u++,"\\"!==(e=t[u])||!f()){if(o=Er(e),8===(i=(a=$r[c])[o]||a.else||8))return;if(c=i[0],(s=d[i[1]])&&(r=void 0===(r=i[2])?e:r,!1===s()))return;if(7===c)return l}}(t))&&(this._cache[t]=e),e||[]},Rr.prototype.getPathValue=function(t,e){if(!nr(t))return null;var n=this.parsePath(e);if(0===n.length)return null;for(var r=n.length,o=t,i=0;i<r;){var s=o[n[i]];if(null==s)return null;o=s,i++}return o};var Nr,Dr=/<\/?[\w\s="/.':;#-\/]+>/,Fr=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,Hr=/^@(?:\.([a-z]+))?:/,Ur=/[()]/g,zr={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},Br=new Mr,Wr=function(t){var e=this;void 0===t&&(t={}),!kr&&"undefined"!=typeof window&&window.Vue&&Or(window.Vue);var n=t.locale||"en-US",r=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),o=t.messages||{},i=t.dateTimeFormats||{},s=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||Br,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new Rr,this._dataListeners=new Set,this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this._escapeParameterHtml=t.escapeParameterHtml||!1,this.getChoiceIndex=function(t,n){var r=Object.getPrototypeOf(e);if(r&&r.getChoiceIndex)return r.getChoiceIndex.call(e,t,n);var o,i;return e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,n]):(o=t,i=n,o=Math.abs(o),2===i?o?o>1?1:0:1:o?Math.min(o,2):0)},this._exist=function(t,n){return!(!t||!n)&&(!sr(e._path.getPathValue(t,n))||!!t[n])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(o).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,o[t])})),this._initVM({locale:n,fallbackLocale:r,messages:o,dateTimeFormats:i,numberFormats:s})},qr={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};Wr.prototype._checkLocaleMessage=function(t,e,n){var r=function(t,e,n,o){if(ir(n))Object.keys(n).forEach((function(i){var s=n[i];ir(s)?(o.push(i),o.push("."),r(t,e,s,o),o.pop(),o.pop()):(o.push(i),r(t,e,s,o),o.pop())}));else if(er(n))n.forEach((function(n,i){ir(n)?(o.push("["+i+"]"),o.push("."),r(t,e,n,o),o.pop(),o.pop()):(o.push("["+i+"]"),r(t,e,n,o),o.pop())}));else if(rr(n)){if(Dr.test(n)){var i="Detected HTML in message '"+n+"' of keypath '"+o.join("")+"' at '"+e+"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?tr(i):"error"===t&&function(t,e){"undefined"!=typeof console&&(console.error("[vue-i18n] "+t),e&&console.error(e.stack))}(i)}}};r(e,t,n,[])},Wr.prototype._initVM=function(t){var e=kr.config.silent;kr.config.silent=!0,this._vm=new kr({data:t}),kr.config.silent=e},Wr.prototype.destroyVM=function(){this._vm.$destroy()},Wr.prototype.subscribeDataChanging=function(t){this._dataListeners.add(t)},Wr.prototype.unsubscribeDataChanging=function(t){!function(t,e){if(t.delete(e));}(this._dataListeners,t)},Wr.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",(function(){for(var e,n,r=(e=t._dataListeners,n=[],e.forEach((function(t){return n.push(t)})),n),o=r.length;o--;)kr.nextTick((function(){r[o]&&r[o].$forceUpdate()}))}),{deep:!0})},Wr.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",(function(e){t.$set(t,"locale",e),t.$forceUpdate()}),{immediate:!0})},Wr.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},qr.vm.get=function(){return this._vm},qr.messages.get=function(){return ur(this._getMessages())},qr.dateTimeFormats.get=function(){return ur(this._getDateTimeFormats())},qr.numberFormats.get=function(){return ur(this._getNumberFormats())},qr.availableLocales.get=function(){return Object.keys(this.messages).sort()},qr.locale.get=function(){return this._vm.locale},qr.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},qr.fallbackLocale.get=function(){return this._vm.fallbackLocale},qr.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},qr.formatFallbackMessages.get=function(){return this._formatFallbackMessages},qr.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},qr.missing.get=function(){return this._missing},qr.missing.set=function(t){this._missing=t},qr.formatter.get=function(){return this._formatter},qr.formatter.set=function(t){this._formatter=t},qr.silentTranslationWarn.get=function(){return this._silentTranslationWarn},qr.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},qr.silentFallbackWarn.get=function(){return this._silentFallbackWarn},qr.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},qr.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},qr.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},qr.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},qr.warnHtmlInMessage.set=function(t){var e=this,n=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,n!==t&&("warn"===t||"error"===t)){var r=this._getMessages();Object.keys(r).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,r[t])}))}},qr.postTranslation.get=function(){return this._postTranslation},qr.postTranslation.set=function(t){this._postTranslation=t},Wr.prototype._getMessages=function(){return this._vm.messages},Wr.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},Wr.prototype._getNumberFormats=function(){return this._vm.numberFormats},Wr.prototype._warnDefault=function(t,e,n,r,o,i){if(!sr(n))return n;if(this._missing){var s=this._missing.apply(null,[t,e,r,o]);if(rr(s))return s}else 0;if(this._formatFallbackMessages){var a=lr.apply(void 0,o);return this._render(e,i,a.params,e)}return e},Wr.prototype._isFallbackRoot=function(t){return!t&&!sr(this._root)&&this._fallbackRoot},Wr.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},Wr.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},Wr.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},Wr.prototype._interpolate=function(t,e,n,r,o,i,s){if(!e)return null;var a,l=this._path.getPathValue(e,n);if(er(l)||ir(l))return l;if(sr(l)){if(!ir(e))return null;if(!rr(a=e[n])&&!ar(a))return null}else{if(!rr(l)&&!ar(l))return null;a=l}return rr(a)&&(a.indexOf("@:")>=0||a.indexOf("@.")>=0)&&(a=this._link(t,e,a,r,"raw",i,s)),this._render(a,o,i,n)},Wr.prototype._link=function(t,e,n,r,o,i,s){var a=n,l=a.match(Fr);for(var u in l)if(l.hasOwnProperty(u)){var c=l[u],p=c.match(Hr),d=p[0],f=p[1],h=c.replace(d,"").replace(Ur,"");if(cr(s,h))return a;s.push(h);var m=this._interpolate(t,e,h,r,"raw"===o?"string":o,"raw"===o?void 0:i,s);if(this._isFallbackRoot(m)){if(!this._root)throw Error("unexpected error");var g=this._root.$i18n;m=g._translate(g._getMessages(),g.locale,g.fallbackLocale,h,r,o,i)}m=this._warnDefault(t,h,m,r,er(i)?i:[i],o),this._modifiers.hasOwnProperty(f)?m=this._modifiers[f](m):zr.hasOwnProperty(f)&&(m=zr[f](m)),s.pop(),a=m?a.replace(c,m):a}return a},Wr.prototype._createMessageContext=function(t,e,n,r){var o=this,i=er(t)?t:[],s=nr(t)?t:{},a=this._getMessages(),l=this.locale;return{list:function(t){return i[t]},named:function(t){return s[t]},values:t,formatter:e,path:n,messages:a,locale:l,linked:function(t){return o._interpolate(l,a[l]||{},t,null,r,void 0,[t])}}},Wr.prototype._render=function(t,e,n,r){if(ar(t))return t(this._createMessageContext(n,this._formatter||Br,r,e));var o=this._formatter.interpolate(t,n,r);return o||(o=Br.interpolate(t,n,r)),"string"!==e||rr(o)?o:o.join("")},Wr.prototype._appendItemToChain=function(t,e,n){var r=!1;return cr(t,e)||(r=!0,e&&(r="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),n&&n[e]&&(r=n[e]))),r},Wr.prototype._appendLocaleToChain=function(t,e,n){var r,o=e.split("-");do{var i=o.join("-");r=this._appendItemToChain(t,i,n),o.splice(-1,1)}while(o.length&&!0===r);return r},Wr.prototype._appendBlockToChain=function(t,e,n){for(var r=!0,o=0;o<e.length&&"boolean"==typeof r;o++){var i=e[o];rr(i)&&(r=this._appendLocaleToChain(t,i,n))}return r},Wr.prototype._getLocaleChain=function(t,e){if(""===t)return[];this._localeChainCache||(this._localeChainCache={});var n=this._localeChainCache[t];if(!n){e||(e=this.fallbackLocale),n=[];for(var r,o=[t];er(o);)o=this._appendBlockToChain(n,o,e);(o=rr(r=er(e)?e:nr(e)?e.default?e.default:null:e)?[r]:r)&&this._appendBlockToChain(n,o,null),this._localeChainCache[t]=n}return n},Wr.prototype._translate=function(t,e,n,r,o,i,s){for(var a,l=this._getLocaleChain(e,n),u=0;u<l.length;u++){var c=l[u];if(!sr(a=this._interpolate(c,t[c],r,o,i,s,[r])))return a}return null},Wr.prototype._t=function(t,e,n,r){for(var o,i=[],s=arguments.length-4;s-- >0;)i[s]=arguments[s+4];if(!t)return"";var a=lr.apply(void 0,i);this._escapeParameterHtml&&(a.params=mr(a.params));var l=a.locale||e,u=this._translate(n,l,this.fallbackLocale,t,r,"string",a.params);if(this._isFallbackRoot(u)){if(!this._root)throw Error("unexpected error");return(o=this._root).$t.apply(o,[t].concat(i))}return u=this._warnDefault(l,t,u,r,i,"string"),this._postTranslation&&null!=u&&(u=this._postTranslation(u,t)),u},Wr.prototype.t=function(t){for(var e,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(n))},Wr.prototype._i=function(t,e,n,r,o){var i=this._translate(n,e,this.fallbackLocale,t,r,"raw",o);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,o)}return this._warnDefault(e,t,i,r,[o],"raw")},Wr.prototype.i=function(t,e,n){return t?(rr(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,n)):""},Wr.prototype._tc=function(t,e,n,r,o){for(var i,s=[],a=arguments.length-5;a-- >0;)s[a]=arguments[a+5];if(!t)return"";void 0===o&&(o=1);var l={count:o,n:o},u=lr.apply(void 0,s);return u.params=Object.assign(l,u.params),s=null===u.locale?[u.params]:[u.locale,u.params],this.fetchChoice((i=this)._t.apply(i,[t,e,n,r].concat(s)),o)},Wr.prototype.fetchChoice=function(t,e){if(!t||!rr(t))return null;var n=t.split("|");return n[e=this.getChoiceIndex(e,n.length)]?n[e].trim():t},Wr.prototype.tc=function(t,e){for(var n,r=[],o=arguments.length-2;o-- >0;)r[o]=arguments[o+2];return(n=this)._tc.apply(n,[t,this.locale,this._getMessages(),null,e].concat(r))},Wr.prototype._te=function(t,e,n){for(var r=[],o=arguments.length-3;o-- >0;)r[o]=arguments[o+3];var i=lr.apply(void 0,r).locale||e;return this._exist(n[i],t)},Wr.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},Wr.prototype.getLocaleMessage=function(t){return ur(this._vm.messages[t]||{})},Wr.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},Wr.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,fr(void 0!==this._vm.messages[t]&&Object.keys(this._vm.messages[t]).length?Object.assign({},this._vm.messages[t]):{},e))},Wr.prototype.getDateTimeFormat=function(t){return ur(this._vm.dateTimeFormats[t]||{})},Wr.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},Wr.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,fr(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},Wr.prototype._clearDateTimeFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},Wr.prototype._localizeDateTime=function(t,e,n,r,o){for(var i=e,s=r[i],a=this._getLocaleChain(e,n),l=0;l<a.length;l++){var u=a[l];if(i=u,!sr(s=r[u])&&!sr(s[o]))break}if(sr(s)||sr(s[o]))return null;var c=s[o],p=i+"__"+o,d=this._dateTimeFormatters[p];return d||(d=this._dateTimeFormatters[p]=new Intl.DateTimeFormat(i,c)),d.format(t)},Wr.prototype._d=function(t,e,n){if(!n)return new Intl.DateTimeFormat(e).format(t);var r=this._localizeDateTime(t,e,this.fallbackLocale,this._getDateTimeFormats(),n);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.d(t,n,e)}return r||""},Wr.prototype.d=function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];var r=this.locale,o=null;return 1===e.length?rr(e[0])?o=e[0]:nr(e[0])&&(e[0].locale&&(r=e[0].locale),e[0].key&&(o=e[0].key)):2===e.length&&(rr(e[0])&&(o=e[0]),rr(e[1])&&(r=e[1])),this._d(t,r,o)},Wr.prototype.getNumberFormat=function(t){return ur(this._vm.numberFormats[t]||{})},Wr.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},Wr.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,fr(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},Wr.prototype._clearNumberFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},Wr.prototype._getNumberFormatter=function(t,e,n,r,o,i){for(var s=e,a=r[s],l=this._getLocaleChain(e,n),u=0;u<l.length;u++){var c=l[u];if(s=c,!sr(a=r[c])&&!sr(a[o]))break}if(sr(a)||sr(a[o]))return null;var p,d=a[o];if(i)p=new Intl.NumberFormat(s,Object.assign({},d,i));else{var f=s+"__"+o;(p=this._numberFormatters[f])||(p=this._numberFormatters[f]=new Intl.NumberFormat(s,d))}return p},Wr.prototype._n=function(t,e,n,r){if(!Wr.availabilities.numberFormat)return"";if(!n)return(r?new Intl.NumberFormat(e,r):new Intl.NumberFormat(e)).format(t);var o=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,r),i=o&&o.format(t);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.n(t,Object.assign({},{key:n,locale:e},r))}return i||""},Wr.prototype.n=function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];var r=this.locale,o=null,i=null;return 1===e.length?rr(e[0])?o=e[0]:nr(e[0])&&(e[0].locale&&(r=e[0].locale),e[0].key&&(o=e[0].key),i=Object.keys(e[0]).reduce((function(t,n){var r;return cr(Qn,n)?Object.assign({},t,((r={})[n]=e[0][n],r)):t}),null)):2===e.length&&(rr(e[0])&&(o=e[0]),rr(e[1])&&(r=e[1])),this._n(t,r,o,i)},Wr.prototype._ntp=function(t,e,n,r){if(!Wr.availabilities.numberFormat)return[];if(!n)return(r?new Intl.NumberFormat(e,r):new Intl.NumberFormat(e)).formatToParts(t);var o=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,r),i=o&&o.formatToParts(t);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,n,r)}return i||[]},Object.defineProperties(Wr.prototype,qr),Object.defineProperty(Wr,"availabilities",{get:function(){if(!Nr){var t="undefined"!=typeof Intl;Nr={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return Nr}}),Wr.install=Or,Wr.version="8.25.0";var Jr=Wr; +/*! + * vssue - A vue-powered issue-based comment plugin + * + * @version v1.4.8 + * @link https://vssue.js.org + * @license MIT + * @copyright 2018-2021 meteorlxy + */ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */function Gr(t,e,n,r){var o,i=arguments.length,s=i<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,r);else for(var a=t.length-1;a>=0;a--)(o=t[a])&&(s=(i<3?o(s):i>3?o(e,n,s):o(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}var Yr=i.a.extend({name:"Iconfont"});function Zr(t,e,n,r,o,i,s,a,l,u){"boolean"!=typeof s&&(l=a,a=s,s=!1);const c="function"==typeof n?n.options:n;let p;if(t&&t.render&&(c.render=t.render,c.staticRenderFns=t.staticRenderFns,c._compiled=!0,o&&(c.functional=!0)),r&&(c._scopeId=r),i?(p=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,l(t)),t&&t._registeredComponents&&t._registeredComponents.add(i)},c._ssrRegister=p):e&&(p=s?function(t){e.call(this,u(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,a(t))}),p)if(c.functional){const t=c.render;c.render=function(e,n){return p.call(n),t(e,n)}}else{const t=c.beforeCreate;c.beforeCreate=t?[].concat(t,p):[p]}return n}"undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());const Kr=Zr({render:function(t,e){var n=e._c;return n("svg",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}]},[n("symbol",{attrs:{id:"vssue-icon-bitbucket",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M579.5522464 489.45249493q4.8371808 38.38537173-30.81752427 61.55702827t-67.95459093 3.66689493q-23.79580907-10.37653333-32.6119616-35.34262826t-0.31207573-50.01020907 31.67573333-35.34262827q21.92335253-11.00068587 44.1587808-7.33379093t39.00952427 21.61127573 16.77409493 41.1160384zM647.19476053 476.65737173q-8.50407573-65.22392427-68.8908192-99.9424t-120.07131413-7.9579424q-38.38537173 17.08617173-61.24495253 53.9111616t-21.0651424 78.95527574q2.41859093 55.4715424 47.20152426 94.48106666t100.87862827 34.1723424q55.4715424-4.8371808 92.60860907-51.18049493t30.50544746-102.43900907zM792.93434133 146.32472427q-12.17097173-16.4620192-34.1723424-27.15062827t-35.34262826-13.41927573-43.30057174-7.64586667q-177.33729493-28.63299093-345.00022826 1.24830507-26.2144 4.29104747-40.25782827 7.33379093t-33.54819093 13.41927573-30.50544747 26.2144q18.2564576 17.08617173 46.34331413 27.6967616t44.78293334 13.41927574 53.36502826 7.02171413q138.95192427 17.71032427 273.06666667 0.62415253 38.38537173-4.8371808 54.53531413-7.33379093t44.1587808-13.1072 45.7191616-28.32091413zM827.65281813 777.10872427q-4.8371808 15.83786667-9.44030506 46.65539093t-8.50407574 51.18049493-17.39824746 42.6764192-35.34262827 34.4064q-52.4288 29.2571424-115.46819093 43.61264747t-123.1140576 13.41927573-122.8019808-11.3127616q-28.0088384-4.8371808-49.69813334-11.00068586t-46.65539093-16.4620192-44.4708576-26.52647574-31.67573333-37.4491424q-15.21371413-58.51428587-34.71847574-177.96144746l3.66689494-9.7523808 11.00068586-5.46133334q135.9091808 90.1900192 308.72137174 90.1900192t309.34552426-90.1900192q12.79512427 3.66689493 14.5895616 14.04342827t-3.0427424 27.46270507-4.8371808 22.54750506zM937.97175147 191.41973333q-15.83786667 101.8148576-67.64251414 399.22346667-3.0427424 18.2564576-16.4620192 34.1723424t-26.52647573 24.3419424-33.23611413 18.88060907q-153.61950507 76.7707424-371.8387808 53.67710506-151.12289493-16.4620192-240.14262827-84.72868586-9.12822827-7.33379093-15.52579093-16.1499424t-10.37653334-21.2992-5.46133333-20.75306667-3.66689493-24.10788587-3.3548192-21.2992q-5.46133333-30.50544747-16.1499424-91.43832426t-17.08617174-98.4600384-14.35550506-89.8779424-13.41927574-96.27550507q1.7944384-15.83786667 10.68860907-29.5692192t19.19268587-22.8595808 27.46270506-18.2564576 28.0088384-13.73135253 29.2571424-11.3127616q76.22460907-28.0088384 190.75657174-39.00952427 231.0144-22.54750507 412.01859093 30.50544747 94.48106667 28.0088384 131.072 74.35215253 9.7523808 12.17097173 10.0644576 31.0515808t-3.3548192 32.9240384z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitea",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M184.31868985 236.10860742C106.94832667 235.94086648 3.32655508 285.13080468 9.02973665 408.46209936c8.93218827 192.65010787 206.32096845 210.5144844 285.20099725 212.06608453 8.63864186 36.14810496 101.48307766 160.77938883 170.21479898 167.32127321h301.09442177c180.57278288-11.99345499 315.77172611-546.07960359 215.54670217-548.09249109-165.7696721 7.79993906-264.02374305 11.74184405-348.27147151 12.41280591v166.69224585l-26.25140843-11.61603761-0.16773997-154.99233728c-96.70246985-0.04193548-181.83083757-4.52899687-343.4069947-12.49667687-20.21274496-0.12580547-48.39316992-3.5644886-78.67035236-3.64835859z m10.94507577 68.14462849h9.22573371c10.98701124 98.75729283 28.85138778 156.50200291 64.99949274 244.73357185-92.25734394-10.90314029-170.75995634-37.69970509-185.18564974-137.75698809-7.46445813-51.78991757 17.69663558-105.84433456 110.96042329-107.01851827z m358.83913087 97.07988723c6.29027343 0.08386999 12.70635233 1.25805468 18.74501482 4.02577499l31.40943263 13.54505513-22.51917887 41.05451824a28.18042496 25.03528825 0 0 0-10.10637297 1.59353561 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 4.69673781 7.29671718l-38.83195528 70.70267333a28.18042496 25.03528825 0 0 0-9.30960467 1.59353659 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 36.06423497 15.09665623 28.18042496 25.03528825 0 0 0 16.94180276-32.08039449 28.18042496 25.03528825 0 0 0-6.62575434-9.22573468l37.82551056-68.85752581a28.18042496 25.03528825 0 0 0 12.28700044-1.25805469 28.18042496 25.03528825 0 0 0 8.93218826-4.69673783c14.59343435 6.12253248 26.54495386 11.11281671 35.14166122 15.34826717 12.91602778 6.37414341 17.48696012 10.60959485 18.87082027 15.30633169 1.38386015 4.61286685-0.12580547 13.50312062-7.42252263 29.10299872-5.45157063 11.61603859-14.46762889 28.09655497-25.11915823 47.51253164a28.18042496 25.03528825 0 0 0-10.52572486 1.59353659 28.18042496 25.03528825 0 0 0-16.98373826 32.038459 28.18042496 25.03528825 0 0 0 36.06423498 15.09665623 28.18042496 25.03528825 0 0 0 16.94180278-32.03845901 28.18042496 25.03528825 0 0 0-5.74511608-8.47090188c10.52572388-19.20630122 19.58371762-35.72875308 25.41270465-48.14155897 7.88380904-16.85793279 11.99345499-29.39654416 8.38703091-41.51580463-3.60642311-12.11926046-14.67730434-20.0030695-29.35460966-27.25785217-9.6450856-4.73867233-21.68047607-9.77089106-36.06423399-15.80955357a28.18042496 25.03528825 0 0 0-1.59353562-10.022502 28.18042496 25.03528825 0 0 0-6.08059796-8.7644483l22.14176246-40.38355541 122.61839638 52.96410227c22.14176247 9.6031511 31.2836262 33.12877372 20.54822685 52.8382968l-84.28966393 154.32137544c-10.77733482 19.66758857-37.23841869 27.80300855-59.38018118 18.24179293l-173.48574115-74.98005927c-22.14176247-9.5612156-31.32556167-33.12877372-20.54822687-52.83829679l84.28966395-154.27943995c7.38058716-13.54505513 22.22563246-21.59660511 37.951317-22.22563246h2.68384935z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitee",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M978.404275 409.561604H455.061338c-25.117645 0-45.499734 20.382089-45.499734 45.499734l-0.031997 113.781333c0 25.117645 20.350092 45.499734 45.499734 45.531731h318.594132c25.117645 0 45.499734 20.382089 45.499734 45.499735v22.749867a136.5312 136.5312 0 0 1-136.5312 136.5312H250.248539a45.499734 45.499734 0 0 1-45.499734-45.499734V341.343999a136.5312 136.5312 0 0 1 136.5312-136.5312L978.308284 204.780802c25.117645 0 45.499734-20.350092 45.499734-45.467738L1023.904009 45.531731h0.031997A45.499734 45.499734 0 0 0 978.468269 0h-0.031997L341.343999 0.031997C152.84967 0.031997 0.031997 152.84967 0.031997 341.343999v637.092273c0 25.117645 20.382089 45.499734 45.499734 45.499734h671.233072a307.171203 307.171203 0 0 0 307.171203-307.171203v-261.671468c0-25.117645-20.382089-45.499734-45.499734-45.499734z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-github",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 20.4425c-278.334 0-504 225.6345-504 504 0 222.6735 144.4275 411.6105 344.673 478.233 25.2 4.662 34.461-10.9305 34.461-24.255 0-12.0015-0.4725-51.723-0.693-93.8385-140.238 30.492-169.8165-59.472-169.8165-59.472-22.932-58.2435-55.944-73.7415-55.944-73.7415-45.738-31.2795 3.465-30.6495 3.465-30.6495 50.589 3.5595 77.238 51.9435 77.238 51.9435 44.9505 77.049 117.9045 54.7785 146.664 41.895 4.5045-32.571 17.577-54.81 32.004-67.41-111.951-12.726-229.635-55.9755-229.635-249.0705 0-55.0305 19.6875-99.981 51.9435-135.2925-5.229-12.6945-22.491-63.945 4.8825-133.371 0 0 42.336-13.545 138.6315 51.66 40.194-11.1825 83.3175-16.758 126.1575-16.9785 42.8085 0.189 85.9635 5.796 126.252 16.9785 96.201-65.205 138.4425-51.66 138.4425-51.66 27.4365 69.426 10.1745 120.6765 4.9455 133.371 32.319 35.28 51.8805 80.262 51.8805 135.2925 0 193.5675-117.9045 236.187-230.139 248.6925 18.081 15.6555 34.1775 46.305 34.1775 93.3345 0 67.4415-0.5985 121.716-0.5985 138.3165 0 13.419 9.072 29.1375 34.6185 24.192 200.151-66.717 344.3895-255.5595 344.3895-478.17 0-278.3655-225.666-504-504-504z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitlab",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M66.61375986 405.11600042L512.11376028 976.03999972 23.84576 621.65599958a39.312 39.312 0 0 1-14.07600042-43.30799944l56.8080007-173.26800028z m259.88400014 0h371.26800014L512.14975986 976.03999972zM215.11376 60.88400042l111.384 344.232H66.61375986l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z m742.49999972 344.232l56.8080007 173.2679993a39.23999986 39.23999986 0 0 1-14.07600042 43.30800042l-488.26800028 354.38400014 445.50000042-570.92400028z m0 0h-259.88400014l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-loading",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M843.307 742.24c0 3.217 2.607 5.824 5.824 5.824s5.824-2.607 5.824-5.824a5.823 5.823 0 0 0-5.824-5.824 5.823 5.823 0 0 0-5.824 5.824zM714.731 874.912c0 6.398 5.186 11.584 11.584 11.584s11.584-5.186 11.584-11.584-5.186-11.584-11.584-11.584-11.584 5.186-11.584 11.584zM541.419 943.2c0 9.614 7.794 17.408 17.408 17.408s17.408-7.794 17.408-17.408-7.794-17.408-17.408-17.408-17.408 7.794-17.408 17.408z m-186.56-9.152c0 12.795 10.373 23.168 23.168 23.168s23.168-10.373 23.168-23.168-10.373-23.168-23.168-23.168-23.168 10.373-23.168 23.168zM189.355 849.12c0 16.012 12.98 28.992 28.992 28.992s28.992-12.98 28.992-28.992-12.98-28.992-28.992-28.992-28.992 12.98-28.992 28.992zM74.731 704.736c0 19.228 15.588 34.816 34.816 34.816s34.816-15.588 34.816-34.816-15.588-34.816-34.816-34.816-34.816 15.588-34.816 34.816z m-43.008-177.28c0 22.41 18.166 40.576 40.576 40.576s40.576-18.166 40.576-40.576-18.166-40.576-40.576-40.576-40.576 18.166-40.576 40.576z m35.392-176.128c0 25.626 20.774 46.4 46.4 46.4s46.4-20.774 46.4-46.4c0-25.626-20.774-46.4-46.4-46.4-25.626 0-46.4 20.774-46.4 46.4z m106.176-142.016c0 28.843 23.381 52.224 52.224 52.224s52.224-23.381 52.224-52.224c0-28.843-23.381-52.224-52.224-52.224-28.843 0-52.224 23.381-52.224 52.224z m155.904-81.344c0 32.024 25.96 57.984 57.984 57.984s57.984-25.96 57.984-57.984-25.96-57.984-57.984-57.984-57.984 25.96-57.984 57.984z m175.104-5.056c0 35.24 28.568 63.808 63.808 63.808s63.808-28.568 63.808-63.808c0-35.24-28.568-63.808-63.808-63.808-35.24 0-63.808 28.568-63.808 63.808z m160.32 72.128c0 38.421 31.147 69.568 69.568 69.568s69.568-31.147 69.568-69.568-31.147-69.568-69.568-69.568-69.568 31.147-69.568 69.568z m113.92 135.488c0 41.638 33.754 75.392 75.392 75.392s75.392-33.754 75.392-75.392-33.754-75.392-75.392-75.392-75.392 33.754-75.392 75.392z m45.312 175.488c0 44.854 36.362 81.216 81.216 81.216s81.216-36.362 81.216-81.216c0-44.854-36.362-81.216-81.216-81.216-44.854 0-81.216 36.362-81.216 81.216z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-like",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-87.4-65.5-111.1a67.67 67.67 0 0 0-34.3-9.3H572.4l6-122.9c1.4-29.7-9.1-57.9-29.5-79.4-20.5-21.5-48.1-33.4-77.9-33.4-52 0-98 35-111.8 85.1l-85.9 311H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h601.3c9.2 0 18.2-1.8 26.5-5.4 47.6-20.3 78.3-66.8 78.3-118.4 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7-0.2-12.6-2-25.1-5.6-37.1zM184 852V568h81v284h-81z m636.4-353l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 22.4-13.2 42.6-33.6 51.8H329V564.8l99.5-360.5c5.2-18.9 22.5-32.2 42.2-32.3 7.6 0 15.1 2.2 21.1 6.7 9.9 7.4 15.2 18.6 14.6 30.5l-9.6 198.4h314.4C829 418.5 840 436.9 840 456c0 16.5-7.2 32.1-19.6 43z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-unlike",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 490.3c3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-51.6-30.7-98.1-78.3-118.4-8.3-3.6-17.2-5.4-26.5-5.4H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h129.3l85.8 310.8C372.9 889 418.9 924 470.9 924c29.7 0 57.4-11.8 77.9-33.4 20.5-21.5 31-49.7 29.5-79.4l-6-122.9h239.9c12.1 0 23.9-3.2 34.3-9.3 40.4-23.5 65.5-66.1 65.5-111 0-28.3-9.3-55.5-26.1-77.7zM184 456V172h81v284h-81z m627.2 160.4H496.8l9.6 198.4c0.6 11.9-4.7 23.1-14.6 30.5-6.1 4.5-13.6 6.8-21.1 6.7-19.6-0.1-36.9-13.4-42.2-32.3L329 459.2V172h415.4c20.4 9.2 33.6 29.4 33.6 51.8 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-14 25.5 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 19.1-11 37.5-28.8 48.4z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-heart",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M923 283.6c-13.4-31.1-32.6-58.9-56.9-82.8-24.3-23.8-52.5-42.4-84-55.5-32.5-13.5-66.9-20.3-102.4-20.3-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13-59.7 31.7-84 55.5-24.4 23.9-43.5 51.7-56.9 82.8-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.7 144.9 188.6 147.3l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c3.9-2.5 95.7-61.6 188.6-147.3 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3 0.1-35.3-7-69.6-20.9-101.9zM512 814.8S156 586.7 156 385.5C156 283.6 240.3 201 344.3 201c73.1 0 136.5 40.8 167.7 100.4C543.2 241.8 606.6 201 679.7 201c104 0 188.3 82.6 188.3 184.5 0 201.2-356 429.3-356 429.3z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-edit",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M723.2 917.76H286.72c-65.28 0-118.4-51.2-118.4-113.92V261.76C168.32 198.4 221.44 147.2 286.72 147.2h375.04c17.92 0 32 14.08 32 32s-14.08 32-32 32H286.72c-30.08 0-54.4 22.4-54.4 49.92v542.08c0 27.52 24.32 49.92 54.4 49.92H723.2c30.08 0 54.4-22.4 54.4-49.92V440.32c0-17.92 14.08-32 32-32s32 14.08 32 32v363.52c0 62.72-53.12 113.92-118.4 113.92z"}}),e._v(" "),n("path",{attrs:{d:"M499.84 602.24c-7.68 0-14.72-2.56-21.12-7.68-13.44-11.52-14.72-32-3.2-45.44L780.16 198.4c11.52-13.44 32-14.72 45.44-3.2s14.72 32 3.2 45.44L524.16 591.36c-6.4 7.04-15.36 10.88-24.32 10.88z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-delete",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M677.647059 256l0-90.352941c0-37.436235-23.461647-60.235294-61.771294-60.235294L408.094118 105.411765c-38.249412 0-61.741176 22.799059-61.741176 60.235294l0 90.352941-180.705882 0 0 60.235294 60.235294 0 0 512c0 54.272 33.972706 90.352941 90.352941 90.352941l391.529412 0c55.085176 0 90.352941-33.490824 90.352941-90.352941l0-512 60.235294 0 0-60.235294L677.647059 256zM406.588235 165.647059l210.823529 0-1.264941 90.352941L406.588235 256 406.588235 165.647059zM737.882353 858.352941l-451.764706 0 0-542.117647 451.764706 0L737.882353 858.352941zM466.823529 376.470588l-58.729412 0-1.505882 391.529412 60.235294 0L466.823529 376.470588zM617.411765 376.470588l-60.235294 0 0 391.529412 60.235294 0L617.411765 376.470588z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-reply",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M426.666667 384 426.666667 213.333333 128 512 426.666667 810.666667 426.666667 635.733333C640 635.733333 789.333333 704 896 853.333333 853.333333 640 725.333333 426.666667 426.666667 384Z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-error",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 720m-48 0a48 48 0 1 0 96 0 48 48 0 1 0-96 0Z"}}),e._v(" "),n("path",{attrs:{d:"M480 416v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8z"}}),e._v(" "),n("path",{attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48z m-783.5-27.9L512 239.9l339.8 588.2H172.2z"}})])])},staticRenderFns:[]},void 0,Yr,void 0,!0,void 0,!1,void 0,void 0,void 0);const Xr=Zr({},void 0,i.a.extend({name:"TransitionFade",functional:!0,props:{group:{type:Boolean,required:!1,default:!1},tag:{type:String,required:!1,default:"div"}},render:(t,{props:e,children:n})=>t(e.group?"TransitionGroup":"Transition",{props:{name:"fade",mode:"out-in",appear:!0,tag:e.tag}},n)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);const Qr=Zr({},void 0,i.a.extend({name:"VssueIcon",functional:!0,props:{name:{type:String,required:!0},title:{type:String,required:!1,default:null}},render:(t,{props:e,data:n})=>t("svg",Object.assign(Object.assign({},n),{class:["vssue-icon","vssue-icon-"+e.name],attrs:{"aria-hidden":"true"}}),[t("title",e.title),t("use",{attrs:{"xlink:href":"#vssue-icon-"+e.name}})])}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let to=class extends i.a{constructor(){super(...arguments),this.editMode=!1,this.editContent=this.comment.contentRaw,this.creatingReactions=[],this.isPutingComment=!1,this.isDeletingComment=!1}get currentUser(){return this.vssue.user?this.vssue.user.username:null}get content(){return this.comment.content}get author(){return this.comment.author}get createdAt(){return Kn(this.comment.createdAt)}get updatedAt(){return Kn(this.comment.updatedAt)}get showReactions(){return Boolean(this.vssue.API&&this.vssue.API.platform.meta.reactable&&this.comment.reactions&&!this.editMode)}get reactionKeys(){return["heart","like","unlike"]}get editContentRows(){return this.editContent.split("\n").length-1}get editInputRows(){return this.editContentRows<3?5:this.editContentRows+2}async postReaction({reaction:t}){try{if(this.creatingReactions.includes(t))return;this.creatingReactions.push(t);await this.vssue.postCommentReaction({commentId:this.comment.id,reaction:t})||this.vssue.$emit("error",new Error(this.vssue.$t("reactionGiven",{reaction:this.vssue.$t(t)})));const e=await this.vssue.getCommentReactions({commentId:this.comment.id});e&&(this.comment.reactions=e)}finally{this.creatingReactions.splice(this.creatingReactions.findIndex(e=>e===t),1)}}enterEdit(){this.editMode=!0,this.$nextTick(()=>{this.$refs.input.focus()})}resetEdit(){this.editMode=!1,this.editContent=this.comment.contentRaw}async putComment(){try{if(this.vssue.isPending)return;if(this.editContent!==this.comment.contentRaw){this.isPutingComment=!0,this.vssue.isUpdatingComment=!0;const t=await this.vssue.putComment({commentId:this.comment.id,content:this.editContent});t&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1,t)}this.editMode=!1}finally{this.isPutingComment=!1,this.vssue.isUpdatingComment=!1}}async deleteComment(){try{if(this.vssue.isPending)return;if(!window.confirm(this.vssue.$t("deleteConfirm")))return;this.isDeletingComment=!0,this.vssue.isUpdatingComment=!0;await this.vssue.deleteComment({commentId:this.comment.id})?(this.vssue.comments.count-=1,this.vssue.comments.data.length>1&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1),this.vssue.query.page>1&&this.vssue.query.page>Math.ceil(this.vssue.comments.count/this.vssue.query.perPage)?this.vssue.query.page-=1:await this.vssue.getComments()):this.vssue.$emit("error",new Error(this.vssue.$t("deleteFailed")))}finally{this.isDeletingComment=!1,this.vssue.isUpdatingComment=!1}}};Gr([Bn({type:Object,required:!0})],to.prototype,"comment",void 0),Gr([Dn()],to.prototype,"vssue",void 0),to=Gr([Nn({components:{VssueIcon:Qr}})],to);const eo=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-comment",class:{"vssue-comment-edit-mode":t.editMode,"vssue-comment-disabled":t.isDeletingComment||t.isPutingComment}},[n("div",{staticClass:"vssue-comment-avatar"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.author.avatar,alt:t.author.username}})])]),t._v(" "),n("div",{staticClass:"vssue-comment-body"},[t._t("body",[n("div",{staticClass:"vssue-comment-header"},[n("span",{staticClass:"vssue-comment-author"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.author.username)+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-comment-created-at"},[t._v("\n "+t._s(t.createdAt)+"\n ")])]),t._v(" "),n("div",{staticClass:"vssue-comment-main"},[t.editMode?n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.editContent,expression:"editContent"}],ref:"input",staticClass:"vssue-edit-comment-input",attrs:{rows:t.editInputRows},domProps:{value:t.editContent},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.putComment():null},input:function(e){e.target.composing||(t.editContent=e.target.value)}}}):n("article",{staticClass:"markdown-body",domProps:{innerHTML:t._s(t.content)}})]),t._v(" "),n("div",{staticClass:"vssue-comment-footer"},[t.editMode?n("span",{staticClass:"vssue-comment-hint"},[t._v("\n "+t._s(t.vssue.$t("editMode"))+"\n ")]):t._e(),t._v(" "),t.showReactions?n("span",{staticClass:"vssue-comment-reactions"},t._l(t.reactionKeys,(function(e){return n("span",{key:e,staticClass:"vssue-comment-reaction",attrs:{title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)},on:{click:function(n){return t.postReaction({reaction:e})}}},[n("VssueIcon",{attrs:{name:t.creatingReactions.includes(e)?"loading":e,title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)}}),t._v(" "),n("span",{staticClass:"vssue-comment-reaction-number"},[t._v("\n "+t._s(t.comment.reactions[e])+"\n ")])],1)})),0):t._e(),t._v(" "),n("span",{staticClass:"vssue-comment-operations"},[t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation",class:{"vssue-comment-operation-muted":t.isPutingComment},attrs:{title:t.vssue.$t(t.isPutingComment?"loading":"submit")},on:{click:function(e){return t.putComment()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.isPutingComment,expression:"isPutingComment"}],attrs:{name:"loading",title:t.vssue.$t("loading")}}),t._v("\n\n "+t._s(t.vssue.$t("submit"))+"\n ")],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation vssue-comment-operation-muted",attrs:{title:t.vssue.$t("cancel")},on:{click:function(e){return t.resetEdit()}}},[t._v("\n "+t._s(t.vssue.$t("cancel"))+"\n ")]):t._e(),t._v(" "),t.comment.author.username===t.currentUser?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.enterEdit()}}},[n("VssueIcon",{attrs:{name:"edit",title:t.vssue.$t("edit")}})],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser||t.vssue.isAdmin?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.deleteComment()}}},[n("VssueIcon",{attrs:{name:t.isDeletingComment?"loading":"delete",title:t.vssue.$t(t.isDeletingComment?"loading":"delete")}})],1):t._e(),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.vssue.$emit("reply-comment",t.comment)}}},[n("VssueIcon",{attrs:{name:"reply",title:t.vssue.$t("reply")}})],1)])])])],2)])},staticRenderFns:[]},void 0,to,void 0,!1,void 0,!1,void 0,void 0,void 0);let no=class extends i.a{get disabled(){return this.vssue.isPending}get pageCount(){const t=Math.ceil(this.vssue.comments.count/this.vssue.comments.perPage);return t>1?t:1}get perPageOptions(){const t=[5,10,20,50];return!t.includes(this.vssue.options.perPage)&&this.vssue.options.perPage<100&&t.push(this.vssue.options.perPage),t.sort((t,e)=>t-e)}get page(){return this.vssue.query.page>this.pageCount?this.pageCount:this.vssue.query.page}set page(t){t>0&&t<=this.pageCount&&(this.vssue.query.page=t)}get perPage(){return this.vssue.query.perPage}set perPage(t){this.perPageOptions.includes(t)&&(this.vssue.query.perPage=t)}};Gr([Dn()],no.prototype,"vssue",void 0),no=Gr([Nn({components:{VssueIcon:Qr}})],no);const ro=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-pagination"},[n("div",{staticClass:"vssue-pagination-per-page"},[n("label",[n("select",{directives:[{name:"model",rawName:"v-model",value:t.perPage,expression:"perPage"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.perPage=e.target.multiple?n:n[0]}}},t._l(t.perPageOptions,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",[t._v("\n "+t._s(t.vssue.$t("perPage"))+"\n ")])]),t._v(" "),t.vssue.API.platform.meta.sortable?n("span",{class:{"vssue-pagination-link":!0,disabled:t.disabled},attrs:{title:t.vssue.$t("sort")},on:{click:function(e){t.vssue.query.sort="asc"===t.vssue.query.sort?"desc":"asc"}}},[t._v("\n "+t._s("asc"===t.vssue.query.sort?"↑":"↓")+"\n ")]):t._e()]),t._v(" "),n("div",{staticClass:"vssue-pagination-page"},[n("span",{class:{"vssue-pagination-link":!0,disabled:1===t.page||t.disabled},attrs:{title:t.vssue.$t("prev")},domProps:{textContent:t._s("<")},on:{click:function(e){t.page-=1}}}),t._v(" "),n("label",[n("span",[t._v("\n "+t._s(t.vssue.$t("page"))+"\n ")]),t._v(" "),n("select",{directives:[{name:"show",rawName:"v-show",value:t.pageCount>1,expression:"pageCount > 1"},{name:"model",rawName:"v-model",value:t.page,expression:"page"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.page=e.target.multiple?n:n[0]}}},t._l(t.pageCount,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.pageCount<2,expression:"pageCount < 2"}],domProps:{textContent:t._s(t.page)}}),t._v(" "),n("span",{domProps:{textContent:t._s(" / "+t.pageCount+" ")}})]),t._v(" "),n("span",{class:{"vssue-pagination-link":!0,disabled:t.page===t.pageCount||t.disabled},attrs:{title:t.vssue.$t("next")},domProps:{textContent:t._s(">")},on:{click:function(e){t.page+=1}}})])])},staticRenderFns:[]},void 0,no,void 0,!1,void 0,!1,void 0,void 0,void 0);let oo=class extends i.a{};Gr([Dn()],oo.prototype,"vssue",void 0),oo=Gr([Nn({components:{TransitionFade:Xr,VssueComment:eo,VssuePagination:ro}})],oo);const io=Zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue-comments"},[e("VssuePagination"),this._v(" "),e("TransitionFade",{attrs:{group:""}},this._l(this.vssue.comments.data,(function(t){return e("VssueComment",{key:t.id,attrs:{comment:t}})})),1),this._v(" "),e("VssuePagination",{directives:[{name:"show",rawName:"v-show",value:this.vssue.comments.data.length>5,expression:"vssue.comments.data.length > 5"}]})],1)},staticRenderFns:[]},void 0,oo,void 0,!1,void 0,!1,void 0,void 0,void 0);const so=Zr({},void 0,i.a.extend({name:"VssueIcon",functional:!0,props:{type:{type:String,required:!1,default:"default"}},render:(t,{props:e,data:n,children:r})=>t("button",Object.assign(Object.assign({},n),{class:["vssue-button","vssue-button-"+e.type]}),r)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let ao=class extends i.a{constructor(){super(...arguments),this.content=""}get user(){return this.vssue.user}get platform(){return this.vssue.API&&this.vssue.API.platform.name}get isInputDisabled(){return this.loading||null===this.user||null===this.vssue.issue}get isSubmitDisabled(){return""===this.content||this.vssue.isPending||null===this.vssue.issue}get loading(){return this.vssue.isCreatingComment}get contentRows(){return this.content.split("\n").length-1}get inputRows(){return this.contentRows<3?5:this.contentRows+2}created(){this.vssue.$on("reply-comment",t=>{const e=t.contentRaw.replace(/\n/g,"\n> "),n=`@${t.author.username}\n\n> ${e}\n\n`;this.content=this.content.concat(n),this.focus()})}beforeDestroy(){this.vssue.$off("reply-comment")}focus(){this.$refs.input.focus()}async submit(){this.isSubmitDisabled||(await this.vssue.postComment({content:this.content}),this.content="",await this.vssue.getComments())}};Gr([Dn()],ao.prototype,"vssue",void 0),ao=Gr([Nn({components:{VssueButton:so,VssueIcon:Qr}})],ao);const lo=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-new-comment"},[n("div",{staticClass:"vssue-comment-avatar"},[t.user?n("a",{attrs:{href:t.user.homepage,title:t.user.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.user.avatar,alt:t.user.username}})]):n("VssueIcon",{attrs:{name:t.platform.toLowerCase(),title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}})],1),t._v(" "),n("div",{staticClass:"vssue-new-comment-body"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.content,expression:"content"}],ref:"input",staticClass:"vssue-new-comment-input",attrs:{rows:t.inputRows,disabled:t.isInputDisabled,placeholder:t.vssue.$t(t.user?"placeholder":"noLoginPlaceHolder"),spellcheck:!1,"aria-label":"leave a comment"},domProps:{value:t.content},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.submit():null},input:function(e){e.target.composing||(t.content=e.target.value)}}})]),t._v(" "),n("div",{staticClass:"vssue-new-comment-footer"},[t.user?n("span",{staticClass:"vssue-current-user"},[n("span",[t._v(t._s(t.vssue.$t("currentUser"))+" - "+t._s(t.user.username)+" - ")]),t._v(" "),n("a",{staticClass:"vssue-logout",on:{click:function(e){return t.vssue.logout()}}},[t._v("\n "+t._s(t.vssue.$t("logout"))+"\n ")])]):n("span",{staticClass:"vssue-current-user"},[t._v("\n "+t._s(t.vssue.$t("loginToComment",{platform:t.platform}))+"\n ")]),t._v(" "),n("div",{staticClass:"vssue-new-comment-operations"},[t.user?n("VssueButton",{staticClass:"vssue-button-submit-comment",attrs:{type:"primary",disabled:t.isSubmitDisabled},on:{click:function(e){return t.submit()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],attrs:{name:"loading"}}),t._v("\n\n "+t._s(t.vssue.$t(t.loading?"submitting":"submitComment"))+"\n ")],1):n("VssueButton",{staticClass:"vssue-button-login",attrs:{type:"primary",title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}},[t._v("\n "+t._s(t.vssue.$t("login",{platform:t.platform}))+"\n ")])],1)])])},staticRenderFns:[]},void 0,ao,void 0,!1,void 0,!1,void 0,void 0,void 0);let uo=class extends i.a{constructor(){super(...arguments),this.progress={show:!1,percent:0,timer:null,speed:200},this.alert={show:!1,message:null,timer:null}}onLoadingCommentsChange(t){this.vssue.comments&&(t?this.progressStart():this.progressDone())}created(){this.vssue.$on("error",t=>this.alertShow(t.message))}beforeDestroy(){this.vssue.$off("error"),null!==this.progress.timer&&window.clearTimeout(this.progress.timer),null!==this.alert.timer&&window.clearTimeout(this.alert.timer)}progressStart(){this.progress.show=!0,this.progress.percent=0,this.progress.timer=window.setInterval(()=>{this.progress.percent+=5,this.progress.percent>94&&null!==this.progress.timer&&window.clearInterval(this.progress.timer)},this.progress.speed)}progressDone(){this.progress.percent=100,null!==this.progress.timer&&window.clearTimeout(this.progress.timer),this.progress.timer=null,window.setTimeout(()=>{this.progress.show=!1},this.progress.speed)}alertShow(t){this.alert.show=!0,this.alert.message=t,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=window.setTimeout(()=>{this.alertHide()},3e3)}alertHide(){this.alert.show=!1,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=null}};Gr([Dn()],uo.prototype,"vssue",void 0),Gr([Wn("vssue.isLoadingComments")],uo.prototype,"onLoadingCommentsChange",null),uo=Gr([Nn({components:{TransitionFade:Xr}})],uo);const co=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-notice"},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.progress.show,expression:"progress.show"}],staticClass:"vssue-progress",style:{width:t.progress.percent+"%",transition:"all "+t.progress.speed+"ms linear"}}),t._v(" "),n("TransitionFade",[n("div",{directives:[{name:"show",rawName:"v-show",value:t.alert.show,expression:"alert.show"}],staticClass:"vssue-alert",domProps:{textContent:t._s(t.alert.message)},on:{click:function(e){return t.alertHide()}}})])],1)},staticRenderFns:[]},void 0,uo,void 0,!1,void 0,!1,void 0,void 0,void 0);let po=class extends i.a{get status(){return this.vssue.isFailed?"failed":this.vssue.isInitializing?"initializing":this.vssue.isIssueNotCreated&&!this.vssue.isCreatingIssue?this.vssue.isAdmin||!this.vssue.isLogined?"issueNotCreated":"failed":this.vssue.isLoginRequired?"loginRequired":!this.vssue.comments||this.vssue.isCreatingIssue?"loadingComments":0===this.vssue.comments.data.length?"noComments":null}handleClick(){"issueNotCreated"===this.status?this.vssue.postIssue():"loginRequired"===this.status&&this.vssue.login()}};Gr([Dn()],po.prototype,"vssue",void 0),po=Gr([Nn({components:{TransitionFade:Xr,VssueIcon:Qr}})],po);const fo=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("TransitionFade",[t.status?n("div",{key:t.status,staticClass:"vssue-status"},[["failed","loadingComments","initializing"].includes(t.status)?n("VssueIcon",{attrs:{name:"failed"===t.status?"error":"loading"}}):t._e(),t._v(" "),n("p",{staticClass:"vssue-status-info"},[n(["issueNotCreated","loginRequired"].includes(t.status)?"a":"span",{tag:"Component",on:{click:t.handleClick}},[t._v("\n "+t._s(t.vssue.$t(t.status))+"\n ")])],1)],1):t._e()])},staticRenderFns:[]},void 0,po,void 0,!1,void 0,!1,void 0,void 0,void 0);let ho=class extends i.a{};Gr([Dn()],ho.prototype,"vssue",void 0),ho=Gr([Nn({components:{TransitionFade:Xr,VssueIcon:Qr,VssueComments:io,VssueNewComment:lo,VssueNotice:co,VssueStatus:fo}})],ho);const mo=Zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("TransitionFade",[this.vssue.isInitializing?e("VssueStatus"):e("div",{staticClass:"vssue-body"},[this.vssue.API?e("VssueNewComment"):this._e(),this._v(" "),e("VssueNotice"),this._v(" "),e("TransitionFade",[this.vssue.comments&&this.vssue.comments.data.length>0?e("VssueComments"):e("VssueStatus")],1)],1)],1)},staticRenderFns:[]},void 0,ho,void 0,!1,void 0,!1,void 0,void 0,void 0);let go=class extends i.a{};Gr([Dn()],go.prototype,"vssue",void 0),go=Gr([Nn],go);const vo=Zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-header"},[n("a",{staticClass:"vssue-header-comments-count",attrs:{href:t.vssue.issue?t.vssue.issue.link:null,target:"_blank",rel:"noopener noreferrer"}},[n("span",[t._v("\n "+t._s(t.vssue.comments?t.vssue.$tc("comments",t.vssue.comments.count,{count:t.vssue.comments.count}):t.vssue.$tc("comments",0))+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-header-powered-by"},[n("span",[t._v("Powered by")]),t._v(" "),t.vssue.API?n("span",[n("a",{attrs:{href:t.vssue.API.platform.link,title:t.vssue.API.platform.name+" API "+t.vssue.API.platform.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.vssue.API.platform.name)+"\n ")]),t._v(" "),n("span",[t._v("&")])]):t._e(),t._v(" "),n("a",{attrs:{href:"https://github.com/meteorlxy/vssue",title:"Vssue v"+t.vssue.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n Vssue\n ")])])])},staticRenderFns:[]},void 0,go,void 0,!1,void 0,!1,void 0,void 0,void 0),yo={login:"Login with {platform}",logout:"Logout",currentUser:"Current User",loading:"Loading",submit:"Submit",submitting:"Submitting",submitComment:"Submit Comment",cancel:"Cancel",edit:"Edit",editMode:"Edit Mode",delete:"Delete",reply:"Reply",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comments per page",sort:"Click to change the sort direction",page:"Page",prev:"Previous Page",next:"Next Page",comments:"Comments | {count} Comment | {count} Comments",loginToComment:"Login with {platform} account to leave a comment",placeholder:"Leave a comment. Styling with Markdown is supported. Ctrl + Enter to submit.",noLoginPlaceHolder:"Login to leave a comment. Styling with Markdown is supported. ",failed:"Failed to load comments",initializing:"Initializing...",issueNotCreated:"Click to create issue",loadingComments:"Loading comments...",loginRequired:"Login to view comments",noComments:"No comments yet. Leave the first comment !",reactionGiven:"Already given '{reaction}' reaction",deleteConfirm:"Confirm to delete this comment ?",deleteFailed:"Failed to delete comment"},bo={login:"使用 {platform} 登录",logout:"退出登录",currentUser:"当前用户",loading:"加载中",submit:"提交",submitting:"发表中",submitComment:"发表评论",cancel:"取消",edit:"编辑",editMode:"编辑模式",delete:"删除",reply:"回复",heart:"喜欢",like:"赞",unlike:"踩",perPage:"每页评论数",sort:"点击改变排序方式",page:"页数",prev:"上一页",next:"下一页",comments:"评论 | {count} 条评论 | {count} 条评论",loginToComment:"使用 {platform} 帐号登录后发表评论",placeholder:"留下你的评论丨支持 Markdown 语法丨Ctrl + Enter 发表评论",noLoginPlaceHolder:"登录后才能发表评论丨支持 Markdown 语法",failed:"评论加载失败",initializing:"正在初始化...",issueNotCreated:"点击创建 Issue",loadingComments:"正在加载评论...",loginRequired:"登录后查看评论",noComments:"还没有评论,来发表第一条评论吧!",reactionGiven:"已经添加过 '{reaction}' 了",deleteConfirm:"确认要删除该评论吗?",deleteFailed:"评论删除失败"},wo={login:"Entrar com {platform}",logout:"Sair",currentUser:"Usuário Atual",loading:"Carregando",submit:"Enviar",submitting:"Enviando",submitComment:"Enviar Comentário",cancel:"Cancelar",edit:"Editar",editMode:"Modo de Edição",delete:"Apagar",reply:"Responder",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comentários por página",sort:"Clique para alterar a ordenação",page:"Página",prev:"Página Anterior",next:"Próxima Página",comments:"Comentários | {count} Comentário | {count} Comentários",loginToComment:"Entre com uma conta {platform} para deixar um comentário",placeholder:"Deixe um comentário. Estilos com Markdown suportados. Ctrl + Enter para enviar.",noLoginPlaceHolder:"Entre para deixar um comentário. Estilos com Markdown suportados. ",failed:"Falha ao carregar comentários",initializing:"Inicializando...",issueNotCreated:"Click to create issue",loadingComments:"Carregando comentários...",loginRequired:"Entrar para visualizar comentários",noComments:"Nenhum comentário. Deixe o primeiro comentário!",reactionGiven:"Já reagiu com '{reaction}'",deleteConfirm:"Apagar este comentário?",deleteFailed:"Falha ao apagar comentário"},ko={login:"{platform} でログイン",logout:"ログアウト",currentUser:"現在のユーザー",loading:"読み込み中",submit:"送信",submitting:"送信中",submitComment:"コメントを送信",cancel:"キャンセル",edit:"編集",editMode:"編集モード",delete:"削除",reply:"返信",heart:"ハート",like:"高評価",unlike:"低評価",perPage:"コメント/ページ",sort:"並び順を変更するにはクリックしてください",page:"ページ",prev:"前のページ",next:"次のページ",comments:"コメント | {count} コメント | {count} コメント",loginToComment:"コメントを残すには {platform} アカウントでログインしてください。",placeholder:"コメントを残してください。Markdown 記法をサポートしています。 Ctrl + Enter で送信できます。",noLoginPlaceHolder:"コメントを残すにはログインしてください。マークダウン記法をサポートしています。",failed:"コメントの読み込みに失敗しました",initializing:"初期化中...",issueNotCreated:"Click to create issue",loadingComments:"コメントの読み込み中...",loginRequired:"コメントを見るにはログインしてください",noComments:"まだコメントがありません。最初のコメントを残しましょう!",reactionGiven:"既に '{reaction}' のリアクションをしています",deleteConfirm:"本当にコメントを削除してもいいですか?",deleteFailed:"コメントの削除に失敗しました"},_o={login:"התחברו עם {platform}",logout:"התנתקו",currentUser:"משתמש/ת נוכחי/ת",loading:"טוען",submit:"שליחה",submitting:"שולח",submitComment:"שליחת תגובה",cancel:"ביטל",edit:"עריכה",editMode:"מצב עריכה",delete:"מחיקה",reply:"תשובה",heart:"לב",like:"לייק",unlike:"אנלייק",perPage:"תגובות לדף",sort:"לחצו כדי לשנות את כיוון המיון",page:"דף",prev:"הדף הקודם",next:"הדף הבא",comments:"תגובות | {count} תגובה | {count} תגובות",loginToComment:"התחברו עם חשבון {platform} כדי להשאיר תגובה",placeholder:"השאירו תגובה. יש תמיכה בעיצוב בעזרת Markdown. Ctrl + Enter כדי לשלוח.",noLoginPlaceHolder:"התחברו כדי להשאיר תגובה. יש תמיכה בעיצוב בעזרת Markdown. ",failed:"כשלון בטעינת התגובות",initializing:"מאתחל...",issueNotCreated:"לחצו ליצירת issue",loadingComments:"טוען תגובות...",loginRequired:"התחברו כדי לצפות בתגובות",noComments:"עדיין אין תגובות. השאירו תגובה ראשונה !",reactionGiven:"כבר ניתן חיווי '{reaction}'",deleteConfirm:"בטוחים במחיקת התגובה ?",deleteFailed:"כשלון במחיקת התגובה"};Object.prototype.hasOwnProperty.call(i.a,"$i18n")||i.a.use(Jr);const xo=new Jr({locale:"en",fallbackLocale:"en",messages:{en:yo,"en-US":yo,zh:bo,"zh-CN":bo,pt:wo,"pt-BR":wo,ja:ko,"ja-JP":ko,he:_o,"he-IL":_o}});let Po=class extends i.a{constructor(){super(...arguments),this.title=t=>`${t.prefix}${document.title}`,this.issueId=null,this.options=null,this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:10,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1}get version(){return"1.4.8"}get issueTitle(){return null===this.options?"":"function"==typeof this.title?this.title(this.options):`${this.options.prefix}${this.title}`}get isPending(){return this.isLoadingComments||this.isCreatingComment||this.isUpdatingComment}get isLogined(){return null!==this.accessToken&&null!==this.user}get isAdmin(){return null!==this.options&&null!==this.accessToken&&null!==this.user&&(this.user.username===this.options.owner||this.options.admins.includes(this.user.username))}get accessTokenKey(){return this.API?`Vssue.${this.API.platform.name.toLowerCase()}.access_token`:""}onQueryPerPageChange(){this.query.page=1,this.getComments()}onQueryChange(){this.getComments()}setOptions(t){this.options=Object.assign({labels:["Vssue"],state:"Vssue",prefix:"[Vssue]",admins:[],perPage:10,proxy:t=>"https://cors-anywhere.azm.workers.dev/"+t,issueContent:({url:t})=>t,autoCreateIssue:!1},t);const e=["api","owner","repo","clientId"];for(const t of e)this.options[t]||console.warn(`[Vssue] the option '${t}' is required`);if(this.options.locale)this.$i18n.locale=this.options.locale;else{const t=Object.keys(this.$i18n.messages),e=window.navigator.languages;this.$i18n.locale=e.filter(e=>t.includes(e)).shift()||"en"}}async init(){try{await this.initStore(),await this.initComments()}catch(t){t.response&&[401,403].includes(t.response.status)?this.isLoginRequired=!0:this.isFailed=!0,console.error(t)}}async initStore(){try{if(!this.options)throw new Error("Options are required to initialize Vssue");this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:this.options.perPage,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1;const t=this.options.api;this.API=new t({baseURL:this.options.baseURL,labels:this.options.labels,state:this.options.state,owner:this.options.owner,repo:this.options.repo,clientId:this.options.clientId,clientSecret:this.options.clientSecret,proxy:this.options.proxy}),await this.handleAuth()}finally{this.isInitializing=!1}}async initComments(){if(this.API&&this.options)if(this.issueId){const[t,e]=await Promise.all([this.API.getIssue({accessToken:this.accessToken,issueId:this.issueId}),this.API.getComments({accessToken:this.accessToken,issueId:this.issueId,query:this.query})]);this.issue=t,this.comments=e}else this.issue=await this.API.getIssue({accessToken:this.accessToken,issueTitle:this.issueTitle}),null===this.issue?(this.isIssueNotCreated=!0,this.options.autoCreateIssue&&await this.postIssue()):await this.getComments()}async postIssue(){if(this.API&&this.options&&!this.issue&&!this.issueId&&(this.isLogined||this.login(),this.isAdmin))try{this.isCreatingIssue=!0;const t=await this.API.postIssue({title:this.issueTitle,content:await this.options.issueContent({options:this.options,url:Xn(window.location.href)}),accessToken:this.accessToken});this.issue=t,this.isIssueNotCreated=!1,await this.getComments()}catch(t){this.isFailed=!0}finally{this.isCreatingIssue=!1}}async getComments(){try{if(!this.API||!this.issue||this.isLoadingComments)return;this.isLoadingComments=!0;const t=await this.API.getComments({accessToken:this.accessToken,issueId:this.issue.id,query:this.query});return this.comments=t,this.query.page!==t.page&&(this.query.page=t.page),this.query.perPage!==t.perPage&&(this.query.perPage=t.perPage),t}catch(t){if(!t.response||![401,403].includes(t.response.status)||this.isLogined)throw this.$emit("error",t),t;this.isLoginRequired=!0}finally{this.isLoadingComments=!1}}async postComment({content:t}){try{if(!this.API||!this.issue||this.isCreatingComment)return;this.isCreatingComment=!0;return await this.API.postComment({accessToken:this.accessToken,content:t,issueId:this.issue.id})}catch(t){throw this.$emit("error",t),t}finally{this.isCreatingComment=!1}}async putComment({commentId:t,content:e}){try{if(!this.API||!this.issue)return;return await this.API.putComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,content:e})}catch(t){throw this.$emit("error",t),t}}async deleteComment({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.deleteComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async getCommentReactions({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.getCommentReactions({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async postCommentReaction({commentId:t,reaction:e}){try{if(!this.API||!this.issue)return!1;return await this.API.postCommentReaction({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,reaction:e})}catch(t){throw this.$emit("error",t),t}}login(){this.API&&this.API.redirectAuth()}logout(){this.setAccessToken(null),this.user=null}async handleAuth(){if(!this.API)return;const t=await this.API.handleAuth();t?(this.setAccessToken(t),this.user=await this.API.getUser({accessToken:t})):this.getAccessToken()?this.user=await this.API.getUser({accessToken:this.accessToken}):(this.setAccessToken(null),this.user=null)}getAccessToken(){return this.accessToken=window.localStorage.getItem(this.accessTokenKey),this.accessToken}setAccessToken(t){null===t?window.localStorage.removeItem(this.accessTokenKey):window.localStorage.setItem(this.accessTokenKey,t),this.accessToken=t}};Gr([Wn("query.perPage")],Po.prototype,"onQueryPerPageChange",null),Gr([Wn("query.page"),Wn("query.sort")],Po.prototype,"onQueryChange",null),Po=Gr([Nn({i18n:xo})],Po);var Co=Po;let So=class extends i.a{constructor(){super(...arguments),this.vssue=new Co}onOptionsChange(t){this.vssue.setOptions(t)}mounted(){null!==this.title&&(this.vssue.title=this.title),null!==this.issueId&&(this.vssue.issueId=this.issueId),this.vssue.setOptions(this.options),this.vssue.init()}};var To;Gr([Bn({type:[String,Function],required:!1,default:null})],So.prototype,"title",void 0),Gr([Bn({type:[String,Number],required:!1,default:null})],So.prototype,"issueId",void 0),Gr([Bn({type:Object,required:!1,default:()=>({})})],So.prototype,"options",void 0),Gr([(To="vssue",An((function(t,e){var n=t.provide;Hn(n)&&(n=t.provide=Fn(n)),n.managed[e]=To||e})))],So.prototype,"vssue",void 0),Gr([Wn("options",{deep:!0})],So.prototype,"onOptionsChange",null),So=Gr([Nn({components:{Iconfont:Kr,VssueBody:mo,VssueHeader:vo}})],So);const Io=Zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue"},[e("Iconfont"),this._v(" "),e("VssueHeader"),this._v(" "),e("VssueBody")],1)},staticRenderFns:[]},void 0,So,void 0,!1,void 0,!1,void 0,void 0,void 0);var Oo={get version(){return"1.4.8"},installed:!1,install(t,e){if(this.installed)return!1;this.installed=!0,t.component("Vssue",{functional:!0,props:{title:{type:String,required:!1,default:void 0},issueId:{type:[Number,String],required:!1,default:void 0},options:{type:Object,required:!1,default:void 0}},render:(t,{data:n,props:r})=>t(Io,Object.assign(Object.assign({},n),{props:{title:r.title,issueId:r.issueId,options:Object.assign({},e,r.options)}}))})},VssueComponent:Io},Mo=n(202),Ao=n.n(Mo);function jo(t){return null===t?{username:"ghost",avatar:"https://avatars3.githubusercontent.com/u/10137?v=4",homepage:"https://github.com/ghost"}:{username:t.login,avatar:t.avatarUrl,homepage:t.url}}function $o(t){return{id:t.number,title:t.title,content:t.body,link:t.url}}function Lo(t){return{like:t.find(t=>"THUMBS_UP"===t.content).users.totalCount,unlike:t.find(t=>"THUMBS_DOWN"===t.content).users.totalCount,heart:t.find(t=>"HEART"===t.content).users.totalCount}}function Eo(t){return{id:t.id,content:t.bodyHTML,contentRaw:t.body,author:jo(t.author),createdAt:t.createdAt,updatedAt:t.updatedAt,reactions:Lo(t.reactionGroups)}}function Vo(t){return"like"===t?"THUMBS_UP":"unlike"===t?"THUMBS_DOWN":"heart"===t?"HEART":t}class Ro{constructor({baseURL:t="https://github.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:s,proxy:a}){if(void 0===i||void 0===a)throw new Error("clientSecret and proxy is required for GitHub V4");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=s,this.proxy=a,this._pageInfo={page:1,startCursor:null,endCursor:null,sort:null,perPage:null},this._issueNodeId=null,this.$http=Ao.a.create({baseURL:"https://github.com"===t?"https://api.github.com":Gn(t,"api"),headers:{Accept:"application/vnd.github.v3+json"}}),this.$http.interceptors.response.use(t=>t.data.error?Promise.reject(t.data.error_description):t.data.errors?Promise.reject(t.data.errors[0].message):t)}get platform(){return{name:"GitHub",link:this.baseURL,version:"v4",meta:{reactable:!0,sortable:!0}}}redirectAuth(){window.location.href=Jn(Gn(this.baseURL,"login/oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"public_repo",state:this.state})}async handleAuth(){const t=(e=window.location.search,Object(qn.parse)(e,{ignoreQueryPrefix:!0}));var e;if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Jn(Xn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Gn(this.baseURL,"login/oauth/access_token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t},{headers:{Accept:"application/json"}});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.post("graphql",{query:"query getUser {\n viewer {\n login\n avatarUrl\n url\n }\n}"},{headers:{Authorization:"token "+t}});return jo(e.data.viewer)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"token "+t}),!e){const t=[`"${n}"`,"in:title",`repo:${this.owner}/${this.repo}`,"is:public",...this.labels.map(t=>"label:"+t)].join(" "),{data:e}=await this.$http.post("graphql",{variables:{query:t},query:"query getIssueByTitle(\n $query: String!\n) {\n search(\n query: $query\n type: ISSUE\n first: 20\n ) {\n nodes {\n ... on Issue {\n id\n number\n title\n body\n url\n }\n }\n }\n}"},r),o=e.data.search.nodes.find(t=>t.title===n);return o?(this._issueNodeId=o.id,$o(o)):null}try{const{data:t}=await this.$http.post("graphql",{query:`query getIssueById {\n repository(owner: "${this.owner}", name: "${this.repo}") {\n issue (number: ${e}) {\n id\n number\n title\n body\n url\n }\n }\n}`},r);return this._issueNodeId=t.data.repository.issue.id,$o(t.data.repository.issue)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues`,{title:e,body:n,labels:this.labels},{headers:{Authorization:"token "+t}});return r.url=r.html_url,this._issueNodeId=r.node_id,$o(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={};t&&(i.headers={Authorization:"token "+t}),null!==this._pageInfo.sort&&o!==this._pageInfo.sort&&(n=1);const{firstOrLast:s,afterOrBefore:a,cursor:l}=this._getQueryParams({page:n,sort:o}),{data:u}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:r},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${s}: $perPage\n ${null===a?"":`${a}: "${l}"`}\n ) {\n totalCount\n pageInfo {\n endCursor\n startCursor\n }\n nodes {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},i),c=u.data.repository.issue.comments;return"desc"===o&&c.nodes.reverse(),this._pageInfo={page:n,startCursor:c.pageInfo.startCursor,endCursor:c.pageInfo.endCursor,sort:o,perPage:r},{count:c.totalCount,page:n,perPage:r,data:c.nodes.map(Eo)}}async postComment({accessToken:t,content:e}){const{data:n}=await this.$http.post("graphql",{variables:{issueNodeId:this._issueNodeId,content:e},query:"mutation postComment(\n $issueNodeId: ID!\n $content: String!\n) {\n addComment(\n input: {\n subjectId: $issueNodeId\n body: $content\n }\n ) {\n commentEdge {\n node {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Eo(n.data.addComment.commentEdge.node)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.post("graphql",{variables:{commentId:e,content:n},query:"mutation putComment(\n $commentId: ID!,\n $content: String!,\n) {\n updateIssueComment(input: {\n id: $commentId\n body: $content\n }) {\n issueComment {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Eo(r.data.updateIssueComment.issueComment)}async deleteComment({accessToken:t,commentId:e}){return await this.$http.post("graphql",{variables:{commentId:e},query:"mutation deleteComment(\n $commentId: ID!,\n) {\n deleteIssueComment(input: {\n id: $commentId\n }) {\n clientMutationId\n }\n}"},{headers:{Authorization:"token "+t}}),!0}async getCommentReactions({accessToken:t,issueId:e,commentId:n}){const{firstOrLast:r,afterOrBefore:o,cursor:i}=this._getQueryParams(),{data:s}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:this._pageInfo.perPage},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${r}: $perPage\n ${null===o?"":`${o}: "${i}"`}\n ) {\n nodes {\n id\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},{headers:{Authorization:"token "+t}});return Lo(s.data.repository.issue.comments.nodes.find(t=>t.id===n).reactionGroups)}async postCommentReaction({accessToken:t,commentId:e,reaction:n}){return await this.$http.post("graphql",{variables:{commentId:e,content:Vo(n)},query:"mutation postCommentReaction(\n $commentId: ID!,\n $content: ReactionContent!,\n) {\n addReaction(input: {\n subjectId: $commentId\n content: $content\n }) {\n reaction {\n databaseId\n }\n }\n}"},{headers:{Authorization:"token "+t}}),!0}_getQueryParams({page:t=this._pageInfo.page,sort:e=this._pageInfo.sort}={}){let n,r,o;return 1===t?(n="asc"===e?"first":"last",r=null,o=null):"asc"===e?t>this._pageInfo.page?(n="first",r="after",o=this._pageInfo.endCursor):(n="last",r="before",o=this._pageInfo.startCursor):t>this._pageInfo.page?(n="last",r="before",o=this._pageInfo.startCursor):(n="first",r="after",o=this._pageInfo.endCursor),{firstOrLast:n,afterOrBefore:r,cursor:o}}}n(401);var No=[function(t){var e=t.Vue;t.options,t.router,t.siteData,t.isServer;e.use(ze.a)},{},function(t){t.Vue.mixin({computed:{$dataBlock:function(){return this.$options.__data__block__}}})},{},{},function(t){t.Vue.component("BackToTop",We)},function(t){var e=t.Vue,n=qe.iconIdPrefix,r=void 0===n?"vp_icon_":n;if("undefined"!=typeof window){var o=window.document,i=o.createElement("div");i.setAttribute("data-plugin-name","__VUEPRESS_PLUGIN_SVG_ICONS__"),i.setAttribute("style","display: none;"),i.innerHTML='<svg arial-hidden="true" width="1820" height="12070" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><symbol viewBox="0 0 50 30" id="vp_icon_Gab"><g><path d="M13.8 7.6h-2.4V9l-.4-.3c-.8-.9-2-1.5-3.3-1.5h-.9c-5.6.3-8.7 7.2-5.4 12.1 2.3 3.4 7.1 4.1 9.7 1.5l.3-.3v.7c0 1-.1 1.5-.4 2.2-1 2.4-4.1 3-6.8 1.3l-.4-.2c-.1.1-1.9 3.5-1.9 3.6 0 .1.5.4.8.6 2.2 1.4 5.6 1.7 8.3.8 2.7-.9 4.5-3.2 5-6.4.2-1.1.2-.8.2-8.4V7.6h-2.4zm-4.1 10c-2.2 1.2-4.9-.4-4.9-2.9C4.8 12.6 7 11 9 11.6c2.8.8 3.3 4.5.7 6zM45.6 7.7c-2.4-1-5-.6-6.7 1l-.3.3V0h-4.8v22h4.8v-1.4l.3.3c2.4 2.4 6.9 1.9 9.3-.9 3.3-4.1 1.9-10.4-2.6-12.3zm-1.9 9.8c-2.1 1.4-5.1-.2-5.1-2.8 0-2.1 1.9-3.7 3.9-3.3 2.9.7 3.7 4.4 1.2 6.1zM31.5 12.5c-.7-3.7-3.1-5.5-7.1-5.3-1.7.1-4 .7-4.8 1.4l-.1.1.7 1.7c.4.9.7 1.7.7 1.7s.1 0 .2-.1c2.7-1.4 5.4-.9 5.6 1.1v.2l-.4-.1c-3-.8-6.3-.1-7.7 1.6-1.8 2.2-.9 5.8 1.7 7.1 2.1 1 4.6.6 6.1-.8l.2-.2v1.2h4.8v-4c.3-4.4.3-4.8.1-5.6zm-4.6 3.9c-.1.7-.5 1.5-1 2-1.2 1.1-3 .7-3.2-.7-.2-1 .6-1.7 2-1.8H25.3c.5 0 1 .1 1.4.2l.3.1-.1.2z" /></g></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_GitHub"><defs><style></style></defs><path d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9 19.9-10.8 19.9-22.2v-77.6c-135.8 15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5 31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5 17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5 16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2 118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0 80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7 24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59 188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c.8 9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4 512.1c0-247.5-200.6-447.9-447.9-447.9C265 64.1 64.6 264.5 64.6 512z" /></symbol><symbol viewBox="0 0 1024 1024" overflow="hidden" id="vp_icon_Keybase"><path d="M636.34 838a36 36 0 1036 36 36 36 0 00-36-36zm223.84-295.2c-19-29.24-78.74-104.9-174.52-147.42q-18.2-8.12-36.76-14.54a156.86 156.86 0 00-95.76-208.26c-24.82-8.2-46.66-12-64.82-11.54-1.2-4-3.78-22 18.8-70L461.32 64l-10.96 15.12c-17.38 24.12-33.84 47.1-48.68 69.78a102 102 0 00-16.58-2.5c-83.06-4.9-78-4.66-82.12-4.66-101.22 0-101.5 104.24-101.5 91.76l-4.72 73.36c-3.22 54 39.5 100.42 95.26 103.7l17.86 1.08a428 428 0 00-92.58 71.08C92 609.32 92 748 92 859.54v67.28l46.64-59.6a297.2 297.2 0 0029.12 75.12c11.56 20.26 29.74 18.9 39.28 14.66 8.42-3.74 20-13.84 7.5-40.22a356.58 356.58 0 01-31.52-106.26l93.64-119.66-49.32 148.22c116.46-84.8 314.76-123.52 472.5-77.18 68.4 20.1 134.9 1.38 169.48-47.68 1.44-2 2.4-4.32 3.7-6.44a312.18 312.18 0 015.6 56.86c0 46.6-7.38 105.86-29.76 163.28-5.04 12.92 3.52 29 17.2 31.48 14.84 3.14 30.66-6.2 36.74-22.3C922 886 932 828 932 764.64c0-77.16-26-154.92-71.82-221.84zM348.74 257.16l-31.4-1.86-2.78 43.58 26.26 1.56a186 186 0 00.64 39.14l-44.76-2.68a24.56 24.56 0 01-23.52-25.58L278 238c2-24.34 27.74-22.54 26.52-22.64l58.22 3.46a288.7 288.7 0 00-14 38.34zm296.84 344.36a21.02 21.02 0 01-28.7-2.78l-19.36-22.98-68.84 54a16.18 16.18 0 01-22.26-2.16l-31.56-37.28a14.76 14.76 0 012.68-20.68l69.14-54.36-28.28-33.48-34.18 26.9a15.5 15.5 0 01-21.18-2s-7.44-8.84-7.6-9.06a14.76 14.76 0 012.74-20.68L492 450.38s-37.02-44-37.2-44.28a19.12 19.12 0 013.48-26.84 20.76 20.76 0 0128.6 2.74l162.18 192.64a19.16 19.16 0 01-3.48 26.88zM438.88 838a36 36 0 1036 36 36 36 0 00-36-36z" /></symbol><symbol viewBox="0 0 1024 1024" overflow="hidden" id="vp_icon_PGP"><path d="M704 0C527.264 0 384 143.264 384 320c0 20.032 1.856 39.616 5.376 58.624L0 768v192a64 64 0 0064 64h64v-64h128V832h128V704h128l83.04-83.04A319.264 319.264 0 00704 640c176.736 0 320-143.264 320-320S880.736 0 704 0zm95.872 320.128a96 96 0 110-192 96 96 0 010 192z" /></symbol><symbol viewBox="0 0 24 24" id="vp_icon_RSS"><path d="M19 0H5a5 5 0 00-5 5v14a5 5 0 005 5h14a5 5 0 005-5V5a5 5 0 00-5-5zM6.168 20C4.971 20 4 19.031 4 17.835s.971-2.165 2.168-2.165a2.166 2.166 0 110 4.33zm5.18 0c-.041-4.029-3.314-7.298-7.348-7.339V9.454C9.814 9.495 14.518 14.193 14.561 20h-3.213zm5.441 0C16.768 12.937 11.053 7.239 4 7.208V4c8.83.031 15.98 7.179 16 16h-3.211z" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_Telegram"><defs><style></style></defs><path d="M1021.104 160l-155.2 728c-11.2 51.2-41.6 64-84.8 40l-235.2-171.2-113.6 108.8c-12.8 12.8-22.4 22.4-48 22.4l17.6-240 436.8-393.6c19.2-17.6-4.8-25.6-28.8-9.6L269.104 584l-232-72c-51.2-16-51.2-51.2 11.2-75.2l907.2-350.4c43.2-14.4 80 9.6 65.6 73.6z" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_Twitter"><defs><style></style></defs><path d="M957.728 233.152q-38.272 56-92.576 95.424.576 8 .576 24 0 74.272-21.728 148.288t-66.016 141.984-105.44 120.288T525.12 846.56t-184.576 31.136q-154.848 0-283.424-82.848 20 2.272 44.576 2.272 128.576 0 229.152-78.848-60-1.152-107.424-36.864t-65.152-91.136q18.848 2.848 34.848 2.848 24.576 0 48.576-6.272-64-13.152-106.016-63.712t-42.016-117.44v-2.272q38.848 21.728 83.424 23.424-37.728-25.152-60-65.728t-22.272-88q0-50.272 25.152-93.152 69.152 85.152 168.288 136.288t212.288 56.864q-4.576-21.728-4.576-42.272 0-76.576 54.016-130.56t130.56-54.016q80 0 134.848 58.272 62.272-12 117.152-44.576-21.152 65.728-81.152 101.728 53.152-5.728 106.272-28.576z" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_YouTube"><defs><style></style></defs><path d="M1002.453 264.747a128.299 128.299 0 00-89.088-89.088c-79.786-21.376-400.896-21.376-400.896-21.376s-320.298-.427-400.896 21.376a128.299 128.299 0 00-89.088 89.088A1333.205 1333.205 0 00.213 512.427a1333.205 1333.205 0 0022.272 246.741 128.299 128.299 0 0089.088 89.088c79.702 21.419 400.896 21.419 400.896 21.419s320.256 0 400.896-21.419a128.299 128.299 0 0089.088-89.088 1333.205 1333.205 0 0021.334-246.741 1333.205 1333.205 0 00-21.334-247.68zM409.984 665.643V358.74l267.264 153.686z" /></symbol><symbol viewBox="0 0 1820 1024" id="vp_icon_arrowDown"><defs><style></style></defs><path d="M1647.783 30.01a100.263 100.263 0 01143.042 0 103.307 103.307 0 010 144.835L981.75 994.018a100.263 100.263 0 01-143.014 0L29.632 174.845a103.307 103.307 0 010-144.834 100.263 100.263 0 01143.042 0l737.569 746.813 737.54-746.813z" fill="#e6e6e6" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_cross"><defs><style></style></defs><path d="M810.66 170.66q18.33 0 30.495 12.165t12.165 30.495q0 18.002-12.33 30.33L572.315 511.98 840.99 780.308q12.329 12.33 12.329 30.331 0 18.33-12.165 30.495T810.66 853.3q-18.002 0-30.331-12.329L512 572.293 243.671 840.97q-12.329 12.33-30.33 12.33-18.33 0-30.496-12.166T170.68 810.64q0-18.002 12.33-30.33l268.676-268.33L183.01 243.652q-12.329-12.33-12.329-30.331 0-18.33 12.165-30.495t30.495-12.165q18.002 0 30.331 12.329L512 451.666l268.329-268.677q12.329-12.33 30.33-12.33z" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_leftArrow"><defs><style></style></defs><path d="M91.666 540.286c-15.594-15.596-15.594-40.974.036-56.604L442.29 132.228c15.6-15.64 15.57-40.968-.07-56.57-15.642-15.6-40.97-15.57-56.572.07L35.098 427.144c-46.79 46.79-46.79 122.924-.036 169.678l350.586 351.45a39.876 39.876 0 0028.322 11.75c10.22 0 20.444-3.894 28.25-11.682 15.64-15.602 15.672-40.93.07-56.57L91.666 540.286z" /><path d="M983.998 471.998H257.96c-22.094 0-40.002 17.908-40.002 40.002s17.908 40.002 40.002 40.002h726.036c22.094 0 40.002-17.908 40.002-40.002s-17.908-40.002-40-40.002z" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_menu"><defs><style></style></defs><path d="M128 213.34h768q17.674 0 30.167 12.493T938.66 256t-12.493 30.167T896 298.66H128q-17.674 0-30.167-12.493T85.34 256t12.493-30.167T128 213.34zm0 512h768q17.674 0 30.167 12.493T938.66 768t-12.493 30.167T896 810.66H128q-17.674 0-30.167-12.493T85.34 768t12.493-30.167T128 725.34zm0-256h768q17.674 0 30.167 12.493T938.66 512t-12.493 30.167T896 554.66H128q-17.674 0-30.167-12.493T85.34 512t12.493-30.167T128 469.34z" /></symbol><symbol class="ionicon" viewBox="0 0 512 512" id="vp_icon_qr-code"><rect x="336" y="336" width="80" height="80" rx="8" ry="8" /><rect x="272" y="272" width="64" height="64" rx="8" ry="8" /><rect x="416" y="416" width="64" height="64" rx="8" ry="8" /><rect x="432" y="272" width="48" height="48" rx="8" ry="8" /><rect x="272" y="432" width="48" height="48" rx="8" ry="8" /><rect x="336" y="96" width="80" height="80" rx="8" ry="8" /><rect x="288" y="48" width="176" height="176" rx="16" ry="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" /><rect x="96" y="96" width="80" height="80" rx="8" ry="8" /><rect x="48" y="48" width="176" height="176" rx="16" ry="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" /><rect x="96" y="336" width="80" height="80" rx="8" ry="8" /><rect x="48" y="288" width="176" height="176" rx="16" ry="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" /></symbol><symbol viewBox="0 0 1024 1024" id="vp_icon_rightArrow"><defs><style></style></defs><path d="M988.938 427.178L638.352 75.728c-15.604-15.642-40.93-15.67-56.572-.07-15.64 15.602-15.672 40.93-.07 56.57l350.622 351.488c15.594 15.596 15.594 40.974-.036 56.604L581.71 891.772c-15.6 15.64-15.57 40.968.07 56.57a39.882 39.882 0 0028.252 11.68 39.884 39.884 0 0028.322-11.752l350.55-351.414c46.788-46.79 46.788-122.924.034-169.678z" /><path d="M766.038 471.998H40.002C17.908 471.998 0 489.908 0 512s17.908 40.002 40.002 40.002h726.036c22.094 0 40.002-17.908 40.002-40.002s-17.908-40.002-40.002-40.002z" /></symbol><symbol viewBox="0 0 24 24" id="vp_icon_verifiedUser"><path fill="none" d="M0 0H24V24H0z" /><path d="M12 1l8.217 1.826c.457.102.783.507.783.976v9.987c0 2.006-1.003 3.88-2.672 4.992L12 23l-6.328-4.219C4.002 17.668 3 15.795 3 13.79V3.802c0-.469.326-.874.783-.976L12 1zm4.452 7.222l-4.95 4.949-2.828-2.828-1.414 1.414L11.503 16l6.364-6.364-1.415-1.414z" fill="rgba(235,113,50,1)" /></symbol></defs></svg>',o.body.appendChild(i),e.component("VpIcon",{functional:!0,props:{name:{type:String,required:!0},color:{type:String,default:void 0},size:{type:String,default:void 0}},render:function(t,e){var n=e.data,o=e.props,i=e.parent;if(i._isMounted)return t("svg",Le(Le({},n),{},{style:{fill:o.color,fontSize:o.size},attrs:{"aria-hidden":"true"},class:["vp-icon","vp-icon-".concat(o.name)]}),[t("use",{attrs:{"xlink:href":"#".concat(r+o.name)}})]);i.$once("hook:mounted",(function(){i.$forceUpdate()}))}})}},function(t){var e=t.Vue.config.ignoredElements;e.every((function(t){return"/^mjx-/"!==t.toString()}))&&e.push(/^mjx-/)},function(t){t.Vue.component("Mermaid",Ye)},function(t){t.Vue,t.options;var e=t.router,n=t.siteData,r=Ke(n.pages,(function(t,e){if(e.frontmatter&&e.frontmatter.redirectFrom){var n,r=e.frontmatter.redirectFrom,o=Ze(Array.isArray(r)?r:[r]);try{for(o.s();!(n=o.n()).done;){var i=n.value;t.push({from:i,to:e.path})}}catch(t){o.e(t)}finally{o.f()}}}),[]);function o(t,e){return t.toLowerCase().replace(/\/$/,"")===e.toLowerCase().replace(/\/$/,"")}e.beforeEach((function(t,n,i){if(s=t.path,e.options.routes.some((function(t){return o(t.path,s)})))return i();var s,a,l=Ze(r);try{for(l.s();!(a=l.n()).done;){var u=a.value;if(o(t.path,u.from))return i(u.to)}}catch(t){l.e(t)}finally{l.f()}i()}))},function(t){t.Vue.component("CodeCopy",Re)},function(t){var e=t.Vue,n=JSON.parse('{"name":"VueCustomTooltip","color":"#e6e6e6","background":"#16181d","borderRadius":"100px","fontWeight":500}');e.use(cn,n)},function(t){var e=t.Vue,n=Object.keys(hn).map((function(t){var e,n=hn[t],r="$".concat(t);return je(e={},r,(function(){var t=this.$site.pages;return new mn(n,t)})),je(e,"$current".concat(t.charAt(0).toUpperCase()+t.slice(1)),(function(){var t=this.$route.meta.id;return this[r].getItemByName(t)})),e})).reduce((function(t,e){return Object.assign(t,e),t}),{});n.$frontmatterKey=function(){var t=this["$".concat(this.$route.meta.id)];return t||null},e.mixin({computed:n})},function(t){t.Vue.mixin({computed:{$pagination:function(){return this.$route.meta.pid&&this.$route.meta.id?this.$getPagination(this.$route.meta.pid,this.$route.meta.id):null}},methods:{$getPagination:function(t,e){return e=e||t,_n.getPagination(t,e,this.$route)}}})},function(t){var e={$service:function(){return xn}};t.Vue.mixin({computed:e})},function(t){var e=t.Vue,n=JSON.parse('{"owner":"codemonkeysio","repo":"code-monkeys-blog-comments","clientId":"70480748c9fd241c5495","clientSecret":"c6e9d0221e76f8b0c4604d1a61e05fa72a33758c","labels":[":monkey_face:comments"],"prefix":"[Post] ","admins":["jchiarulli"],"perPage":10}');e.use(Oo,Object.assign({},n,{api:Ro}));var r=e.component("Vssue");e.component("Vssue",{functional:!0,render:function(t,e){var o=e.parent,i=e.data;if(n.locale||(i.attrs||(i.attrs={}),i.attrs.options||(i.attrs.options={}),i.attrs.options.locale||(i.attrs.options=Object.assign({locale:o.$lang||"en"},i.attrs.options))),o._isMounted)return t(r,i);o.$once("hook:mounted",(function(){o.$forceUpdate()}))}})}],Do=["BackToTop","VueCustomTooltip"];n(206);n(194);function Fo(t,e){return(Fo=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}n(195);function Ho(t){return(Ho=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var Uo=n(203),zo=n.n(Uo);function Bo(t,e){return!e||"object"!==zo()(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function Wo(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=Ho(t);if(e){var o=Ho(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bo(this,n)}}var qo=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Fo(t,e)}(n,t);var e=Wo(n);function n(){return pn(this,n),e.apply(this,arguments)}return n}(function(){function t(){pn(this,t),this.store=new i.a({data:{state:{}}})}return fn(t,[{key:"$get",value:function(t){return this.store.state[t]}},{key:"$set",value:function(t,e){i.a.set(this.store.state,t,e)}},{key:"$emit",value:function(){var t;(t=this.store).$emit.apply(t,arguments)}},{key:"$on",value:function(){var t;(t=this.store).$on.apply(t,arguments)}}]),t}());Object.assign(qo.prototype,{getPageAsyncComponent:de,getLayoutAsyncComponent:fe,getAsyncComponent:he,getVueComponent:me});var Jo={install:function(t){var e=new qo;t.$vuepress=e,t.prototype.$vuepress=e}};function Go(t){t.beforeEach((function(e,n,r){if(Yo(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){var o=e.path.replace(/\/$/,"")+".html";Yo(t,o)?r(o):r()}else r();else{var i=e.path+"/",s=e.path+".html";Yo(t,s)?r(s):Yo(t,i)?r(i):r()}}))}function Yo(t,e){var n=e.toLowerCase();return t.options.routes.some((function(t){return t.path.toLowerCase()===n}))}var Zo={props:{pageKey:String,slotKey:{type:String,default:"default"}},render:function(t){var e=this.pageKey||this.$parent.$page.key;return function(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}("pageKey",e),i.a.component(e)||i.a.component(e,de(e)),i.a.component(e)?t(e):t("")}},Ko={functional:!0,props:{slotKey:String,required:!0},render:function(t,e){var n=e.props,r=e.slots;return t("div",{class:["content__".concat(n.slotKey)]},r()[n.slotKey])}},Xo={computed:{openInNewWindowTitle:function(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Qo=(n(403),n(404),Object(Ve.a)(Xo,(function(){var t=this.$createElement,e=this._self._c||t;return e("span",[e("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[e("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),e("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),e("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports);function ti(){return(ti=o(regeneratorRuntime.mark((function t(e){var n,r,o,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n="undefined"!=typeof window&&window.__VUEPRESS_ROUTER_BASE__?window.__VUEPRESS_ROUTER_BASE__:He.routerBase||He.base,Go(r=new Yt({base:n,mode:"history",fallback:!1,routes:Fe,scrollBehavior:function(t,e,n){return n||(t.hash?!i.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})}})),o={},t.prev=4,t.next=7,Promise.all(No.filter((function(t){return"function"==typeof t})).map((function(t){return t({Vue:i.a,options:o,router:r,siteData:He,isServer:e})})));case 7:t.next=12;break;case 9:t.prev=9,t.t0=t.catch(4),console.error(t.t0);case 12:return s=new i.a(Object.assign(o,{router:r,render:function(t){return t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Do.map((function(e){return t(e)})))])}})),t.abrupt("return",{app:s,router:r});case 14:case"end":return t.stop()}}),t,null,[[4,9]])})))).apply(this,arguments)}i.a.config.productionTip=!1,i.a.use(Yt),i.a.use(Jo),i.a.mixin(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.a;Zt(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),o=new r,s=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(s).reduce((function(t,e){return e.startsWith("$")&&(t[e]=s[e].get),t}),a),{computed:a}}((function(t){return function(){function e(){pn(this,e)}return fn(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n<t.length;n++){var r=t[n];if(r.path.toLowerCase()===e.toLowerCase())return r}return{path:"",frontmatter:{}}}(this.$site.pages,this.$route.path)}}]),e}()}),He)),i.a.component("Content",Zo),i.a.component("ContentSlotsDistributor",Ko),i.a.component("OutboundLink",Qo),i.a.component("ClientOnly",{functional:!0,render:function(t,e){var n=e.parent,r=e.children;if(n._isMounted)return r;n.$once("hook:mounted",(function(){n.$forceUpdate()}))}}),i.a.component("Layout",fe("Layout")),i.a.component("NotFound",fe("NotFound")),i.a.prototype.$withBase=function(t){var e=this.$site.base;return"/"===t.charAt(0)?e+t.slice(1):t},window.__VUEPRESS__={version:"1.8.2",hash:"d7536ce"},function(t){return ti.apply(this,arguments)}(!1).then((function(t){var e=t.app;t.router.onReady((function(){e.$mount("#app")}))}))}]); \ No newline at end of file diff --git a/atom.xml b/atom.xml new file mode 100644 index 00000000..7c60f028 --- /dev/null +++ b/atom.xml @@ -0,0 +1,11541 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"> + <id>https://codemonkeys.tech/</id> + <title>Code Monkeys + Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵 + 2024-07-17T04:15:09.166Z + vuepress-plugin-feed1 + + + https://codemonkeys.tech/images/code-monkeys-logos/code-monkeys-rss-image.png + https://codemonkeys.tech/images/code-monkeys-logos/code-monkeys-rss-icon.png + Made by and for Code Monkeys 🐵 + + J the Code Monkey + + + Climbing Stairs Solution 1 + https://codemonkeys.tech/climbing-stairs-solution-1/ + + 2024-07-17T04:15:09.236Z + Hey fellow Code Monkeys!!! 🐵 Check out the first Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒 +

Climbing Stairs Solution 1

+ +

Climbing Stairs

+

Get the code & notes on

+

Problem Description

+

You are climbing a staircase. It takes n steps to reach the top.

+

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

+

Examples

+

Ex 1) Input: n = 2 Output: 2

+

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

+

Ex 2) Input: n = 3 Output: 3

+

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

+

Constraints

+
    +
  • +
+

Thought Process

+
    +
  • +

    Let's start by diagramming the different ways we can climb the steps to see if we can find a pattern.

    +
      +
    • When n = 3 we have:
    • +
    +
  • +
+
    +
  • +

    From the diagram we can see there are 3 distinct ways to climb to the top when n = 3 since we can ignore the scenarios where we take extra steps.

    +
  • +
  • +

    To help you see a pattern try drawing out more diagrams for larger values of n or creating a generalized diagram for any value of n.

    +
  • +
  • +

    The diagram above is an example of a recursion tree.

    +
  • +
  • +

    So, one way to solve this problem is to come up with a recursive formula that represents how many distinct ways we can climb the stairs.

    +
  • +
  • +

    Let's use the diagram to help us come up with our recursive formula.

    +
  • +
  • +

    We know we can either add 1 step or 2 steps each time we climb up the stairs, and we want to hit our target of n steps.

    +
  • +
  • +

    So, we need to keep track of how many steps we have taken which we can represent with the variable , where represents the current choice when climbing the stairs.

    +
  • +
  • +

    Initially, , here means we haven't made a choice to take 1 step or 2 steps yet.

    +
  • +
  • +

    Each time we climb the stairs we make one of the following choices:

    +
  • +
+

+

+

+
    +
  • +

    Now, we'll let denote our function for climbing the stairs.

    +
  • +
  • +

    Here's how we can represent the different scenarios for climbing the stairs:

    +
  • +
+

+
    +
  • +

    We're passing the + and our target value of steps to our function .

    +
  • +
  • +

    Now, we need to determine how many times we need to to call .

    +
  • +
  • +

    We know from the diagram if , then we can ignore that way of climbing the stairs

    +
  • +
  • +

    We also know if , then we have found a valid way to climb the steps.

    +
  • +
  • +

    Using this knowledge we can come up with the following:

    +
  • +
+

Implementation

+ +
+var climbStairs = function(n) {
+  return wayToClimb(0, n);
+};
+
+var wayToClimb = function(stepsTaken, n) {
+  if (stepsTaken > n) {
+    return 0;
+  }
+
+  if (stepsTaken === n) {
+    return 1;
+  }
+
+  return wayToClimb(stepsTaken + 1, n) + wayToClimb(stepsTaken + 2, n);
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+
+
+

Downsides

+
    +
  • +

    Our solution will work, but it's not efficient.

    +
  • +
  • +

    We'll actually get a time limit exceeded error on LeetCode if we submit this.

    +
  • +
  • +

    This is because the time complexity of our solution is O(2n).

    +
  • +
  • +

    We can look at our recursion tree above and count the number of nodes to determine the time complexity.

    +
  • +
  • +

    Now, we won't count exactly 2n nodes since our recursive formula isn't exactly 2n, but when dealing with Big-Oh we only care about the behavior as n becomes very large.

    +
  • +
  • +

    We'll be improving this in the next post by drawing out recursion trees for larger values of n which will allow us to see an interesting pattern.

    +
  • +
+]]> + + J the Code Monkey + + + J the Code Monkey + + 2021-06-30T16:43:32.000Z + Copyright by J the Code Monkey + + + Contains Duplicate + https://codemonkeys.tech/contains-duplicate/ + + 2024-07-17T04:15:09.318Z + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Contains Duplicate! 🍌🐒 +

Contains Duplicate

+ +

Contains Duplicate

+

Get the code & notes on

+

Problem Description

+

Given an integer array nums, return true if any value appears at least twice, and return false if every element is distinct.

+

Examples

+

Ex 1) Input: nums = [1, 2, 3, 1] Output: true since 1 appears twice.

+

Ex 2) Input: nums = [1, 2, 3, 4] Output: false since no value appears twice.

+

Ex 3) Input: nums = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2] Output: true since 1, 3, and 2 appear more than once.

+

Ex 4) Input: nums = [] Output: false since there are no values.

+

Constraints

+

+

+

Thought Process

+
    +
  • +

    By looking at the examples, the 1st thought that comes to mind may be to simply take each value in nums, and compare it with every other value.

    +
      +
    • +

      Basically, we'll be comparing each pair of values in nums to see if a duplicate has occurred.

      +
    • +
    • +

      To do this we'll start at the first value in nums, and compare it with each value to the right until we reach the end of nums.

      +
    • +
    • +

      Then we'll take the second value in nums, and compare it with each value to the right until we reach the end of nums.

      +
    • +
    • +

      We repeat this process until we reach the end of nums in the worst case or until we find a duplicate value.

      +
    • +
    • +

      Here's a visualization for nums = [1, 2, 3] which represents a worst case scenario:

      +
        +
      • +

        Let's take our 1st value in nums, and compare it with each value to the right of it:

        +
          +
        • 1st Comparison:
        • +
        +

        +

        +
          +
        • 2nd Comparison:
        • +
        +

        +

        +
      • +
      • +

        Now, let's take our 2nd value in nums, and compare it with each value to the right of it:

        +
          +
        • 3rd Comparison:
        • +
        +

        +

        +
          +
        • The 3rd value in nums is also the last value, so there's no more comparisons to be made.
        • +
        +
      • +
      +
    • +
    • +

      To achieve this we'll need to loop over each value in nums, and for each iteration of this loop we need to compare our current value which will denote as nums[i] with each value to the right of it.

      +
    • +
    • +

      The process of comparing nums[i] with each value to the right of it means we'll need a nested for loop that loops from nums[i + 1] to the last value in nums.

      +
    • +
    • +

      A nested for loop a time complexity of which is not efficient and will result in a Time Limit Exceeded error on LeetCode.

      +
    • +
    +
  • +
  • +

    Before checking for duplicate values, we can realize that if we sort nums any duplicate values will be consecutive.

    +
      +
    • +

      Let's visualize this with an example for nums = [1, 2, 3, 1]:

      +
        +
      • +

        Sorting nums gives us:

        +

        +
      • +
      • +

        Now, we can loop over nums and check for duplicates values.

        +
      • +
      +
    • +
    • +

      Looping over nums has a time complexity of O(n), and the sorting algorithm can have a time complexity as good as O(nlogn) if something like heapsort is used.

      +
    • +
    • +

      So, the overall time complexity is O(nlogn) since it's the dominating factor.

      +
    • +
    +
  • +
  • +

    Solving this problem requires the ability to efficiently search for values, and a great way to do that is to use a hash table.

    +
      +
    • +

      A hash table is an object that maps keys to values.

      +
    • +
    • +

      The search and insert opertions in a hash table have a time complexity of O(1).

      +
    • +
    • +

      Using a hash table will allow us to store each value in nums as a key, and we can map a value of let's say true to it if it's the first time we've seen the value.

      +
    • +
    • +

      Now, to create our hash table we can loop over nums then check to see if the key is present.

      +
    • +
    • +

      If the key is present, then we have found a duplicate, and we'll return true.

      +
    • +
    • +

      If the key isn't present, then we'll store the current value of nums as a key in our hash table with a value of true.

      +
    • +
    • +

      If no key appears twice, then nums has no duplicates, and we'll return false.

      +
    • +
    • +

      Here's a visualization of creating our hash table which we'll denote as obj for nums = [1, 2, 1]:

      +
        +
      • 1st Iteration:
      • +
      +

      +

      +
        +
      • +

        So, we'll store the value of nums[0] as a key in our hash table with a value of true.

        +

        +
      • +
      • +

        2nd Iteration:

        +
      • +
      +

      +

      +
        +
      • +

        So, we'll store the value of nums[1] as a key in our hash table with a value of true.

        +

        +
      • +
      • +

        3rd Iteration:

        +
      • +
      +

      +

      +
        +
      • Since the same key appeared in our hash table, a duplicate has been found in nums, so we'll return false.
      • +
      +
    • +
    +
  • +
+

Implementation

+ +
+var containsDuplicate = function(nums) {
+  const obj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (obj[nums[i]]) {
+      return true;
+    }
+    obj[nums[i]] = true;
+  }
+
+  return false;
+};
+
+nums = [1, 2, 3, 1];
+console.log(containsDuplicate(nums));
+
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-08-06T18:24:00.000Z + Copyright by J the Code Monkey +
+ + Climbing Stairs Solution 2 + https://codemonkeys.tech/climbing-stairs-solution-2/ + + 2024-07-17T04:15:09.348Z + Hey fellow Code Monkeys!!! 🐵 Check out the second Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒 +

Climbing Stairs Solution 2

+ +

Climbing Stairs

+

Get the code & notes on

+

Problem Description

+

You are climbing a staircase. It takes n steps to reach the top.

+

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

+

Examples

+

Ex 1) Input: n = 2 Output: 2

+

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

+

Ex 2) Input: n = 3 Output: 3

+

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

+

Constraints

+
    +
  • +
+

Thought Process

+
    +
  • +

    We previously came up with a solution for this problem by using a recursive formula that represents how many distinct ways we can climb the stairs.

    +
  • +
  • +

    The issue with the previous solution is it has a time complexity of O(2n) which is very inefficient.

    +
  • +
  • +

    To come up with a better solution we'll be drawing out multiple recursion trees to help us see a pattern.

    +
  • +
  • +

    When n = 1 we have:

    +
  • +
+
    +
  • +

    From the diagram we can see there is 1 distinct way to climb to the top when n = 1 since we can ignore the scenarios where we take extra steps.

    +
  • +
  • +

    When n = 2 we have:

    +
  • +
+
    +
  • +

    So, we have 2 distinct ways to climb to the top.

    +
  • +
  • +

    When n = 3 we have:

    +
  • +
+
    +
  • +

    So, we have 3 distinct ways to climb to the top.

    +
  • +
  • +

    When n = 4 we have:

    +
  • +
+
    +
  • +

    So, we have 5 distinct ways to climb to the top.

    +
  • +
  • +

    Now, let's take a look at our cases from n = 1 to n = 2 and see if we can find a pattern:

    +
  • +
+

+

+
    +
  • +

    Here, waysToClimb denotes our function for determining how many unique ways we can climb the stairs.

    +
  • +
  • +

    This sequence of numbers follows the Fibonacci sequence with the only difference being the value of the 1st and 2nd terms.

    +
  • +
  • +

    Here, the 1st term has a value of 1 and the 2nd term has a value of 2.

    +
  • +
  • +

    Also, notice that we know we have two ways to climb the stairs to reach the nth step.

    +
  • +
  • +

    If we take 1 step, then we're n - 1 steps closer to n, and if we take 2 steps then we're n - 2 steps closer to n.

    +
  • +
  • +

    So, we can get the distinct number of ways to climb the steps by summing up the ways of climbing to the n - 1 step and the ways of climbing to the n - 2 step using the following formula:

    +
  • +
+

+
    +
  • The Fibonacci sequence is the following series of numbers:
  • +
+

+
    +
  • +

    The next number is found by adding up the two numbers before it.

    +
  • +
  • +

    For example, 5 is found by adding 2 and 3.

    +
  • +
  • +

    The first two terms are called seed numbers, which we'll denote as:

    +
  • +
+

+
    +
  • Here's the formula used to characterize the sequence:
  • +
+

+
    +
  • The seed numbers for our problem are:
  • +
+

+
    +
  • +

    Now that we know our pattern of climbing the stairs follows a Fibonnaci sequence we can implement the sequence in our code using the waysToClimb formula and the seed numbers we came up with.

    +
  • +
  • +

    This will improve the time complexity of our solution from the O(2n) solution we previously came up with.

    +
  • +
+

Implementation

+ +
+var climbStairs = function(n) {
+  if (n === 1) {
+    return 1;
+  } else if (n === 2) {
+    return 2;
+  } else {
+    let waysToClimb1 = 1;
+    let waysToClimb2 = 2;
+    let waysToClimb;
+    let i = 1;
+
+    while (n - 1 > i) {
+      waysToClimb = waysToClimb2 + waysToClimb1;
+      waysToClimb1 = waysToClimb2;
+      waysToClimb2 = waysToClimb;
+      i++;
+    }
+
+    return waysToClimb;
+  }
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+
+
+

Analysis

+
    +
  • +

    Since we're looping over the length of n - 1 our time complexity is O(n) which is a much more efficient solution!

    +
  • +
  • +

    See if you can come up with an even more efficient solution using more properties of the Fibonnaci sequence!

    +
  • +
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-07-01T15:45:32.000Z + Copyright by J the Code Monkey +
+ + Reverse String + https://codemonkeys.tech/reverse-string/ + + 2024-07-17T04:15:09.424Z + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Reverse String! 🍌🐒 +

Reverse String

+ +

Reverse String

+

Get the code & notes on

+

Problem Description

+

Write a function that reverses a string. The input string is given as an array of characters s.

+

Examples

+

Ex 1) Input: s = ["h", "e", "l", "l", "o"] Output: ["o", "l", "l", "e", "h"]

+

Ex 2) Input: s = ["H", "a", "n", "n", "a", "h"] Output: ["h", "a", "n", "n", "a", "H"]

+

Constraints

+
    +
  • +

    +
  • +
  • +

    s[i] is a printable ASCII character.

    +
  • +
  • +

    Do not allocate extra space for another array. You must do this in-place with O(1) extra memory.

    +
  • +
+

What is a printable ASCII Character?

+
    +
  • +

    ASCII stands for American Standard Code for Information Interchange and it consists of 33 non-printable and 95 printable characters.

    +
  • +
  • +

    You can check out the non-printable, printable, and extended ASCII characters hereContent not supported.

    +
  • +
  • +

    For this problem we only care about the printable ASCII characters.

    +
  • +
+

What does In-Place Mean?

+
    +
  • +

    In-place refers to an algorithm that transforms input using no auxiliary data structure.

    +
  • +
  • +

    So, we cannot allocate extra space for another array, a hash table, or any other data structure.

    +
  • +
  • +

    Another way of saying this is we must use O(1) extra memory.

    +
  • +
+

Thought Process

+
    +
  • +

    Let's take our two examples from earlier and find a way to model the reversing of the characters in s.

    +
  • +
  • +

    Let's start with Ex 1)

    +
      +
    • Initially, we have
    • +
    +

    +

    and after reversing s our output should be:

    +

    +
      +
    • +

      To perform the reversal we need to swap the characters in s.

      +
    • +
    • +

      We can start by swapping the leftmost character and the rightmost character.

      +
    • +
    • +

      Then we'll move to the second leftmost character and the second rightmost character and swap them.

      +
    • +
    • +

      We'll continue this process until every character has been swapped if we have an even number of characters, or until we have one unswapped character left if we have an odd number of characters.

      +
    • +
    • +

      To perform this swapping we'll need to loop over s while there are still characters that can be swapped.

      +
    • +
    • +

      Let's visualize this process to help us see how the swapping will occur and to better understand what we need to keep track of.

      +
        +
      • +

        1st Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: h

          +
        • +
        • +

          Current Rightmost Character: o

          +
        • +
        • +

          Now, we can swap the characters by assigning s[0] to be s[4], but if we want to assign s[4] to be s[0], then we must first store s[0] in a temp variable.

          +
        • +
        • +

          Storing s[0] in a temp variable will allow us to still have the original character that was stored in s[0].

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 1st swap:
        • +
        +

        +
      • +
      • +

        2nd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: e

          +
        • +
        • +

          Current Rightmost Character: l

          +
        • +
        • +

          Now, we can swap the characters by assigning s[1] to be s[3] and by assinging s[3] to be s[1] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 2nd swap:
        • +
        +

        +
          +
        • There are no unswapped characters left to swap with our only remaining unswapped character, s[2], so the reversal is complete.
        • +
        +
      • +
      +
    • +
    • +

      To perform these swaps we had to keep track of the index of our current leftmost character which we'll denote with i and the index of our current rightmost character which we'll denote with j.

      +
    • +
    • +

      Keeping track of the current leftmost index required us to start with i = 0 and to increment i on each subsequent iteration.

      +
    • +
    • +

      Keeping track of the current rightmost index required us to start with j = s.length - 1 and to decrement j on each subsequent iteration.

      +
    • +
    • +

      We continued the loop while i < j.

      +
    • +
    +
  • +
  • +

    Let's now look at Ex 2)

    +
      +
    • Initially, we have
    • +
    +

    +

    and after reversing s our output should be:

    +

    +
      +
    • +

      We need to swap the characters in s again like in Ex) 1.

      +
    • +
    • +

      Let's visualize this process to help us see how the swapping will occur for this example:

      +
        +
      • +

        1st Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: H

          +
        • +
        • +

          Current Rightmost Character: h

          +
        • +
        • +

          Now, we can swap the characters by assigning s[0] to be s[5] and by assinging s[5] to be s[0] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 1st swap:
        • +
        +

        +
      • +
      • +

        2nd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: a

          +
        • +
        • +

          Current Rightmost Character: a

          +
        • +
        • +

          Now, we can swap the characters by assigning s[1] to be s[4] and by assinging s[4] to be s[1] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 2nd swap:
        • +
        +

        +
      • +
      • +

        Note if you wanted to you could include a check to see if the characters are the same before swapping since the result after swapping will be the same.

        +
      • +
      • +

        3rd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: n

          +
        • +
        • +

          Current Rightmost Character: n

          +
        • +
        • +

          Now, we can swap the characters by assigning s[2] to be s[3] and by assinging s[3] to be s[2] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 3rd swap:
        • +
        +

        +
          +
        • Every character has been swapped, so the reversal is complete.
        • +
        +
      • +
      +
    • +
    • +

      Notice again we continued the loop while i < j.

      +
    • +
    • +

      Using the model we described above we can come up with the following implementation:

      +
    • +
    +
  • +
+

Implementation

+ +
+var reverseString = function(s) {
+  let temp;
+  let i = 0;
+  let j = s.length - 1;
+
+  while (i < j) {
+    temp = s[i];
+    s[i] = s[j];
+    s[j] = temp;
+    i++;
+    j--;
+  }
+};
+
+// Case 1: s has an odd length
+s = ['h', 'e', 'l', 'l', 'o'];
+reverseString(s);
+console.log(s);
+
+// Case 2: s has an even length
+s = ['H', 'a', 'n', 'n', 'a', 'h'];
+reverseString(s);
+console.log(s);
+
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-08-11T15:35:00.000Z + Copyright by J the Code Monkey +
+ + Remove Duplicates from Sorted Array + https://codemonkeys.tech/remove-duplicates-from-sorted-array/ + + 2024-07-17T04:15:09.501Z + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Remove Duplicates from Sorted Array! 🍌🐒 +

Remove Duplicates from Sorted Array

+ +

Remove Duplicates from Sorted Array

+

Get the code & notes on

+

Problem Description

+

Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.

+

Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.

+

Return k after placing the final result in the first k slots of nums.

+

Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.

+

Examples

+

Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _]

+

Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

+

Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

+

Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

+

Constraints

+
    +
  • +

    +
  • +
  • +

    +
  • +
  • +

    nums is sorted in non-decreasing order.

    +
  • +
+

What does In-Place mean?

+
    +
  • +

    Let's start by defining in-place which is an algorithm that transforms input using no auxiliary data structure.

    +
  • +
  • +

    So, we cannot allocate extra space for another array, a hash table, or any other data structure.

    +
  • +
  • +

    Another way of saying this is we must use O(1) extra memory.

    +
  • +
+

Removing (or Moving) Duplicates & Maintaining Relative Order

+
    +
  • +

    In JavaScript we can change the length of an array by adding or removing elements, but in other languages like C for example we cannot change the length of an array after it's created.

    +
  • +
  • +

    So, to get around this we're told we can place the result in the first part of nums.

    +
  • +
  • +

    Recall the formal description from earlier: if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result, and it doesn't matter what is left after the first k elements.

    +
  • +
  • +

    The examples from earlier should make this clearer:

    +
      +
    • +

      Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _ ]

      +
    • +
    • +

      Notice:

      +
        +
      • +

        The output maintains the relative order for nums by keeping the elements we care about in non-decreasing order.

        +
      • +
      • +

        Also, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

        +
      • +
      +
    • +
    • +

      Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

      +
    • +
    • +

      Notice:

      +
        +
      • +

        The output maintains the relative order again for nums by keeping the elements we care about in non-decreasing order.

        +
      • +
      • +

        And again, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

        +
      • +
      +
    • +
    +
  • +
+

How to Modify nums In-Place?

+
    +
  • +

    We're told we can only modify nums in-place.

    +
  • +
  • +

    Let's start with nums = [1, 1, 1, 2, 2], and see if we can come up with some way to move around the elements to get our desired output.

    +
  • +
  • +

    Let's start by taking our 1st element in nums and compare it with the 2nd element, then we can compare the 2nd element with the 3rd and so on...

    +
  • +
  • +

    1st Iteration:

    +
  • +
+

+

+
    +
  • 2nd Iteration:
  • +
+

+

+
    +
  • 3rd Iteration:
  • +
+

+

+

+
    +
  • 4th Iteration:
  • +
+

+

+
    +
  • +

    After the 4th iteration, there's nothing left to compare nums[4] with, so that's the last iteration we need.

    +
  • +
  • +

    During our iterations we had to keep track of our current element in nums which we'll call nums[i] and the next element in nums which will be nums[i + 1].

    +
  • +
  • +

    We also had to keep track of which element we needed to replace in nums if we ran into an element we hadn't seen before which we'll call nums[j].

    +
  • +
  • +

    So, to implement this we'll loop over nums from the beginning to the length of nums - 1 since when we get to the last element there's nothing else for us to compare it with.

    +
  • +
  • +

    On each iteration we'll compare the current element of nums which is nums[i] with the next element of nums which is nums[i + 1].

    +
  • +
  • +

    If they're not equal then we'll set nums[j] = nums[i + 1] where j gets initialized to 1, and we'll increment j every time nums[i] doesn't equal nums[i + 1].

    +
  • +
  • +

    We also need to remember the case of nums.length = 0 which means we have no elements in our array, so we'll just return 0.

    +
  • +
+

Implementation

+ +
+var removeDuplicates = function(nums) {
+  const numsLength = nums.length;
+
+  if (numsLength === 0) {
+    return 0;
+  }
+
+  let j = 1;
+  for (let i = 0; i < numsLength - 1; i++) {
+    if (nums[i] !== nums[i + 1]) {
+      nums[j] = nums[i + 1];
+      j++;
+    }
+  }
+
+  return j;
+};
+
+nums = [1, 1, 1, 2, 2];
+console.log('k =', removeDuplicates(nums), 'nums =', nums);
+
+
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-07-03T17:25:34.000Z + Copyright by J the Code Monkey +
+ + Single Number + https://codemonkeys.tech/single-number/ + + 2024-07-17T04:15:09.527Z + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Single Number! 🍌🐒 +

Single Number

+ +

Single Number

+

Get the code & notes on

+

Problem Description

+

Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single one.

+

You must implement a solution with a linear runtime complexity and use only constant extra space.

+

Examples

+

Ex 1) Input: nums = [2, 2, 1] Output: 1 since 1 appears once.

+

Ex 2) Input: nums = [4, 1, 2, 1, 2] Output: 4 since 4 appears once.

+

Ex 3) Input: nums = [1] Output: 1 since 1 appears once.

+

Constraints

+
    +
  • +

    +
  • +
  • +

    +
  • +
  • +

    Each element in the array appears twice except for one element which appears only once.

    +
  • +
+

What does Linear Runtime Mean?

+
    +
  • +

    A linear runtime means our solution must have a time complexity of O(n).

    +
  • +
  • +

    So, it's ok to use a loop in our solution but not a nested loop.

    +
  • +
+

What does Using Constant Extra Space Mean?

+
    +
  • +

    Our given space complexity is O(n) since we're given nums which is an array of length n.

    +
  • +
  • +

    Since we want to use constant extra space, our solution must have at most O(n) space complexity.

    +
  • +
+

Thought Process

+
    +
  • +

    We need to iterate over nums since we need to find out which element appears only once.

    +
  • +
  • +

    The iteration can be done using a for loop.

    +
  • +
  • +

    Now, to keep track of how many times an element has appeared in nums we can use a hash table.

    +
  • +
  • +

    A hash table is an object that maps keys to values.

    +
  • +
  • +

    Here, the key will represent the element in nums, and the value can be set to true if it has appeared once.

    +
  • +
  • +

    If the key appears again we can remove it since we know every element other than the unique element appears twice.

    +
  • +
  • +

    After removing the keys that appear twice, we just need to return the key of our hash table that appeared once.

    +
  • +
  • +

    Here's a visualization of creating our hash table which we'll denote as myObj for nums = [2, 2, 1]:

    +
      +
    • 1st Iteration:
    • +
    +

    +

    +
      +
    • +

      So, we'll store the value of nums[0] as a key in our hash table with a value of true.

      +

      +
    • +
    • +

      2nd Iteration:

      +
    • +
    +

    +

    +
      +
    • +

      So, we'll remove the 2 key from our hash table since it has now appeared twice.

      +

      +
    • +
    • +

      3rd Iteration:

      +
    • +
    +

    +

    +
      +
    • +

      So, we'll store the value of nums[2] as a key in our hash table with a value of true.

      +
    • +
    • +

      Now, we have reached the end of the loop, so we'll return the value of the only key left in our hash table which in this case is 1.

      +
    • +
    +
  • +
+

Implementation

+ +
+var singleNumber = function(nums) {
+  const myObj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (myObj[nums[i]]) {
+      delete myObj[nums[i]];
+    } else {
+      myObj[nums[i]] = true;
+    }
+  }
+
+  return Object.keys(myObj)[0];
+};
+
+nums = [2, 2, 1];
+console.log(singleNumber(nums));
+
+
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-06-29T17:23:42.000Z + Copyright by J the Code Monkey +
+ + Valid Anagram + https://codemonkeys.tech/valid-anagram/ + + 2024-07-17T04:15:09.531Z + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Valid Anagram! 🍌🐒 +

Valid Anagram

+ +

Valid Anagram

+

Get the code & notes on

+

Problem Description

+

Given two strings s and t, return true +if t is an anagram of s, and false otherwise.

+

Examples

+

Ex 1) Input: s = "anagram", t = "nagaram" Output: true

+

Ex 2) Input: s = "rat", t = "car" Output: false

+

Constraints

+
    +
  • +
  • s and t consist of lowercase English letters
  • +
+

What is an Anagram?

+
    +
  • A word or a phrase that is formed by rearranging the letters of a different word or phrase typically using all of the original letters exactly once.
  • +
+

Assumptions

+
    +
  • To clarify the provided constraints we're also assuming s and t contain no spaces, and we're only able to use each letter once.
  • +
+

How to Check if t is an Anagram of s?

+
    +
  • +

    Since we're assuming we can only use each letter in s and t once, then for t to be an anagram of s they must be the same length.

    +
  • +
  • +

    We can first check that s and t are the same length, and if they aren't we can return false.

    +
  • +
  • +

    Now, if s and t are the same length, they must also contain the same letters.

    +
  • +
+

How to Check if s and t contain the same letters?

+
    +
  • +

    We're given s and t as strings, but we care about being able to examine each character in the strings. So, what we can do is create an array of characters for s and t.

    +
      +
    • +

      Ex 1) s = "anagram" sArray = ["a", "n", "a", "g", "r", "a", "m"]
      t = "nagaram" tArray = ["n", "a", "g", "a", "r", "a", "m"]

      +
    • +
    • +

      Ex 2) s = "rat" sArray = ["r", "a", "t"]
      t = "car" tArray = ["c", "a", "r"]

      +
    • +
    +
  • +
  • +

    We can use the split() method, and pass it a pattern of "".

    +
  • +
  • +

    This tells split() to split our strings into substrings where a "" pattern occurs which is between each character in our strings.

    +
  • +
  • +

    split() will then return an array of these substrings.

    +
  • +
  • +

    Now, we need a way to compare the letters of sArray with the letters of tArray.

    +
  • +
  • +

    We could take the first value of sArray and compare it with each value of tArray. Then break when the letters are the same, and keep track of which index the match occurred at. This will allow us to not use the value at the matched index again on the next comparison.

    +
  • +
  • +

    A simplier solution though is to realize that we can sort our arrays, and if t is an anagram of s, then our arrays will have all the same letters in the same order.

    +
      +
    • +

      Ex 1) sArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]
      tArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]

      +
    • +
    • +

      Ex 2) sArray.sort() = ["a", "r", "t"]
      tArray.sort() = ["a", "c", "r"]

      +
    • +
    +
  • +
  • +

    Then we can check if the letters in the arrays are equal by comparing each value at index i of sArray with each value at index i of tArray.

    +
  • +
  • +

    To do this we can loop over the length of one of the arrays, and if the values of our arrays at index i are not equal, then we can break the loop by returning false.

    +
  • +
  • +

    If the arrays are equal, then we'll loop over the entire length of our array and return true.

    +
  • +
+

Implementation

+ +
+var isAnagram = function(s, t) {
+  if (s.length === t.length) {
+    let sArray = s.split('');
+    let tArray = t.split('');
+
+    sArray.sort();
+    tArray.sort();
+
+    for (let i = 0; i < s.length; i++) {
+      if (sArray[i] !== tArray[i]) {
+        return false;
+      }
+    }
+
+    return true;
+
+  } else {
+    return false;
+  }
+};
+
+let s = 'rat';
+let t = 'car';
+
+console.log(isAnagram(s, t));
+
+
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-07-02T18:15:23.000Z + Copyright by J the Code Monkey +
+ + Installing Fast Node Manager (fnm) + https://codemonkeys.tech/installing-fnm/ + + 2024-07-17T04:15:09.535Z + Hey fellow Code Monkeys!!! 🐵 Want to switch between Node versions extremely fast, then check out Installing Fast Node Manager (fnm)! 🍌🐒 +

Installing Fast Node Manager (fnm)

+

Why use fnm?

+

Fast Node Manager (fnm)Content not supported is a fast and simple Node version manager built in RustContent not supported.

+

For those of you who haven't read the post Installing Node Version Manager (nvm), a Node version manager allows you to easily install and switch between numerous versions of Node.jsContent not supported. This is useful when a project you’re working on requires a different version of Node.jsContent not supported than what you currently have installed.

+

Here are some features of fnmContent not supported:

+ +

Since fnmContent not supported is much faster than nvmContent not supported, it's my preferred way to manage my Node versions.

+

Installation

+

We'll be going over how to install fnmContent not supported on Linux, macOS, and Windows. If you run into any issues with installation then check out the fnmContent not supported repository for any updates.

+

Other Installation Methods

+

If you're interested in using CargoContent not supported or downloading a release binary, then check out the fnmContent not supported repository for installation instructions.

+
+

Linux

+

First make sure you have curl installed:

+ + +
pacman -Sy curl
+
+
1
+ +
apt-get install curl
+
+
1
+
+

Next you can install fnmContent not supported using either one of the following commands for bash, zsh, and fish shells.

+

Here we're setting the custom directory $HOME/.local/bin as the location to install fnmContent not supported using --install-dir.

+

If you want to install fnmContent not supported in a different location, then change $HOME/.local/bin to your preferred directory.

+

You can also remove --install-dir when installing to use the default directory $HOME/.fnm.

+ + +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir $HOME/.local/bin
+
+
1
+ +
curl -fsSL https://fnm.vercel.app/install | bash
+
+
1
+
+

Run the following command if you don't have .local/bin in your path and you're using the custom directory $HOME/.local/bin.

+

If you're using a different custom directory and you don't have it in your path, then replace $HOME/.local/bin with you're preferred directory.

+ + +
export PATH=/home/$USER/.local/bin/fnm:$PATH
+
+
1
+
+

Run the following command to upgrade fnmContent not supported.

+

If you're using a different custom directory, then replace $HOME/.local/bin with you're preferred directory.

+ + +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir $HOME/.local/bin --skip-shell
+
+
1
+ +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell
+
+
1
+
+

macOS

+

The preferred way to install on macOS is to use HomebrewContent not supported:

+ + +
brew install fnm
+
+
1
+
+

Here's how to upgrade using HomebrewContent not supported:

+ + +
brew upgrade fnm
+
+
1
+
+

Windows

+

You can manually install on Windows using either ScoopContent not supported or ChocolateyContent not supported:

+ + +
scoop install fnm
+
+
1
+ +
choco install fnm
+
+
1
+
+

Shell Setup

+

Before you can use fnmContent not supported, you have to first set up your shell. We'll be going over how to set up fnmContent not supported for bash, zsh, fish, and powershell.

+

Windows Command Prompt and Cmder

+

If you're interested in using Windows Command Prompt or Cmder then check out the fnmContent not supported repository for instructions.

+
+

Bash

+

Add the following to your .bashrc:

+ + +
eval "$(fnm env)"
+
+
1
+
+

Zsh

+

Add the following to your .zshrc:

+ + +
eval "$(fnm env)"
+
+
1
+
+

Fish Shell

+

Create ~/.config/fish/conf.d/fnm.fish and add this line:

+ + +
fnm env | source
+
+
1
+
+

PowerShell

+

Add this line to the end of your profile file:

+ + +
fnm env --use-on-cd | Out-String | Invoke-Expression
+
+
1
+
+

On Windows, the profile is located at ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 or $PROFILE

+

On macOS and Linux, the profile is located at ~/.config/powershell/Microsoft.PowerShell_profile.ps1

+

Usage

+

Here are some useful commands to get started with fnmContent not supported. You can find more commands hereContent not supported or you can run fnm --help to see a list of subcommands and fnm <SUBCOMMAND> --help to see information for a specific subcommand.

+ + +
fnm ls-remote
+
+
1
+
+ + +
fnm install 16.11.1
+
+
1
+
+ + +
fnm ls
+
+
1
+
+ + +
fnm use 16.11.1
+
+
1
+
+ + +
fnm current
+
+
1
+
+ + +
fnm alias 16.11.1 nickname
+fnm use nickname
+
+
1
2
+
+ + +
fnm default 16.11.1
+
+
1
+
+

Completions

+

Here's how to set up fnmContent not supported completions for bash and zsh:

+

Bash

+ + +
mkdir -p ~/.config/bash/completions
+
+touch ~/.config/bash/completions/_fnm
+
+fnm completions --shell=bash > ~/.config/bash/completions/_fnm
+
+
1
2
3
4
5
+
+

Add the following to your .bashrc:

+ + +
fpath+=~/.config/bash/completions/_fnm
+compinit
+
+
1
2
+
+

Zsh

+ + +
mkdir -p ~/.config/zsh/completions
+
+touch ~/.config/zsh/completions/_fnm
+
+fnm completions --shell=zsh > ~/.config/zsh/completions/_fnm
+
+
1
2
3
4
5
+
+

Add the following to your .zshrc:

+ + +
fpath+=~/.config/zsh/completions/_fnm
+compinit
+
+
1
2
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-12-08T21:27:15.000Z + Copyright by J the Code Monkey +
+ + Installing Node Version Manager (nvm) + https://codemonkeys.tech/installing-nvm/ + + 2024-07-17T04:15:09.544Z + Hey fellow Code Monkeys!!! 🐵 Want to be able to easily install and switch between Node versions, then check out Installing Node Version Manager (nvm)! 🍌🐒 +

Installing Node Version Manager (nvm)

+

Why use a Node Version Manager?

+

A Node version manager allows you to easily install and switch between numerous versions of Node.jsContent not supported. This is useful when a project you’re working on requires a different version of Node.jsContent not supported than what you currently have installed.

+

Installation

+

We'll be going over how to install nvmContent not supported on Linux and macOS.

+

Windows

+

Windows is not supported, but you can get it to work by setting up Windows Subsystem for Linux (WSL)Content not supported, GitBashContent not supported, or CygwinContent not supported. Other alternatives exist that are not supported or developed by nvmContent not supported like nvm-windowsContent not supported. Check out the nvm Important NotesContent not supported for more alternatives and details.

+
+

Before installing make sure your using a POSIX-compliant shell like sh, dash, ksh, zsh, or bash.

+

Fish Shell

+

If you want to use fishContent not supported, then check out the nvm Important NotesContent not supported repository for alternatives.

+
+

If you run into any issues with installation, then be sure to check out the nvmContent not supported repository for any updates and troubleshooting tips.

+

Linux Dependencies

+

You can install nvmContent not supported using either curl or wget.

+

Here's how to install curl for Linux:

+ + +
pacman -Sy curl
+
+
1
+ +
apt-get install curl
+
+
1
+
+

Here's how to install wget for Linux:

+ + +
pacman -Sy wget
+
+
1
+ +
apt-get install wget
+
+
1
+
+

macOS Dependencies

+

macOS should already have curl installed, but you can use HomebrewContent not supported to upgrade to the latest version:

+ + +
brew install curl
+
+
1
+
+

If you want to use wget on macOS, then you can use HomebrewContent not supported to install it:

+ + +
brew install wget
+
+
1
+
+

If you're using OS X 10.9 or newer, you'll need to install XcodeContent not supported or just the Command Line Tools.

+

Here's a good post explaining how to install XcodeContent not supported:

+ +

If you don't want to install XcodeContent not supported, then you can install only the Command Line Tools by following along with this post:

+ +

System Version

+

If you have a system version of Node.jsContent not supported, i.e., you downloaded and installed Node.jsContent not supported without using nvmContent not supported, then version mismatches may occur.

+

This can occur since versions installed by nvmContent not supported will only be available to the user account it was installed on, and any other user accounts will use the system version.

+

If version mismatches are occurring or any other issues, then you can uninstall node and npm associated with the system version and just use versions installed by nvmContent not supported.

+

Be sure to uninstall any globally installed npm packages associated with the system version as well.

+

Also, if you're using a ~/.npmrc file it may not be compatible see nvm Compatibility IssuesContent not supported in which case you should remove it.

+

When using nvmContent not supported, you don't need to use sudo npm install -g <package> instead use npm install -g <package> when installing global packages.

+

Finally, if you're using a different node version manager like fnmContent not supported, then you may run into issues with your installed versions from nvmContent not supported. If this is the case, then uninstall the node version manager you will not be using to resolve the issues.

+

Preferred Node Manager

+

My preferred way to manage my node versions is with fnmContent not supported. Check out Installing Fast Node Manager (fnm) to learn more about it.

+
+

Install and Update Script

+

After installing the necessary dependencies, you can install or update nvmContent not supported by using curl or wget on Linux or macOS:

+ + +
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
+
+
1
+ +
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
+
+
1
+
+

The above commands will download and run a script to install or update nvmContent not supported.

+

The script clones the nvmContent not supported repository to ~/.nvm.

+

Additional Notes

+

If you're interested, check out the nvm Additional NotesContent not supported for information on more parameters and how to customize the install source, directory, profile, and version for the install script.

+
+

After running the command above, you'll be prompted to close and reopen your terminal to start using nvmContent not supported, or you can run the following commands to start using it in the current shell session:

+ + +
export NVM_DIR="$HOME/.config/nvm" && 
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && # This loads nvm
+[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
+
+
1
2
3
+
+

The third line provides autocompletion for nvmContent not supported. Here's some examples of the autocompletion usageContent not supported.

+

Verify Installation

+

To verify the installation you can run the following command:

+ + +
command -v nvm
+
+
1
+
+

If the installation was successful, then the command should output nvm.

+

If you get no output after running the above command, then see the troubleshooting sections below.

+

Troubleshooting

+

Try closing the current terminal and opening a new terminal. Then try verifying the installation again.

+

Here are some examples of commands you can run depending on your shell:

+ + +
source ~/.bashrc
+
+
1
+
+ + +
source ~/.zshrc
+
+
1
+
+ + +
. ~/.profile
+
+
1
+
+

After running the command for your shell, try verifying the installation again.

+

If you're still experiencing issues verifying your installtion for Linux, then check out Troubleshooting on LinuxContent not supported.

+

For macOS check out Troubleshooting on macOSContent not supported and macOS TroubleshootingContent not supported which contain more specific information related to shell issues and to issues with Macs using the M1 chip.

+

For more general issues check out the ProblemsContent not supported section.

+

Other Installation Methods

+

Instead of using the script above, you can also perform a git installContent not supported or a manual installContent not supported as well as a manaul upgradeContent not supported. The minimum required gitContent not supported version for the installation methods is v1.7.10.

+
+

Usage

+

Here are some useful commands to get started with nvmContent not supported. You can run nvm --help to see a list of commands, their flags, and descriptions.

+

Check nvm Version

+

The following command will display the version of nvmContent not supported:

+ + +
nvm --version
+
+
1
+
+

List Remote Versions

+

The following commands will list the remote versions of Node.jsContent not supported.

+

List the all remote versions by using ls-remote:

+ + +
nvm ls-remote
+
+
1
+
+

Node.jsContent not supported has a release scheduleContent not supported for long-term support (LTS).

+

List the LTS remote versions by using --lts:

+ + +
nvm ls-remote --lts
+
+
1
+
+

List all of the LTS remote versions for a specific line by using, e.g., --lts=boron:

+ + +
nvm ls-remote --lts=boron
+
+
1
+
+

List all of the LTS remote versions for a given version number by providing, e.g., 16 to ls-remote:

+ + +
nvm ls-remote 16
+
+
1
+
+

Install Versions

+

The following commands are examples of how to install different versions of Node.jsContent not supported.

+

If you try to install a version and the installation fails, then run nvm cache clear to delete the cached versions.

+

Install the latest version by using the special default alias node:

+ + +
nvm install node
+
+
1
+
+

Install the latest LTS version by using --lts:

+ + +
nvm install --lts
+
+
1
+
+

Install the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm install --lts=boron
+
+
1
+
+

Install a specific version by providing a version number:

+ + +
nvm install 16.11.1
+
+
1
+
+

List Installed Versions

+

The following command will list all of the installed versions of Node.jsContent not supported:

+ + +
nvm ls
+
+
1
+
+

Use a Version

+

The following commands will set which version of Node.jsContent not supported to use.

+

Use the latest version by using the special default alias node:

+ + +
nvm use node
+
+
1
+
+

Use the latest LTS version by using --lts:

+ + +
nvm use --lts
+
+
1
+
+

Use the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm use --lts=boron
+
+
1
+
+

Use a specific version by providing a version number:

+ + +
nvm use 16.11.1
+
+
1
+
+

If you have a system version installed, then you can use the special default alias system to use it:

+ + +
nvm use system
+
+
1
+
+

Check Active Version

+

Check the currently active Node.jsContent not supported version by using current:

+ + +
nvm current
+
+
1
+
+

Set Aliases

+

Set an alias for a specific Node.jsContent not supported version by provding a name and a version.

+

Here, version 16.11.1 will get an alias of nickname:

+ + +
nvm alias nickname 16.11.1
+
+
1
+
+

The default version is the active version when opening new shells. The first installed version will get set as the default version. To change the default version run the command below.

+

Here, we're setting the default version to be 17.1.0:

+ + +
nvm alias default 17.1.0
+
+
1
+
+

Get Path to Version

+

The following commands will get the path of where a Node.jsContent not supported version was installed.

+

Get the path of where a version was installed by specifying a version number:

+ + +
nvm which 16.11.1
+
+
1
+
+

Get the path to where a version is installed by specifying an alias:

+ + +
nvm which nickname
+
+
1
+
+

Uninstall Versions

+

The following commands are examples of how to uninstall different versions of Node.jsContent not supported.

+

Uninstall the latest version by using the special default alias node:

+ + +
nvm uninstall node
+
+
1
+
+

Uninstall the latest LTS version by using --lts:

+ + +
nvm uninstall --lts
+
+
1
+
+

Uninstall the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm uninstall --lts=boron
+
+
1
+
+

Uninstall a specific version by providing a version number:

+ + +
nvm uninstall 16.11.1
+
+
1
+
+

Uninstall nvm

+

To uninstall nvmContent not supported run the following:

+ + +
rm -rf "$NVM_DIR"
+
+
1
+
+

Then remove these lines from your ~/.bashrc, ~/.zshrc, ~/.profile, etc.

+ + +
export NVM_DIR="$HOME/.config/nvm"
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
+[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
+
+
1
2
3
+
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-12-07T22:01:15.000Z + Copyright by J the Code Monkey +
+ + Installing Yarn 1 + https://codemonkeys.tech/installing-yarn-1/ + + 2024-07-17T04:15:09.554Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and use Yarn 1, then check out this post! 🍌🐒 +

Installing Yarn 1

+

What is a Package Manager?

+

Before discussing YarnContent not supported in more detail, let's first define what a package manager is and what it handles for us.

+

A package manager is a tool that allows developers to manage a project's dependencies.

+

Dependencies also known as packages are programs that a project relys on to function properly.

+

Using dependencies makes development easier since you can use other developer's solutions for implementing features in your project.

+

A package manager handles the following for your packages:

+
    +
  • Installing
  • +
  • Updating and upgrading
  • +
  • Uninstalling
  • +
  • Configuring
  • +
+

What is Yarn?

+

YarnContent not supported is a package manager designed with three main goals in mind:

+
    +
  • Speed
  • +
  • Security
  • +
  • Reliability
  • +
+

Like other package managers, YarnContent not supported allows you to use and share code with other developers which again makes development easier. The code is shared using a package.json file which describes the dependencies used in a project.

+

YarnContent not supported is an alternative to npmContent not supported which is the default node package manager for Node.jsContent not supported. It was originally developed to address the performance and security issues with npmContent not supported.

+

This post will cover the installation and some commands for Yarn 1Content not supported.

+

Yarn 1 Maintenance Mode

+

Yarn 1Content not supported is officially in maintenance mode, so no further updates will be released unless they are needed to patch vulnerabilities. If you're starting a new project, it's recommended to use the latest stable version which at the time of this writing is Yarn 3Content not supported.

+
+

If you're interested in learning more about the release history of YarnContent not supported and npmContent not supported, then check out the section below.

+

Timeline of Yarn and npm Development

+

When YarnContent not supported was released in 2016 it achieved its goals of being a faster, more secure, and more reliable alternative to npmContent not supported. The improved reliability was accomplished by generating a yarn.lock file which handles keeping track of the exact versions of packages used in a project.

+

In 2017, npmContent not supported addressed its speed and reliability issues with the release of npm 5Content not supported. The reliability issue was addressed with the introduction of the package-lock.json file which provided similar functionality to the yarn.lock file.

+

In 2018, npmContent not supported addressed its security issues with the release of npm 6Content not supported by checking vulnerabilities before installing dependencies as well as introducing more improvements to speed and reliability.

+

Yarn 2Content not supported and npm 7Content not supported were both released in 2020 with improved performance and some new features as well.

+

In 2021, Yarn 3Content not supported and npm 8Content not supported were released which again introduced improved performance and some new features.

+

Today, the performance and features of YarnContent not supported and npmContent not supported are very similar, so which one to use mainly depends on a developer's preference.

+

Installation

+

There are multiple ways to install Yarn 1Content not supported. Currently, the recommended way to install it is with npmContent not supported the default node package manager that comes with Node.jsContent not supported. When installing Node.jsContent not supported you have the option to install a system version which you can do by downloading and installing a version directly from Node.jsContent not supported, or you can install multiple node versions with a node version manager.

+

Using a Node Version Manager

+

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend installing either nvmContent not supported or fnmContent not supported. My preferred way to manage my node versions is with fnmContent not supported. If you're interested in installing a node version manager, then check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm).

+
+

After installing a system version or a version with a node version manager, you can run the following command to install and upgrade Yarn 1Content not supported:

+ + +
npm install --global yarn
+
+
1
+
+

This will install Yarn 1Content not supported globally. We'll see how to install a specific local version of yarn in the root of a project directory when looking at the usage of yarn.

+

Resolving Permissions Error

+

If you're using a system version, you may get a permissions error when attempting to install with npmContent not supported. To resolve this check out the installationContent not supported documentation for platform-specific methods for Linux, macOS, and Windows. Alternatively, you can uninstall your system version and use a node version manager instead.

+
+

Platform Installation Notes

+

When using a platform-specific method a version of Node.jsContent not supported will also be installed. To avoid the Node.jsContent not supported installation some platform-specific methods have the option of ignoring it by passing certain commands. See the installationContent not supported documentation for more details on ignoring the Node.jsContent not supported installation, configuration requirements, and possible issues.

+

If the option to ignore the installation of Node.jsContent not supported is not available for your preferred platform-specific method, then you can uninstall your system version and just use the platform-specific method to install both Yarn 1Content not supported and Node.jsContent not supported.

+

If you prefer to use a platform-specific method with a node version manager, then you should only use a method that can ignore the installation of Node.jsContent not supported since it can cause conflicts.

+

Usage

+

Now we'll be discussing some useful and common commands to get you started with Yarn 1Content not supported.

+

Help Commands

+

Here's how to access the help documentation for the yarn command which is always useful and recommended to do for any installed tool.

+

Run the following command to see a list of commands, flags, and descriptions for yarn:

+ + +
yarn --help
+
+
1
+
+

To see help information for a specific subcommand run the following:

+ + +
yarn [subcommand] --help
+
+
1
+
+

Check Yarn Version

+

To verify your installation was successful and to check your version of yarn run the following command:

+ + +
yarn --version
+
+
1
+
+

Setting a Local Version

+

To install and set a local version of yarn for a specific project you can use the global yarn command we installed earlier. This ensures everyone working on a project is using the exact same version of yarn which is useful to avoid any undesired behavior like producing a different yarn.lock file.

+

This is accomplished by using yarn policiesContent not supported which allows you to check in your Yarn 1Content not supported release within your repository. After running the command below in your project's root directory, a single-file release from the GitHub repository will be downloaded and stored in your project in a .yarn/releases directory. Then your yarn-path will be updated in a .yarnrc file.

+

Now any yarn command run in your project will be using the local version that you set. Be sure to push these changes to your project's remote branch, so everyone using the project will be downloading and using the same version of Yarn 1Content not supported as you.

+

If you're using an existing project, then you don't need to set the local version as long as the project has the desired version of Yarn 1Content not supported in the .yarn/releases directory, and the yarn-path is configured properly in the .yarnrc file.

+

If you don't have a project directory, then run the following:

+ + +
mkdir ~/<path-to-project-directory>
+
+
1
+
+

Next, navigate to your project:

+ + +
cd ~/<path-to-project-directory>
+
+
1
+
+

Now, set the version of Yarn 1Content not supported for your project:

+ + +
yarn policies set-version [version]
+
+
1
+
+

There are multiple ways to specify which version you want to use:

+
    +
  • yarn policies set-version downloads the latest stable release
  • +
  • yarn policies set-version --rc downloads the latest rc release
  • +
  • yarn policies set-version 1.22.4 downloads a specific version
  • +
+

Running yarn policies set-version [version] is also the recommended way to upgrade your version of Yarn 1Content not supported.

+

Now run yarn --version in your project directory, and it should output the local version you just set. If you navigate out of your project directory and run yarn --version, then you should see the global version that you installed.

+

The global version of yarn will first check if it's in a directory with a .yarnrc file. If the directory has a .yarnrc file, then the configured yarn-path value will be used to switch the yarn version from the global version to the project specific version.

+

Resolving Installation Directory Issue

+

If you set the local version in your project's root directory and the .yarn directory and .yarnrc file aren't generated there, then delete the files that were generated and run the yarn init command in your project's root directory before setting the local version. The yarn init command is described in the Creating a New Project section.

+
+

Updating the .gitignore File

+

After setting your local version of yarn, you should now have .yarn directory in the root of your project.

+

Some of the files yarn adds to your .yarn directory should be checked into version control, e.g., git and others should be ignored.

+

To specify which directories and files should be ignored when pushing to your repositiory you can create a .gitignore file.

+

After creating the .gitignore file, you can add the recommended basic configuration for yarn:

+ + +
.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
+
+
1
2
3
4
5
6
7
+
+

This will ignore the entire .yarn directory except for the directories specified after the !.

+

The yarn.lock and .yarnrc files should always be checked into version control.

+

Adding a .gitattributes File

+

If you're using a local version of yarn, then it's recommended to add a .gitattributes file to your project which will prevent git from showing large diffs when you add or update releases and plugins:

+ + +
.yarn/releases/** binary
+.yarn/plugins/** binary
+
+
1
2
+
+

This is accomplished by identifying the release and plugin directories as binary content.

+

Creating a New Project

+

To create a new project first create and navigate to the project directory. See the commands above for creating and navigating to a project directory.

+

Then run the following command:

+ + +
yarn init
+
+
1
+
+

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept the defaults. Here's an example of running the command in a directory named project-directory:

+ + +
question name (project-directory): my-new-project
+question version (1.0.0): 1.2.4
+question description: Learning Yarn
+question entry point (index.js):
+question repository url: https://github.com/github-username/my-new-project
+question author: Your Name
+question license (MIT):
+question private:
+success Saved package.json
+Done in 34.11s.
+
+
1
2
3
4
5
6
7
8
9
10
+
+

After answering all of the questions, a package.json file containing the answers will be created. The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver)Content not supported.

+

Now, let's describe each property in a little more detail:

+
    +
  • name is the name given to your project +
      +
    • Must be less than or equal to 214 characters including the @scope/ for scoped packagesContent not supported
    • +
    • Cannot start with a dot or an underscore
    • +
    • Must contain only lowercase letters and URL-safe characters
    • +
    • If the project is published to npmContent not supported, it gets a URL based on the given value which is the reason for the requirements given above
    • +
    • The default value is the same name as the directory you're in when running the yarn init command
    • +
    +
  • +
  • version indicates the current version of your project + +
  • +
  • description is used to describe and provide more information about your project +
      +
    • Especially useful to include if you plan on publishing your project to npmContent not supported
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • entry point is a JavaScript file that starts the execution of your project +
      +
    • This property is called main in the package.json file
    • +
    • The default value is index.js
    • +
    +
  • +
  • repository url describes the location of the project repository containing the code +
      +
    • This property is called repository in the package.json file
    • +
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/my-new-project" }
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • author describes the creator or owner of the project +
      +
    • Used to describe one person
    • +
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • license indicates the type of license being used by the project +
      +
    • Allows users to know how they're permitted to use the project
    • +
    • Check out Choose a LicenseContent not supported if you need help determining how you should license your project
    • +
    • The default value is MIT
    • +
    +
  • +
  • private indicates whether or not the project can be published to npmContent not supported +
      +
    • If set to true, it will prevent the project from being published
    • +
    • If no value is given, it's assumed the value is false, and it will not be explicitly set in the package.json file
    • +
    +
  • +
+

If you're interested in learning more about the package.json file, then check out The package.json guideContent not supported and the Yarn 1 package.jsonContent not supported documentation. Also, check out the Versions of dependenciesContent not supported documentation for more information about how semverContent not supported is used.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "my-new-project",
+  "version": "1.2.4",
+  "description": "Learning Yarn",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/my-new-project",
+  "author": "Your Name",
+  "license": "MIT"
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

To update the package.json file you can open and edit it directly, or you can run the yarn init command again.

+

Check out the yarn initContent not supported documentation for more information about the command.

+

Adding Packages

+

When adding a package the package.json file gets updated by adding the package as a dependency to a dependencies object where each key is a package name and the value represents a range of allowed versions following semverContent not supported notation.

+

A yarn.lock file will also be created if it doesn't exist or updated if it already exists. A yarn.lock file is used to keep track of the exact versions of packages added to a project. This allows consistent installs across machines by allowing developers to have the exact same versions of packages when installing all of a project's dependencies.

+

Here's how to handle the yarn.lock file in your project:

+
    +
  • The yarn.lock file should be in the root of your project directory
  • +
  • You shouldn't directly edit the yarn.lock file it gets auto-generated and automatically updated
  • +
  • When installing only the top-level yarn.lock file is used and any yarn.lock files that exist in the dependencies will be ignored
  • +
  • The yarn.lock file should also be checked into version control since it's used to install the exact same versions of packages across machines
  • +
+

To add the latest version of a package run the following command:

+ + +
yarn add <package-name>
+
+
1
+
+

To add a specific version of a package run the following command:

+ + +
yarn add <package-name>@1.2.3
+
+
1
+
+

To add the latest version of a package within a specified version range run the following command:

+ + +
yarn add <package-name>@"^1.2.3"
+
+
1
+
+

The latest version within the given version range is determined by the range specifier and the version number.

+

In the example above the range specifier is the caret symbol, i.e., ^. You can use any desired range specifier, and the added package will be the latest version within the given version range.

+

You can also add a package with a specific tag by running the following command:

+ + +
yarn add <package-name>@tag
+
+
1
+
+

Tags are a way to mark published versions of a package with a label. Check out the yarn tagContent not supported documentation for more information about them.

+

To add a package to your development dependencies, i.e., devDependencies you can add either the --dev or -D flag to the end of the command.

+

Development dependencies are dependencies that you need for the development workflow, e.g., BabelContent not supported, but not while running the project.

+

Here's an example of adding the latest version of a package to your devDependencies:

+ + +
yarn add <package-name> --dev
+
+
1
+
+

See the Types of dependenciesContent not supported documentation for more information about them.

+

To add a package globally to your operating system you can use the global subcommand before add:

+ + +
yarn global add <package-name>
+
+
1
+
+

When to Use Global

+

In general you should be adding packages locally because anyone else using your project will then get the same packages. If you install a package globally it will be available globally on your operating system, but it won't be available to anyone else using your project. You should only install a package globally if it's for developer tooling that isn't used for only a specific project, e.g., nodemonContent not supported. See the yarn globalContent not supported documentation for more details.

+
+

Check out the yarn addContent not supported documentation for more information about adding packages.

+

Listing Added Packages

+

To list all of your added packages in your project run the following command:

+ + +
yarn list
+
+
1
+
+

This will list all of the packages you added as well as their dependencies for the current working directory.

+

To list only the packages you explicitly added you can use the --depth flag as follows:

+ + +
yarn list --depth=0
+
+
1
+
+

The above will restrict the depth of the displayed dependencies to be the first level. Notice that the levels are zero-indexed.

+

To learn more about listing added packages check out the yarn listContent not supported documentation.

+

Upgrading Packages

+

The upgrade subcommand will update the packages to their latest version based on the version ranges defined in the package.json file. See the Versions of dependenciesContent not supported documentation to get a better understanding of how version ranges are used.

+

After running the upgrade subcommand, the yarn.lock file will be updated with the latest versions specified by the version ranges. The versions in the package.json file will remain the same though since the upgraded packages will still be within the same version ranges.

+

To view the upgraded versions of your packages in a readable format you can use the yarn list command described in the previous section.

+

We'll see how to upgrade packages to versions outside of the specified version ranges which will update both the yarn.lock file and the package.json file.

+

The following command upgrades all packages within their specified version ranges:

+ + +
yarn upgrade
+
+
1
+
+

You can also upgrade a specific package within its specified version range:

+ + +
yarn upgrade [package-name]
+
+
1
+
+

To upgrade all packages to their latest versions you can add the --latest flag:

+ + +
yarn upgrade --latest
+
+
1
+
+

You can also upgrade a specific package to its latest version using the --latest flag:

+ + +
yarn upgrade [package-name] --latest
+
+
1
+
+

When using the --latest flag, the version range in the package.json file will be ignored. This can potentially result in the packages being upgraded across major versions which can lead to potential incompatible API changes, so be sure to check the packages for any breaking changes.

+

Since the range versions in the package.json file are ignored, both the yarn.lock and package.json files can be updated.

+

Also, the range specifiers in the package.json file will remain the same if it is still compatible with the latest version. If the range specifier isn't compatible with the new version a caret range specifier, i.e., ^ will be used instead.

+

So, e.g., a tilde range specifier, i.e., ~ will still be used for any packages that we're using it previously.

+

You can also explicitly set the range specifier by passing a flag after the --latest flag, e.g., --caret.

+

You can also upgrade a package to a specific version with the following command:

+ + +
yarn upgrade <package-name>@1.2.3
+
+
1
+
+

To upgrade a package to the latest version within a specified version range run the following:

+ + +
yarn upgrade <package-name>"@^1.2.3"
+
+
1
+
+

The latest version within the given version range is again determined by the range specifier and the version number.

+

In the example above the range specifier is the caret symbol, i.e., ^. You can again use any desired range specifier, and the package will be upgraded to the latest version within the given version range.

+

You can also upgrade a package to a specific tag using the following command:

+ + +
yarn upgrade <package-name>@tag
+
+
1
+
+

Tags are again a way to mark published versions of a package with a label. Check out the yarn tagContent not supported documentation for more information about them.

+

You can specify a preferred range specifier when upgrading a package with a tag by passing, e.g., --tilde flag at the end of the command.

+

Downgrading Packages

+

Using specific versions and tags when upgrading packages also allows you to downgrade your package by specifying a version that is older than your currently installed version.

+
+

To learn more about upgrading packages check out the yarn upgradeContent not supported documentation.

+

Removing Packages

+

To remove a package run the following command:

+ + +
yarn remove <package-name>
+
+
1
+
+

After running the command above, the yarn.lock and package.json files will both always be updated. This ensures all developers will still be using the exact same versions of the packages.

+

Also, when removing a package it will be removed from all types of dependencies, e.g., dependencies, devDependencies, etc.

+

See the Types of dependenciesContent not supported documentation for more information about dependencies and the yarn removeContent not supported documentation for more information about the command.

+

Installing All Project Packages

+

The following command should be run when checking out code for a new project and when another developer adds or removes a package.

+

Run the following command to install all of a project's packages specified in the package.json file:

+ + +
yarn install
+
+
1
+
+

You can also just run the following:

+ + +
yarn
+
+
1
+
+

After running either one of the commands above, a node_modules directory will be created in the current directory which contains all of the code for the installed packages.

+

Here's how the yarn.lock file is used:

+
    +
  • If the yarn.lock file is present and if it contains all of the packages specified in the package.json file, then the exact versions specified in the yarn.lock file will be installed.
  • +
  • If there is no yarn.lock file or there is one that doesn't contain all of the packages in the package.json file, then the newest versions within the version ranges specified in the package.json file will be installed. This will then update the yarn.lock file.
  • +
+

To ensure the yarn.lock file is not updated when installing all of a project's dependencies you can run the following:

+ + +
yarn --frozen-lockfile
+
+
1
+
+

For more information about installing all the packages in a project check out the yarn installContent not supported documentation.

+

Running Scripts

+

To run a script you need to first add a scripts object to your package.json file. Then you can add each script as a key-value pair where the key is the name of the script you want to run, and the value is a command that gets run in your shell.

+ + +
"scripts": {
+  "test": "test-script",
+  "build": "build-script"
+}
+
+
1
2
3
4
+
+

Here, we have defined two scripts in our scripts object with the names of test and build and with the commands of test-script and build-script, respectively.

+

To run a script you can run the following command:

+ + +
yarn run [script-name]
+
+
1
+
+

You can also just run the following:

+ + +
yarn [script-name]
+
+
1
+
+

Potential Shorthand Issue

+

Built-in CLI commands will have preference over your scripts if they share the same name. To avoid running a built-in CLI command you can always include the run subcommand when running your scripts.

+
+

It's also possible to list all of the scripts available to run in your project by running the following:

+ + +
yarn run
+
+
1
+
+

See the yarn runContent not supported documentation to lean more about the command and the yarn testContent not supported documentation for more information about testing.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-12-28T22:56:00.000Z + Copyright by J the Code Monkey +
+ + Configuring Settings + https://codemonkeys.tech/raspberry-pi-configuring-settings/ + + 2024-07-17T04:15:09.558Z + Hey fellow Code Monkeys!!! 🐵 If you're interested in learning how to configure the settings for your Raspberry Pi, then check out the Configuring Settings post! 🍌🐒 +

Configuring Settings

+

What We're Doing

+

In this tutorial we're going to learn how to configure various settings for a Raspberry PiContent not supported using standard DebianContent not supported commands. Since we'll be using standard Debian commands, the commands will be compatible with most other hardware platforms running Debian.

+

Instead of using the standard Debian commands to configure the settings, you can preconfigure the settings with the Raspberry Pi ImagerContent not supported by using the advanced options when installing the Raspberry Pi OSContent not supported. You also have the option to use the raspi-configContent not supported tool to configure the settings.

+

If you preconfigure the settings using the Raspberry Pi Imager, you can always update them later by using either the raspi-config tool or the standard Debian commands discussed in this post.

+

Raspberry Pi Imager Boot Issues

+

If you're having issues booting your Raspberry Pi after preconfiguring the settings using the Raspberry Pi Imager, then don't preconfigure the settings. Instead you can use the raspi-config tool or the standard Debian commands to configure the settings after booting into the Raspberry Pi.

+
+

We'll be configuring the following settings:

+
    +
  • Username
  • +
  • Password
  • +
  • Secure Shell (SSH)
  • +
  • WiFi
  • +
  • Time Zone
  • +
  • Keyboard Layout
  • +
+

We'll be using the nano text editor to edit the configuration files.

+

Here's how to save and exit nano:

+
    +
  • Save: press Ctrl+o, confirm the filename, and press the Enter key
  • +
  • Exit: press Ctrl+x
  • +
+

Assumptions

+

We're making the following assumptions:

+ +

Username

+

There are multiple ways to update your username. We'll be updating the username by logging in as the root user. Instead of using the root user, it's also possible to create another user and log into it to update the username.

+

Don't Use pi for your Username

+

For security reasons it's recommended to not use pi as your username since it has been used in the past as the default username. Potential hackers have a list of commonly used usernames which may include the pi username.

+
+

Enable root User

+

To update the username using the root user, you first need to enable it which you can do by running the following command:

+ + +
sudo passwd root
+
+
1
+
+

Be sure to choose a secure password for the root user. You can use a password mananger like KeePassContent not supported or BitwardenContent not supported to generate and store your passwords.

+

Disabling the root User

+

You can also disable the root user if you want after updating the username which we'll demonstrate below. For security reasons it's recommended to disable the root user after updating the username.

+
+

Logout

+

After enabling the root user, you need to log out of the current user which you can do with the following command:

+ + +
logout
+
+
1
+
+

Update Username

+

Now, you'll need to log in using the root user by entering root for the username and the password you just created for the root user.

+

After logging in as the root user, you're now ready to update the username by running the following command:

+ + +
usermod -l <new_username> <old_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
  • <old_username> with the username you want to update
  • +
+

Update home Directory

+

The username has been updated, but the user's home directory will still be using the previous username. To update the home directory to reflect the updated username you need to run the following command:

+ + +
usermod -m -d /home/<new_username> <new_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
+

You can now log out of the root user by running the logout command we used earlier, and log in using the updated username and the user's password.

+

Disable root User

+

You can now disable the root user if you want, but you'll first want to make sure the updated user still has sudo privileges. You can check this by running the following command:

+ + +
groups <new_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
+

If the user still has sudo privileges, you should see the sudo group in the output.

+

After confirming the updated user still has sudo privileges, you can disable the root user by running the following command:

+ + +
sudo passwd -l root
+
+
1
+
+

Password

+

To update the password for your user you can run the following command:

+ + +
passwd
+
+
1
+
+

You will need to enter the current password for the user. Then you will be asked to enter the updated password and to re-enter the updated password.

+

Be sure to choose a secure password for your user. You can again use a password mananger like KeePassContent not supported or BitwardenContent not supported to generate and store your passwords.

+

Don't Use raspberry for your Password

+

It's recommended to not use raspberry as your password since it has been used in the past as the default password plus it isn't a secure password anyway.

+
+

Hostname

+

Every Raspberry Pi using Raspberry Pi OS Lite (64-bit) uses the default hostname raspberrypi which isn't very helpful when you're using multiple Raspberry Pi devices that you're trying to distinguish between on your network.

+

hostname Restrictions

+

The hostname may contain lowercase letters 'a' through 'z', uppercase letters 'A' through 'Z', numbers '0' through '9', and hyphens '-' as long as the first and last characters aren't hyphens. No other symbols, punctuation characters, or white space are allowed in the hostname.

+
+

hosts File

+

To update the hostname you can open the /etc/hosts file by running the following command:

+ + +
sudo nano /etc/hosts
+
+
1
+
+

Your hosts file should look something like this:

+ + +





 

127.0.0.1       localhost
+::1             localhost ip6-localhost ip6-loopback
+ff02::1         ip6-allnodes
+ff02::2         ip6-allrouters
+
+127.0.1.1       <old_hostname>
+
1
2
3
4
5
6
+
+

Be sure to replace:

+
    +
  • <old_hostname> with the updated hostname
  • +
+

Then save and exit the file.

+

hostname File

+

Next you need to open the /etc/hostname file by running the following command:

+ + +
sudo nano /etc/hostname
+
+
1
+
+

Your hostname file should look something like this:

+ + +
<old_hostname>
+
+
1
+
+

Be sure to replace:

+
    +
  • <old_hostname> with the updated hostname
  • +
+

Then save and exit the file.

+

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

After rebooting the command prompt should now display, <username>@<new_hostname>.

+

Where:

+
    +
  • <username> is the username of the current user
  • +
  • <new_hostname> is the updated hostname
  • +
+

Enable and Start SSH

+

Secure Shell (SSH) is a network communication protocol that enables you to connect securely to a remote computer or a server by using a text-based interface. When a secure SSH connection is established, a shell session is started, and you'll be able to manipulate the server by typing commands from your local computer.

+

If you want to remotely connect to your Raspberry Pi, i.e., be able to access it from your local computer, then you'll need to enable and start the SSH service on the Raspberry Pi.

+

Enable SSH

+

To enable SSH run the following command:

+ + +
sudo systemctl enable ssh
+
+
1
+
+

Start SSH

+

To start the SSH service run the following command:

+ + +
sudo systemctl start ssh
+
+
1
+
+

You should now be able to SSH into the Raspberry Pi from your local computer.

+

Configure WiFi

+

To configure WiFi you need to edit the wpa_supplicant.conf file.

+

wpa_supplicant.conf

+

The wpa_supplicant.conf file should be located in the /etc/wpa_supplicant directory.

+

To open the wpa_supplicant.conf file you can run the following command:

+ + +
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
+
+
1
+
+

After editing the file, it should look like this:

+ + +


 


 
 



ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
+update_config=1
+country=<country_code>
+
+network={
+     ssid="<ssid>"
+     psk="<password>"
+     scan_ssid=1
+}
+
1
2
3
4
5
6
7
8
9
+
+

Be sure to replace:

+ +

Then save and exit the file.

+

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

Unblock WiFi

+

If you get the following message after rebooting:

+ + +
Wi-Fi is currently blocked by rfkill.
+Use raspi-config to set the country before use.
+
+
1
2
+
+

Then you can run the following command to unblock the WiFi;

+ + +
sudo raspi-config nonint do_wifi_country <country_code>
+
+
1
+
+

Be sure to replace:

+ +

Instead of using raspi-config to unblock the WiFi which isn't a standard Debian command, you can also try installing and running urfkill.

+

Run the following command to install urfkill:

+ + +
sudo apt install urfkill
+
+
1
+
+

To unblock the WiFi using urfkill run the following command:

+ + +
sudo unblock wifi
+
+
1
+
+

Test Connection

+

To test the WiFi connection you can check the IP address by running the following command:

+ + +
hostname -I
+
+
1
+
+

Locale Settings

+

We're now going to go over how to update the time zone and keyboard layout locale settings.

+

Time Zone

+

You can check the current time zone by running the following command:

+ + +
ls -l /etc/localtime
+
+
1
+
+

To update the time zone you can run the following command:

+ + +
sudo timedatectl set-timezone <area>/<location>
+
+
1
+
+

Be sure to replace:

+
    +
  • <area> with your own area
  • +
  • <location> with your own location
  • +
+

If you're unsure what your area and location are, then take a look at the list of tz database time zonesContent not supported.

+

Keyboard Layout

+

To update the keyboard layout you can edit the keyboard file which is located in the /etc/default directory.

+

To open the keyboard file you can run the following command:

+ + +
sudo nano /etc/default/keyboard
+
+
1
+
+

After editing the file, it should look like this:

+ + +





 





# KEYBOARD CONFIGURATION FILE
+
+# Consult the keyboard(5) manual page.
+
+XKBMODEL="pc105"
+XKBLAYOUT="<layout>"
+XKBVARIANT=""
+XKBOPTIONS=""
+
+BACKSPACE="guess"
+
1
2
3
4
5
6
7
8
9
10
+
+

Be sure to replace:

+
    +
  • <layout> with your preferred keyboard layout, e.g., us
  • +
+

Then save and exit the file.

+

The value for the keyboard layout is typically the two character country codeContent not supported.

+

After updating the time zone and keyboard layout locale settings, you need to reboot your Raspberry Pi to see the changes take effect which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

Conclusion

+

After following only with this tutorial, you should now know how to configure various settings for your Raspberry Pi using standard Debian commands.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-12-20T15:02:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 1 - Introduction + https://codemonkeys.tech/vuepress-tutorial-1/ + + 2024-07-17T04:15:09.560Z + Hey fellow Code Monkeys!!! 🐵 If you're interested in learning Vuepress, then check out VuePress Tutorial 1 - Introduction! 🍌🐒 +

VuePress Tutorial 1 - Introduction

+

What We'll be Developing

+

Welcome to our VuePressContent not supported series!

+

In this series we'll be developing the Code Monkeys Blog starting from the basics.

+

So, have a look around if you haven't already.

+

Now grab a 🍌 and let's get to it!

+

Why Create a Blog?

+
    +
  • +

    Benefits of creating a blog:

    +
      +
    • Learn how to Create a Website
    • +
    • Improve your Web Development Skills & Writing Ability
    • +
    • Document your Thoughts & Ideas
    • +
    • Help Others Learn & Meet New People
    • +
    • Build your Online Brand
    • +
    • Source of Independent Income
    • +
    • Show it to Employers
    • +
    +
  • +
+

What We'll be Covering

+ +

Nice to Know

+

Since VuePressContent not supported uses HTML, CSS, JavaScript, VueContent not supported, and Markdown, it's good to have a solid grasp of them before starting.

+

However, in these posts and the accompanying videos I'll try to explain everything in sufficient detail, and anything that may need more explanation I'll provide links to helpful resources.

+

How to Use these Tutorials

+
    +
  • +

    If you want to recreate the Code Monkeys Blog or create a very similar blog then you can simply follow these tutorials in order.

    +
  • +
  • +

    Each tutorial will give you some general information about a VuePressContent not supported topic and provide helpful resources.

    +
  • +
  • +

    Then we'll apply what we've learned to the blog as an example.

    +
  • +
  • +

    This way you don't have to necessarily follow the tutorials in a linear order.

    +
  • +
  • +

    You'll be able to just learn a VuePressContent not supported topic if you don't want to recreate the entire blog or create a very similar blog.

    +
  • +
+

Updates

+

Note that the Code Monkeys Blog is not a finished product.

+

This means new features will be added, and the current code will be optimized and refactored as needed.

+

So, when something gets updated a new post will be made discussing the changes and/or an old post may be updated.

+

Also, this blog is currently using VuePress v1Content not supported.

+

VuePress v2Content not supported is still in beta at the time of this writing.

+

Once VuePress v2Content not supported is out of beta and the plugins being used are updated, the plan is to migrate over.

+

Resources

+ +]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-09-24T16:26:30.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 10 - Homepage Styling Part 2 + https://codemonkeys.tech/vuepress-tutorial-10/ + + 2024-07-17T04:15:09.566Z + Hey fellow Code Monkeys!!! 🐵 Ready to continue the homepage styling for your VuePress site, then check out VuePress Tutorial 10 - Homepage Styling Part 2! 🍌🐒 +

VuePress Tutorial 10 - Homepage Styling Part 2

+

Homepage Styling Recap

+

In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global styling variables for the $accentColor, $textColor, and $borderColor in the palette.styl file. The colors of these variables then get applied instead of the colors originally set by the default themeContent not supported. These variables can also be used to style other elements of the blog as well.

+

We also added our own global styling variables to the palette.styl file which included the $backgroundColor and the $darkBorderColor. These variables were then used in the index.styl file.

+

In the index.styl file we used some of the global styling variables along with overriding and adding our own global styling to style the background-color of the blog, the main tag with a class of home, the header tag with a class of hero, and the div tag with a class of features.

+

After overriding and adding these styles to the blog, the main card on the homepage was being covered by the navbar, so in this tutorial we'll be fixing this issue. Then we'll be adding some hover effects to the main card logo and to the box shadow around the main card. Finally, we'll be adding a radial gradient background to the main card.

+

Homepage Styling Updates

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-10 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Fixing the Main Card Placement

+

We'll start by fixing the issue of the main card being covered by the navbar. To fix this issue we just need to update the padding in the home class:

+ + +





 


















html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+
    +
  • padding: 8rem 0 0 adds a padding of 8rem to the top and a padding of 0 to the left, right, and bottom of the main card. This pushes the main card down, so it is no longer being covered by the navbar.
  • +
+

Why not Start with this Padding?

+

In the previous tutorial we used padding: 0 to style the home class since that code was based off of a more complicated way of styling the Footer component which has now been simplified. We'll be going over this simplified Footer component styling in the next tutorial.

+
+

Now that we've fixed the placement of the main card, let's add the hover effects to the main card logo and to the box shadow around the main card.

+

Adding Hover Effects

+

To implement the hover effects we'll be adding a CSS pseudo-class of hover to the header tag with a class of hero which we'll use along with the transition property to smoothly apply the hover effects to the main card logo and to the box shadow around the main card.

+

First, let's add the hover pseudo-class:

+ + +














 
 
 
 










html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+
+
    +
  • .hero:hover applies the hover pseudo-class to the .hero selector which will apply the styles defined inside of it when the user hovers their pointer over the header tag with a class of hero.
  • +
  • box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f changes the box shadow style defined in the hero class.
  • +
  • transform: scale(1.1) applies the scale() method to the transform property to increase the size of the img tag to be 1.1 times the original width and height.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

When you hover your pointer over the main card, you should see the logo increase in width and height and the box shadow around the main card should now be more prevalent.

+

The hover effects are working, but they aren't that smooth. To make them smoother we're going to use the transition property.

+

The transition property allows you to change CSS property values smoothly over a specified duration. To create a transition you need to specify two values:

+
    +
  • The CSS property you want to add the transition to
  • +
  • The duration of the transition
  • +
+

Here's what the index.styl file looks like after adding our transition properties:

+ + +











 



 
 














html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        transition: box-shadow 0.2s
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+        img
+          transition: transform 0.2s
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+
    +
  • transition: box-shadow 0.2s adds the transition effect to the box-shadow property with a specified duration of 0.2s.
  • +
  • transition: transform 0.2s adds the transition effect to the transform property used by the img tag with a specified duration of 0.2s.
  • +
+

When you hover your pointer over the main card, the hover effects should look much smoother.

+

If you want to learn more about the transition property, then check out CSS TransitionsContent not supported.

+

Now that we have added our hover effects, let's add the radial gradient background to the main card.

+

Adding Gradient Background

+

CSS gradients allow you to display smooth transitions between two or more specified colors. +You can control numerous aspects of the transitions between the colors including the direction, shape, number of colors, etc.

+

We'll be adding a circular radial gradient background to the center of the header tag with a class of hero:

+ + +














 

















html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        transition: box-shadow 0.2s
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+        padding: 2rem
+        img
+          transition: transform 0.2s
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+
+
    +
  • background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor) adds a radial gradient with a circular shape to the center of the element starting with a color of #2c303a which transitions to the $backgroundColor variable that is defined in the palette.styl file.
  • +
+

If you want to learn more about CSS gradients, then check out these resources:

+ +

You can also check out Gradient MagicContent not supported which is a gallery of CSS gradients that you can freely use in your own projects.

+

The background of the main card should now be a radial gradient that starts at the center of the card with a color of #2c303a that circularly transitions to the $backgroundColor.

+

Next Steps

+

In the next tutorial we'll add styling to make the Footer component stick to the bottom of the page, and we'll add a highlight effect to the SVG icons.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-02T21:56:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 11 - Sticky Footer + https://codemonkeys.tech/vuepress-tutorial-11/ + + 2024-07-17T04:15:09.569Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to make your footer stick to the bottom of the page, then check out VuePress Tutorial 11 - Sticky Footer! 🍌🐒 +

VuePress Tutorial 11 - Sticky Footer

+

What We're Doing

+

We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into a sticky footer. We were going to be adding a highlight effect when hovering over the SVGContent not supported icons in this tutorial as well, but the process is a little more involved than I remembered. So, we're going to be adding the highlight effect when hovering in the next tutorial.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-11 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's get started by discussing what a sticky footer is.

+ +

A sticky footer adheres or sticks to the bottom of the browser window assuming there isn't enough content on the page to push the footer lower like on this blog post for example. If the content on the page is short like on the homepage, then the footer will still stick to the bottom of the page instead of appearing directly below the content above it.

+

There are multiple ways to add a sticky footer to your site, but we're only going to discuss how to use the CSS calc() function. If you're interested in learning about the other ways of adding a sticky footer, then check out Sticky Footer, Five WaysContent not supported.

+ +

Here's what the index.styl file looks like after adding the sticky footer styling:

+ + +




 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

Here we added min-height: calc(100vh - 10.3125rem) to a div tag with a class of theme-container.

+

If you inspect the browser and go to the Elements tab, you can see where the div tag with a class of theme-container is in the HTML of the blog.

+ + +



 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">...</div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
+
+

The div tag with a class of theme-container contains all of the content of the blog except for the footer tag.

+

So, here we're using min-height: calc(100vh - 10.3125rem) to set the minimum height of the content inside of the div tag with a class of theme-container to be 100vh minus 10.3125rem which is the height of the Footer component including the top and bottom padding.

+

The unit of vh is relative to 1% of the height of the viewport which is the browser window size, so 100vh is 100% of the height of the viewport.

+

So, when we subtract 10.3125rem from 100vh, we're subtracting the height of the Footer component from 100% of the viewport height.

+

This means the minimum height of the content inside of the div tag with a class of theme-container will be the entire homepage height minus the height of the Footer component.

+

After setting this style, notice how the Footer component is now pushed to the bottom of the page. This is how we get the Footer component to stick to the bottom of the page.

+

Also, since we added this style to the index.styl file, this style will be applied globally to the blog which is fine since the Footer component will be used on every page in the blog.

+

Using a Fixed Footer Size

+

We're using a fixed size for the height of the Footer component which means if we change the height later on we'll have to update this value. In a future tutorial we'll be changing the height, so we'll have to update this value. If you prefer to not update this value whenever you update the height of the Footer component, then it may be worth looking into implementing the flexbox or grid methods for adding a sticky footer which you can find in the Sticky Footer, Five WaysContent not supported post.

+
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

As mentioned in the beginning of this post, in the next tutorial we're going to be adding a highlight effect when hovering over the SVGContent not supported icons.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-05T20:04:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 12 - Highlight SVGs on Hover + https://codemonkeys.tech/vuepress-tutorial-12/ + + 2024-07-17T04:15:09.578Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to add a highlight effect when hovering over SVGs, then check out VuePress Tutorial 12 - Highlight SVGs on Hover! 🍌🐒 +

VuePress Tutorial 12 - Highlight SVGs on Hover

+

What We're Doing

+

We're now ready to add a highlight effect when hovering over the SVGContent not supported icons. The method we'll be using doesn't require a lot of styling, but it does require us to edit the fill attribute of the SVGContent not supported icons.

+

We'll demonstrate how to edit the fill attribute by manually editing the files as well as using a Command-line Interface (CLI) command provided by vuepress-plugin-svg-iconsContent not supported which will automate the process and optimize the files.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-12 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's begin by manually editing one of the icon files.

+

Manual Editing

+

When we downloaded the icons from iconfontContent not supported we downloaded them with a fill attribute which will override the color we set for the hover effect.

+

To fix this issue we can manually remove the fill attribute from each icon file.

+

Icon Example

+

We'll use the GitHub.svg file as an example:

+ + +
































 




<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+>
+<svg
+  t="1625711611350"
+  class="icon"
+  viewBox="0 0 1024 1024"
+  version="1.1"
+  xmlns="http://www.w3.org/2000/svg"
+  p-id="2770"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="200"
+  height="200"
+>
+  <defs>
+    <style type="text/css"></style>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+       19.9-10.8 19.9-22.2v-77.6c-135.8
+       15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+       31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+       17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+       16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+       118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+       80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+       24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+       188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8
+       9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+       512.1c0-247.5-200.6-447.9-447.9-447.9C265
+       64.1 64.6 264.5 64.6 512z"
+    fill="#e6e6e6"
+    p-id="2771"
+  ></path>
+</svg>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
+
+

After removing fill="e6e6e6", the file will look like this:

+ + +
<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+>
+<svg
+  t="1625711611350"
+  class="icon"
+  viewBox="0 0 1024 1024"
+  version="1.1"
+  xmlns="http://www.w3.org/2000/svg"
+  p-id="2770"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="200"
+  height="200"
+>
+  <defs>
+    <style type="text/css"></style>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+       19.9-10.8 19.9-22.2v-77.6c-135.8
+       15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+       31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+       17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+       16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+       118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+       80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+       24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+       188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8
+       9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+       512.1c0-247.5-200.6-447.9-447.9-447.9C265
+       64.1 64.6 264.5 64.6 512z"
+    p-id="2771"
+  ></path>
+</svg>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+
+

SVG File Formatting

+

The files above have been formatted to make them easier to read for this post, but the contents in your file may all be on one line. If this is the case, just scroll until you find the fill attribute or search for fill in the file to be able to easily find and remove it.

+
+

Icon Styles

+

Now that we have removed the fill attribute from the file, we can add the styling to highlight the icon when hovering over it.

+

Here's what the Footer.vue file looks like after adding the hover effect:

+ + +









































































 
 






<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+    svg:hover
+      fill: $accentColor
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
+
+
    +
  • svg:hover applies the hover pseudo-class to the svg selector which will apply the styles defined inside of it when the user hovers their pointer over the svg tag.
  • +
  • fill: $accentColor changes the fill of the svg tag to be the accent color.
  • +
+

Notice the icon fill is now set to be the accent color even if you're not hovering over the icon.

+

This is because we haven't set a fill attribute value for when the user isn't hovering over the icon, so it falls back to the value set in svg:hover.

+

To fix this issue we'll add the following styling to the Footer.vue file:

+ + +









































































 
 








<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+    svg
+      fill: $textColor
+    svg:hover
+      fill: $accentColor
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
+
+
    +
  • svg is the selector used to target the icon.
  • +
  • fill: $textColor sets the fill of the svg to be the text color when the user isn't hovering over the icon.
  • +
+

The fill should now be the same as the text color when you're not hovering over the icon, and it should get set to be the accent color when you hover over the icon.

+

To set the hover effect for the other icons, you will need to remove the fill attribute from the other icon files.

+

If you have questions about the CSS discussed above, then check out these resources:

+ +

You can also check out this CSS-Tricks postContent not supported if you're interested in learning about other ways to change the fill on hover.

+

Instead of manually editing each file, we can use the CLI command provided by vuepress-plugin-svg-iconsContent not supported to automate the process.

+

Automated Editing

+

The CLI command provided by vuepress-plugin-svg-iconsContent not supported optimizes SVGContent not supported files by removing a lot of redundant and useless information including the fill attribute. The plugin does this by integrating SVGOContent not supported which stands for Scalable Vector Graphic Optimizer and is a Node.jsContent not supported based tool for optimizing SVGContent not supported files.

+

CLI Command

+

Here's the CLI command you need to run vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

+

You can add the CLI command to the scripts object in the package.json file:

+ + +


















 







{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://www.codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs",
+    "svgo": "vuepress svgo docs"
+  },
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Then you can run the script using:

+ + +
yarn svgo
+
+
1
+ +
npm run svgo
+
+
1
+
+

After running the script, the SVGContent not supported files will be optimized which includes removing the fill attribute from the files.

+

The hover effect should now be applied to each icon assuming you added the styling from the section above.

+

If you have any questions or want to learn more about the plugin, then check out the guideContent not supported.

+

You can also check out SVGOContent not supported if you want to learn more about the optimization tool including CLI usage, configuration, API usage, etc.

+

Optimized Icon Example

+

Here's the contents of the optimized GitHub.svg file:

+ + +
























<svg
+  viewBox="0 0 1024 1024"
+  xmlns="http://www.w3.org/2000/svg"
+>
+  <defs>
+    <style/>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+    19.9-10.8 19.9-22.2v-77.6c-135.8
+    15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+    31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+    17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+    16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+    118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+    80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+    24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+    188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c.8
+    9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+    512.1c0-247.5-200.6-447.9-447.9-447.9C265
+    64.1 64.6 264.5 64.6 512z"
+  />
+</svg>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

SVG File Formatting

+

Just like the previous examples the file is formatted to make it easier to read for this post, but the contents in your file may all be on one line.

+
+

If you compare the optimized file with the original file above, you'll notice a lot of unnecessary information was removed including the fill attribute without affecting the rendering of the icons.

+

Next Steps

+

In the next tutorial we'll be styling the navbar by updating the background color, height, border, etc.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-08T18:18:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 14 - Dropdown Menu Styling + https://codemonkeys.tech/vuepress-tutorial-14/ + + 2024-07-17T04:15:09.584Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the dropdown menu for your VuePress site, then check out VuePress Tutorial 14 - Dropdown Menu Styling! 🍌🐒 +

VuePress Tutorial 14 - Dropdown Menu Styling

+

What We're Doing

+

If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling to make it match the rest of the blog. To implement the styling we'll be targeting these CSS classes nav-dropdown and dropdown-item which are provided by the default themeContent not supported.

+

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-14 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Force Dropdown Menu to Hover

+

Before we start styling the dropdown menu, we're going to force an element state of hover on the div tag with a class of dropdown-wrapper. This will ensure we can see the changes we're making to the dropdown menu even when we move the cursor away from the dropdown-wrapper class.

+

To do this we need to select the dropdown-wrapper class in the Elements tab.

+

Here's the location of the dropdown-wrapper class in the HTML:

+ + +












 


















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">...</div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+

After selecting the dropdown-wrapper class in the Elements tab, we need to go to the Styles tab, click on the :hov tab, then force the element state of hover by checking the :hover checkbox.

+

The dropdown menu should now be shown even when the cursor is moved away from the dropdown-wrapper class.

+ +

We're now ready to begin styling the dropdown menu.

+

HTML Location

+

We're going to begin the styling by locating where the nav-dropdown class is in the HTML:

+ + +















 



















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">...</ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

From the HTML above we can see that the nav-dropdown class is attached to a ul tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

+

Styling

+

This means in the index.styl file we can nest the nav-dropdown class inside of the nav-item class and apply the following styles:

+ + +

































 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+              .nav-dropdown
+                text-align: center
+                background-color: $backgroundColor
+                border: 0.125rem solid $borderColor
+                padding: 0.8rem 0
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
+
+
    +
  • text-align: center horizontally aligns the text in the dropdown menu.
  • +
  • background-color: $backgroundColor sets the background color of the dropdown menu to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • +
  • border: 0.125rem solid $borderColor adds a border around the dropdown menu with a thickness of 0.125rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • +
  • padding: 0.8rem 0 adds a padding of 0.8rem to the top and bottom and 0 to the left and right of the dropdown menu.
  • +
+ +

We're now ready to style the dropdown-item class.

+

HTML Location

+

Here's the location of the dropdown-item class in the HTML:

+ + +
















 
 
 
 
 
 
 
 
 
 




















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">
+                    <li class="dropdown-item">
+                      ::marker
+                      <!---->
+                      <a href="/posts/" class="nav-link"> All Posts </a>
+                    </li>
+                    <li class="dropdown-item">
+                      ::marker
+                      <h4> By Topic </h4>
+                      <ul class="dropdown-subitem-wrapper">...</ul>
+                    </li>
+                  </ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
+
+

From the HTML above we can see that there are two dropdown-item classes. Each one is attached to an li tag and is a child of the ul tag with a class of nav-dropdown.

+

Also, notice the h4 tag which is a child of the li tag with a class of dropdown-item. We'll be styling this h4 tag as well.

+

Styling

+

In the index.styl file we can nest the dropdown-item class inside of the nav-dropdown class as well as nest the h4 tag inside of the dropdown-item class and apply the following styles:

+ + +






































 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+              .nav-dropdown
+                text-align: center
+                background-color: $backgroundColor
+                border: 0.125rem solid $borderColor
+                padding: 0.8rem 0
+                .dropdown-item
+                  padding-bottom: 0.4rem
+                  h4
+                    border-top: 0.0625rem solid $borderColor
+                    cursor: text
+                    margin: 0.45rem 0.375rem 0
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
+
+
    +
  • padding-bottom: 0.4rem adds a padding of 0.4rem to the bottom of each of the dropdown items.
  • +
  • border-top: 0.0625rem solid $borderColor adds a border to the top of the h4 tag, i.e., the By Topics text with a thickness of 0.0625rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • +
  • cursor: text sets the cursor when pointing over the h4 tag, i.e., the By Topics text to be the text cursor which indicates the text can be selected and is typically in the shape of an I-beam.
  • +
  • margin: 0.45rem 0.375rem 0 adds a margin of 0.45rem to the top, 0.375rem to the left and right, and 0 to the bottom of the h4 tag, i.e., the By Topics text.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

In the next tutorial we'll be installing and beginning the process of configuring the @vuepress/plugin-blogContent not supported.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-15T22:17:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 13 - Navbar Styling + https://codemonkeys.tech/vuepress-tutorial-13/ + + 2024-07-17T04:15:09.596Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the navbar for your VuePress site, then check out VuePress Tutorial 13 - Navbar Styling! 🍌🐒 +

VuePress Tutorial 13 - Navbar Styling

+

What We're Doing

+

Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling. We're going to be targeting these CSS classes provided by the default themeContent not supported: navbar, site-name, links, search-box, nav-links, nav-item, and dropdown-title.

+

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-13 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+ +

Alright, now we're ready to begin styling the navbar.

+

HTML Location

+

We're going to start by locating where the navbar class is in the HTML:

+ + +




 











<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+
+

From the HTML above we can see that the navbar class is attached to a header tag and is a child of the div tag with a class of theme-container.

+

Styling

+

This means in the index.styl file we can nest the navbar class inside of the theme-container class and apply the following styles:

+ + +






 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
+
+
    +
  • display: flex defines a flex container for all of the direct children of the header tag with a class of navbar.
  • +
  • align-items: center vertically centers the flex items, i.e., the direct children of the header tag with a class of navbar.
  • +
  • height: 4.5rem sets the height of the navbar to be 4.5rem.
  • +
  • background-color: $backgroundColor sets the background color of the navbar to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • +
  • border-bottom-width: 0.125rem sets the border bottom width of the navbar to be 0.125rem.
  • +
+

Site Name Class

+

After locating and styling the navbar class, we're ready to move on to the site-name class.

+

HTML Location

+

Here's the location of the site-name class in the HTML:

+ + +








 














<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">
+            <img src="/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png" alt="Code Monkeys" class="logo">
+            <span class="site-name can-hide">Code Monkeys</span>
+          </a>
+          <div class="links" style>...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the site-name class is attached to a span tag and is a child of the a tag with a class of home-link which is a child of the header tag with a class of navbar.

+

Styling

+

This means in the index.styl file we can nest the site-name class inside of the navbar class and apply the following style:

+ + +












 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
+
+
    +
  • font-size: 1.5rem sets the font size of the site name in the navbar, i.e., Code Monkeys to be 1.5rem.
  • +
+ +

We're now ready to style the links class.

+

HTML Location

+

Here's the location of the links class in the HTML:

+ + +







 












<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

From the HTML above we can see that the links class is attached to a div tag and is a child of the header tag with a class of navbar.

+

Styling

+

This means in the index.styl file we can nest the links class inside of the navbar class and apply the following styles:

+ + +














 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
+
+
    +
  • background-color: transparent sets the background color behind the search box and of the links on the right side of the navbar to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the links class.
  • +
  • height: 3rem sets the height of the div tag which contains the search box and the links on the right side of the navbar to be 3rem.
  • +
  • align-items: center vertically centers the flex items, i.e., the direct children of the div tag with a class of links which was given a style of display: flex by the default themeContent not supported.
  • +
+

Search Box Class

+

We've finished styling the links class, so let's begin the styling of the search-box class.

+

HTML Location

+

Here's the location of the search-box class in the HTML:

+ + +








 














<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">...</nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the search-box class is attached to a div tag and is a child of the div tag with a class of links.

+

Styling

+

This means in the index.styl file we can nest the search-box class inside of the links class and apply the following styles:

+ + +


















 
 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
+
+
    +
  • margin-right: 1.5rem adds a margin of 1.5rem to the right of the search box.
  • +
  • font-size: 1.125rem sets the font size of the text in the input tag to be 1.125rem.
  • +
  • background-color: transparent sets the background color of the input tag to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the input tag.
  • +
  • border-width: 0.125rem sets the width of the border around the input tag to be 0.125rem.
  • +
  • color: $textColor sets the color of the text in the input tag to be $textColor which is a global styling variable we set in the palette.styl file.
  • +
+

Viewing the font-size and color Styles

+

To see the font-size and color styles in action try typing some text in the search box. Once you click in the search box, notice the border gets its color set to the $accentColor which is a global styling variable we set in the palette.styl file. This effect is provided by the default themeContent not supported and uses the focus pseudo-class.

+
+ +

Now that we have styled the search-box class and its child input tag, we're ready to move on to the styling of the nav-links class.

+

HTML Location

+

Here's the location of the nav-links class in the HTML:

+ + +









 













<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">...</nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the nav-links class is attached to a nav tag and is a child of the div tag with a class of links.

+

Styling

+

This means in the index.styl file we can nest the nav-links class inside of the links class and apply the following style:

+ + +

























 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
+
+
    +
  • font-size: 1.25rem sets the font size of the nav links on the right side of the navbar to be 1.25rem.
  • +
+ +

We're now ready to style the nav-item class.

+

HTML Location

+

Here's the location of the nav-item class in the HTML:

+ + +










 
 
 
 















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

From the HTML above we can see that there are four nav-item classes. Each one is attached to a div tag and is a child of the nav tag with a class of nav-links.

+

Styling

+

This means in the index.styl file we can nest the nav-item class inside of the nav-links class and apply the following styles:

+ + +



























 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
+
+
    +
  • .nav-item:first-child applies the first-child pseudo-class to the .nav-item selector. The first-child pseudo-class applies the styles defined inside of it to the first element among a group of sibling elements which in our case is the first div tag with a class of nav-item in the group of sibling div tags that have the class of nav-item.
  • +
  • margin-left: 0 adds a margin of 0 to the left of the first div tag with a class of nav-item within the group of sibling div tags that have a class of nav-item.
  • +
  • margin-left: 1.75rem adds a margin of 1.75rem to the left of all of the div tags that have a class of nav-item except for the first one since that is being styled by the first-child pseudo-class.
  • +
+ +

After finishing the styling for the nav-item class, we're now ready to move on to the styling of the dropdown-title class.

+

HTML Location

+

Here's the location of the dropdown-title class in the HTML:

+ + +













 





















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">...</ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

From the HTML above we can see that the dropdown-title class is attached to a button tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

+

Styling

+

This means in the index.styl file we can nest the dropdown-title class inside of the nav-item class and apply the following style:

+ + +































 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+
    +
  • font-size: 1.25rem sets the font size of the dropdown title, i.e., Posts to be 1.25rem.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

In the next tutorial we'll be styling the dropdown menu in the navbar by updating the background color, border, padding, etc.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-11T17:11:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 15 - Blog Plugin + https://codemonkeys.tech/vuepress-tutorial-15/ + + 2024-07-17T04:15:09.609Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and configure the blog plugin for your VuePress site, then check out VuePress Tutorial 15 - Blog Plugin! 🍌🐒 +

VuePress Tutorial 15 - Blog Plugin

+

What We're Doing

+

It's now time to install and begin the process of configuring @vuepress/plugin-blogContent not supported. We're going to start by describing the main features provided by the plugin. Then we'll go over the installation and usage. After going over the installation and usage, we'll describe the concepts and implementation of document classification, permalinks, and directory classification.

+

If you're interested you can check out the blog plugin code hereContent not supported. You can also check out the @vuepress/theme-blogContent not supported if you're interested in learning more about it. We won't be discussing the blog theme in detail since we're using the default themeContent not supported.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-15 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Features

+

The blog plugin provides the following main features:

+ +

We'll be discussing pagination and the Client API in more detail in future tutorials.

+

Installation

+

We're now ready to discuss the installation of the plugin.

+

Using the Tutorials Repo

+

If you're following along with the tutorials, then when you switch to the tutorial-15 branch you can run the following command to install the package instead of running the installation command:

+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

+

Using the Installation Command

+

To install the blog plugin in your own project you can run the following command:

+ + +
yarn add -D @vuepress/plugin-blog
+
+
1
+ +
npm install -D @vuepress/plugin-blog
+
+
1
+
+

Installing the Same Blog Plugin Version

+

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @vuepress/plugin-blog@1.9.4.

+
+

Updated package.json File

+

After installing the plugin, the package.json file should look something like this:

+ + +






















 




{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://www.codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs",
+    "svgo": "vuepress svgo docs"
+  },
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "@vuepress/plugin-blog": "^1.9.4",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+

Automatically Installed Plugins

+

When installing the blog plugin you may have noticed the following plugins also get installed:

+ +

These plugins provide features that are common to blogs, so they're included in the installation of the blog plugin. Including these plugins in the installation of the blog plugin saves you the time of searching for plugins that provide these common features as well as from having to separately install each plugin.

+

The plugins will only be used though if you enable them in the config.js file.

+

They can also be installed as standalone plugins, so you don't need to use the blog plugin to use them for your site.

+

We'll be discussing these plugins in more detail in future tutorials.

+

Usage

+

To use the blog plugin we need to add the following to the config.js file which should now look something like this:

+ + +












































 


module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: ['@goy/svg-icons', '@vuepress/blog'],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
+
+

Document Classification

+

The blog plugin provides a document classifier which is a set of functions that handles the classifications of pages with the same characteristics.

+

These characteristics for pages in a blog may consist of:

+
    +
  • Pages in the same directory, e.g., a _posts directory.
  • +
  • Pages containing the same frontmatter key, e.g., tag: js which signifies those pages contain content related to js, i.e., JavaScript.
  • +
+

Another common requirement is the ability to group all pages as well as pages with specific tags for pagination.

+

Before discussing directory classification, we're going to first define what a permalink is as well as discuss how they're built and configured. This will give us a better understanding of how the blog plugin uses permalinks to build customizable links for blog posts which is preferable to using the default way of creating links.

+ +

A permalink is a URL that is intended to remain unchanged for a long time. This leads to links that are less susceptible to link rotContent not supported which is when a link ceases to point to its originally targeted web page due to the page being relocated to a new address or becoming permanently unavailable.

+

VuePress v1Content not supported provided support for creating customizable links by introducing the ability to build permalinks.

+

Template Variables

+

We're able to build permalinks by using the following template variables:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableDescription
:yearPublished year of post (4-digit)
:monthPublished month of post (2-digit)
:i_monthPublished month of post (without leading zeros)
:dayPublished day of post (2-digit)
:i_dayPublished day of post (without leading zeros)
:slugSlugified file path (without extension)
:regularPermalink generated by VuePress by default.
+

Default Configuration

+

The default configuration for permalinks is /:regular.

+

The :regular template variable will first check if the Markdown files in the documents directory which in our case is the docs directory are index files, i.e., README.md or index.md.

+
    +
  • If they're index files, they get converted to URLs without extensions that are based on the file hierarchy.
  • +
  • If they're not index files, they get converted to URLs with html extensions that are based on the file hierarchy.
  • +
+

Let's look at some examples to make this clearer where the file paths are relative to the documents directory which again in our case is the docs directory:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Relative PathPage Routing
/README.md/
/foo/README.md/foo/
/foo.md/foo.html
/foo/bar.md/foo/bar.html
+

Using Vue Files

+

Files with a vue extension follow the same conventions described for Markdown files above, e.g., /README.vue gets converted to /.

+
+

You can take a look at fileToPath.tsContent not supported to see the code that handles converting files to paths.

+

Global Configuration

+

To globally change the default configuration for permalinks for your site you can add the permalink property to the config.js file.

+

We can build a permalink to use in the config.js file by using the template variables.

+

For example we can use the template variables to build the following permalink: /:year/:month/:day/:slug.

+

We can then set this as the value for the permalink property in the config.js file:

+ + +




module.exports = {
+  permalink: '/:year/:month/:day/:slug'
+}
+
1
2
3
+
+

Using the Default Configuration

+

We'll be leaving the permalink property with the default value of /:regular, and we'll use the configuration provided by the blog plugin to customize the permalinks for each blog post.

+
+

Local Configuration

+

It's also possible to set a permalink locally for a single page which overrides any globally set configuration.

+

This is done be setting the permalink property in the frontmatter of the Markdown file:

+ + +


 


---
+title: Local Permalink
+permalink: /using-a-local-permalink
+---
+
1
2
3
4
+
+

This will set the permalink property to be /using-a-local-permalink instead of following the global configuration.

+

Now that we have an understanding of document classification and permalinks, let's move onto the directory classifier which handles classifying pages placed in the same directory.

+

Directory Classification

+

First we need to create a directory that will contain all of the pages we want to classify. To do this we'll create a _posts directory inside of the docs directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ ├── _posts +│ ├── icons +│ └── README.md

+

Next, we'll create the following example pages in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

The _posts directory for your site should now look like this:

+

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ └── 2022-05-08-example-page-3.md

+

By default VuePressContent not supported will create the following page URLs since it uses the /:regular template variable described above when building the links:

+
    +
  • /_posts/2020-07-03-example-page-1.html
  • +
  • /_posts/2021-11-16-example-page-2.html
  • +
  • /_posts/2022-05-08-example-page-3.html
  • +
+

You should now be able to navigate to these pages in the browser:

+ +

The default behavior is fine for creating the main pages on the site, but having the ability to build customizable links for blog posts is preferable.

+

After using the configuration provided by the blog plugin to build customized permalinks, the page URLs will look like this:

+
    +
  • /2020/07/03/example-page-1/
  • +
  • /2021/11/16/example-page-2/
  • +
  • /2022/05/08/example-page-3/
  • +
+

To build these customizable links we're going to start setting up the directory classifier configuration in the config.js file.

+

directories

+

First, we'll add the directories property which is used to create the directory classifier.

+

The expected type is a DirectoryClassifier[], and the default value is [].

+

Here's the updated config.js file:

+ + +














































 
 
 
 
 
 



module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
+
+

id

+

Next, we'll add the id property which sets a unique id for the current classifier. We'll use a value of posts.

+

The expected type is a string, and the default value is undefined.

+

Here's the updated config.js file:

+ + +


















































 
 
 






module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
+
+

dirname

+

Now, we'll add the dirname property which is used to identify the directory we want to classify. This is the _posts directory we created earlier.

+

The expected type is a string, and the default value is undefined.

+

Here's the updated config.js file:

+ + +




















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
+
+

After setting the dirname property, the page URLs get set to the customized permalinks mentioned above:

+ +

The customized permalinks are actually built using properties we haven't discussed yet. The blog plugin sets default values that don't need to be explicitly set in the config.js file. We'll be discussing these other properties and their default values below.

+

The previously provided links still work because they get converted to the customized permalinks when navigating to those pages.

+

Unknown Custom Element

+

When navigating to the links if you inspect the browser then go to the Console, you'll see the following error: Unknown custom element: <Post>.

+
+

This error is occurring because the plugin is looking for a Post layout component in the layouts directory which we haven't created yet.

+

Before creating a Post layout component to fix this error, we're going to first add the path property.

+

path

+

The path property specifies the entry page, also known as the list page for the current classifier. This page will be used to display your posts as a paginated list.

+

The expected type is a string, and the default value is /${id}/ where ${id} is the value of the id property we previously set.

+

This means you don't need to explicitly set the path property if you're going to be using the same value as the id property. We'll be using a value of /posts/ for the path property, so we don't need to explicitly set the property. However, we're going to explicitly set the property because it allows us to have a quick reference to the property and its value.

+

Here's the updated config.js file:

+ + +





















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+

You can navigate to the entry page by using the following link:

+ +

Notice this link has the value of the path property in it, i.e., /posts/. This is the same link we set in the navbar dropdown menu for All Posts, so you can click on that link to navigate to the entry page which will eventually be a paginated list of all of the posts.

+

Currently, when navigating to that link the Layout component provided by the default themeContent not supported is displayed. The blog plugin will fallback to using the Layout component if it's unable to find an IndexPost layout component in the layouts directory.

+

This means we can create an IndexPost layout component that specifically handles the layout of the paginated list of all of the posts instead of using the Layout component.

+

Creating the IndexPost Layout

+

To create the IndexPost layout component we're going to add an IndexPost.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

+

. +├── layouts +│ ├── GlobalLayout.vue +│ └── IndexPost.vue

+

We're going to begin the development of the IndexPost layout component by adding template, script, and style tags:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

We'll continue developing the IndexPost layout component in a future tutorial.

+

layout

+

We're now ready to add the layout property which is used to specify which layout to use for the entry page.

+

The expected type is a string, and the default value is 'IndexPost' || 'Layout'.

+

From the default value we can see why the entry page originally defaulted to using the Layout component before we created the IndexPost layout component. Since the blog plugin looks for the IndexPost layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the layout property, e.g., you could use a value of MyIndexPost which you would have to explicitly set in the config.js file. Then you would have to create a MyIndexPost.vue file inside of the layouts directory.

+

Here's the updated config.js file:

+ + +






















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
+
+

We're now going to fix the Unknown Custom Element error we got after adding the dirname property. To fix this error we need to create the previously mentioned Post layout component.

+

Creating the Post Layout

+

The Post layout component is used to handle the layout for individual post pages.

+

To create the Post layout component we're going to add a Post.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

+

. +├── layouts +│ ├── GlobalLayout.vue +│ ├── IndexPost.vue +│ └── Post.vue

+

We're going to begin the development of the Post layout component by adding template, script, and style tags:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

We'll continue developing the Post layout component in a future tutorial.

+

itemLayout

+

We're now ready to add the itemLayout property which is used to specify which layout to use for individual post pages.

+

The expected type is a string, and the default value is 'Post'.

+

From the default value we can see why the blog plugin looks for a Post layout component. Since the blog plugin looks for the Post layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the itemLayout property, e.g., you could use a value of MyPost which you would have to explicitly set in the config.js file. Then you would have to create a MyPost.vue file inside of the layouts directory.

+

Here's the updated config.js file:

+ + +























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
+
+ +

We're now ready to add the itemPermalink property which is used to build customized permalinks for each blog post.

+

The expected type is a string, and the default value is '/:year/:month/:day/:slug'.

+

From the default value we can see how the blog plugin built the customized permalinks after only setting the dirname property. Since the blog plugin uses the value we currently want, we don't need to explicitly set the property. However, just like the other properties we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

Here's the updated config.js file:

+ + +
























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
+
+

Summary of URLs and Layouts

+

Here's a table that summarizes the relationship between the page URLs the blog plugin builds using customized permalinks and the layout components.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
URLsLayouts
/posts/IndexPost (falls back to Layout)
/2020/07/03/example-page-1/Post
/2021/11/16/example-page-2/Post
/2022/05/08/example-page-3/Post
+

Next Steps

+

In the next tutorial we'll be discussing the configuration for the pagination property as well as how to access the pagination data in the layout components by using the Client API.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-21T12:26:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 16 - Pagination + https://codemonkeys.tech/vuepress-tutorial-16/ + + 2024-07-17T04:15:09.616Z + Hey fellow Code Monkeys!!! 🐵 Ready to learn about the pagination feature provided by the blog plugin, then check out VuePress Tutorial 16 - Pagination! 🍌🐒 +

VuePress Tutorial 16 - Pagination

+

What We're Doing

+

Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blogContent not supported. In this tutorial we're going to begin the configuration of the pagination property as well as discuss the globally scoped $pagination variable provided by the Client API.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-16 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Pagination Configuration

+

As mentioned in the previous tutorial pagination allows you to break up the display of your posts into multiple pages. This provides easier navigation and a better user experience.

+

If you have any questions or want to learn more about the pagination configuration, then check out the pagination propertyContent not supported and Pagination ConfigContent not supported documentation.

+

pagination

+

We're going to begin the configuration by adding the pagination property which allows you to customize the pagination of your posts.

+

The expected type is a Pagination object.

+

Here's the updated config.js file:

+ + +

























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {},
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
+
+

lengthPerPage

+

Next, we'll add the lengthPerPage property which sets the maximum number of posts to display per page.

+

The expected type is a number, and the default value is 10.

+

When the number of posts is greater than the lengthPerPage value, the blog plugin will generate the necessary pages to display all of the posts.

+

The blog plugin does this by adding page/n/ onto the end of the entry page where n represents the number of the page.

+

So, the second page in the paginated list of pages would be page/2/.

+

If you remember from the previous tutorial VuePress Tutorial 15 - Blog Plugin, the entry page is set by the path property which was given a value of /posts/.

+

This means in our case the blog plugin will generate pages with the following format: /posts/page/n/ where n once again represents the number of the page.

+

We also created the following posts in the _posts directory in the previous tutorial:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Since we only have three posts and the default value for lengthPerPage is 10, the blog plugin won't generate any more pages. You can test this by attempting to navigate to the following page:

+ +

To demonstrate the generation of pages we can set the lengthPerPage to have a value of 2.

+

Here's the updated config.js file:

+ + +


























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
+
+

You should now be able to navigate to the following page:

+ +

Updating lengthPerPage

+

In a future tutorial we'll be updating the value of lengthPerPage to be 5 which is the current value being used in the blog.

+
+

layout

+

Now we're going to add the layout property which is used to specify which layout component to use for the pagination pages except for the entry page. The entry page uses the IndexPost layout component which we set in the previous tutorial.

+

The expected type is a string, and the default value is 'DirectoryPagination' || 'Layout'.

+

Since we haven't created a DirectoryPagination layout component in the layouts directory, the layout property uses the other default value which is the Layout component. In our case the Layout component is provided by the default themeContent not supported.

+

To see the difference between the layout of the entry page and the layout of the second page you can navigate to the following pages:

+ +

If you want your pagination pages except for the entry page to use a layout specifically designed for them, then you can create a DirectoryPagination.vue file inside of the layouts directory. Since DirectoryPagination is the default value for the layout property you won't need to explicitly set it in the config.js file.

+

We'll be using the same layout for the entry page and for the other pagination pages, so we're going to provide a custom value of IndexPost to the layout property.

+

Here's the updated config.js file:

+ + +



























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
+
+

When navigating to the following page you should now see the IndexPost layout component being used instead of the Layout component:

+ +

Here's a table that summarizes the relationship between the pagination and post page URLs the blog plugin builds and the layout components:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
URLsLayouts
/posts/IndexPost (falls back to Layout)
/posts/page/2/IndexPost (falls back to DirectoryPagination or Layout)
/2020/07/03/example-page-1/Post
/2021/11/16/example-page-2/Post
/2022/05/08/example-page-3/Post
+

Post Pages Reminder

+

The post pages were given the URLs above by building customized permalinks using the format specified by the itemPermalink property, and the layout components used by the post pages were set by the itemLayout property. Both of these properties can be found in the config.js file, and you can refer to the previous tutorial VuePress Tutorial 15 - Blog Plugin if you have any questions about the post pages.

+
+

prevText

+

Now we'll add the prevText property which is used to specify the text for the previous links. The previous links are used to navigate to the previous page in the list of pagination pages.

+

The expected type is a string, and the default value is 'Prev'.

+

We'll be using the default value of 'Prev' for the prevText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the prevText property, e.g., you could use a value of Older which you would have to explicitly set in the config.js file.

+

Here's the updated config.js file:

+ + +




























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+              prevText: 'Prev',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
+
+

nextText

+

We're now ready to add the nextText property which is used to specify the text for the next links. The next links are used to navigate to the next page in the list of pagination pages.

+

The expected type is a string, and the default value is 'Next'.

+

We'll be using the default value of 'Next' for the nextText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the nextText property, e.g., you could use a value of Newer which you would have to explicitly set in the config.js file.

+

Here's the updated config.js file:

+ + +





























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+              prevText: 'Prev',
+              nextText: 'Next',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
+
+

Client API

+

We're now going to take a look at how to use the Client API to access the pagination data in the layout components used by the blog plugin.

+

The Client API uses globally scoped variables which means you can access these variables from any component as well as in Markdown files when using Vue. You can check out the Using Vue in MarkdownContent not supported documentation if you're interested.

+

The Client API provides the following globally scoped variables: $pagination, $frontmatterKey, and $service. We'll be focusing on the $pagination variable in this tutorial.

+

If you have any questions or want to learn more about the Client API, then check out the Client APIContent not supported documentation.

+

$pagination

+

We're going to discuss each property the $pagination variable exposes as well as demonstrate how to access the properties in the layout components.

+

To get a better understanding of the pagination data we're going to log each property to the console. The logging will be added to the created lifecycle hook in the script tag. To view the data in the console we're going to inspect the browser then go to the Console tab.

+

If you have questions about the created lifecycle hook, then check out this resources:

+ +

null $paginaton

+

If you access the $pagination variable at a route which doesn't match any classification, i.e., the route isn't a pagination page, then the value of $pagination will be null.

+

This means when developing layout components you should check if $pagination has a value of null before using the variable.

+
+

pages

+

The $pagination.pages property is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

+

Since the $pagination.pages property contains data related to post pages that are accessible on the current pagination page, the data of $pagination.pages will be different depending on which pagination page is being viewed.

+

To see the differences between the data, we're going to look at the entry page and the second page which in our case is also the last page.

+

Here are the links to both the entry page and the second page:

+ +

Let's add the code to log the $pagination.pages property in the layout component which in our case is being used by both the entry page and the second page, i.e., the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.pages', this.$pagination.pages)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Using Different Layout Components

+

If you're using different layout components for your entry page and the other pagination pages, then you'll need to add the logging of the $pagination.pages property to both of the files.

+
+

After adding the above code to the IndexPost.vue file and navigating to the entry page, the console should log an array of page objects with the following data:

+ + +
[
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-4e4f6ae5",
+    "path": "/2020/07/03/example-page-1/",
+    "pid": "posts",
+    "regularPath": "/_posts/2020-07-03-example-page-1.html",
+    "relativePath": "_posts/2020-07-03-example-page-1.md"
+  },
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-60c9aaf7",
+    "path": "/2021/11/16/example-page-2/",
+    "pid": "posts",
+    "regularPath": "/_posts/2021-11-16-example-page-2.html",
+    "relativePath": "_posts/2021-11-16-example-page-2.md"
+  }
+]
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+

Since the lengthPerPage property was given a value of 2 and we have three post pages, the $pagination.pages property for the entry page contains two page objects one for each post.

+

Formatting Differences

+

The log in the Console tab will be formatted differently than the $pagination.pages data shown here which was formatted using JSONContent not supported. The properties and values will be the same though.

+
+

After navigating to the second page, the console should log an array consisting of one page object with the following data:

+ + +
[
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-9dca171a",
+    "path": "/2022/05/08/example-page-3/",
+    "pid": "posts",
+    "regularPath": "/_posts/2022-05-08-example-page-3.html",
+    "relativePath": "_posts/2022-05-08-example-page-3.md"
+  }
+]
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Now let's describe what each property in the $pagination.pages data represents:

+
    +
  • frontmatter: Contains the data present in the frontmatterContent not supported of the post pages.
  • +
  • layout: Layout component used by the post pages which is set using the itemLayout property in the config.js file.
  • +
  • permalink: Permalink format used for the post pages which is set using the itemPermalink property in the config.js file.
  • +
  • id: Unique id for the current classifier which is set using the id property in the config.js file.
  • +
  • key: Unique key generated for each page in the site.
  • +
  • path: Path for the post page which uses a customized permalink built from the format specified by the itemPermalink property found in the config.js file.
  • +
  • pid: Represents the pid for the current classifier which is set using the id property in the config.js file.
  • +
  • regularPath: Default path for the post page which is built using the :regular template variable.
  • +
  • relativePath: Location of the post page Markdown file relative to the documents directory which in our case is the docs directory.
  • +
+

The $page Variable

+

The page objects in the $pagination.pages property are the same page objects found by logging the globally scoped $page variable in the Post layout component. After writing the code to log the $page variable, you can view the log by navigating to a post page, e.g., http://localhost:8080/2020/07/03/example-page-1/Content not supported.

+

To learn more about the $page variable and other globally scoped variables you can take a look at the Global ComputedContent not supported documentation.

+
+

length

+

The $pagination.length property is a number whose value is determined by the number of pagination pages.

+

Let's add the code to log the $pagination.length property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.length', this.$pagination.length)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to either the entry page or the second page, the console should log a value of 2 since in our case there are a total of two pagination pages.

+

hasPrev

+

The $pagination.hasPrev property is a boolean which has a value of true when a previous pagination page exists and a value of false when a previous pagination page doesn't exist.

+

Let's add the code to log the $pagination.hasPrev property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.hasPrev', this.$pagination.hasPrev)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of false. This makes sense since the entry page is the first pagination page which means there is no previous pagination page.

+

If we navigate to the second page, the console should log a value of true which makes sense since the entry page is before the second page.

+ +

The $pagination.prevLink property is a string whose value is the previous pagination page path if a previous pagination page exists and a value of null when a previous pagination page doesn't exist.

+

Let's add the code to log the $pagination.prevLink property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.prevLink', this.$pagination.prevLink)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of null. This makes sense since the entry page is the first pagination page which means there is no link to a previous pagination page.

+

If we navigate to the second page, the console should log a value of /posts/ which makes sense since the previous link before the second page is the entry page which has a path of /posts/.

+

hasNext

+

The $pagination.hasNext property is a boolean which has a value of true when a pagination page exists after the current pagination page and a value of false when a pagination page doesn't exist after the current pagination page.

+

Let's add the code to log the $pagination.hasNext property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.hasNext', this.$pagination.hasNext)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of true. This makes sense since there is a next page in the paginated list of pages, i.e., the second page.

+

If we navigate to the second page, the console should log a value of false which makes sense since in our case there is no pagination page after the second page.

+ +

The $pagination.nextLink property is a string whose value is the path of the next pagination page if it exists and a value of null when the next pagination page doesn't exist.

+

Let's add the code to log the $pagination.nextLink property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.nextLink', this.$pagination.nextLink)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of /posts/page/2/. This makes sense since the entry page is the first pagination page, and in our case there is a link to the next pagination page, i.e., the second page.

+

If we navigate to the second page, the console should log a value of null. This makes sense since in our case the second page is the last page in the list of pagination pages which means there is no link to the next pagination page.

+ +

The $pagination.getSpecificPageLink() is a method that accepts a page number and returns the path of a pagination page. The page numbers start at 0, so to get the entry page path you need to provide a value of 0. If an input is provided that is unable to return a path to a pagination page, then an error is thrown which can be found in the Console tab.

+

Let's add the code to log the output of the $pagination.getSpecificPageLink() method in the IndexPost.vue file:

+ + +





 
 
 
 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log(
+      '$pagination.getSpecificPageLink(0)',
+      this.$pagination.getSpecificPageLink(0)
+    )
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Since we used a page number of 0 in the code above, the console should log a value of /posts/. This makes sense since a value of 0 refers to the entry page which has a path of /posts/.

+

If we want to get the path of the second page, then we can use a value of 1 as the page number, so the console should log a value of /posts/page/2/. This makes sense since a value of 1 refers to the second page which has a path of /posts/page/2/.

+

Next Steps

+

In the next tutorial we'll begin the development of the IndexPost layout component which will involve using the $pagination variable provided by the Client API.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-09-30T20:07:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 17 - IndexPost Layout + https://codemonkeys.tech/vuepress-tutorial-17/ + + 2024-07-17T04:15:09.623Z + Hey fellow Code Monkeys!!! 🐵 Ready to start developing the IndexPost layout component, then check out VuePress Tutorial 17 - IndexPost Layout! 🍌🐒 +

VuePress Tutorial 17 - IndexPost Layout

+

What We're Doing

+

We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped $pagination variable provided by the blog plugin Client APIContent not supported to access the pagination data. In this tutorial we'll be focusing on the post title and preview pagination data. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-17 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Naming the Component

+

Before accessing and displaying the pagination data, we're going to first give the component a name and remove the created lifecycle hook which we were using in the previous tutorial to log the pagination data to the console.

+

Here's the updated IndexPost.vue file:

+ + +




 





<template></template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
+
+

Looping Over Pagination Pages

+

To display the pagination data we're going to loop over the $pagination.pages property which if you remember from the previous tutorial VuePress Tutorial 16 - Pagination is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

+

Using the v-for Directive

+

Since $pagination.pages is an array that we want to loop over, we're going to use the v-for directive to render a list of post pages based on the data within the array. The v-for directive uses the following syntax v-for="item in items" where items is the array you want to loop over, and item is an alias for the array element being iterated on. Here, items corresponds to $pagination.pages, and we'll use post as the alias for the array element being iterated on. This means our v-for directive will be v-for="post in $pagination.pages".

+

Using the key Attribute

+

When using the v-for directive the common best practice is to bind a key attribute where each value given to the key attribute should be unique. The key attribute uses the following syntax :key="item.id" where id is a property with a unique value for every item in the items array.

+

You really only need to use the key attribute when the rendered list relies on child component state or temporary Document Object Model (DOM)Content not supported state, e.g., form input values . This means we don't actually need to include the key attribute since we're currently just rendering a static list.

+

However, we're going to bind the key attribute in case we ever need to use it in the future. To ensure the key attribute has a unique value for each item in the list, we're going to use the key property which is a unique value generated for each page object within the $pagination.pages array. Here's what the key attribute will look like in our case :key="post.key".

+

Determining a Tag

+

Now we need to determine what tag we want to add our v-for directive and key attribute to. We're going to add them to a div tag which will allow us to wrap the pagination data for each post in the list of post pages. Here's what the div tag is going to look like after adding the v-for directive and key attribute <div v-for="post in $pagination.pages" :key="post.key"></div>.

+

Using a Root Element

+

Since the div tag uses the v-for directive, it's going to render multiple elements. This means we cannot use it as the root element, i.e., the first element in the template tag because the template tag can only have one root element. To resolve this issue we're going to wrap the div tag that's using the v-for directive within another div tag which will serve as the root element.

+

Adding the Loop

+

Here's what the IndexPost.vue file should now look like:

+ + +

 
 
 










<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

If you any questions or want to learn more about the v-for directive and the key attribute then check out these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you won't notice any changes on the page. This is because we've rendered div tags without any of the pagination data inside of them.

+

If you navigate to the entry page, inspect the browser, and go to the Elements tab, the HTML for the body tag should now look something like this:

+ + +



 
 
 
 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div></div>
+        <div></div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

Notice how the entry page consists of two div tags wrapped inside of the div tag that's being used as the root element of the template tag. Each of those div tags inside of the parent div tag corresponds to a post page that is accessible on the entry page.

+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you also won't notice any changes on the page. This is because we've rendered a div tag without any of the pagination data inside of it.

+

The HTML for the body tag for the second page should now look something like this:

+ + +



 
 
 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div></div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

Notice how the second page consists of one div tag wrapped inside of the div tag that's being used as the root element of the template tag. There is only one div tag since we have one post page accessible on the second page.

+

Post Titles

+

Before we can access the post title data using the $pagination.pages property, we need to first add titles to the post files we created in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Adding Titles to Post Files

+

Since the post files are Markdown files, we can add titles to the files by adding a heading level one, e.g., # Heading Level 1 to each file which gets converted to the following HTML <h1>Heading Level 1</h1>.

+

Here's what the post files look like after adding the titles:

+ + +
# Example Post 1
+
+
1
+
+ + +
# Example Post 2
+
+
1
+
+ + +
# Example Post 3
+
+
1
+
+

If you have any questions or want to learn more about Markdown headings, then check out the Basic SyntaxContent not supported guide.

+

Adding Titles to $page Variables

+

When VuePressContent not supported encounters a heading level one in a Markdown file it automatically adds a title property to the globally scoped $page variable.

+

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a title property that we can access in the IndexPost layout component.

+

You can take a look at the Global ComputedContent not supported documentation to learn more about the $page variable and other globally scoped variables.

+

Displaying Post Titles

+

Now that we can access the post titles in the $pagination.pages property, we're ready to render the post titles on the pagination pages.

+

We're going to display the post titles as h2 tags which we'll be wrapping inside of two div tags. We'll be using the div tags to add styling to the list of post pages in a future tutorial.

+

To display the post titles we'll be using Text InterpolationContent not supported which allows us to use variables inside of HTML tags by using the "Mustache" syntax. The "Mustache" syntax consists of wrapping a variable inside of double curly braces.

+

We can access the title property on each page object in our loop by using post.title. We can then display this by using the text interpolation described above.

+

The IndexPost.vue file should now look like this:

+ + +



 
 
 
 
 
 
 












<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the post titles being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +




 
 
 
 
 
 
 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see one post title being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +




 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+
+

Post Previews

+

The post preview data is a snippet of text taken from the beginning of a post which is used as an introduction to the post in the list of post pages. Before we can access the post preview data using the $pagination.pages property, we need to first add previews to the post files we created in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Adding Previews to Post Files

+

Since the post files are Markdown files, we can use YAMLContent not supported frontmatter blocks in the files and define a custom variable preview.

+

Here's what the post files look like after adding the preview variables:

+ + +
 
 
 



---
+preview: Example Post 1 preview
+---
+
+# Example Post 1
+
1
2
3
4
5
+
+ + +
 
 
 



---
+preview: Example Post 2 preview
+---
+
+# Example Post 2
+
1
2
3
4
5
+
+ + +
 
 
 



---
+preview: Example Post 3 preview
+---
+
+# Example Post 3
+
1
2
3
4
5
+
+

If you have any questions or want to learn more about YAMLContent not supported frontmatter blocks in VuePressContent not supported then check these resources:

+ +

Number of Characters Used in Preview

+

The value for each post preview variable should be within a preferred minimum and maximum number of characters. This will ensure the post previews in the list of post pages looks consistent.

+
+

Adding Previews to $page Variables

+

When VuePressContent not supported encounters a YAMLContent not supported frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

+

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a frontmatter.preview property that we can access in the IndexPost layout component.

+

You can take a look at the Global ComputedContent not supported documentation to learn more about the $page variable and other globally scoped variables.

+

Content Excerpt

+

Instead of defining the custom variable preview in the YAMLContent not supported frontmatter blocks of Markdown files, VuePressContent not supported provides the ability to use a Content ExcerptContent not supported by adding a <!-- more --> comment to a Markdown file. Any content above the comment gets extracted and exposed as a globally scoped $page.excerpt variable. This variable can then be used to render the list of post pages with excerpts for each post just like our custom variable preview. I prefer to use the custom variable preview because the <!-- more --> comment takes all of the content above it which includes any HTML as opposed to using just the text of a post.

+
+

Displaying Post Previews

+

Now that we can access the post previews in the $pagination.pages property, we're ready to render the post previews on the pagination pages.

+

We're going to display the post previews as p tags which we'll place underneath the parent div tag of the h2 tag.

+

To display the post previews we'll be using Text InterpolationContent not supported just like we did when displaying the post titles.

+

We can access the preview property on each page object in our loop by using post.frontmatter.preview.

+

The IndexPost.vue file should now look like this:

+ + +









 
 
 













<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the post previews being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +









 







 










<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see one post preview being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +









 










<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

IndexPost Styling

+

When viewing the pagination pages you probably noticed the list of post pages stretches across the entire width of the page. This styling doesn't look too good, so we're going to update the styling by adding the following class theme-default-content to the outermost div tag.

+

Adding theme-default-content

+

The IndexPost.vue file should now look like this:

+ + +

 























<template>
+  <div class="theme-default-content">
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

theme-default-content Styles

+

The theme-default-content class is provided by the default themeContent not supported and provides the following styles:

+ + +
.theme-default-content:not(.custom) {
+  max-width: 740px;
+  margin: 0 auto;
+  padding: 2rem 2.5rem;
+}
+
+@media (max-width: 959px) {
+  .theme-default-content:not(.custom) {
+    padding: 2rem;
+  }
+}
+
+@media (max-width: 419px) {
+  .theme-default-content:not(.custom) {
+    padding: 1.5rem;
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+
+
    +
  • .theme-default-content:not(.custom) is used to select tags that have a class of theme-default-content and that don't have a class of custom by using the :not() pseudo-class. This selector is defined by the default themeContent not supported since other pages can use the theme-default-content class along with a class of custom to apply different styles than the ones shown here. The homepage is an example of a page that uses the theme-default-content class along with a class of custom to apply different styles.
  • +
  • max-width: 740px; sets the maximum width of the div tag to be 740px. If the content is greater than the max-width, then the height of the div tag will automatically be changed. If the content is smaller than the max-width, then the max-width property has no effect.
  • +
  • margin: 0 auto; sets the margins for the div tag by setting the top and bottom margins to be 0 and the left and right margins to a value of auto. The value of auto means the browser will automatically set the left and right margins to horizontally center the div tag.
  • +
  • padding: 2rem 2.5rem; sets the padding for the div tag by setting the top and bottom paddings to be 2rem and the left and right paddings to be 2.5rem.
  • +
  • @media (max-width: 959px) will apply the styles within it when the maximum width of the display area, e.g., the browser window is less than or equal to the provided value which in this case is 959px.
  • +
  • padding: 2rem; sets the padding for all of the sides of the div tag to be 2rem when the width of the display area is less than or equal to 959px.
  • +
  • @media (max-width: 419px) will apply the styles within it when the maximum width of the display area is less than or equal to the provided value which in this case is 419px.
  • +
  • padding: 1.5rem; sets the padding for all of the sides of the div tag to be 1.5rem when the width of the display area is less than or equal to 419px.
  • +
+

If you have any questions about the CSS discussed above, then check out these resources:

+ +

To view these styles in the browser you can navigate to the entry page http://localhost:8080/posts/Content not supported or to the second page http://localhost:8080/posts/page/2/Content not supported, inspect the browser, go to the Elements tab, locate the div tag with a class of theme-default-content, and then go to the Styles tab.

+

Use in the Default Theme

+

The theme-default-content class is used on the global Content component within the Page and Home components provided by the default themeContent not supported. If you look at the HTML on the homepage, you'll see the theme-default-content class being used on a div tag within the main tag with a class of home. We'll be discussing the global Content component, the Page component, and the Home component in more detail in future tutorials.

+
+

IndexPost Heading

+

We're now going to add a heading to the pagination pages. This heading will be displayed on each pagination page.

+

Displaying the Heading

+

We're going to display the heading as an h1 tag which we'll be adding as the first child tag of the outermost div tag.

+

The IndexPost.vue file should now look like this:

+ + +


 























<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the heading being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +




 
























<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the heading being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +




 
















<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 Preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

Next Steps

+

In the next tutorial we'll be continuing the development of the IndexPost layout component by using the $pagination variable to add images to each post in the list of post pages.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-10-17T14:12:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 18 - IndexPost Images + https://codemonkeys.tech/vuepress-tutorial-18/ + + 2024-07-17T04:15:09.626Z + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add images to the IndexPost layout component, then check out VuePress Tutorial 18 - IndexPost Images! 🍌🐒 +

VuePress Tutorial 18 - IndexPost Images

+

What We're Doing

+

In this tutorial we're going to continue the development of the IndexPost layout component by using the globally scoped $pagination variable to access pagination data related to images. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag like we did in the previous tutorial.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-18 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Adding Post Images

+

Before we can access the pagination data related to images, we need to first add the images that we'll be displaying in the list of post pages. We're going to be adding three post images to the blog one for each post.

+

Each post image has a width of 155px and a height of 185px. Using the same width and height for the post images makes the list of post pages look consistent.

+

You can download all of the images below from your browser, and they're also available in the tutorial-18 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

The images were created using CanvaContent not supported. The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMPContent not supported.

+

Here are some other useful online image tools:

+ +

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. CanvaContent not supported and GIMPContent not supported, and some of the other image tools mentioned above offer the ability to compress your images.

+

Here are some other useful online tools for image compression:

+ +

Adding an Examples Directory

+

Let's start by creating an examples directory inside of the images directory. The examples directory will be used to store the post images for each example post.

+

The directory structure for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ └── examples +│ │ ├── theme +│ │ └── config.js

+

Example Post 1

+

After adding the examples directory, we're now ready to add the post images for each example post. We'll be creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories of each example post.

+

We're going to start with the first example post by adding an example-post-1 directory inside of the examples directory. Then we'll add the image for the first example post which is named example-post-1.png inside of the example-post-1 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ │ └── example-post-1.png

+

Here's the example post 1 image:

+
+ Content not supported +
+

Example Post 2

+

For the second example post we'll be adding an example-post-2 directory inside of the examples directory. Then we'll add the image for the second example post which is named example-post-2.png inside of the example-post-2 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ │ └── example-post-2.png

+

Here's the example post 2 image:

+
+ Content not supported +
+

Example Post 3

+

For the third example post we'll be adding an example-post-3 directory inside of the examples directory. Then we'll add the image for the third example post which is named example-post-3.png inside of the example-post-3 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ │ └── example-post-3.png

+

Here's the example post 3 image:

+
+ Content not supported +
+

Post Images

+

After adding the post images to the blog, we now need to add a way to access each image in the IndexPost layout component which we'll accomplish by adding a custom variable img to the YAMLContent not supported frontmatter blocks of each post file. The value of the img custom variable will be the path to the image in the project.

+

We're also going to add another custom variable of alt to the YAMLContent not supported frontmatter blocks of each post file. The value of the alt custom variable will be a description of the image.

+

If you have any questions or want to learn more about YAMLContent not supported frontmatter blocks in VuePressContent not supported then check these resources:

+ +

Adding Img and Alt to Post Files

+

Here's what the post files look like after adding the img and alt custom variables:

+ + +


 
 




---
+preview: Example Post 1 preview
+img: examples/example-post-1/example-post-1.png
+alt: Example Post 1 Post Picture
+---
+
+# Example Post 1
+
1
2
3
4
5
6
7
+
+ + +


 
 




---
+preview: Example Post 2 preview
+img: examples/example-post-2/example-post-2.png
+alt: Example Post 2 Post Picture
+---
+
+# Example Post 2
+
1
2
3
4
5
6
7
+
+ + +


 
 




---
+preview: Example Post 3 preview
+img: examples/example-post-3/example-post-3.png
+alt: Example Post 3 Post Picture
+---
+
+# Example Post 3
+
1
2
3
4
5
6
7
+
+

Adding Img and Alt to $page Variables

+

As mentioned in the previous tutorial when VuePressContent not supported encounters a YAMLContent not supported frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

+

Since the page objects in the $pagination.pages property are the same as the $page variables used by the post pages, we will now have a frontmatter.img property and a frontmatter.alt property that we can access in the IndexPost layout component.

+

Displaying Images

+

Now that we can access the values of the img and alt custom variables in the $pagination.pages property, we're ready to render the images on the pagination pages.

+

We're going to display the images using the img tag which we'll place in a div tag underneath the parent div tag of the p tag.

+

The img tag allows us to embed an image into the page. We'll be using the src and alt attributes provided by the img tag.

+

The src attribute is required, and it contains the path to the image you want to display which in our case are the post images we created earlier.

+

The alt attribute is optional and consists of a text description of the image which is useful for accessibilityContent not supported because screen readers will be able to read the description to the users. This allows the users to gain an understanding of what the image is. The description is also displayed on the page if the image is unable to be loaded.

+

If you want to learn more about the img tag, then check out <img>: The Image Embed elementContent not supported.

+

We can access the img and alt properties on each page object in our loop by using post.frontmatter.img and post.frontmatter.alt, respectively.

+

The IndexPost.vue file should now look like this:

+ + +














 
 
 
 
 
 












<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+
+

Here we're binding the src and alt attributes by placing a : before them which is shorthand for v-bind. This allows us to bind the JavaScript expressions to the HTML attributes.

+

Also, notice /images/ was added to the beginning of the path to the post images which we need to add since they're all located in the images directory. We don't need to include .vuepress/public in the path to the post images though because whenever you reference assets stored in the public directory that gets added automatically.

+

We also added an alternative value for the post image alt attribute in case the alt custom variable isn't present in the frontmatter of a post. This is done by using a logical OR operator, i.e., ||. Here, we're using "post.frontmatter.alt || 'Post Picture'" which means if the alt property evaluates to a falsyContent not supported value, then we'll display the Post Picture text instead.

+

If you have any questions or want to learn more about v-bind or the logical OR operator, then check these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the images being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +












 
 
 
 








 
 
 
 









<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-1/example-post-1.png"
+                  alt="Exmple Post 1 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-2/example-post-2.png"
+                 alt="Example Post 2 Post Picture">
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the image being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +












 
 
 
 









<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 Preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-3/example-post-3.png"
+                 alt="Example Post 3 Post Picture">
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

Next Steps

+

In the next tutorial we'll be continuing the development of the IndexPost layout component by beginning the process of adding the pagination buttons to the pagination pages.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-11-09T22:15:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 19 - Pagination Links + https://codemonkeys.tech/vuepress-tutorial-19/ + + 2024-07-17T04:15:09.633Z + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add the pagination links to the IndexPost layout component, then check out VuePress Tutorial 19 - Pagination Links! 🍌🐒 +

VuePress Tutorial 19 - Pagination Links

+

What We're Doing

+

Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually input the URL into the search bar of the browser which isn't a great user experience. To resolve this issue we're going to be adding pagination links to each of the pagination pages.

+

To accomplish this we'll be using the following properties provided by the blog plugin Client APIContent not supported:

+
    +
  • $pagination.hasPrev
  • +
  • $pagintaion.prevLink
  • +
  • $pagination.hasNext
  • +
  • $pagintaion.nextLink
  • +
+

Before, we use the properties to add the pagination links, we're going to add two more example posts to the blog. This will allow us to view the pagination links in every scenario, i.e., when there isn't a previous page, when there isn't a next page, and when there is a previous page and a next page.

+

You can view all of the code in this tutorial by going to the tutorial-19 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Adding More Example Pages

+

We'll be adding the following example pages to the _posts directory:

+
    +
  • 2022-07-14-example-page-4.md
  • +
  • 2022-11-10-example-page-5.md
  • +
+

The _posts directory for your site should now look like this:

+

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ ├── 2022-05-08-example-page-3.md +│ ├── 2022-07-14-example-page-4.md +│ └── 2022-11-10-example-page-5.md

+

Adding Titles and Frontmatter

+

We're now going to add post titles and frontmatter to the example pages we just added like we did for the other example pages.

+

Here's what the 2022-07-14-example-page-4.md file and the 2022-11-10-example-page-5.md file look like after adding the titles and frontmatter:

+ + +
---
+preview: Example Post 4 preview
+img: examples/example-post-4/example-post-4.png
+alt: Example Post 4 Post Picture
+---
+
+# Example Post 4
+
+
1
2
3
4
5
6
7
+
+ + +
---
+preview: Example Post 5 preview
+img: examples/example-post-5/example-post-5.png
+alt: Example Post 5 Post Picture
+---
+
+# Example Post 5
+
+
1
2
3
4
5
6
7
+
+

Adding Images

+

We also need to add the post images for the example pages we just added. We'll do this just like we did in the previous tutorial by creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories for each example post.

+

You can download all of the images below from your browser, and they're also available in the tutorial-19 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Example Post 4

+

For the fourth example post we'll be adding an example-post-4 directory inside of the examples directory. Then we'll add the image for the fourth example post which is named example-post-4.png inside of the example-post-4 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ │ └── example-post-4.png

+

Here's the example post 4 image:

+
+ Content not supported +
+

Example Post 5

+

For the fifth example post we'll be adding an example-post-5 directory inside of the examples directory. Then we'll add the image for the fifth example post which is named example-post-5.png inside of the example-post-5 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ ├── example-post-5 +│ │ └── example-post-5.png

+

Here's the example post 5 image:

+
+ Content not supported +
+

Viewing the Pagination Pages

+

After adding the titles and frontmatter to the example pages and adding the post images, you should now have the following pagination pages:

+ +

Having these three pagination pages will allow us to view the pagination links in every scenario that we mentioned in the beginning of the post.

+

Order of Posts

+

The order of the posts may not be what you're expecting and may change each time you start the local development server. This is because the blog plugin uses a date property to sort the posts which it looks for on the frontmatter of each post page. Since we haven't added a date custom variable to the frontmatter blocks for the post pages, the blog plugin will not sort the posts in a predictable way. We'll fix this issue in a future tutorial by adding the date custom variable to the frontmatter blocks of the post pages.

+
+

If you have any questions about adding the example pages to the _posts directory, adding titles to the post pages, adding the frontmatter to the post pages, and/or adding the post images, then check out the relevant sections from the previous tutorials:

+ + +

We're now ready to use the properties provided by the blog plugin Client APIContent not supported to add the pagination links to the pagination pages.

+

We're going to display the pagination links using two router-link components one for the previous page and one for the next page. We'll be wrapping each router-link component in a div tag.

+

We'll then wrap the div tags inside another div tag which we'll place underneath the div tag that is being used to loop over the pagination pages.

+

The router-link component is provided by Vue RouterContent not supported which gets installed when installing VuePressContent not supported. The router-link component is used for enabling user navigation for the site. The target location for the link is specified by using the to prop, and it renders as an a tag with the specified href by default.

+

If you want to learn more about the router-link component, then check out the <router-link>Content not supported documentation.

+

To display the pagination link for the previous page we'll be using the $pagination.hasPrev property to check if the current pagination page has a previous page. We'll use the $pagination.prevLink property to provide the path of the previous pagination page to the router-link component to prop.

+

Similarly, to display the pagination link for the next page we'll be using the $pagination.hasNext property to check if the current pagination page has a next page. We'll use the $pagination.nextLink property to provide the path of the next pagination page to the router-link component to prop.

+

We discussed the properties above in detail in the VuePress Tutorial 16 - Pagination post, so if you need a refresher or if you have any questions read through the relevant sections in that post.

+

The IndexPost.vue file should now look like this:

+ + +





















 
 
 
 
 
 
 
 
 
 
 
 











<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div>
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
+
+

Here we're using the v-if directive to conditionally render the pagination links by using the values of the $pagination.hasPrev and $pagination.hasNext properties. The block of code using the v-if directive will only be rendered if the expression provided to it returns a truthyContent not supported value.

+

We're also binding the to prop by placing a : before it which is shorthand for v-bind. Using v-bind allows us to bind JavaScript expressions to the HTML attributes.

+

If you have any questions or want to learn more about conditional rendering or v-bind, then check these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the Next pagination link being displayed with some styling provided by the default themeContent not supported.

+

You should now be able to click on the Next pagination link, and it should take you to the next page in the list of pagination pages.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +





























 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-1/example-post-1.png"
+                  alt="Exmple Post 1 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-2/example-post-2.png"
+                 alt="Example Post 2 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <!---->
+          </div>
+          <div>
+            <a href="/posts/page/2/" class=""> Next </a>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the Prev and Next pagination links being displayed with some styling provided by the default themeContent not supported.

+

You should be able to click on the Prev pagination link, and it should take you to the previous page. You should also be able to click on the Next pagination link, and it should take you to the next page.

+

The HTML for the body tag for the second page should now look something like this:

+ + +





























 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-3/example-post-3.png"
+                  alt="Exmple Post 3 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 4 </h2>
+            </div>
+            <p> Example Post 4 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-4/example-post-4.png"
+                 alt="Example Post 4 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <a href="/posts/" class="router-link-active"> Prev </a>
+          </div>
+          <div>
+            <a href="/posts/page/3/" class> Next </a>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
+
+

Page 3 HTML

+

If you navigate to the third page http://localhost:8080/posts/page/3/Content not supported you should now see the Prev pagination link being displayed with some styling provided by the default themeContent not supported.

+

You should be able to click on the Prev pagination link, and it should take you to the previous page.

+

The HTML for the body tag for the third page should now look something like this:

+ + +

















 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 5 </h2>
+            </div>
+            <p> Example Post 5 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-5/example-post-5.png"
+                  alt="Exmple Post 5 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <a href="/posts/page/2/" class> Prev </a>
+          </div>
+          <div>
+            <!---->
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
+
+

Next Steps

+

You may have noticed the styling of the Prev and Next pagination links doesn't look too good, so in the next tutorial we'll begin styling these links. We'll also be adding left and right arrow icons to the Prev and Next pagination links, respectively.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-11-19T20:47:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 2 - Why Use VuePress? + https://codemonkeys.tech/vuepress-tutorial-2/ + + 2024-07-17T04:15:09.636Z + Hey fellow Code Monkeys!!! 🐵 Wondering if you should use VuePress, then check out VuePress Tutorial 2 - Why Use VuePress? 🍌🐒 +

VuePress Tutorial 2 - Why Use VuePress?

+

What is VuePress?

+

VuePressContent not supported is a minimalistic static site generator (SSG) with a Vue-powered theming systemContent not supported and Plugin APIContent not supported.

+

Originally, it was created to serve the documentation needs of Vue'sContent not supported own sub projects, so it comes with a default themeContent not supported optimized for writing technical documentation.

+

As well has being useful for writing technical documentation, it also has a blog pluginContent not supported which we'll be looking at in more detail in future tutorials.

+

Now, to clear up any confusion we'll define what an SSG is, then we'll talk more about the theming systemContent not supported and the Plugin APIContent not supported.

+

After that we'll provide a list of some of the features of VuePressContent not supported, and then we'll give some quick comparisons with similar technologies.

+

Different Types of Websites

+

Before we define what an SSG is, let's first look at some different types of websites. This will allow us to get a better understanding of the pros and cons of using an SSG.

+

We'll mainly be looking at each type of website in terms of search engine optimization (SEO), speed, and ease of updating.

+

Static Website

+
    +
  • Uses static HTML pages with possible CSS and JavaScript
  • +
  • Pages are uploaded to a content delivery network (CDN) or a web host
  • +
+

Here's a simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since a search engine can crawl the site and fully rendered HTML pages with content are provided
  • +
+

Cons

+
    +
  • Need to do a request to the server for each page a user visits which slows down the site
  • +
  • Difficult to update since you need to rewrite the same code on multiple pages, e.g., the footer
  • +
  • Has limited functionality and generally doesn't contain dynamic data
  • +
+

Single-Page Application (SPA)

+
    +
  • Typical VueContent not supported and ReactContent not supported application
  • +
  • A single request is made to the server which returns a simple HTML page with the styles and scripts linked
  • +
  • The SPA then handles rendering the page content in the browser, e.g., routing, data, etc.
  • +
+

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • Fast, no extra requests are made to the server when navigating to new pages since the SPA handles rendering the pages in the browser
  • +
  • Component driven which means easier updating, e.g., if you want to update the footer you only need to update it in one file
  • +
+

Cons

+
    +
  • More difficult for search engines to crawl and index the site for SEO since the page returned by the server is a simple HTML page
  • +
+

Server-Side Rendered (SSR)

+ +

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since each request returns a fully rendered HTML page, so a search engine can easily crawl and index the site
  • +
  • Easy to update since the server is using a templating system
  • +
+

Cons

+
    +
  • Since the server has to send back fully rendered HTML pages for each request, it can slow down the page rendering
  • +
+

Static Site Generator (SSG)

+
    +
  • An SSG creates pre-rendered static HTML pages using a combination of templates, components, and data
  • +
  • These static HTML pages are generated at build-time, i.e., before deployment
  • +
  • The static pages are then deployed to the web
  • +
+

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since it returns fully rendered HTML which can then be crawled and indexed
  • +
  • Navigating to new pages is fast since after the initial request the site behaves like a normal SPA
  • +
  • Easy to update since the site is component driven
  • +
+

Cons

+
    +
  • Have to rebuild the static pages evey time a change is made to the site, and the build time will increase as more pages are added
  • +
+

Use Cases for SSGs

+

Since SSGs create static HTML pages at build-time then behave like an SPA, they are suited for websites that don't have a lot of frequent content changes.

+
    +
  • Here are some examples: +
      +
    • Personal Website/Portfolio
    • +
    • Documentation
    • +
    • Blog
    • +
    +
  • +
+

How it Works in VuePress

+

Like other SSGs, the static HTML pages are rendered at build-time. Then the static HTML pages are deployed to the web.

+

Once the page is loaded, VueContent not supported takes control of the static content and the site behaves like an SPA. The SPA is powered by VueContent not supported, Vue RouterContent not supported, and webpackContent not supported.

+

Each Markdown file gets compiled into HTML with markdown-itContent not supported which is then processed as the template of a VueContent not supported component. This is what enables you to use VueContent not supported directly in your Markdown files and also makes it possible to embed dynamic content.

+

Theming

+

A theme in VuePressContent not supported allows you to control how your project is structured. You can simply use the provided default themeContent not supported, use theme inheritanceContent not supported to create a child theme based on a parent theme, or write your own themeContent not supported.

+

Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configurations and app level enhancements. When writing your own theme the only file that is necessary is Layout.vue, everything else is up to. You can also publish your theme as an npmContent not supported package which allows other people to easily install it.

+

The Code Monkeys Blog is currently a child theme inherited from the default theme. Eventually, I would like to look into publishing it as an npmContent not supported package.

+

We'll go over the directory structure, what each directory in a theme is used for, theme configuration, app level enhancement, and theme inheritanceContent not supported in future tutorials.

+ +

Plugin API

+

PluginsContent not supported allow you to add global-level functionality to VuePressContent not supported. You can configure them by passing in options. It's also possible to write your own and publish them as npmContent not supported packages.

+

We'll go over installing and configuring pluginsContent not supported in future tutorials.

+ +

Features

+

Here are some of the features that come with VuePressContent not supported:

+

Built-in Markdown Extensions

+ +

Ability to Use Vue In Markdown Files

+ +

Vue-powered Custom Theme System

+ +

A Default Theme with

+ +

It also has a blog themeContent not supported, numerous community themes, official plugins, and community plugins.

+

You can find a list of these themes, plugins, and more resources at Awesome VuePressContent not supported.

+

Comparisons

+

Here are some similar technologies and how they compare with VuePressContent not supported:

+

NuxtContent not supported

+
    +
  • Designed for building applications whereas VuePressContent not supported is focused on content-centric static sites with a focus on technical documentation
  • +
+

DocsifyContent not supported / DocuteContent not supported

+
    +
  • Both are runtime-driven, so they're not SEO-friendly
  • +
  • Good if SEO isn't a concern and you don't want to deal with installing dependencies
  • +
+

HexoContent not supported

+
    +
  • Static and string-based theming system, so we're unable to take advantage of VueContent not supported for layout and interactivity
  • +
  • Markdown rendering configuration is not that flexible
  • +
+

GitBookContent not supported

+
    +
  • Development reload performance is not ideal with a large amount of files
  • +
  • Limiting navigation structure for the default theme
  • +
  • Theming system is not VueContent not supported based
  • +
+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2021-11-24T20:50:30.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 20 - Pagination Links Styling + https://codemonkeys.tech/vuepress-tutorial-20/ + + 2024-07-17T04:15:09.639Z + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to style the pagination links, then check out VuePress Tutorial 20 - Pagination Links Styling! 🍌🐒 +

VuePress Tutorial 20 - Pagination Links Styling

+

What We're Doing

+

We're going to begin the process of styling the Prev and Next pagination links that we added to each of the pagination pages in the previous tutorial. To implement the styling we'll be adding the following CSS classes pagination, left-arrow, and right-arrow to the IndexPost layout component.

+

The pagination class will be used to properly space out the Prev and Next pagination links. The left-arrow and right-arrow classes will be used to add some styling to the left arrow and right arrow icons which we'll be adding using the global vp-icon component which is provided by vuepress-plugin-svg-iconsContent not supported.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-20 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Pagination Class

+

We're going to start by adding the pagination class to the div tag that is wrapping both of the router-link components in the IndexPost.vue file.

+

Then we'll apply the following styles:

+ + +





















 




















 
 
 
 
 
 

<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
+
+
    +
  • lang="stylus" is used to specify which pre-processor we want to use in the component which in our case is StylusContent not supported which is the default pre-processor used by VuePressContent not supported.
  • +
  • scoped is used to only apply the styles to the current component, i.e., the IndexPost layout component. We're scoping these styles since they currently only apply to the IndexPost layout component.
  • +
  • display: flex defines a flex container for all of the direct children of the div tag with a class of pagination.
  • +
  • justify-content: space-between evenly spaces out the flex items along the main-axis of the flex container where the first item is flush with the start of the flex container, and the last item is flush with the end of the flex container. Here, the main-axis of the flex container is the horizontal axis. The flex items are the direct children of the div tag with a class of pagination, i.e., the div tags that are wrapping the router-link components.
  • +
  • padding-top: 2rem adds a padding of 2rem to the top of the div tag with a class of pagination.
  • +
+

The pagination links should now be properly spaced out, and you can view the styling updates by navigating to the pagination pages:

+ +

If you have any questions about the lang attribute, the scoped attribute, flexbox, or CSS in general, then check out these resources:

+ +

Left and Right Arrow Icons

+

We're now ready to add the left and right arrow icons to the pagination links.

+

Downloading the Icons

+

To add the left and right arrow icons to the site we need to first download the icons. To find icons for your site vuepress-plugin-svg-iconsContent not supported recommends using iconfontContent not supported. After searching for the icons and downloading them, you'll be asked to specify a color and size for the icons. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

+

Instead of searching iconfontContent not supported for the left and right arrow icons, you can download them from the tutorial-20 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Using SVG Export

+

To easily download the left and right arrow icons you can also install the browser extension SVG ExportContent not supported. After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

+
+

Updating the Icons Directory

+

After downloading the left and right arrow icons, we'll need to add them to the icons directory which should now look something like this:

+

├── icons +│ ├── Gab.svg +│ ├── leftArrow.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── rightArrow.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

Displaying the Icons

+

After adding the left and right arrow icons to the icons directory, the plugin will automatically load the icons and provides the global vp-icon component. To use the vp-icon component we need to pass a name attribute to it where the value is the name of the SVG file we want to use.

+

Here, the value for the name attribute will be leftArrow for the Prev pagination link and rightArrow for the Next pagination link.

+

We're going to be adding the vp-icon components inside of the corresponding router-link components.

+

The IndexPost.vue file should now look like this:

+ + +
























 




 



















<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          <vp-icon name="leftArrow"></vp-icon>Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next<vp-icon name="rightArrow"></vp-icon>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
+
+

To view the left and right arrow icons navigate to the pagination pages:

+ +

Notice how the left arrow icon is being displayed to the left of the Prev pagination text and how the right arrow icon is being displayed to the right of the Next pagination text. This ensures the arrows and the text look correct when being displayed.

+

Styling the Icons

+

We're now going to add some styling to the left and right arrow icons. The IndexPost.vue file should now look like this:

+ + +
























 




 

















 
 
 
 


<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          <vp-icon name="leftArrow" class="left-arrow"></vp-icon>Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next<vp-icon name="rightArrow" class="right-arrow"></vp-icon>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+  .left-arrow
+    padding-right: 0.25rem
+  .right-arrow
+    padding-left: 0.25rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
+
+
    +
  • +

    padding-right: 0.25rem adds a padding of 0.25rem to the right of the vp-icon component with a class of left-arrow.

    +
  • +
  • +

    padding-left: 0.25rem adds a padding of 0.25rem to the left of the vp-icon component with a class of right-arrow.

    +
  • +
+

To view the styling updates to the left and right arrow icons navigate to the pagination pages:

+ +

If you have any questions about the CSS discussed above, then check out this resource:

+ +

Optimizing the Icons

+

When downloading the left and right arrow icons from iconfontContent not supported, the icons will have a lot of redundant and useless information. We can use a Command-line Interface (CLI) command provided by vuepress-plugin-svg-iconsContent not supported to optimize the icons.

+

Icons Already Optimized

+

If you downloaded the left and right arrow icons from the repository or by using the SVG ExportContent not supported browser extension, then the icons should already be optimized and you shouldn't have to run the CLI command.

+
+

Here's the CLI command you can run to optimize the icons vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

+

We added this CLI command to the scripts object in the package.json file in the previous post VuePress Tutorial 12 - Highlight SVGs on Hover.

+

Here's how to run the script:

+ + +
yarn svgo
+
+
1
+ +
npm run svgo
+
+
1
+
+

After running the script, the icons should be optimized.

+

If you have questions about how the plugin implements the CLI command or about the plugin in general, then checkout the guideContent not supported.

+

You can also check out SVGOContent not supported which is the optimization tool being used by the plugin to optimize the icons.

+

Next Steps

+

In the next tutorial we're going to continue styling the IndexPost layout component by making each post in the list of posts look like a card.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-11-23T19:23:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 3 - Set Up and Installation + https://codemonkeys.tech/vuepress-tutorial-3/ + + 2024-07-17T04:15:09.645Z + Hey fellow Code Monkeys!!! 🐵 Ready to set up and install VuePress, then check out VuePress Tutorial 3 - Set Up and Installation! 🍌🐒 +

VuePress Tutorial 3 - Set Up and Installation

+

Setting Up and Using GitHub

+

First we'll be going over how to create a repository on GitHubContent not supported. If you plan on using these tutorials as guides and want to start your own project from scratch, then you should create your own repository.

+

Each tutorial in this series involving code will also have a branch in the code-monkeys-blog-tutorialsContent not supported repository. If you want the code for a specific tutorial, then you can download a specific branch or clone the repository and switch to one of the remote-tracking branches. We'll go over how to download and clone the code in more detail in the sections below.

+

You can also download, clone, or fork the current version of the code-monkeys-blogContent not supported.

+

If you don't have git installed, then check out the Installing GitContent not supported documentation. Also, if you don't have a GitHub account, then Join GitHubContent not supported and Set up GitContent not supported.

+

Creating a Repository

+

A repository is a directory where you store the code and other files used in a project. A repository can be a local directory on your computer and can be stored and accessed online from a website like GitHubContent not supported.

+

If you want to create your own repository for your own project, then you need to:

+
    +
  1. Go to your profile page, click on the Repositories tab, then click the New button or on any page in the upper right corner, click the + drop-down menu, then select New repository
  2. +
  3. Type a short and descriptive name in the Repository name field
  4. +
  5. Type a description in the Description field (optional)
  6. +
  7. Choose if you want the repository to be Public or Private
  8. +
  9. Add a README.md file which you can use to describe your project in more detail and to document how to install and use your project
  10. +
  11. Add a .gitignore file which is used to ignore specified files and directories when making a commit, I recommend selecting the Node template from the drop-down menu
  12. +
  13. Add your preferred license which is used to tell others how they can use your code
  14. +
  15. You can also choose a different default branch name, e.g., master instead of main by clicking on the settings link
  16. +
  17. Click the Create repository button
  18. +
+

If you run into any issues when creating the repository or want to learn more, then check out the Create a RepoContent not supported documentation. If you need help determining which license you should use, then check out Choose a LicenseContent not supported. You can also learn more about the .gitignore file from the gitignoreContent not supported documentation.

+

After successfully creating your repository, you can now clone it to make a local copy on your computer.

+

Cloning a Repository

+

To clone your newly created repository, you need to:

+
    +
  1. Go to the main page of your repository
  2. +
  3. Click the Code button and select your preferred method to clone the repositroy, e.g., SSH
  4. +
  5. Copy your preferred remote URL
  6. +
  7. Replace the example URL below with your copied URL, then run one of the following commands in your preferred directory:
  8. +
+ + +
git clone git@github.com:<username>/<repository-name>
+
+
1
+ +
git clone https://github.com/<username>/<repository-name>
+
+
1
+
+

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a RepositoryContent not supported and About Remote RepositoriesContent not supported.

+

The next sections will show you how to download and clone the code from the code-monkeys-blog-tutorialsContent not supported repository.

+

Downloading Tutorials from GitHub

+

If you want to download the code for a specific tutorial, then you need to:

+
    +
  1. Go to the code-monkeys-blog-tutorialsContent not supported repository
  2. +
  3. Select which branch you want to download, e.g., tutorial-3
  4. +
  5. Click the Code button and select Download ZIP
  6. +
  7. Save the ZIP file to your preferred directory
  8. +
  9. Unzip the file in your preferred directory
  10. +
+

Cloning and Using Tutorials from GitHub

+

If you want to clone the tutorials, then you need to run one of the following commands in your preferred directory depending on your preferred method:

+ + +
git clone git@github.com:codemonkeysio/code-monkeys-blog-tutorials.git
+
+
1
+ +
git clone https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git
+
+
1
+
+

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a RepositoryContent not supported and About Remote RepositoriesContent not supported.

+

After successfully cloning the repository, you can run the following command to list both the remote-tracking and local branches:

+ + +
git branch -a
+
+
1
+
+

Before switching to one of the remote-tracking branches, run the following command to get all of the latest changes from the remote repository without modifying your working directory:

+ + +
git fetch
+
+
1
+
+

Now, to work on the code for a remote-tracking branch you need to make a local copy of it which you can do by running the following command:

+ + +
git switch <branch-name>
+
+
1
+
+

If you get an error when running the above command and the provided branch name exists, then check your version of git by running git --version. You need to be using at least Git 2.23Content not supported to use the switch command.

+

If you have an older version of git or if you prefer to not use the switch command, you can alternatively run the following command to work on the code for a remote-tracking branch:

+ + +
git checkout [branch-name]
+
+
1
+
+

The recommended way to switch branches is with the switch command since the checkout command does more than just switching branches which can lead to confusion.

+

If a remote-tracking branch is updated and you want to integrate those changes into your local branch, then switch to the branch you want to update and run the following command:

+ + +
git pull
+
+
1
+
+

If you edit the code for a branch and attempt to pull, you may run into merge conflicts. You can check out About Merge ConflictsContent not supported to learn more about what they are and how to resolve them.

+

Dependencies

+

Before installing VuePressContent not supported, you first need to have Node.js 10+Content not supported installed and optionally Yarn 1Content not supported.

+

It's recommended to use Yarn 1Content not supported if either one of the following applies to you:

+
    +
  • You're using webpack 3.xContent not supported in which case you may notice installation issues with npm.
  • +
  • You're going to be closely following along with these turtorials in which case I recommend using v1.22.17 since it's the same version being used by the Code Monkeys Blog. This will allow you to avoid any potential issues with packages and with the GitHub ActionsContent not supported workflow which is used when deploying the site.
  • +
+

Using the Locally Set Version of Yarn in the Repositories

+

The code-monkeys-blog-tutorialsContent not supported and the code-monkeys-blogContent not supported repositories both have a local version of yarn set to v1.22.17 in a .yarn/releases directory. This means if you use the code from the repositories, then you'll be able to use the locally set version of yarn instead of having to install the specific local version of yarn yourself.

+
+

The next sections will show you how to check your current versions of node and yarn.

+

If you don't have node or yarn installed or you want to change the versions, then check out the provided resources explaining how to install specific versions.

+

Checking Node Version

+

To check if you have node installed run the following command:

+ + +
node -v
+
+
1
+
+

If you see an output of v10.xx.xx or greater, then you can continue on with the VuePressContent not supported installation.

+

Code Monkeys Blog Node Version

+

The Code Monkeys Blog is currently using Node.js v16.11.1Content not supported. If you're going to be closely following along with these turtorials, then I recommend using the same version to avoid any potential issues.

+
+

If you don't see the proper output or want to use the same version in these tutorials, then you need to either install or upgrade node.

+

To install a system version of node you can go to Node.jsContent not supported and download a compatible version.

+

If you previously installed a system version of node from Node.jsContent not supported, then you can go back to the site and download a newer version to upgrade your current version.

+

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend using a node version manager. Before installing a node version manager like nvmContent not supported or fnmContent not supported, I recommend uninstalling your system version of node, npm, and any globally installed npm packages to avoid potential issues.

+

Check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm) to learn how to install and use them.

+

Preferred Node Version Manager

+

My preferred way to manage my node versions is with fnmContent not supported since it's much faster than nvmContent not supported.

+
+

After installing a compatible version of node, you will now have npm the default package manager for node. If you prefer you can use npm to install VuePressContent not supported. However, if you're going to be closely following along with these tutorials, then I recommend using yarn.

+

Checking Yarn Version

+

To check if you have yarn installed run the following command:

+ + +
yarn -v
+
+
1
+
+

If you don't see your preferred version of yarn, then it's recommended to install or upgrade a global version of Yarn 1Content not supported which can then be used to set a local version of yarn for the project.

+

To learn more about how to install a global version of Yarn 1Content not supported, how to use the global version to set a local version of yarn for a project, and other commonly used commands check out the Installing Yarn 1 post.

+

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

+

Recommended Version and Repositories Reminder

+

Remember the recommended version of yarn to use with your project if you're closely following along with these tutorials is v1.22.17. Also, if you use the code from the repositories, then there will be a provided local version of yarn which you can use instead of installing the specific local version yourself.

+
+

Installing Tutorial Packages

+

If you downloaded or cloned the code from the code-monkeys-blog-tutorialsContent not supported, first check your version of yarn by running the following command in the project directory:

+ + +
yarn -v
+
+
1
+
+

If the version of yarn is v1.22.17, then you can install all of the packages being used in the project by running the following command in the root project directory:

+ + +
yarn
+
+
1
+
+

Make sure you're not using the master branch when checking the version since it doesn't have the .yarn directory and that you have a global version of yarn installed.

+

If you're using your own repository and want to install VuePressContent not supported yourself, then use one of the installation methods described below.

+

Installing VuePress

+

When installing VuePressContent not supported you have the option to use the create-vuepress-site generatorContent not supported for a quick start installation or a manual installation. We'll go over both of the installation methods, but the future tutorials will be based off of the manual installation.

+

Quick Start

+

Using the generator will help scaffold a basic site structure for you by creating common directories and files found in VuePressContent not supported sites.

+
    +
  1. To use the generator run the following command in your preferred directory using your preferred package manager:
  2. +
+ + +
yarn create vuepress-site [optional-directory-name]
+
+
1
+ +
npx create-vuepress-site [optional-directory-name]
+
+
1
+
+

After running the above command, you'll be asked to answer some questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named quick-start-project:

+ + +
Whats the name of your project? quick-start-project
+Whats the description of your project? Learning VuePress
+Whats your email? youremail@example.com
+Whats your name? Your Name
+Whats the repo of your project? https://github.com/github-username/quick-start-project
+   create docs/.gitignore
+   create docs/package.json
+   create docs/src/.vuepress/components/demo-component.vue
+   create docs/src/.vuepress/components/Foo/Bar.vue
+   create docs/src/.vuepress/components/OtherComponent.vue
+   create docs/src/.vuepress/config.js
+   create docs/src/.vuepress/enhanceApp.js
+   create docs/src/.vuepress/styles/index.styl
+   create docs/src/.vuepress/styles/palette.styl
+   create docs/src/config/README.md
+   create docs/src/guide/README.md
+   create docs/src/guide/using-vue.md
+   create docs/src/index.md
+✨ File Generate Done
+Done in 38.23s.
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

The scaffolded basic site is created in a docs directory in your current directory which in the example above was quick-start-project. All of the created directories and files are listed above.

+

If you're using npm you'll see a .npmignore file in the docs directory instead of a .gitignore file.

+

Using an Optional Directory Name

+

If you passed an optional directory name, then the scaffolded basic site is created in the given directory in a docs directory.

+
+

The answers given to the questions can be found in the docs directory in the package.json file which contains your site's metadata.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "quick-start-project",
+  "version": "0.0.1",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "authors": {
+    "name": "Your Name",
+    "email": "youremail@example.com"
+  },
+  "repository": "https://github.com/github-username/quick-start-project.git",
+  "scripts": {
+    "dev": "vuepress dev src",
+    "build": "vuepress build src"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "vuepress": "^1.5.3"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guideContent not supported.

+
    +
  1. To see your newly created site, navigate to the docs directory:
  2. +
+ + +
cd docs
+
+
1
+
+
    +
  1. Install your site's packages using your preferred package manager:
  2. +
+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

Installing the Same VuePress Version

+

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

+
+
    +
  1. Start the hot reloading local development server:
  2. +
+ + +
yarn dev
+
+
1
+ +
npm run dev
+
+
1
+
+

Your site should now be running at http://localhost:8080/Content not supported.

+

Manual Installation

+

The manual installation method allows you to start building your site from scratch unlike the quick start method which scaffolds a basic site structure for you.

+

As mentioned above, the following tutorials will be based off of the manual installation method.

+

Using an Existing Project

+

If you already have an existing project and you would like to keep the documentation inside of it, then start from the third command.

+
+
    +
  1. Navigate to your preferred directory which should be where you cloned your site's repository:
  2. +
+ + +
cd <preferred-directory>
+
+
1
+
+
    +
  1. Initialize your project with your preferred package manager:
  2. +
+ + +
yarn init
+
+
1
+ +
npm init
+
+
1
+
+

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named project-directory:

+ + +
question name (project-directory):
+question version (1.0.0):
+question description: Learning VuePress
+question entry point (index.js):
+question repository url: https://github.com/github-username/project-directory.git
+question author: Your Name
+question license (MIT):
+question private:
+success Saved package.json
+Done in 40.63s.
+
+
1
2
3
4
5
6
7
8
9
10
+
+

After answering all of the questions, a package.json file containing the answers is created. The package.json file is used to describe metadata about your site.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "project-directory",
+  "version": "1.0.0",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/project-directory.git",
+  "author": "Your Name",
+  "license": "MIT"
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guideContent not supported.

+
    +
  1. Install VuePressContent not supported:
  2. +
+ + +
yarn add -D vuepress
+
+
1
+ +
npm install -D vuepress
+
+
1
+
+

Installing the Same VuePress Version

+

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

+
+
    +
  1. Create a docs directory and your first document:
  2. +
+ + +
mkdir docs && echo '# Hello VuePress' > docs/README.md
+
+
1
+
+
    +
  1. Add the following scripts object to your package.json file:
  2. +
+ + +
"scripts": {
+  "docs:dev": "vuepress dev docs",
+  "docs:build": "vuepress build docs"
+}
+
+
1
2
3
4
+
+

Here's the contents of the package.json file from the example above after installing VuePressContent not supported and adding the scripts object:

+ + +
{
+  "name": "project-directory",
+  "version": "1.0.0",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/project-directory.git",
+  "author": "Your Name",
+  "license": "MIT",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "^1.9.5"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+
+
    +
  1. Start the hot reloading local development server:
  2. +
+ + +
yarn docs:dev
+
+
1
+ +
npm run docs:dev
+
+
1
+
+

Your site should now be running at http://localhost:8080/Content not supported.

+

Next Steps

+

In the next tutorial we'll be summarizing our current directory structure as well as going over the recommended directory structureContent not supported for a VuePressContent not supported site.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-01-16T05:40:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 6 - Homepage Layout + https://codemonkeys.tech/vuepress-tutorial-6/ + + 2024-07-17T04:15:09.651Z + Hey fellow Code Monkeys!!! 🐵 Want to learn about the default theme homepage layout for VuePress, then check out VuePress Tutorial 6 - Homepage Layout! 🍌🐒 +

VuePress Tutorial 6 - Homepage Layout

+

What is a VuePress Theme?

+

In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default themeContent not supported which comes with the installation of VuePressContent not supported and is designed for technical documentation. Along with the homepage the default themeContent not supported also allows customization for the navbar, sidebar, search box, etc. We'll discuss those customizations in more detail in future tutorials.

+

Before moving on to the homepage layout, we're going to first describe what a theme is. If you remember from the VuePress Tutorial 2 - Why Use VuePress? post, a VuePressContent not supported theme allows you to control how your project is structured. Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configuration and app level enhancements. So, a theme handles all of the layout and interactivity details for your site.

+

Now that we have a good understanding of what a theme is, let's move on to configuring the homepage layout.

+

Homepage Layout

+

To see the homepage layout in action you can take a look at the homepages of the VuePressContent not supported site and the Code Monkeys Blog.

+

Using a Custom Theme

+

Since the options being used for the homepage are provided by the default themeContent not supported, they may be different if you're using a custom themeContent not supported.

+
+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes to your site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Using the Homepage Layout

+

To use the homepage layout open the README.md file in the docs directory of your project then you need to add home: true to a YAMLContent not supported frontmatter block at the top of the page.

+

We're also going to remove the # Hello VuePress line from the file since we're going to start customizing the homepage.

+

The README.md file now looks like this:

+ + +
---
+home: true
+---
+
+
1
2
3
+
+

Before discussing the changes to the site, let's first describe what YAMLContent not supported and frontmatter are.

+

YAML Frontmatter Blocks

+

YAMLContent not supported is a recursive acroynym for "YAML Ain't Markup Language", and it's a human-readable data serialization language that can be used with a wide variety of programming languages. Frontmatter is structured metadata that allows you to add variables to your pages.

+

The YAMLContent not supported frontmatter block support comes with the installation of VuePressContent not supported and is processed using the frontmatter parser gray-matterContent not supported.

+

When you add a YAMLContent not supported frontmatter block to a page you need to declare it at the top of a Markdown file, and the content must adhere to proper YAMLContent not supported formatting between a set of triple-dashed lines, i.e., --- like the example above.

+

Within the triple-dashed lines you are able to set predefined variablesContent not supported, predefined variables powered by the default themeContent not supported, and you can define your own custom variables. These variables can then be accessed within the current page by using the $frontmatterContent not supported variable. We'll be discussing and adding predefined and custom variables and using the $frontmatterContent not supported variable as we continue to develop the site.

+

If you have any questions, then check out the FrontmatterContent not supported documentation.

+

Alternative Frontmatter Formats

+

VuePressContent not supported also supports JSONContent not supported and TOMLContent not supported frontmatter syntax.

+

We'll be using the YAMLContent not supported syntax throughout the tutorials, but if you're interested here's how to set the homepage layout using the other supported syntaxes.

+

For JSONContent not supported the frontmatter needs to start and end with curly brackets:

+ + +
---
+{
+  "home": "true"
+}
+---
+
+
1
2
3
4
5
+
+

For TOMLContent not supported the frontmatter needs to be explicitly marked as toml:

+ + +
---toml
+home = "true"
+---
+
+
1
2
3
+
+

Now that we have a better understanding of YAMLContent not supported frontmatter blocks, let's discuss the changes to the site after specifying the homepage layout.

+

Homepage Layout Changes

+

Before specifying the homepage layout, the HTML for the homepage consists of the following:

+ + +


 











 
 
 
 
 
 
 
 
 
 
 
 
 







<html lang="en-US">
+  <head>
+    <title>Hello VuePress | Code Monkeys</title>
+    ...
+    <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+    <meta name="author" content="J the Code Monkey">
+    ...
+  </head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main class="page">
+          <div class="theme-default-content content__default">
+            <h1 id="hello-vuepress">
+              <a href="#hello-vuepress" class="header-anchor">#</a>
+              " Hello VuePress"
+            </h1>
+          </div>
+          <footer class="page-edit">
+            <!---->
+            <!---->
+          </footer>
+          <!---->
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

The highlighted lines refer to what gets changed after specifying the homepage layout.

+

After specifying the homepage layout, the HTML for the homepage consists of the following:

+ + +


 











 
 
 
 
 
 
 
 
 
 
 
 
 







<html lang="en-US">
+  <head>
+    <title>Code Monkeys</title>
+    ...
+    <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+    <meta name="author" content="J the Code Monkey">
+    ...
+  </head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">
+          <header class="hero">
+            <!---->
+            <h1 id="main-title"> Code Monkeys </h1>
+            <p class="description">
+              " Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"
+            </p>
+            <!---->
+          </header>
+          <!---->
+          <div class="theme-default-content custom content__default"></div>
+          <!---->
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

Here are the changes in the HTML after specifying the homepage layout:

+
    +
  • Line 3: The initial title tag that was set to Hello VuePress | Code Monkeys is now set to Code Monkeys.
  • +
  • Line 15: The initial main tag had a class of "page", and it now has a class of "home" and an attribute of aria-labelledby="main-title".
  • +
  • Line 16: The initial child elements of the div tag are removed since the # Hello VuePress line was removed from the README.md file, and the div tag is moved to line 25 with an added class of "custom". Line 16 now consists of a header tag with a class of "hero", and the child tags of <h1 id="main-title">Code Monkeys</h1> and <p class="description">" Learn to Code like a Monkey... "</p>.
  • +
  • Line 22: The initial footer tag is removed from the page.
  • +
+

Adding an Image

+

Before adding a homepage image, we're going to first create a public directory inside of the .vuepress directory.

+

The directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The public directory is a static resource directory which is useful in the following cases:

+
    +
  • You need to provide static assests that aren't directly referenced in any of your Markdown or component files, e.g., favicons and PWA icons which we'll discuss in more detail in future tutorials.
  • +
  • You need to serve shared static assets that are referenced outside of your site, e.g., logo images.
  • +
  • You want to reference images using absolute URLs in your Markdown and component files.
  • +
+

In a future tutorial we'll discuss what absolute URLs are in more detail as well as relative URLs, the base URL, and how to use aliases. If you're interested in learning more now, then check out the Assest HandlingContent not supported documentation.

+

The image we're going to be adding to the homepage is the Code Monkeys full logo. We're going to create an images directory in the public directory. Then we're going to create a code-monkeys-logos directory inside of the images directory. These directories are optional, but will be helpful for organizational purposes when we add more images in the future. Now inside of the code-monkeys-logos directory, we're going to add the full Code Monkeys logo which is named code-monkeys-full-logo.png.

+

After adding those directories and the image, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ └── code-monkeys-full-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Here's the full Code Monkeys logo:

+
+ Content not supported +
+

You can download the logo right here from your browser, and it will also be in the tutorial-6 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

The logo was created using CanvaContent not supported. The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMPContent not supported.

+

Here are some other useful online image tools:

+ +

Here are some useful resources for coming up with color schemes and palettes for your site:

+ +

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. CanvaContent not supported and GIMPContent not supported, and some of the other image tools mentioned above offer the ability to compress your images.

+

Here are some other useful online tools for image compression:

+ +

After adding the logo to the site, we can reference the logo in our homepage by adding heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png to the frontmatter.

+

Notice you don't need to include .vuepress/public in the path to the logo because whenever you reference assets stored in the public directory it's added automatically.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+---
+
+
1
2
3
4
+
+

The homepage image is added as a child element of the <header> tag that has a class of "hero".

+

Here's what the HTML looks like after adding the homepage image:

+ + +


 









<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description">...</p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding a Title

+

Since we already added a site title property in the config.js file, we already have a title on the homepage which has the same value as the site title property.

+

If you prefer to have the site title property and the title on the homepage to be different, then you can add heroText: Homepage Title to the frontmatter.

+

The README.md file would look like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+heroText: Homepage Title
+---
+
+
1
2
3
4
5
+
+

For the Code Monkeys Blog we'll be using the value of the site title property for the homepage title, so the README.md file will look the same as before:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+---
+
+
1
2
3
4
+
+

Here's the HTML with the homepage title highlighted:

+ + +



 








<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description">...</p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding a Tagline

+

Since we already added a site description property in the config.js file, we already have a tagline on the homepage which has the same value as the site description property.

+

If you prefer to have the site description property and the tagline on the homepage to be different, then you can add tagline: Your tagline to the frontmatter.

+

We're going to update the tagline on the homepage from the value of the site description to be tagline: Let's get down to Monkey Business.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+---
+
+
1
2
3
4
5
+
+

Here's the HTML with the homepage tagline highlighted:

+ + +




 







<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding an Action Button

+

An action button provides a link to a preferred page on your site, and it's placed directly below the tagline.

+

To add an action button you need to add actionText: Text on Action Button and actionLink: /preferred-page/ to the frontmatter.

+

We're going to add the actionText: Learn to Code like a Monkey → and the actionLink: /topics/ to the homepage of the site.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+---
+
+
1
2
3
4
5
6
7
+
+

Here's the HTML with the action button highlighted:

+ + +





 
 
 






<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <p class="action">
+      <a href="/topics/" class="nav-link action-button"> Learn to Code like a Monkey → </a>
+    </p>
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

404 When Clicking the Action Button

+

If you click the action button, it will show the 404 layout because we haven't set up the route to /topics/. In a future tutorial we'll create the Topics page which will fix this issue.

+
+

Adding Features

+

Features are text that get displayed under the action button that are used to provide a summary of what your site is about.

+

You can add as many features as you like, but the recommended number is three. Using three features looks the best with the default styling, and it gives a user a quick introduction to your site.

+

Here's the format for adding features with titles and details to the frontmatter of your page:

+ + +
---
+home: true
+features:
+  - title: Feature 1
+    details: Feature 1 details
+  - title: Feature 2
+    details: Feature 2 details
+  - title: Feature 3
+    details: Feature 3 details
+---
+
+
1
2
3
4
5
6
7
8
9
10
+
+

We're going to be adding only the feature titles to the homepage of the site.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+---
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Here's the HTML with the features highlighted:

+ + +









 
 
 
 
 
 
 
 
 
 
 
 
 
 




<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <p class="action">
+      <a href="/topics/" class="nav-link action-button"> Learn to Code like a Monkey → </a>
+    </p>
+  </header>
+  <div class="features">
+    <div class="feature">
+      <h2>Learn</h2>
+      <p></p>
+    </div>
+    <div class="feature">
+      <h2>Code</h2>
+      <p></p>
+    </div>
+    <div class="feature">
+      <h2>Crush</h2>
+      <p></p>
+    </div>
+  </div>
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+ +

A footer typically contains:

+
    +
  • Authorship Information
  • +
  • Copyright Information
  • +
  • Contact Information
  • +
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)
  • +
+

Here's how to add a footer to the frontmatter of your page:

+ + +
---
+home: true
+footer: Your Site's License | Copyright © 2022-present Your Name
+---
+
+
1
2
3
4
+
+

We're not going to be adding a footer using the frontmatter in the homepage for the site. Instead we're going to be creating a Footer component in a future tutorial that sticks to the bottom of the page.

+

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

+ + +




 


<main aria-labelledby="main-title" class="home">
+  <header class="hero">...</header>
+  <div class="features">...</div>
+  <div class="theme-default-content custom content__default"></div>
+  <div class="footer"> Your Site's License | Copyright © 2022-present Your Name </div>
+</main>
+
1
2
3
4
5
6
+
+

Final Homepage Layout

+

Here's the contents of the README.md file for the homepage after adding all of the desired frontmatter:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+---
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

The contents of your README.md file may be different depending on what metadata you decide to use in the frontmatter of your homepage.

+

Homepage Layout Notes

+

Here are some general notes about the homepage layout:

+
    +
  • You can disable any frontmatter by setting any of the options to null.
  • +
  • Any content after the frontmatter block gets parsed as normal Markdown and will be rendered after the features section.
  • +
  • You can also use a fully custom homepage layout. We'll discuss how to use a Custom Layout for Specific PagesContent not supported in a future tutorial.
  • +
+

Next Steps

+

In the next tutorial we'll discuss how to configure the navbar that comes with the default themeContent not supported.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-02-03T05:06:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 4 - Directory Structure + https://codemonkeys.tech/vuepress-tutorial-4/ + + 2024-07-17T04:15:09.654Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to structure your VuePress site, then check out VuePress Tutorial 4 - Directory Structure! 🍌🐒 +

VuePress Tutorial 4 - Directory Structure

+

Current Directory Structure

+

We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the recommended directory structure for a VuePressContent not supported site.

+

The current directory structure of the project is based off of creating a repository for your project on GitHubContent not supported, cloning the repository, setting a local version of yarn for your project, and doing a manual installation of VuePressContent not supported. This means if you're not using a local version of yarn and/or did a quick start installation your current directory structure will be a little different.

+

Here's the current directory structure of the project:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+
    +
  • .yarn/releases: Stores a local version of yarn for the project which ensures everyone working on the project is using the same version. If you didn't set a local version of yarn for your project, you won't have this directory.
  • +
  • .yarn/releases/yarn-1.22.17.cjs: Specific local version of yarn used in the code-monkeys-blog-tutorialsContent not supported and the code-monkeys-blogContent not supported repositories. The file name will be different if you're using a different version.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage.
  • +
  • node_modules: Contains all of the code for the installed packages.
  • +
  • .gitattributes: Used to prevent git from showing large diffs when you add or update local versions of yarn. If you didn't set a local version of yarn for your project, you won't have this file.
  • +
  • .gitignore: Ignores specified files and directories when making a commit to your repository.
  • +
  • .yarnrc: Instructs your global version of yarn to use the specified local version in the project. If you didn't set a local version of yarn for your project, you won't have this file.
  • +
  • LICENSE: Tells others how they can use your code.
  • +
  • package.json: Describes metadata about your site.
  • +
  • README.md: Used to describe your project in more detail and to document how to install and use your project.
  • +
  • yarn.lock: Keeps track of the exact versions of packages installed in the project. If you're using npm you'll have a package-lock.json file instead.
  • +
+

Reminder to Update the .gitattributes and .gitignore Files

+

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

+
+

Contents of the package.json File

+

Before moving on to the recommended directory structure, we're going to first go over the contents of the package.json file and add some simple updates.

+

The properties of your package.json file may be different depending on how you answered the questions when initializing your project and if you used the quick start installation method instead of the manual installation method. If you want to update any properties or values, you can edit your package.json file directly.

+

If you plan on publishing your project to the npmContent not supported registry, then take a look at the npm package.jsonContent not supported documentation to make sure you are following all of the specifications.

+

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorialsContent not supported:

+ + +
{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git",
+  "author": "J the Code Monkey",
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "1.8.2"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+
+

The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver)Content not supported.

+

Let's describe each property in a little more detail:

+
    +
  • name is the name given to your project
  • +
  • version indicates the current version of your project + +
  • +
  • description is used to describe and provide more information about your project
  • +
  • main is a JavaScript file that starts the execution of your project
  • +
  • repository describes the location of the project repository containing the code +
      +
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }
    • +
    +
  • +
  • author describes the creator or owner of the project +
      +
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
    • +
    +
  • +
  • license indicates the type of license being used by the project
  • +
  • scripts are command-line applications that are described as an object where the property is the name of the script and the value is a command that gets run
  • +
  • devDependencies are dependencies you need during development only, i.e., not during production
  • +
+

Installing the Same VuePress Version

+

If you see a different version of VuePressContent not supported and want to install the same version being used in the tutorials and blog, then you can run yarn upgrade vuepress@1.8.2.

+
+

Now, let's make some simple updates to the package.json file.

+

To start we're going to be adding a version control type to the repository property by updating it to be "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }.

+

Next we're going to be adding an optional email and url to the author property by updating it to be "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }.

+

If you prefer you can also shorten the author property to be one string by defining it like this "author": "Your Name <youremail@example.com> (https://your-website.com)".

+

The email could be a personal or work email, and the url could be a link to a personal website or the website related to your project.

+

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorialsContent not supported after adding the updates:

+ + +
{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "1.8.2"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

Now that we have a good understanding of our current directory structure and the package.json file, let's discuss the recommended directory structure.

+ +

Here's the recommended directory structure for a standard VuePressContent not supported site:

+

. +├── docs +│ ├── .vuepress (Optional) +│ │ ├── components (Optional) +│ │ ├── public (Optional) +│ │ ├── styles (Optional) +│ │ │ ├── index.styl +│ │ │ └── palette.styl +│ │ ├── templates (Optional, Danger Zone) +│ │ │ ├── dev.html +│ │ │ └── ssr.html +│ │ ├── theme (Optional) +│ │ │ └── Layout.vue +│ │ ├── config.js (Optional) +│ │ └── enhanceApp.js (Optional) +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

+

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

+
+
    +
  • docs/.vuepress: Stores the global configuration, components, static resources, etc.
  • +
  • docs/.vuepress/components: The Vue components in this directory automatically get registered as global components.
  • +
  • docs/.vuepress/public: Static resource directory.
  • +
  • docs/.vuepress/styles: Stores style related files.
  • +
  • docs/.vuepress/styles/index.styl: Used to add global styles that can override the default styles.
  • +
  • docs/.vuepress/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • +
  • docs/.vuepress/templates: Stores HTML template files.
  • +
  • docs/.vuepress/templates/dev.html: HTML template file for development environment.
  • +
  • docs/.vuepress/templates/ssr.html: HTML template file used in the build time.
  • +
  • docs/.vuepress/theme: Stores the local theme of the site.
  • +
  • docs/.vuepress/theme/Layout.vue: Layout component used by the theme.
  • +
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • +
  • docs/.vuepress/enhanceApp.js: App level enhancement.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • +
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • +
  • package.json: Describes metadata about your site (same file described in the current directory structure section).
  • +
+

Using the Recommended Directory Structure for Themes

+

If you plan on writing your own theme for your site or you plan on closely following along with these tutorials, then be sure to use the recommended directory structure for themes instead of the recommended directory structure for a standard VuePressContent not supported site.

+
+

Be sure to check out the Directory StructureContent not supported documentation if you have any questions.

+ +

Here's the recommended directory structure if you plan on writing your own theme for your site. Since the Code Monkeys Blog is a child theme inherited from the default themeContent not supported, we'll be using the recommended directory structure for themes when developing the blog.

+

We'll be going over child themes and parent themes in more detail in future tutorials, but if you want to learn more now, you can read through the Theme InheritanceContent not supported documentation.

+

If you're not using a theme when developing your site, you have the option of using the recommended directory structure for a standard VuePressContent not supported site. There should only be minor differences when following along with these tutorials.

+

Only the Layout.vue file is mandatory when writing a theme, but we'll be using the other recommended directories as we continue to develop the blog.

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── components +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ │ └── Layout.vue (Mandatory) +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ ├── templates +│ │ │ │ ├── dev.html +│ │ │ │ └── ssr.html +│ │ │ ├── enhanceApp.js +│ │ │ └── index.js +│ │ └── config.js +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

+

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

+
+
    +
  • docs/.vuepress: Stores the global configuration, theme, static resources, etc.
  • +
  • docs/.vuepress/public: Static resource directory.
  • +
  • docs/.vuepress/theme: Stores the theme of the site.
  • +
  • theme/components: Stores the Vue components.
  • +
  • theme/global-components: The Vue components in this directory automatically get registered as global components.
  • +
  • theme/layouts: Stores the layout components used by the theme.
  • +
  • theme/layouts/Layout.vue: Mandatory layout component used by the theme.
  • +
  • theme/styles: Stores style related files.
  • +
  • theme/styles/index.styl: Used to add global styles that can override the default styles.
  • +
  • theme/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • +
  • theme/templates: Stores HTML template files.
  • +
  • theme/templates/dev.html: HTML template file for development environment.
  • +
  • theme/templates/ssr.html: HTML template file used in the build time.
  • +
  • theme/enhanceApp.js: Theme level enhancement.
  • +
  • theme/index.js: Entry file for theme configuration.
  • +
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • +
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • +
  • package.json: Describes metadata about your site (same file described in the current directory structure section).
  • +
+

We'll be discussing themes in more detail as we continue to develop the blog. If you want to learn more now though or have any questions, then check out the ThemeContent not supported documentation.

+

Default Page Routing

+

In the directory structure above we used the docs directory as the targetDir. If you want to learn more about how the targetDir is used, then take a look at the Command-line InterfaceContent not supported documentation.

+

To see an example of the docs directory being used as the targetDir we can take a look at the scripts object we defined in the package.json file which is in the root directory of the project. Notice the targetDir gets set as the docs directory for the docs:dev and docs:build scripts:

+ + +
"scripts": {
+  "docs:dev": "vuepress dev docs",
+  "docs:build": "vuepress build docs"
+}
+
+
1
2
3
4
+
+

All the relative paths are relative to the docs directory. Here are the relative paths and the default page routing paths for the directory structure described above:

+ + + + + + + + + + + + + + + + + +
Relative PathPage Routing
/README.md/
/example-page/README.md/example-page/
+

From the table we can see the relative path for the homepage is /README.md and the default page routing path for the homepage is /. We can also see the relative path for the example page is /example-page/README.md, and the default page routing path for the example page is /example-page/.

+

Next Steps

+

In the next tutorial we'll discuss the basics of ConfigurationContent not supported.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-01-22T16:55:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 7 - Navbar Logo and Links + https://codemonkeys.tech/vuepress-tutorial-7/ + + 2024-07-17T04:15:09.664Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to configure the navbar for VuePress, then check out VuePress Tutorial 7 - Navbar Logo and Links! 🍌🐒 +

VuePress Tutorial 7 - Navbar Logo and Links

+

What is a Navbar?

+

In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default themeContent not supported. A navbar is used to provide users with a quick and easy way to navigate to the main pages of a site. Most sites display the navbar on most or all of the pages, so it's generally designed to be a global component which allows it to be easily shown on all pages.

+

The navbar for a site made with VuePressContent not supported can consist of a logo, a site title, a search box, internal links, languages the site can be translated to, and external links. Depending on how you want to configure your navbar your site can have all or some of these options. We'll be discussing how to configure the logo, site title, internal links, and external links. We'll also discuss how to disable the navbar globally as well as locally for specific pages.

+

Take a look at the navbar on this page to see what we'll be designing for the Code Monkeys Blog. To see another example you can check out the VuePressContent not supported site navbar as well.

+

Using a Custom Theme

+

Since the options being used for the navbar are provided by the default themeContent not supported, they may be different if you're using a custom themeContent not supported.

+
+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+ +

The navbar logo is used to brand your site, and it provides a link to the homepage. The image we're going to be using for the navbar is the Code Monkeys head and shoulders logo. We're going to be adding the image which is named code-monkeys-head-and-shoulders-logo.png to the code-monkeys-logos directory.

+

The site title in the navbar also provides a link to the homepage, and it's being set by the value of the title property in the config.js file which we set up in a previous tutorial.

+

After adding the image, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ ├── code-monkeys-full-logo.png +│ │ │ │ │ └── code-monkeys-head-and-shoulders-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

If the directory structure is confusing you, then be sure to take a look at the Adding an Image section from the previous tutorial where it's described in more detail. That section also contains links to resources for creating, editing, and compressing images and for coming up with color schemes and palettes for your site.

+

Here's the Code Monkeys head and shoulders logo:

+
+ Content not supported +
+

You can download the logo right here from your browser, and it will also be in the tutorial-7 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

After adding the image to the site, we can reference it in the config.js file as follows:

+ + +






 
 
 


module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

Notice you don't need to include .vuepress/public in the path to the navbar logo because whenever you reference assets stored in the public directory it's added automatically.

+

Also, notice the value of the site title is being set here by using the title property.

+

Here's what the HTML looks like after adding the navbar logo:

+ + +








 
 













<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">
+                <img src="/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png" alt="Code Monkeys" class="logo">
+                <span class="site-name can-hide">Code Monkeys</span>
+            </a>
+            <div class="links" style="max-width: 1093px;">...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

You should now see the navbar logo in the upper left of the page.

+ +

To add links to the navbar other than to the homepage we need to add a nav property to the themeConfig object. The nav property expects an array of navbar link objects. We're going to start by adding internal links.

+ +

An internal link is a link that points to another section of the same page or to another page on the same site or domain.

+

To add an internal link you need to add { text: 'Link Name', link: '/path-to-page/' } to the nav property where the text defines the name of the link in the navbar and link defines the path to the preferred page.

+

For our site we're going to add the following internal links: Topics, Posts, Resources, and Donate.

+

Here's what the config.js file looks like after adding the internal links:

+ + +








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        link: '/posts/',
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

Here's what the HTML looks like after adding the internal links:

+ + +










 
 
 
 
 
 
 
 
 
 
 
 
 
 
 










<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+            <div class="links" style="max-width: 1093px;">
+                <div class="search-box">...</div>
+                <nav class="nav-links can-hide">
+                    <div class="nav-item">
+                        <a href="/topics/" class="nav-link"> Topics </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/posts/" class="nav-link"> Posts </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/resources/" class="nav-link"> Resources </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/donate/" class="nav-link"> Donate </a>
+                    </div>
+                    <!---->
+                </nav>
+            </div>
+        </header>
+        ...
+      </div>
+      ...
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Your navbar should now have Topics, Posts, Resources, and Donate links to the right of the search box.

+

404 When Clicking the Links

+

If you click the links they will show the 404 layout because we haven't set up the pages for Topics, Posts, Resources, and Donate yet. In future tutorials we'll create these pages which will fix these issues.

+
+ +

An external link is a link that points to a page outside of the same site or domain.

+

Adding an external link is the same as adding an internal link except the value provided to the link property is a URL to an external site.

+

External links automatically get target="_blank" rel="noopener noreferrer" attributes added to the <a> tag. The target attribute specifies where to open the linked document, and the rel attribute specifies the relationship between the current document and the linked document.

+

These attributes are used to prevent a vulnerability known as reverse tabnabbingContent not supported which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

+

You can also customize the values for the target and rel attributes by specifying them as properties in the external link. You can disable the rel attribute for a link by setting it like this rel: false.

+

For example, we could add an external link to the code-monkeys-blogContent not supported repository on our site with custom values for target and rel.

+

Here's what the config.js file looks like after adding the external link:

+ + +

























 
 
 
 
 
 




module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        link: '/posts/',
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+      {
+        text: 'GitHub',
+        link: 'https://github.com/codemonkeysio/code-monkeys-blog',
+        target:'_self',
+        rel:false,
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Here's what the HTML looks like after adding the external link:

+ + +















 
 
 
 
 
 












<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+            <div class="links" style="max-width: 1093px;">
+                <div class="search-box">...</div>
+                <nav class="nav-links can-hide">
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">
+                        <a href="https://github.com/codemonkeysio/code-monkeys-blog" target="_self" class="nav-link external"> 
+                            " GitHub "
+                            <!---->
+                        </a>
+                    </div>
+                    <!---->
+                </nav>
+            </div>
+        </header>
+        ...
+      </div>
+      ...
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
+
+

No External Link in Navbar

+

Currently, the Code Monkeys Blog doesn't include an external link in the navbar, but in the future one may be added for the code-monkeys-blogContent not supported repository using the default values for external links mentioned above.

+
+ +

The links in the navbar can also be dropdown menus if an items property which expects an array of navbar link objects is used instead of just a link property.

+

For example, the Posts link we made earlier can be turned into a dropdown menu containing links to pages for All Posts and for posts By Topic.

+

Here's what the config.js file looks like after turning the Posts link into a dropdown menu:

+ + +













 
 
 
 
 
 
 















module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          { 
+            text: 'By Topic',
+            link: '/topics/',
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Here's what the HTML looks like after adding a dropdown menu:

+ + +








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 








<header class="navbar">
+    <div class="sidebar-button">...</div>
+    <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+    <div class="links" style="max-width: 1093px;">
+        <div class="search-box">...</div>
+        <nav class="nav-links can-hide">
+            <div class="nav-item">...</div>
+            <div class="nav-item">
+                <div class="dropdown-wrapper">
+                    <button type="button" aria-label="Posts" class="dropdown-title">
+                        <span class="title">Posts</span>
+                        <span class="arrow down"></span>
+                    </button>
+                    <button type="button" aria-label="Posts" class="mobile-dropdown-title">
+                        <span class="title">Posts</span>
+                        <span class="arrow right"></span>
+                    </button>
+                    <ul class="nav-dropdown" style="display: none;">
+                        <li class="dropdown-item">
+                            <!---->
+                            <a href="/posts/" class="nav-link"> All Posts </a>
+                        </li>
+                        <li class="dropdown-item">
+                            <!---->
+                            <a href="/topics/" class="nav-link"> By Topic </a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+            <div class="nav-item">...</div>
+            <div class="nav-item">...</div>
+            <!---->
+        </nav>
+    </div>
+</header>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+
+

Your navbar should now have a Posts dropdown menu containing All Posts and By Topic links.

+ +

It's also possible to make a dropdown menu with subgroups where a label is used to group a list of links. This is done by using the items property which expects an array of navbar link objects instead of using just a link property for a dropdown menu entry.

+

For example, the By Topic link we made earlier can be turned into a subgroup containing links to posts filtered by main topics. Currently, the blog consists of three main topics LeetCode, Node.js, and VuePress, so we'll add each of these as an entry to the By Topic subgroup in our dropdown menu.

+

Here's what the config.js file looks like after turning the By Topic link in the dropdown menu into a subgroup:

+ + +

















 
 
 
 
 
 
 
 














module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
+
+

Final config.js File

+

This is how the config.js file should look at the end of this tutorial if you're following along with the building of the blog.

+
+

Here's what the HTML looks like after adding a subgroup to the dropdown menu:

+ + +















 
 
 
 
 
 
 
 
 
 
 
 




<div class="dropdown-wrapper">
+    <button type="button" aria-label="Posts" class="dropdown-title">
+        <span class="title">Posts</span>
+        <span class="arrow down"></span>
+    </button>
+    <button type="button" aria-label="Posts" class="mobile-dropdown-title">
+        <span class="title">Posts</span>
+        <span class="arrow right"></span>
+    </button>
+    <ul class="nav-dropdown" style="display: none;">
+        <li class="dropdown-item">
+            <!---->
+            <a href="/posts/" class="nav-link"> All Posts </a>
+        </li>
+        <li class="dropdown-item">
+            <h4> By Topic </h4>
+            <ul class="dropdown-subitem-wrapper">
+                <li class="dropdown-subitem">
+                    <a href="/topics/LeetCode/" class="nav-link"> LeetCode </a>
+                </li>
+                <li class="dropdown-subitem">
+                    <a href="/topics/Node.js/" class="nav-link"> Node.js </a>
+                </li>
+                <li class="dropdown-subitem">
+                    <a href="/topics/VuePress/" class="nav-link"> VuePress </a>
+                </li>
+            </ul>
+        </li>
+    </ul>
+</div>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+

Your navbar should now have a By Topic subgroup in the dropdown menu containing these links LeetCode, Node.js, and VuePress.

+

To add more links to the By Topic subgroup all you need to do is add another element into its items array.

+

404 Reminder When Clicking the Links

+

Clicking the links will show the 404 layout because we haven't set up the pages for the navbar links except for the homepage. In future tutorials we'll create these pages which will fix these issues.

+
+

Disabling the Navbar

+

You can disable the navbar globally if you prefer to not have a navbar for your site. You also have the option to disable the navbar locally for specific pages. We'll demonstrate how to do each of these below.

+

Globally

+

To disable the navbar globally add the following to your config.js file:

+ + +







 



module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    navbar: false,
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

The navbar property is a predefined variable provided by the default themeContent not supported. Check out Predefined Variables Powered By Default ThemeContent not supported for a list of the predefined variables.

+

Locally

+

To disable the navbar locally for a specific page you can add the following to the page's frontmatter:

+ + +
---
+navbar: false
+---
+
+
1
2
3
+
+

Next Steps

+

In the next tutorial we'll begin the development of the Footer component which will stick to the bottom of the page and consist of social media icons and a made by message.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-03-12T17:46:45.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 8 - Custom Footer + https://codemonkeys.tech/vuepress-tutorial-8/ + + 2024-07-17T04:15:09.677Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to create a custom footer for your VuePress site, then check out VuePress Tutorial 8 - Custom Footer! 🍌🐒 +

VuePress Tutorial 8 - Custom Footer

+ +

Now it's time to start building the custom footer component for the site. Before creating the footer component, we're going to first describe what a footer is then we'll mention some other options for footers provided by VuePressContent not supported and the @vuepress/theme-blogContent not supported.

+

A footer is located at the bottom of a page, and it typically contains:

+
    +
  • Authorship Information
  • +
  • Copyright Information
  • +
  • Contact Information
  • +
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)
  • +
+

For the Code Monkeys Blog we'll be building a footer that consists of links to various social media platforms. This gives the user an easy way to interact with various content and the community.

+

Take a look at the footer on this page to see what we'll be designing for the blog. To see another example you can check out the VuePressContent not supported site footer as well.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+ +

If you remember from the previous post VuePress Tutorial 6 - Homepage Layout, VuePressContent not supported provides a way to add a footer to the homepage by adding the following to the homepage layout which is located in docs/README.md:

+ + +










 


---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+footer: Your Site's License | Copyright © 2022-present Your Name
+---
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

+ + +












 
 
 








<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">
+          <header class="hero">...</header>
+          <div class="features">...</div>
+          <div class="theme-default-content custom content__default"></div>
+          <div class="footer">
+            Your Site's License | Copyright © 2022-present Your Name
+          </div>
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+ +

VuePressContent not supported also provides a rich-text footerContent not supported which gives you the ability to easily add more functionality to your footer like links. To set this type of footer you need to use markdown slot syntaxContent not supported which we won't discuss in detail here.

+

Since the rich-text footerContent not supported uses markdown slot syntaxContent not supported, you can only add it to markdown files, and it needs to be manaully added to each markdown file to be displayed.

+

These limitations are why we'll be creating a custom footer component. If you only want to show the footer on one or a few markdown pages, then this option should work fine for you.

+ +

The Code Monkeys Blog uses the default themeContent not supported, but if you're interested in using @vuepress/theme-blogContent not supported be sure to take a look at the footer optionContent not supported.

+

Here are some examples of sites that use the @vuepress/theme-blogContent not supported footer:

+ +

Since we'll be using social media sites that are not currently supported by the footer.contactContent not supported option, we won't be using this footer. You can contribute social media contact types by making a pull request to the vuepress-theme-blogContent not supported repository though if you're interested.

+ +

Before designing the custom footer component, we need to have an understanding of the following topics:

+ +

We won't be describing every detail about each topic above since we only need to understand how to create our custom footer component. If you're interested in learning more now, then check out the links above.

+

Writing a Theme

+

In VuePressContent not supported you have the ability to make your site into a theme. This gives you the option to publish your site as an npmContent not supported package which allows other developers to easily install and use your theme.

+

To write your own theme you need to create a theme directory in the .vuepress directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ └── config.js +│ └── README.md

+

After creating the theme directory, all you need to do is create a Layout.vue file inside of it like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ └── Layout.vue +│ │ └── config.js +│ └── README.md

+

From here you can develop your site like any other VueContent not supported application by organizing your theme however you want. Being able to organize your theme however you want provides a lot of flexibility when creating your site, but it's recommended to use the directory structure below when designing your theme:

+

theme +├── components +│ └── xxx.vue +├── global-components +│ └── xxx.vue +├── layouts +│ ├── Layout.vue (Mandatory) +│ └── xxx.vue +├── styles +│ ├── index.styl +│ └── palette.styl +├── templates +│ ├── dev.html +│ └── ssr.html +├── enhanceApp.js +└── index.js

+

Here's a description for each directory and file in the theme directory:

+
    +
  • components: Local components used in your theme.
  • +
  • global-components: Components in this directory automatically get registered as global, so you don't need to explicitly import them in a file when using them.
  • +
  • layouts: Layout components used in your theme. +
      +
    • Layout.vue: A mandatory layout file for every theme.
    • +
    +
  • +
  • styles: Stores files related to styling your theme. +
      +
    • index.styl: Overrides any default styling and allows you to globally style your site.
    • +
    • palette.styl: Overrides any default styling variables and allows you to add any global styling variables.
    • +
    +
  • +
  • templates: Stores HTML template files. +
      +
    • dev.html: HTML template file for development environment.
    • +
    • ssr.html: HTML template file used in the build time.
    • +
    +
  • +
  • enhanceApp.js: Enhances the theme of your site by giving you the ability to install Vue plugins, add router hooks, etc.
  • +
  • index.js: Entry file for for theme configuration.
  • +
+

Reviewing the Recommended Directory Structure for Themes

+

You may have recognized this directory structure from the VuePress Tutorial 4 - Directory Structure post.

+
+

When creating the custom footer component we'll use the global-components directory, the index.js file, and the layouts directory. The global-components directory will be where we add the custom footer component since we want the footer to be available globally. The index.js file will be used to inherit the default themeContent not supported using theme inheritanceContent not supported. Finally, the layouts directory will be where we add the GlobalLayout.vue file which allows us to add our custom footer component to the global layout of the site.

+

Since we'll be using the vuepress-plugin-svg-iconsContent not supported to add social media icons to our footer, let's go over what pluginsContent not supported are, how to install them, and how to configure them.

+

Basics of Plugins

+

PluginsContent not supported allow you to add global-level functionality to VuePressContent not supported. You can configure them by passing in options. It's also possible to write your own and publish them as npmContent not supported packages.

+

To use a plugin you need to first install it by using either yarn or npm. We'll be using yarn to install all of the plugins for the blog, but the commands for installing the plugins with npm will also be provided. After installing a plugin, you can configure it by adding it to the config.js file.

+

VuePress Plugin - SVG Icons

+

Now that we know the basics, we're ready to install and configure vuepress-plugin-svg-iconsContent not supported.

+

Using the Tutorials Repo

+

If you're following along with the tutorials, then when you switch to the tutorial-8 branch you can run the following command to install the package instead of running the installation command:

+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

+

Using the Installation Command

+

To install the plugin in your own project you can run the following command:

+ + +
yarn add @goy/vuepress-plugin-svg-icons -D
+
+
1
+ +
npm install @goy/vuepress-plugin-svg-icons -D
+
+
1
+
+

Installing the Same Plugin Version

+

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @goy/vuepress-plugin-svg-icons@4.2.3.

+
+

After installing the plugin, the package.json file should look something like this:

+ + +



 




{
+  ...
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
+
+

Next we need to configure the plugin by editing the config.js file:

+ + +








 


module.exports = {
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    ...
+  },
+  plugins: ['@goy/svg-icons'],
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

To add the social media icons to the site we need to create an icons directory in the docs directory. Here's what the docs directory should look like after adding the icons directory:

+

. +├── docs +│ ├── .vuepress +│ ├── icons +│ └── README.md

+

The plugin recommends using iconfontContent not supported to find Scalable Vector Graphics (SVGs)Content not supported for your site. After creating an account, you can search for icons and download them. When downloading the icons you have the option to specify a color and size for the icon. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

+

You can download the icons from the tutorial-8 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Using SVG Export

+

To easily download the icons used in the footer you can also install the browser extension SVG ExportContent not supported. After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

+
+

We'll be using icons for these social media sites as well as to an RSS feed for Code Monkeys in the footer:

+ +

After downloading the icons the icons directory should look something like this:

+

├── icons +│ ├── Gab.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

After adding the icons to icons directory, the plugin will automically load the icons and will provide a global component named vp-icon. To use the vp-icon component you need to pass a name attribute to it where the value is the name of the SVG file you want to use.

+

If you're interested in learning more about the plugin, then check out the vuepress-plugin-svg-iconsContent not supported documentation which contains more information about configuration options, component props, and command-line interface (CLI) commands.

+

We're now ready to create the custom footer component.

+ +

The custom footer component will be added to the global-components directory. Here's what the theme directory will look like after adding the Footer.vue file:

+

├── theme +│ ├── global-components +│ │ └── Footer.vue

+

Here we're creating a *.vue file which is known as a Single-File Component (SFC)Content not supported. This is a special file format that allows you to encapsulate the HTML in a template tag, the JavaScript in a script tag, and the CSS in a style tag for the component.

+

Here's what the Footer.vue file looks like after adding these three main sections:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

To start we'll add the HTML to the template tag. The contents of the footer will be wrapped in a footer tag containing two child tags a div tag and a p tag. The div tag will contain seven child a tags one for each of the social media icons. The p tag will contain authorship information for the blog.

+

Each a tag will have the following attributes: href, target, and rel. The href specifies the URL of the page the link goes to, the target specifies where to open the link, and the rel specifies the relationship between the current page and the link. Each a tag will also have a child vp-icon tag which will have the name attribute discussed earlier.

+

Here's what the Footer.vue file looks like after adding the HTML to the template tag:

+ + +

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 






<template>
+  <footer>
+    <div>
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p>Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script></script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+

Each href has a value of the related URL for the social media site. Each target has a value of _blank, and each rel has a value of noopener noreferrer.

+

As mentioned in the previous post these values for the target and rel attributes are used to prevent a vulnerability known as reverse tabnabbingContent not supported which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

+

Each name attribute has a value of the name of the related SVG file with the .svg extension omitted.

+

Next we'll export the JavaScript in the script tag and give the component a name. Here's what the Footer.vue file looks like after updating the script tag:

+ + +





 
 
 





<template>
+  ...
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style>
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

Finally, we'll style the component by adding the following CSS classes: "footer", "icons", and "made-by". We'll be adding the "footer" class to the footer tag, the "icons" class to the div tag, and the "made-by" class to the p tag. Then we'll add styling for each of the CSS classes in the style tag. Here's what the Footer.vue file looks like after styling:

+ + +

 
 


 







 
 
 
 
 
 
 
 
 
 
 
 
 
 


<template>
+  <footer class="footer">
+    <div class="icons">
+      ...
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+  ...
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

The lang attribute used in the style tag is used to specify which pre-processor we want to use in the component. Here we're using StylusContent not supported which is the default pre-processor used by VuePressContent not supported. If you want to learn how to use a different pre-processor, then check out Using Pre-processorsContent not supported.

+

A scoped attribute is also used in the style tag which means all of the styling only applies to the current component. Take a look at Scoped CSSContent not supported to learn more about the scoped attribute.

+

The "footer" class is given display: flex which defines a flex container for all of the direct children of the tag where the "footer" class is used. In this case the "footer" class is used on the footer tag which means the div tag and p tag will be in a flex container. The "footer" class is also given flex-direction: column which means the flex items in the flex container, i.e., the div tag and the p tag will be stacked on top of each other in a column as opposed to the default row setting. The flex items are then given align-items: center which will horizontally center the flex items since the flex direction is set to column. The "footer" class is then given padding: 2.5rem 2.5rem 2rem which will set a padding of 2.5rem for the top, 2.5rem for the left and right, and 2rem for the bottom.

+

If you're unfamiliar with flexbox, then check out A Complete Guide to FlexboxContent not supported and Basic Concepts of FlexboxContent not supported. Also, if you're unfamiliar with CSS units like rem, then check out CSS UnitsContent not supported.

+

The "icons" class is also given display: flex which means each a tag will be in a flex container since they're all direct children of the div tag which has the "icons" class. The "icons" class is also given margin-bottom: 1.75rem and font-size: 2rem which increases the size of the icons. The CSS selector .icons > a:not(:last-child) is then used which selects all a tags where the parent tag has a class of "icons" except for the last a tag. Each a tag that is selected is given margin-right: 4.6875rem.

+

If you're unfamiliar with CSS selectors, then check out the CSS Selector ReferenceContent not supported.

+

Finally, the "made-by" class is given margin: 0 which removes the margin from the p tag.

+

If you didn't feel comfortable with the CSS discussed above, then here's a good resource to go through CSS TutorialContent not supported.

+

As we continue to develop the blog, we'll add more styling to the footer to make it look presentable in different scenarios like on smaller screen sizes, when a sidebar is present, etc.

+

Here's what the Footer.vue file should look like:

+ + +
<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
+
+

After adding the global-components directory to the theme directory, you may have noticed the site is rendering a blank page. This is because we created a directory in the theme directory, so VuePressContent not supported is now looking for a Layout.vue file in the theme directory.

+

We have the option of creating a layouts directory and placing our own Layout.vue file inside of it, but as previously mentioned we're going to use theme inheritanceContent not supported to inherit the default themeContent not supported.

+

Theme Inheritance

+

Theme inheritanceContent not supported allows you to pass all of the capabilities from a parent theme to a child theme. In our case the parent theme is the default themeContent not supported, and we'll be creating the child theme as we develop the blog.

+

To create the child theme from the default themeContent not supported, we need to configure the extendContent not supported option in the index.js file.

+

First, we need to create the index.js file in the theme directory which should now look like this:

+

├── theme +│ ├── global-components +│ └── index.js

+

We can now configure the extendContent not supported option:

+ + +
module.exports = {
+  extend: '@vuepress/theme-default',
+};
+
+
1
2
3
+
+

The inherited default themeContent not supported should now be rendering alongside the child theme instead of the blank page.

+

Missing Layout.vue File

+

You may have noticed that the Layout.vue file is listed as a mandatory file, but we didn't need to create one in the theme directory. This is because you don't need to explicitly create the Layout.vue file when you're inheriting it from the default themeContent not supported.

+
+

The child theme is also able to override files in the parent theme by creating a file with the same name in the same location. We'll go over how to override parent theme files in more detail in future tutorials. You can also override some parent theme files by just using the same name as the parent theme file in the child theme. For example, we're going to override the GlobalLayout.vue file by using the same name for the file in the child theme and the code provided by the documentation.

+

Now let's create the layouts directory in the theme directory. This is where we'll be adding the GlobalLayout.vue file which again allows us to add our custom footer component to the global layout of the site.

+

Using the Global Layout

+

Here's what the theme directory will look like after creating the GlobalLayout.vue file in the layouts directory:

+

├── theme +│ ├── global-components +│ ├── layouts +│ │ └── GlobalLayout.vue +│ └── index.js

+

The GlobalLayout.vue file is responsible for handling the global layout of the site. Here's the path to the default GlobalLayout.vue file provided by VuePressContent not supported node_modules/@vuepress/core/lib/client/components. You can also view the code for the default global layout hereContent not supported.

+

The default global layout gives you the ability to render different layouts depending on if $page.path is defined, i.e., the URL of the page is valid and if $page.frontmatter.layout is defined. If only the $page.path is defined, then the default layout will be used which is Layout. If $page.frontmatter.layout is defined, then the specific layout for that page will be used. If $page.path is not defined, then the NotFound layout is used which is the layout for the 404 page provided by VuePressContent not supported. In most scenarios you don't need to edit the default global layout, but if you want to add a global header or a global footer to your site, then this is a good place to add it.

+

To override and edit the GlobalLayout.vue file we're going to use the code provided by the globalLayoutContent not supported section from the documentation. The code provided by the documentation basically uses a computed propertyContent not supported to determine the layout for a page based on if the URL of the page is defined and if the page uses a specific layout provided by the frontmatter. This is similar to the logic previously described when discussing the default global layout.

+

Here's the code from the documentation:

+ + +
<template>
+  <div id="global-layout">
+    <header><h1>Header</h1></header>
+    <component :is="layout"/>
+    <footer><h1>Footer</h1></footer>
+  </div>
+</template>
+
+<script>
+export default {
+  computed: {
+    layout () {
+      if (this.$page.path) {
+        if (this.$frontmatter.layout) {
+          // You can also check whether layout exists first as the default global layout does.
+          return this.$frontmatter.layout
+        }
+        return 'Layout'
+      }
+      return 'NotFound'
+    }
+  }
+}
+</script>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

We're going to remove the example header tag and replace the example footer tag with our previously created footer component.

+

Here's what the GlobalLayout.vue file should look like after the changes:

+ + +



 




















<template>
+  <div id="global-layout">
+    <component :is="layout"/>
+    <Footer />
+  </div>
+</template>
+
+<script>
+export default {
+  computed: {
+    layout () {
+      if (this.$page.path) {
+        if (this.$frontmatter.layout) {
+          // You can also check whether layout exists first as the default global layout does.
+          return this.$frontmatter.layout
+        }
+        return 'Layout'
+      }
+      return 'NotFound'
+    },
+  },
+}
+</script>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

Importing the Footer Component

+

Notice that we don't need to explicitly import the footer component since we made it a global component by adding it to the global-components directory in the theme directory.

+
+

Next Steps

+

In the next tutorial we'll discuss how to override the index.styl and palette.styl files to add our own global styling to the site. The global styling will include background color, accent color, text color, etc.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-04-06T16:58:30.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 5 - Configuration Basics + https://codemonkeys.tech/vuepress-tutorial-5/ + + 2024-07-17T04:15:09.679Z + Hey fellow Code Monkeys!!! 🐵 Want to learn about the configuration basics for VuePress, then check out VuePress Tutorial 5 - Configuration Basics! 🍌🐒 +

VuePress Tutorial 5 - Configuration Basics

+

Adding a Config File

+

Currently, the site consists of a homepage with a title saying "Hello VuePress" and a search box provided by the default themeContent not supported which builds an index from all h2 and h3 markdownContent not supported headers and from the title and tags included in the frontmatterContent not supported of pages.

+

We'll be discussing the default themeContent not supported, markdownContent not supported, and frontmatterContent not supported in more detail in future tutorials.

+

To see your site be sure to start the local development server which should be running at http://localhost:8080/Content not supported.

+

The site is working, but it doesn't have a lot of functionality or customization. To add more functionality and customization like site navigation with a navbar, a site title, a site description, favicons, etc. we need to add a config file.

+

Before adding the config file, let's first create a .vuepress directory in the docs directory. The .vuepress directory will be used to store all VuePressContent not supported specific directories and files.

+

The directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Now inside of the .vuepress directory, let's add a config.js file.

+

After adding the config.js file, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The config.js file should export a JavaScript object like the following:

+ + +
module.exports = {}
+
+
1
+
+

If you run into any issues when adding the directory and file above, then be sure to check out the ConfigurationContent not supported documentaion.

+

Alternative Config Formats

+

In this series we'll be using a JS config file format, i.e., .vuepress/config.js. However, VuePressContent not supported also supports the following config file formats: YAML - .vuepress/config.yml, TOML - .vuepress/config.toml, and TS - .vuepress/config.ts. If you want to use TS, then you need to have a VuePressContent not supported version of 1.9.0+ installed. See the TypeScript as ConfigContent not supported documentation for more details.

+
+

Config File Properties

+

Now that we have added a config.js file, we can begin to add more functionality and customization to the site by setting some of the basic config file properties.

+

The properties we'll be setting will be using the <head>, <meta>, and <title> tags. To learn more about these tags check out the following references: HTML <head> TagContent not supported, HTML <meta> TagContent not supported, and HTML <title> TagContent not supported.

+

As we develop the site we'll be adding more config file properties as needed. For a full list of the available config file properties check out the Config ReferenceContent not supported.

+

Title

+

The title property is used to define the title for the site. The provided value is used to prefix all page titles, and it gets shown in the navbar when using the default themeContent not supported as a link to the homepage.

+

The expected type is a string, and the default value is undefined.

+

Now let's set the title of the site:

+ + +
module.exports = {
+  title: 'Code Monkeys',
+}
+
+
1
2
3
+
+

After adding the title and saving the file, you should see Code Monkeys or whatever value you set as your site's title in the top left of the navbar as a link to the homepage.

+

You can also inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <title>Hello VuePress | Code Monkeys</title>
+  ...
+</head>
+
+
1
2
3
4
5
+
+

The value of the <title> tag will be whatever you set as the value for the title of your site.

+

Removing Hello VuePress

+

When we update the homepage in the next tutorial, we'll remove the Hello VuePress | from the <title> tag.

+
+

Description

+

The description property is used to define the description for the site. The provided value is used in a <meta> tag in the <head> tag of the site.

+

The expected type is a string, and the default value is undefined.

+

Now let's set the description of the site:

+ + +
module.exports = {
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+}
+
+
1
2
3
4
+
+

After adding the description and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+  ...
+</head>
+
+
1
2
3
4
5
+
+

The value of the content attribute will be whatever you set as the value for the description of your site.

+ +

The head property is used to inject extra tags into the <head> tag of the site.

+

The expected type is an array, and the default value is [].

+

You can specify a tag to inject into the <head> tag by using the following form: [tagName, { attr1Name: attr1Value, attr2Name: attr2Value, ... }].

+

Here are some examples of what can be injected into the <head> tag:

+
    +
  • Author of the Site
  • +
  • Favicons
  • +
  • Social Media Metadata
  • +
  • Links to External Style Sheets
  • +
  • Client-Side Scripts
  • +
+

To start we'll set an author by using a <meta> tag in the <head> tag:

+ + +
module.exports = {
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

After adding the author and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <meta name="author" content="J the Code Monkey">
+  ...
+</head>
+
+
1
2
3
4
5
+
+

To change the author for your site you can use a different value for the content attribute.

+

We'll be injecting more tags into the <head> tag as we develop the site.

+

Updated Config File

+

Here's the content of the config.js file after adding the title, description, and author:

+ + +
module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Be sure to substitute the values with the preferred values for your site.

+

Next Steps

+

In the next tutorial we'll discuss the homepage layout provided by the default themeContent not supported.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-01-26T17:54:00.000Z + Copyright by J the Code Monkey +
+ + VuePress Tutorial 9 - Styling the Homepage + https://codemonkeys.tech/vuepress-tutorial-9/ + + 2024-07-17T04:15:09.685Z + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the homepage for your VuePress site, then check out VuePress Tutorial 9 - Styling the Homepage! 🍌🐒 +

VuePress Tutorial 9 - Styling the Homepage

+

Styling Files

+

The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files which will allow us to add our own global styling to the blog.

+

To do this we're going to first discuss what the index.styl and palette.styl files are used for. Then we'll take a look at the predefined styling files provided by the default themeContent not supported, and we'll discuss the overriding priority of the files. Finally, we'll implement what we leaned about by styling the homepage of the blog.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

palette.styl

+

The palette.styl file is used to define global styling variables and override the predefined styling variables which in our case are being provided by the default themeContent not supported.

+

Here are some of the predefined styling variables available to use and override in your site:

+ + +
// colors
+$accentColor = #3eaf7c
+$textColor = #2c3e50
+$borderColor = #eaecef
+$codeBgColor = #282c34
+$arrowBgColor = #ccc
+$badgeTipColor = #42b983
+$badgeWarningColor = darken(#ffe564, 35%)
+$badgeErrorColor = #DA5961
+
+// layout
+$navbarHeight = 3.6rem
+$sidebarWidth = 20rem
+$contentWidth = 740px
+$homePageWidth = 960px
+
+// responsive breakpoints
+$MQNarrow = 959px
+$MQMobile = 719px
+$MQMobileNarrow = 419px
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

We'll be using and overriding some of these predefined styling variables as well as defining our own styling variables as we develop the blog.

+

Here's a link to the full palette.styl fileContent not supported if you're interested. You can also view the full file by navigating to node_modules/@vuepress/core/lib/client/style/config.styl in your project.

+

Only Define Variables in palette.styl

+

You should ONLY define variables in the palette.styl file because it will be imported at the end of the root Stylus config file. This means several files will use it, so once you define your styling variables here they will be duplicated multiple times

+
+

Creating the palette.styl File

+

Now that we have a good understanding of the palette.styl file, we're going to create the file by first creating a styles directory in the theme directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

After creating the styles directory, we can now create the palette.styl file inside of it like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

+

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your palette.styl file in the following location .vuepress/styles/palette.styl.

+
+

We'll be updating the palette.styl file later on in this post, but first we're going to take a look at the index.styl file.

+

index.styl

+

The index.styl file is used to add global styles as well as override predefined styles which in our case are being provided by the default themeContent not supported.

+

Even though it's a StylusContent not supported file, you can also use normal CSS syntax if you prefer.

+

We won't discuss the predefined index.styl file in detail right now. It's just meant to be a reference in case you want to look for a specific style you want to override, or if you're interested in learning more about the predefined styling.

+

Here's the predefined index.styl which you can override and add your own styles to:

+ + +
@require './config'
+@require './code'
+@require './custom-blocks'
+@require './arrow'
+@require './wrapper'
+@require './toc'
+
+html, body
+  padding 0
+  margin 0
+  background-color #fff
+
+body
+  font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif
+  -webkit-font-smoothing antialiased
+  -moz-osx-font-smoothing grayscale
+  font-size 16px
+  color $textColor
+
+.page
+  padding-left $sidebarWidth
+
+.navbar
+  position fixed
+  z-index 20
+  top 0
+  left 0
+  right 0
+  height $navbarHeight
+  background-color #fff
+  box-sizing border-box
+  border-bottom 1px solid $borderColor
+
+.sidebar-mask
+  position fixed
+  z-index 9
+  top 0
+  left 0
+  width 100vw
+  height 100vh
+  display none
+
+.sidebar
+  font-size 16px
+  background-color #fff
+  width $sidebarWidth
+  position fixed
+  z-index 10
+  margin 0
+  top $navbarHeight
+  left 0
+  bottom 0
+  box-sizing border-box
+  border-right 1px solid $borderColor
+  overflow-y auto
+
+{$contentClass}:not(.custom)
+  @extend $wrapper
+  > *:first-child
+    margin-top $navbarHeight
+
+  a:hover
+    text-decoration underline
+
+  p.demo
+    padding 1rem 1.5rem
+    border 1px solid #ddd
+    border-radius 4px
+
+  img
+    max-width 100%
+
+{$contentClass}.custom
+  padding 0
+  margin 0
+
+  img
+    max-width 100%
+
+a
+  font-weight 500
+  color $accentColor
+  text-decoration none
+
+p a code
+  font-weight 400
+  color $accentColor
+
+kbd
+  background #eee
+  border solid 0.15rem #ddd
+  border-bottom solid 0.25rem #ddd
+  border-radius 0.15rem
+  padding 0 0.15em
+
+blockquote
+  font-size 1rem
+  color #999;
+  border-left .2rem solid #dfe2e5
+  margin 1rem 0
+  padding .25rem 0 .25rem 1rem
+
+  & > p
+    margin 0
+
+ul, ol
+  padding-left 1.2em
+
+strong
+  font-weight 600
+
+h1, h2, h3, h4, h5, h6
+  font-weight 600
+  line-height 1.25
+
+  {$contentClass}:not(.custom) > &
+    margin-top (0.5rem - $navbarHeight)
+    padding-top ($navbarHeight + 1rem)
+    margin-bottom 0
+
+    &:first-child
+      margin-top -1.5rem
+      margin-bottom 1rem
+
+      + p, + pre, + .custom-block
+        margin-top 2rem
+
+  &:focus .header-anchor,
+  &:hover .header-anchor
+    opacity: 1
+
+h1
+  font-size 2.2rem
+
+h2
+  font-size 1.65rem
+  padding-bottom .3rem
+  border-bottom 1px solid $borderColor
+
+h3
+  font-size 1.35rem
+
+a.header-anchor
+  font-size 0.85em
+  float left
+  margin-left -0.87em
+  padding-right 0.23em
+  margin-top 0.125em
+  opacity 0
+
+  &:focus,
+  &:hover
+    text-decoration none
+
+code, kbd, .line-number
+  font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace
+
+p, ul, ol
+  line-height 1.7
+
+hr
+  border 0
+  border-top 1px solid $borderColor
+
+table
+  border-collapse collapse
+  margin 1rem 0
+  display: block
+  overflow-x: auto
+
+tr
+  border-top 1px solid #dfe2e5
+
+  &:nth-child(2n)
+    background-color #f6f8fa
+
+th, td
+  border 1px solid #dfe2e5
+  padding .6em 1em
+
+.theme-container
+  &.sidebar-open
+    .sidebar-mask
+      display: block
+
+  &.no-navbar
+    {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6
+      margin-top 1.5rem
+      padding-top 0
+
+    .sidebar
+      top 0
+
+@media (min-width: ($MQMobile + 1px))
+  .theme-container.no-sidebar
+    .sidebar
+      display none
+
+    .page
+      padding-left 0
+
+@require 'mobile.styl'
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
+
+

Here's a link to the index.styl fileContent not supported as well and the path to the file in your project node_modules/@vuepress/theme-default/styles/index.styl.

+

As we develop the blog we'll be using and overriding some of these predefined styles as well as defining our own styles.

+

Importing and Requiring Stylus and CSS Files

+

You may have noticed in the index.styl file that we're requiring other files, e.g., @require './config'. We'll discuss how to import and require .styl and .css files in a future post.

+
+

Creating the index.styl File

+

Now that we have a good understanding of the index.styl file, we're going to create the file for the blog inside of the styles directory that we previously created. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

+

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your index.styl file in the following location .vuepress/styles/index.styl.

+
+

We'll be updating the index.styl file we just created later on in this post, but first we're going to take a look at the overriding priority.

+

Overriding

+

Both the palette.styl and index.styl files follow a certain overriding priority.

+

palette.styl

+

The user's palette.styl file which is located in .vuepress/styles/palette.styl has a higher priority than the theme's palette.styl file which is located in theme/styles/palette.styl. The theme's palette.styl file has a higher priority than any predefined palette.styl file which is located in node_modules/@vuepress/core/lib/client/style/config.styl in the case of the default themeContent not supported.

+

This means a theme can define it's own global styling variables and a user can override them as they see fit.

+

Here's an example of a global styling variable defined in each type of palette.styl file to make this concept clearer:

+ + +
// node_modules/@vuepress/core/lib/client/style/config.styl
+$accentColor = #0099ff
+
+
1
2
+
+ + +
// theme/styles/palette.styl
+$accentColor = #cc99ff
+
+
1
2
+
+ + +
// .vuepress/styles/palette.styl
+$accentColor = #ccff33
+
+
1
2
+
+

Here, the final value for $accentColor will be #ccff33.

+

Absence of User palette.styl File

+

As we develop the blog we won't be using the user's palette.styl file located in .vuepress/styles/palette.styl We'll just be using the theme's palette.styl file located in theme/styles/palette.styl which will allow us to override any predefined variables.

+
+

index.styl

+

The same overriding priority applies to the index.styl file as well. So, a user's index.styl file which is located in .vuepress/styles/index.styl has a higher priority than the theme's index.styl file which is located in theme/styles/index.styl. The theme's index.styl file has a higher priority than any predefined index.styl file which is located in node_modules/@vuepress/theme-default/styles/index.styl in the case of the default themeContent not supported.

+

This means a theme can define it's own global styles and a user can override them as they see fit.

+

Both the user's index.styl file and the theme's index.styl file will get generated into the final CSS file used in the site, but the user's style gets generated later which is what gives it a higher priority than the theme's style.

+

Here's an example of a style defined in a user's index.styl and a style defined in a theme's index.styl file to make this concept clearer:

+ + +
// theme/styles/index.styl
+.example-style
+  font-size: 1rem
+
+
1
2
3
+
+ + +
// .vuepress/styles/index.styl
+.example-style
+  font-size: 1.25rem
+
+
1
2
3
+
+

Here's the final CSS file generated for the site:

+ + +
/* theme/styles/index.styl */
+.example-style {
+  font-size: 1rem;
+}
+
+/* .vuepress/styles/index.styl */
+.example-style {
+  font-size: 1.25rem;
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

Notice how the user's style comes after the theme's style in the final CSS file. This is what gives the user's style a higher priority than the theme's style.

+

Absence of User index.styl File

+

As we develop the blog we won't be using the user's index.styl file located in .vuepress/styles/index.styl. Instead we'll just be using the theme's index.styl file located in theme/styles/index.styl which will allow us to override any predefined styles.

+
+

Now that we have a good understanding of how overriding works for both the palette.styl and index.styl files, we're now ready to override some predefined styling and add our own styling to the homepage of the blog.

+

Homepage Styles

+

To start the homepage styling we'll be overriding and adding global styling variables to the palette.styl file. These global styling variables will then be used in the index.styl file as well as other files as we continue the development of the blog.

+

When overriding and adding styles to your site you can look at the predefined styling files to determine what properties you need to override. Along with looking at the predefined styling files you can also inspect your browser, go to the Elements tab, and then locate a tag or class that you want to override.

+

Be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

If you're developing your own site, then you can check out these useful resources for coming up with color schemes and palettes for your site:

+ +

If you don't feel comfortable with the CSS discussed below, then here's a good resource to go through CSS TutorialContent not supported.

+

You can also view the palette.styl and index.styl files in the tutorial-9 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's override and add some global styling variables to the palette.styl file.

+

palette.styl

+

Here's what the palette.styl file looks like after overriding some predefined global styling variables and adding our own global styling variables:

+ + +
$backgroundColor = #1f2229
+
+$accentColor = #eb7132
+
+$textColor = #e6e6e6
+
+$borderColor = #754d34
+$darkBorderColor = #16181d
+
+
1
2
3
4
5
6
7
8
+
+
    +
  • $backgroundColor is used as the background color of the homepage as well as the whole blog.
  • +
  • $accentColor is used to color the action button on the homepage and to add styling to internal and external links.
  • +
  • $textColor is used to color the text on the homepage as well as the navbar text and other text throughout the blog.
  • +
  • $borderColor is used to style the border in the features section as well as the border in the navbar and other borders throughout the blog.
  • +
  • $darkBorderColor will be used to style the border and box shadow around the main card on the homepage.
  • +
+

Now let's take a look at overriding and adding some styles to the index.styl file.

+

index.styl

+

We're going to start by overriding the background-color in the html tag:

+ + +
html
+  background-color: $backgroundColor
+
+
1
2
+
+
    +
  • Updates the background-color of the content below the Footer component to be the color specified by the $backgroundColor global styling variable we just added in the palette.styl file.
  • +
+

Next we'll override the background-color in the body tag:

+ + +


 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+
1
2
3
4
+
+
    +
  • Updates the background-color of the body of the site to be the color specified by the $backgroundColor global styling variable.
  • +
+

Now we're going to update the padding around the main tag which we'll select using the home class:

+ + +




 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+
1
2
3
4
5
6
+
+
    +
  • Updates the padding of the main tag with a class of home to be zero on all sides.
  • +
+

We're now going to update the styles for the hero class which is given to the header tag inside of the main tag and contains the logo, the title, the description, and the action button.

+ + +






 
 
 
 
 
 
 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+
    +
  • margin-left: 2rem adds a margin of 2rem to the left of the header tag.
  • +
  • margin-right: 2rem adds a margin of 2rem to the right of the header tag.
  • +
  • border: 0.125rem solid $darkBorderColor adds a border around the header tag with a thickness of 0.125rem, with a style of solid, and has a color of $darkBorderColor which was defined in the palette.styl file.
  • +
  • box-shadow: 0 0.5rem 1rem 0 $darkBorderColor adds a box shadow around the header tag.
  • +
  • border-radius: 5.625rem adds a border radius to the header tag border.
  • +
  • margin-bottom: 0.625rem adds a margin of 0.625rem to the bottom of the header tag.
  • +
  • padding: 2rem adds padding of 2rem around the header tag.
  • +
+

Here's a resource for the CSS box-shadow PropertyContent not supported if you are interested in learning more about how it works.

+

Finally, we're going to update the styles for the features class which is given to the div tag inside of the main tag and contains the Learn, Code, and Crush text.

+ + +














 
 
 
 
 
 
 
 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+
    +
  • margin-left: 2rem adds a margin of 2rem to the left of the div tag.
  • +
  • margin-right: 2rem adds a margin of 2rem to the right of the div tag.
  • +
  • border-top: 0.125rem solid $borderColor adds a border to the top of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • +
  • border-bottom: 0.125rem solid $borderColor adds a border to the bottom of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • +
  • text-align: center horizontally aligns the text in each div tag with a class of feature that are inside of the div tag with a class of features.
  • +
  • font-size: 1.4rem sets a font size of 1.4rem for the h2 tags that are inside of the div tag with a class of feature.
  • +
+

Next Steps

+

You may have noticed the main card on the homepage is being covered by the navbar. In the next tutorial we'll be fixing this issue as well as applying some hover effects to the logo and to the box shadow around the main card on the homepage.

+]]>
+ + J the Code Monkey + + + J the Code Monkey + + 2022-08-31T01:45:30.000Z + Copyright by J the Code Monkey +
+ + Contact + https://codemonkeys.tech/contact/ + + 2024-07-17T04:15:09.688Z + Want to contact your fellow Code Monkeys? Then check out these contact methods which include free and open source software with an emphasis on private and secure communication! 📞🐒 +

Contact Your Fellow Code
Monkeys !!! 📞 🐒

+ +]]>
+
+ + Donate + https://codemonkeys.tech/donate/ + + 2024-07-17T04:15:09.689Z + If you've found our content helpful and would like to support us, then you can donate here! All donations will go towards maintaining an adequate 🍌 supply! +

Thanks for the
Bananas!!! 🍌

+
+

Crypto 🔗

+

⚠️ Sending Crypto to the Wrong Address will Result in Loss of Funds! ⚠️

+

✅ Always double check the address & amount before sending! ✅

+

🤖 Instead of using the static Bitcoin address below, improve your privacy by using a PayNym!Content not supported 🤖

+Content not supported +Content not supported +
+
+

Fiat 💵

+

Subscribe for more monkey business on SubscribeStar!Content not supported

+

Become a Code Monkeys Sponsor!Content not supported

+

Sponsor J the Code Monkey on GitHub!Content not supported

+
+]]>
+
+ + Free and Open Source Software (FOSS) + https://codemonkeys.tech/resources/foss/ + + 2024-07-17T04:15:09.689Z + Ready to learn about free and open source software (FOSS)? These resources will explain what FOSS is, why it's important, and provide you with some useful applications! 💻🐒 +

Free and Open Source Software (FOSS)
💻 🐒

+

Here you'll find a list of resources related to free and open source software (FOSS) presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

+
+

Education

+

Free Software vs Open Source vs FreewareContent not supported - Clarifies the differences between free software, open source, and freeware which are often confusingly used interchangeably

+

Luke SmithContent not supported - A LandChad that emphasizes the importance of using FOSS as well as self-hosting your own websites and applications

+

What is Free Software?Content not supported - Description of the philosophy and principles behind free software from the Free Software Foundation (FSF)

+
+]]>
+
+ + Resources + https://codemonkeys.tech/resources/ + + 2024-07-17T04:15:09.689Z + Ready to take your Code Monkey skills to the next level? Then check out these useful resources which include free and open source software recommendations! 💻🐒 +

Giving Credit to the Great
Apes!!! 🦍 🍌 🐒

+

Here you'll find a list of topics I'm interested in presented in alphabetical order. The goal of providing resources for these topics is to help people learn more about programming as well as to provide people with free and open source software that also respects their privacy.

+

Moving over to using only free and open source software that also respects users' privacy is a process, so don't feel like you have to switch everything at once. I'm still using proprietary software that doesn't respect users' privacy, and I may continue to do so if I feel the pros outweigh the cons. However, over time if possible I would prefer to phase out all of the proprietary software I'm using.

+

While I believe these links are to resources that will help you gain a better conceptual and practical understanding of the topics, I haven't personally used and verified all of these resources. Be sure to do your own research and always double check the links are bringing you to the correct sites, especially when dealing with a site related to privacy or finances. Don't trust, verify.

+

I'll be updating these resources from time to time, so if you have any suggestions on how to improve them let me know.

+
+
+

Bitcoin

+
+

"The root problem with conventional currency is all the trust that’s required to make it work. The central bank must be trusted not to debase the currency, but the history of fiat currencies is full of breaches of that trust." - Satoshi Nakamoto

+

Bitcoin is a decentralized digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer (P2P) technology to operate with no central authority: transaction management and money issuance are carried out collectively by the network.

+
+
+
+

Free and Open Source Software (FOSS)

+
+

“Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change, and improve the software.

+

"Open source software" also gives the users the ability to run, copy, distribute, study, change, and improve the software; however, it does not share the same goal of making sure the software that is being developed is actually attempting to improve users' freedom.

+
+
+
+

Notes and Other Stuff Transmitted by Relays (Nostr)

+
+

The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all.

+

It doesn't rely on any trusted central server, hence it is resilient; it is based on cryptographic keys and signatures, so it is tamperproof; it does not rely on peer-to-peer (P2P) techniques, and therefore it works.

+
+
+
+

Privacy

+
+

“Privacy is the power to selectively reveal oneself to the world." - Eric Hughes

+

To learn more about why privacy is important especially in our digital age, then be sure to check out these resources which include tools that you can use to increase and maintain your privacy.

+
+
+
+

Web Development

+
+

To learn about the process of building, programming, and maintaining websites and web applications using HTML, CSS, JavaScript, TypeScript, etc., then be sure to check out these resources.

+
+]]>
+
+ + Bitcoin + https://codemonkeys.tech/resources/bitcoin/ + + 2024-07-17T04:15:09.693Z + Ready to go down the Bitcoin rabbit hole? These resources include free and open source software recommendations that allow you to interact with Bitcoin in a sovereign and private way! ₿🐒 +

Bitcoin
₿ 🐒

+

Here you'll find a list of resources related to Bitcoin presented in alphabetical order. While I believe these links are to resources that will help you gain a better conceptual and practical understanding of Bitcoin, I haven't personally used and verified all of them. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Blockchain Explorers

+

Blockstream ExplorerContent not supported - Open source blockchain explorer that supports Bitcoin mainnet, Bitcoin testnet, Liquid mainnet, and Liquid testnet that can be used with Tor to conceal your IP address

+

Mempool.spaceContent not supported - Open source self-hostable mempool explorer and blockchain explorer for Bitcoin that can be used with Tor to conceal your IP address

+

Other eXploration Tool (OXT)Content not supported - Blockchain explorer, visualization tool, and analysis platform for the Bitcoin ledger. Be sure to check out the FAQContent not supported page to see how they handle your personal information when using the site

+
+
+

Books

+

21 LessonsContent not supported - Distillation of the lessons learned after falling down the Bitcoin rabbit hole written by Gigi

+

Bitcoin: A Work in ProgressContent not supported - Focused on guiding the reader through the latest developments in Bitcoin through the eyes of Sjors Provoost one of the many Bitcoin core developers

+

Mastering BitcoinContent not supported - Focused on providing developers with a technical understanding of Bitcoin written by Andreas M. Antonopoulos

+

Mastering the Lightning NetworkContent not supported - Focused on providing developers with a technical understanding of the Lightning Network written by Andreas M. Antonopoulos, Olaoluwa Osuntokun, and Rene Pickhardt

+

Programming BitcoinContent not supported - Learn how to program a Bitcoin library with this hands-on guide that goes over the math, blocks, network, transactions, proof-of-work, and more written by Jimmy Song a Bitcoin core developer and educator

+

Thank God for BitcoinContent not supported - Explores the creation of money, its corruption, and its potential redemption by examining the effects Bitcoin is having on transitioning the world to a sound monetary standard

+

The Bitcoin StandardContent not supported - Analyzes the historical context of the rise of Bitcoin, the economic properties that have allowed it to grow quickly, and its likely economic, political, and social implications written by Saifedean Ammous

+

The Fiat StandardContent not supported - Provides an examination of twentieth century monetary technology and explains its benefits, drawbacks, and its many modes of failure written by Saifedean Ammous

+

The Little Bitcoin BookContent not supported - Focused on describing in simple terms what Bitcoin is, how it works, why it's valuable, and how it affects individual freedom and opportunities of people everywhere written by the Bitcoin Collective

+
+
+

Collaborative Custody

+

Unchained CapitalContent not supported - Trusted multisig storage solution where you are making the decision to trust Unchained Capital with your privacy but not with your funds in exchange for better security, redundancy, and support when storing your Bitcoin

+
+
+

Dashboard

+

Clark Moody's DashboardContent not supported - A single page view into the metrics of the Bitcoin ecosystem which includes market data, network data, mining data, and more

+
+
+

Education

+

6102bitcoinContent not supported - Pseudonymous bitcoin user and educator with the goal of accelerating bitcoin understanding

+

Bitcoiner.GuideContent not supported - A collection of resources from BitcoinQnA focused on providing Bitcoin education with an emphasis on how to use Bitcoin in a sovereign and private way

+

Bitcoin OnlyContent not supported - A collection of high quality Bitcoin resources including meetups, books, wallets, hardware, podcasts, and more

+

Bitcoin OptechContent not supported - Helping Bitcoin users and businesses integrate scaling technologies by providing workshops, documentation, weekly newsletters, original research, case studies and announcements, analysis of Bitcoin software and services, and a podcast

+

Bitcoin ResourcesContent not supported - Provides numerous Bitcoin related resources including videos, books, articles, podcasts, and more

+

Bitcoin Stack ExchangeContent not supported - Question and answer site for Bitcoin cryptocurrency enthusiasts

+

Bitcoin UniversityContent not supported - Educational content devoted to Bitcoin, financial freedom, self-sovereignty, and relevant macro and financial news

+

Bitcoin WikiContent not supported - Wiki dedicated to providing all of your Bitcoin information needs including how to get started, software, mining, exchanges, technical content, economics, and more

+

BTC SessionsContent not supported - Bitcoin educator focused on helping people gain an understanding of Bitcoin by providing tutorials on wallets, hardware, security, exchanges, and more

+

DiverterContent not supported - Focused on Bitcoin, privacy, and censorship-resistance by learning how to use the related tools

+

EconoalchemistContent not supported - Blog focused on bringing you articles about interacting with Bitcoin in a self-custodial, censorship-resistant, and private way

+

k3tanContent not supported - Focused on providing educational content on how to transition to a Bitcoin standard by showing people how to hold their own keys, use their own node, and more

+

Keep it SimpleContent not supported - Focused on teaching people how to interact with Bitcoin

+

OdellContent not supported - A Bitcoin entrepreneur attempting to stay humble and stack sats with a focus on using Bitcoin and free and open source software as sovereignly and privately as possible

+

We Run BTCContent not supported - Focused on providing guides and resources about Bitcoin with an emphasis on how to interact with Bitcoin in a sovereign and private way

+
+
+

Entertainment

+

Bitcoin YodaContent not supported - An entertaining YouTube channel that makes funny videos about Bitcoin like The Bitcoin HODL Dance, Money Printer Goes Brrr! (Central Bank's Favorite Song), Michael Saylor's Investment Advice, and more

+
+
+

Hardware Wallets

+

Coldcard Mk4Content not supported - Viewable, editable, and verifiable source code, Bitcoin-only, and has numerous security features including dual secure elements to store your private key, air-gapped, i.e., can be used without ever connecting it directly to a computer, duress PIN, comes in a tamper-evident numbered bag with the bag number recorded into the device, and more

+

SeedSignerContent not supported - Build your own air-gapped and stateless hardware wallet using publicly available hardware components. The benefits of creating your own hardware wallet are you're not relying on centralized companies, and you can buy the pieces privately from multiple vendors spaced out over time. Note that there are no secure elements used to store your private key and you're relying on closed source hardware since it uses a Raspberry Pi

+

Trezor Model TContent not supported - Open source hardware and software that has numerous security features including PIN and passphrase entry directly into the device, shamir backup, FIDO2 and U2F authentication standards, transaction anonymization using CoinJoin, and more. Note that there are no secure elements used to store your private key

+
+
+

Jobs

+

Bitcoiner JobsContent not supported - Leading career site with the goal of helping to build the emerging Bitcoin industry and the careers of Bitcoiners within it

+

PlebLabContent not supported - Bitcoin hackerspace and community accelerator based in Austin, Texas focused on supporting early stage Bitcoin start-ups and developers building the future of Bitcoin

+
+
+

Media

+

Bitcoin MagazineContent not supported - Source of news, information and expert commentary on Bitcoin, its underlying blockchain technology and the industry that has been built up around it

+

BitcoinTVContent not supported - A repository of educational video content for the Bitcoin community, without distractions like advertising, altcoins, or third-party trackers

+

No BS BitcoinContent not supported - A news desk for Bitcoiners by Bitcoiners without ads, paywalls, or clickbait includes Bitcoin related news, updates, research, guides, weekly digest, and more

+

TFTCContent not supported - A media company focused on Bitcoin, Beauty, and Freedom in the Digital Age

+
+
+

Meetups

+

Bitcoin ParkContent not supported - Community supported campus in Nashville, Tennessee focused on grassroots Bitcoin adoption and a home for Bitcoiners to work, learn, collaborate, and build

+

Bitcoiner EventsContent not supported - Curated list of all the best Bitcoin-only events, meetups, and conferences around the world

+

Bitcoin Meetup GroupsContent not supported - Find a local Bitcoin meetup group by searching for upcoming meetups near you. Remember to do your own research to avoid any sketchy meetups, and don't share any personal information that you don't want others to know

+
+
+

Nodes

+

myNodeContent not supported - Open source prebuilt Bitcoin and Lightning node that comes with many features including Tor support, Bitcoin Explorer, Electrum Server, multisig tools, an easy-to-use web interface, and more

+

NodlContent not supported - Open source prebuilt Bitcoin and Lightning full node that comes with many features including BTCPay Server, Tor support, Electrum Rust Server (Electrs), Ride the Lightning (RTL), BTC RPC Explorer, and more

+

RaspiBoltContent not supported - Set up your own Bitcoin and Lightning node from scratch doing everything yourself. You'll learn about Linux, Bitcoin, and Lightning

+

RoninDojoContent not supported - Open source high performance plug and play full node with an emphasis on maintaining strong privacy while interacting with Bitcoin

+

Start9Content not supported - They develop the open source Linux-based Operating System (OS) embassyOS which is built specifically for self-hosting open source software like a Bitcoin full node, a Lightning full node, Mempool.space, and more. You have the option of buying a prebuilt server or you can build your own server and install embassyOS on it

+

UmbrelContent not supported - Open source Operating System (OS) for running a personal server in your home that allows you to self-host numerous apps like Nextcloud, a Bitcoin full node, a Lightning node, and more

+
+
+

Payment Processors

+

BTCPay ServerContent not supported - Open source self-hostable cryptocurrency payment processor focused on providing secure, private, and censorship-resistant payments

+
+
+

Peer-to-Peer (P2P) Exchanges

+

Reviews

+

KYCNOT.MEContent not supported - Open source privacy focused website with the goal of providing a list of Non KYC exchanges and ranking them based on how well you can use them in an anonymous way. The website may not always be up to date, so be sure to do your own research. Don't trust, verify!

+

Exchanges

+

AgoraDeskContent not supported - Closed source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin, Monero, and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a semi-custodial wallet, no JavaScript needed to use the service, the service has an API available, and Android and iOS apps are available

+

BisqContent not supported - Open source peer-to-peer (P2P) exchange that you run on your own hardware over Tor, accepts Bitcoin, Monero, and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and no JavaScript needed to use the service

+

Hodl HodlContent not supported - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a non-custodial wallet, JavaScript is needed to use the service, the service has an API available, and refunds may require KYC

+

PeachContent not supported - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin and cash, doesn't allow you to swap coins, doesn't require an account, uses a non-custodial wallet, no JavaScript needed to use the service, Android and iOS apps are available, and refunds are handled without the need of a KYC procedure

+

RobosatsContent not supported - Open source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and the service has an API available

+
+
+

Podcasts

+

Bitcoin ExplainedContent not supported - If you're interested in learning more about the technical side of Bitcoin, then you should check out this podcast with Bitcoin Magazine's Technical editor Aaron van Wirdum and Bitcoin core contributor Sjors Provoost

+

Bitcoin Fixes ThisContent not supported - An exploration of the impact Bitcoin has had and continues to have on multiple aspects of society hosted by Jimmy Song

+

Bitcoin FundamentalsContent not supported - Show focused on discussing Bitcoin fundamentals, investing, and news hosted by Preston Pysh

+

Bitcoin Review PodcastContent not supported - Technical updates and commentary on Bitcoin and related projects hosted by Rodolfo Novak (NVK)

+

Citadel DispatchContent not supported - An interactive live show about Bitcoin and freedom tech with an emphasis on actionable steps one can take to become more sovereign and private when using Bitcoin hosted by Matt Odell

+

Rabbit Hole RecapContent not supported - Recap of the weeks events in the world of Bitcoin hosted by Matt Odell and Marty Bent

+

The Bitcoin Standard PodcastContent not supported - Discusses Bitcoin, Austrian economics, and various news and events hosted by Saifedean Ammous

+

What Bitcoin DidContent not supported - A tri-weekly Bitcoin podcast where host Peter McCormack interviews experts in the world of Bitcoin development, privacy, investment and adoption

+
+
+

Products

+

CoinkiteContent not supported - Company focused on designing and manufacturing bitcoin security and fun devices like the Coldcard, Opendime, Tapsigner, Satscard, Blockclock, and more

+

Crypto CloaksContent not supported - Company focused on designing and manufacturing 3D printed Bitcoin related products like node shells, hardware wallet mounts, home mining devices, and more

+
+
+

Website

+

BitcoinContent not supported - Bitcoin core website that has introductory resources for individuals, businesses, and developers, resources, ways to participate, FAQs, and more

+
+
+

Seed Storage

+

Reviews

+

Metal Bitcoin Seed Storage ReviewsContent not supported - Stress tests and reviews of seed storage devices by Jameson Lopp the grades are based on how well the devices resist heat, corrosion, and being crushed

+

Storage Devices

+

BitplatesContent not supported - Multiple plate sizes available, uses stainless steel (Marine Grade 316L), plates are laser cut for precision and engraved to ensure permanent marking, suitable for use with BIP39 and SLIP39 compatible Bitcoin wallets, up to 24 seed words per plate, and received an overall grade of A from Jameson Lopp

+

BlockplateContent not supported - Inventor of center punch style seed storage, 12 word, 24 word, and passphrase plates available, uses thick 12 gauge stainless steel, plates are laser cut for precision and engraved to ensure permanent marking, received an overall grade of A from Jameson Lopp, and made in the USA

+

CodlContent not supported - Multiple plate sizes and types of plates available including passphrase plates, uses 304 stainless steel, received an overall grade of A from Jameson Lopp, made in the USA, and they make a really cool stainless steel copy of the Bitcoin white paper

+

Quadrat RegisterContent not supported - Multiple plate sizes and types of plates available, uses AISI 316 Ti stainless steel, received an overall grade of A from Jameson Lopp, made in Germany

+

SeedplateContent not supported - Single plate design, 12 words per side, etch marks chemically colored in black for better legibility, designed to be small, compatible with Seed XOR, received an overall grade of A from Jameson Lopp, and made by Coinkite in Canada

+
+
+

Software Wallets

+

Lightning and On-Chain

+

Blue WalletContent not supported - Open source wallet for Android and iOS that supports numerous features including multiple wallets, watch-only wallets, multisig vault, fee and transaction control, plausible deniability, batch transactions, coin control, PayJoin, ability to use your own Bitcoin and Lightning nodes, and more

+

ElectrumContent not supported - Open source wallet for Linux, macOS, Windows, and Android that supports numerous features including multiple wallets, watch-only wallets, multisig, fee and transaction control, passphrases, coin control, ability to use your own Bitcoin node, and more

+

Fully NodedContent not supported - Open source wallet for iOS and macOS that automatically prompts you to connect your own Bitcoin full node and acts as an offline signer using your node as a watch-only wallet

+

MuunContent not supported - Open source wallet for Android and iOS that uses a unique 2 of 2 multisig setup that stores only one private key on your phone and both of the private keys in an emergency kit which allows for a balance between hot and cold storage

+

Lightning Only

+

AlbyContent not supported - Open source browser extension that allows you to connect one or multiple Lightning wallets and control them in your browser, generate and manage multiple Nostr keys, and interact with numerous Bitcoin applications seamlessly. Note connecting your own Lightning node is an experimental feature, so the extension uses a custodial Lightning node which means you're trusting a third-party with your funds and privacy

+

BreezContent not supported - Open source Android and iOS full-service, non-custodial Lightning client that offers many features like cloud backups, connecting to multiple nodes including your own, built-in next-generation podcast player, and more

+

PhoenixContent not supported - Open source Android and iOS non-custodial Lightning wallet and node that offers many features and is powered by Eclair

+

RTLContent not supported - Open source full function, device agnostic, web user interface Lightning wallet and node management tool available on Lightning Network Daemon (LND), Core Lightning, and Eclair implementations

+

ZapContent not supported - Open source non-custodial Lightning wallet available for Android, iOS, Linux, macOS, and Windows that offers many features including connecting to your own Lightning node

+

ZeusContent not supported - Open source Android and iOS non-custodial Lightning wallet that offers many features including connecting to your own Lightning node

+

On-Chain Only

+

NunchukContent not supported - Open source wallet available for Android, iOS, Linux, macOS, and Windows with an emphasis on combining security and ease of use. It supports numerous features including multisig, collaborative custody, inheritance planning, Tapsigner integration, connecting to your own Bitcoin full node, and more

+

SparrowContent not supported - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to use all Hierarchical Deterministic (HD) wallets, strong encryption, detailed wallet history, coin control, connecting to your own Bitcoin full node, using your own blockchain explorer, and more

+

SpecterContent not supported - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to connect your own Bitcoin full node, support for numerous hardware wallets, multisig, coin control, and more

+
+
+

Statistics

+

Know Your Coin Privacy (KYCP)Content not supported - Open source online tool for users to visualize the degree of privacy in a Bitcon transaction. Their zero log policy states KYCP is a static client for OXT, no backend or third-party service involved other than OXT, queries are directly sent to OXT over HTTPS, and there is no way to see or log your searches

+

Mempool ObserverContent not supported - Interesting statistics about the Bitcoin mempool including current data, historical data, recent blocks, Segregated Witness (SegWit) data, a transaction monitor, and more

+
+
+

Support

+

Bitcoin Dev ListContent not supported - Open source Bitcoin donation portal that lists people working on Bitcoin and related projects with the goal of increasing visibility of contributors to the space that are accepting donations

+

OpenSatsContent not supported - Focused on helping to support and maintain a sustainable ecosystem of funding for free and open source projects and contributors related to Bitcoin

+

Ten31Content not supported - Venture capital fund focused exclusively on investing in the Bitcoin ecosystem

+
+]]>
+
+ + Notes and Other Stuff Transmitted by Relays (Nostr) + https://codemonkeys.tech/resources/nostr/ + + 2024-07-17T04:15:09.693Z + Ready to learn about Notes and Other Stuff Transmitted by Relays (Nostr)? These resources will explain what Nostr is, why it's important, and provide you with some useful applications! 🗒️🐒 +

Notes and Other Stuff Transmitted by Relays (Nostr)
🗒️ 🐒

+

Here you'll find a list of resources related to Notes and Other Stuff Transmitted by Relays (Nostr) presented in alphabetical order. The way the Nostr protocol works along with the fact that it is still in early development means you may come across inappropriate material on some of the sites.

+

While I believe these links are to resources that are attempting to remove unrelated and inappropriate content and will help you gain a better conceptual and practical understanding of Nostr, I cannot guarantee that will always be the case. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Clients

+

AstralContent not supported - A Twitter-like client with a global feed

+

BlogstackContent not supported - Decentralized blog posts

+

DamusContent not supported - A Twitter-like client for iPhone, iPad, and MacOS

+

HamstrContent not supported - A Twitter-like web client built with Vue.js

+

NotebinContent not supported - Decentralized notes

+
+
+

Documentation

+

NostrContent not supported - Documentation about what Nostr is, why we need it, and how to use it

+
+
+

Protocol

+

NostrContent not supported - The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all

+

NIPsContent not supported - Nostr Implementation Possibilities

+
+]]>
+
+ + Privacy + https://codemonkeys.tech/resources/privacy/ + + 2024-07-17T04:15:09.696Z + Ready to learn how to counter global mass surveillance? These resources will explain what privacy is, why it's important, and provide you with some useful tools! 🔒🐒 +

Privacy
🔒 🐒

+

Here you'll find a list of resources related to privacy presented in alphabetical order. While I believe these links are to resources that will help you gain better privacy, I haven't personally used and verified all of them. Also, using these recommended resources doesn't guarantee that you'll achieve perfect privacy. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Android Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

BromiteContent not supported - Open source Chromium based mobile browser with privacy and security focused enhancements including built-in ad blocking

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is limited on Android

+

Firefox FocusContent not supported - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

+

TorContent not supported - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

+
+
+

App Stores

+

F-DroidContent not supported - App store that contains free and open source software (FOSS) applications for Android

+
+
+

Card Aliasing

+

MySudoContent not supported - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

+

PrivacyContent not supported - A proprietary credit/debit card aliasing solution when making online purchases

+
+
+

Cloud Storage

+

NextcloudContent not supported - Open source, self-hostable, and scalable suite for storing photos, documents, files, contacts, and more. It's similar in functionality to Dropbox, Office 365, and Google Drive

+
+
+

Desktop Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons. You can use Firefox ProfilemakerContent not supported to adjust the settings for your needs or use the Arkenfox user.jsContent not supported file instead of the default settings. It's also recommended to download the browser releases from the Mozilla FTPContent not supported to avoid telemetry tracking on your download

+

LibreWolfContent not supported - Open source Firefox based browser with a focus on improving privacy and security by handling the majority of Firefox hardening for you and does a good job of maintaining security updates

+

TorContent not supported - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

+

UnGoogled ChromiumContent not supported - Open source Chromium based browser with a focus on removing the remaining Google privacy concerns from the open source Chromium browser. Be aware that security updated tend to be a bit slower

+
+
+

Electronic SIM (eSIM)

+

Silent LinkContent not supported - A proprietary anonymous electronic SIM (eSIM) that supports global mobile 4G/5G internet as well as inbound texting and calling for US and UK phone numbers that can be used with any modern eSIM compatible smartphone

+
+
+

Email

+

ProtonMailContent not supported - Open source email based in Switzerland with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), zero-access encryption, anti-phishing, anti-spam, two-factor authentication (2FA), and accessibility via Tor

+

TutanotaContent not supported - Open source email based in Germany with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), two-factor authentication (2FA), session handling, phishing protection, and more features

+
+
+

Email Aliasing

+

SimpleLoginContent not supported - Open source and self-hostable email aliasing solution built with privacy and security in mind

+
+
+

Encryption

+

GNU Privacy Guard (GnuPG)Content not supported - Open source, complete, and free implementation of the OpenPGP standard. Allows you to encrypt and sign your data and communications

+

VeraCryptContent not supported - Open source encryption software that allows you to create virtual encrypted disks within files and to encrypt entire partitions or storage devices

+
+
+

File Sharing

+

KeybaseContent not supported - Open source end-to-end encryption (E2EE) for messaging and file sharing

+

OnionShareContent not supported - Open source tool that lets you securely and anonymously share files, host websites, and chat using the Tor network

+

SyncthingContent not supported - Open source continuous file synchronization tool that encrypts all communication and allows users to sync files between authenticated devices

+
+
+

Guides

+

A Cypherpunk's ManifestoContent not supported - A summary of the importance of privacy in the digital age written by Eric Hughes

+

Prism BreakContent not supported - Website dedicated to providing information about privacy services, tools, and protocols

+

Privacy TestsContent not supported - Open source tests of web browser privacy

+

Privacy GuidesContent not supported - Website that provides information for protecting your data security and privacy, and their mission is to inform the public about the value of digital privacy and global government initiatives which aim to monitor your online activity

+

Privacy ToolsContent not supported - Website dedicated to providing privacy services, tools, and guides. A lot of the services and tools listed here were initially found through this website, so it's a great site to learn more about them as well as privacy in general

+

Seth for PrivacyContent not supported - An individual interested in educating and learning more about privacy and technology. Check out the Opt OutContent not supported podcast where he sits down with passionate people within the privacy community to discuss why privacy matters, the tools and techniques they've found and use, and to encourage others towards achieving personal privacy and data sovereignty

+

TechloreContent not supported - A team dedicated to spreading privacy and security to the masses by producing projects, communities, and content to help individuals achieve personal privacy. A lot of the services and tools listed here were initially found through their website and content, so it's a great site to learn more about them as well as privacy in general

+

The Hitchhiker’s Guide to Online AnonymityContent not supported - Open source and non-profit guide dedicated to providing an introduction to various online tracking techniques, online ID verification techniques, and detailed guidance to creating and maintaining anonymous online identities

+

The New OilContent not supported - Aimed at people who are new to privacy and/or do not consider themselves “tech savvy”, and goes over the basics of various ideas, subjects, and concepts to help you feel educated and capable of making decisions that are right for you without going too in depth to the point that you feel overwhelmed

+
+
+

iOS Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is significantly limited on iOS

+

Firefox FocusContent not supported - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

+

Onion BrowserContent not supported - Open source unofficial Tor browser that prioritizes privacy, anonymity, and censorship resistance, but be aware that iOS limitations means it should not be considered as safe as Tor

+
+
+

Messengers

+

BriarContent not supported - Open source, Tor routed, peer-to-peer (P2P), end-to-end encrypted (E2EE) messaging. The messages are stored securely on your device not in the cloud, and it can be used without internet access by connecting directly with nearby contacts using bluetooth or WiFi

+

KeybaseContent not supported - Open source end-to-end encryption (E2EE) for messaging and file sharing

+

MatrixContent not supported - Open standard for interoperable, secure, decentralized, and real-time communication over IP with end-to-end encryption (E2EE) enabled by default for direct messaging and invite-only rooms. You have the option to self host your own server or to use a public server. One of the more popular clients to use when connecting to the Matrix protocol is ElementContent not supported

+

SessionContent not supported - Open source messenger that uses end-to-end encryption (E2EE), doesn't collect user data, accounts are completely anonymous, i.e., no phone number is required, messages can be sent through an onion routing network, and is more censorship resistant than other messengers

+

SignalContent not supported - Open source messenger that uses end-to-end encryption (E2EE) with a simple interface that requires a phone number to create an account

+

ThreemaContent not supported - Open source messenger that uses end-to-end encryption (E2EE) and can be used without disclosing your phone number or email. Payment is required to use the application which can be paid with Bitcoin

+
+
+

Mobile Phone

+

CalyxContent not supported - Open source Android mobile operating system that focuses on improving privacy and security

+

GrapheneOSContent not supported - Non-profit open source mobile operating system project with Android app compatibility that focuses on improving privacy and security

+

Librem 5Content not supported - Uses PureOS which is a Linux distribution with a focus on privacy and security and it incorporates open hardware specifications when possible

+

PinePhone ProContent not supported - Uses an open source Linux based mobile operating system that incorporates open hardware specifications when possible

+
+
+

Notes

+

Standard NotesContent not supported - Open source self-hostable note-taking application that uses end-to-end encryption (E2EE)

+
+
+

Operating Systems

+

ArchContent not supported - Independently developed open source GNU/Linux distribution that provides the latest stable versions of most software by following a rolling-release model. The default installation is a minimal base system configured by the user to only add what they require and offers the flexibility to harden the OS as the user sees fit

+

DebianContent not supported - Open source GNU/Linux distribution that offers users security, stability, and reliability

+

FedoraContent not supported - Open source GNU/Linux distribution that that focuses on providing users with strong privacy and security by default

+

Pop!_OSContent not supported - Open source GNU/Linux distribution developed and maintained by System76 with a focus on providing users with privacy, security, and reliability while maintaining ease of use

+

Qubes OSContent not supported - Open source security focused operating system for single user desktop computing that leverages Xen based virtualization to allow for the creation and management of isolated compartments called qubes which are implemented as virtual machines (VMs). Basically it allows you to separate operating systems and the installed programs on those operating systems into multiple and secure environments

+
+
+

Operating Systems (Live)

+

TailsContent not supported - Open source live operating system that routes all traffic through Tor for privacy and anonymity when online and deletes all of your data when you shutdown your computer

+

WhonixContent not supported - Open source live and virtual operating system that runs inside your current operating system. All traffic is routed through Tor for privacy and anonymity when online

+
+
+

Password Managers

+

BitwardenContent not supported - Open source, self-hostable, and cloud-based option password manager that uses zero knowledge end-to-end encryption (E2EE)

+

KeePassContent not supported - Open source password manager that uses industry standard encryption and stores all password databases locally on your device

+
+
+

Phone Number Aliasing

+

HushedContent not supported - A proprietary Voice over IP (VoIP) temporary and secondary US and Canadian phone number aliasing app for data calling and texting that can be used over WiFi

+

JMP.chatContent not supported - An open source XMPP based solution that turns your XMPP account into a fully functional US or Canadian phone number that can make and receive calls, texts, and picture messages to standard phone numbers

+

MySudoContent not supported - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

+

TextverifiedContent not supported - A proprietary fully functional US phone number aliasing solution that you can use for phone and SMS verification

+

ViberContent not supported - A proprietary Voice over IP (VoIP) phone number aliasing solution that supports worldwide numbers

+
+
+

Prebuilt Computers

+

PurismContent not supported - Engineer and manufacture personal computing devices with a focus on privacy and security by producing devices that rely on open hardware and open firmware when possible and open source software

+

System76Content not supported - Engineer and manufacture premium Linux computers and keyboards that use open hardware and open firmware when possible and open source software with a focus on allowing users to freely upgrade and repair their computers, the freedom to use and alter the software on their computer, and to provide the ability for users to learn how their system works

+
+
+

Search Engines

+

Brave SearchContent not supported - Proprietary privacy-focused search engine that uses its own independent search index for search results

+

SearxContent not supported - Open source configurable and self-hostable metasearch engine which aggregates results from numerous search engines and can be used over Tor for online anonymity

+

StartpageContent not supported - Proprietary privacy-focused search engine that consists of privately proxied Google search results without the unwanted tracking, third-party cookies, and targeted ads

+
+
+

Two-Factor Authentication (2FA)

+

Software

+

AegisContent not supported - Open source time-based one-time passwords (TOTP) service for Android that gives you the ability to encrypt your tokens at rest as well as to export your tokens

+

TofuContent not supported - Open source counter-based and time-based one-time passwords (TOTP) service for iOS that requires no network or cellular connection and account details are stored in the iOS keychain

+

Hardware

+

YubicoContent not supported - Proprietary phishing-resistant multi-factor authentication (MFA)

+

SoloKeysContent not supported - First open source fast identity online 2 (FIDO2) security key

+

NitrokeyContent not supported - Open source device that enables secure login, email encryption, encrypted mobile storage, disk and file encryption, key and certificate management, and server administration using secure shell (SSH). The company also provides other devices including phones, personal computers, laptops, and more

+
+
+

VPNs

+

IVPNContent not supported - Open source, transparent, and secure VPN provider based in Gibraltar

+

MullvadContent not supported - Open source, transparent, and secure VPN provider based in Sweden

+

ProtonVPNContent not supported - Open source, transparent, and secure VPN provider based in Switzerland

+
+]]>
+
+ + Web Development + https://codemonkeys.tech/resources/webdev/ + + 2024-07-17T04:15:09.696Z + Ready to learn about web development? These resources will explain what web development is, why it's important, and provide you with some useful tools for learning! 🕸️🐒 +

Web Development
🕸️ 🐒

+

Here you'll find a list of resources related to web development presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

+
+

Tutorials

+

Net NinjaContent not supported - Black belt your coding skills

+

Traversy MediaContent not supported - Practical project-based courses that are easy to understand and +straight to the point with no fluff

+
+]]>
+
+ \ No newline at end of file diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 00000000..d072e814 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #1f2229 + + + diff --git a/climbing-stairs-solution-1/index.html b/climbing-stairs-solution-1/index.html new file mode 100644 index 00000000..da3779f3 --- /dev/null +++ b/climbing-stairs-solution-1/index.html @@ -0,0 +1,147 @@ + + + + + + Climbing Stairs Solution 1 | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Climbing Stairs Solution 1

By: J the Code Monkey
Posted: Jun 30, 2021 Updated: Jul 3, 2024

Climbing Stairs

Get the code & notes on

# Problem Description

You are climbing a staircase. It takes n steps to reach the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

# Examples

Ex 1) Input: n = 2 Output: 2

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Ex 2) Input: n = 3 Output: 3

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

# Constraints

# Thought Process

  • Let's start by diagramming the different ways we can climb the steps to see if we can find a pattern.

    • When n = 3 we have:
  • From the diagram we can see there are 3 distinct ways to climb to the top when n = 3 since we can ignore the scenarios where we take extra steps.

  • To help you see a pattern try drawing out more diagrams for larger values of n or creating a generalized diagram for any value of n.

  • The diagram above is an example of a recursion tree.

  • So, one way to solve this problem is to come up with a recursive formula that represents how many distinct ways we can climb the stairs.

  • Let's use the diagram to help us come up with our recursive formula.

  • We know we can either add 1 step or 2 steps each time we climb up the stairs, and we want to hit our target of n steps.

  • So, we need to keep track of how many steps we have taken which we can represent with the variable , where represents the current choice when climbing the stairs.

  • Initially, , here means we haven't made a choice to take 1 step or 2 steps yet.

  • Each time we climb the stairs we make one of the following choices:

  • Now, we'll let denote our function for climbing the stairs.

  • Here's how we can represent the different scenarios for climbing the stairs:

  • We're passing the + and our target value of steps to our function .

  • Now, we need to determine how many times we need to to call .

  • We know from the diagram if , then we can ignore that way of climbing the stairs

  • We also know if , then we have found a valid way to climb the steps.

  • Using this knowledge we can come up with the following:

# Implementation

var climbStairs = function(n) {
+  return wayToClimb(0, n);
+};
+
+var wayToClimb = function(stepsTaken, n) {
+  if (stepsTaken > n) {
+    return 0;
+  }
+
+  if (stepsTaken === n) {
+    return 1;
+  }
+
+  return wayToClimb(stepsTaken + 1, n) + wayToClimb(stepsTaken + 2, n);
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+

# Downsides

  • Our solution will work, but it's not efficient.

  • We'll actually get a time limit exceeded error on LeetCode if we submit this.

  • This is because the time complexity of our solution is O(2n).

  • We can look at our recursion tree above and count the number of nodes to determine the time complexity.

  • Now, we won't count exactly 2n nodes since our recursive formula isn't exactly 2n, but when dealing with Big-Oh we only care about the behavior as n becomes very large.

  • We'll be improving this in the next post by drawing out recursion trees for larger values of n which will allow us to see an interesting pattern.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/climbing-stairs-solution-2/index.html b/climbing-stairs-solution-2/index.html new file mode 100644 index 00000000..56999a3e --- /dev/null +++ b/climbing-stairs-solution-2/index.html @@ -0,0 +1,153 @@ + + + + + + Climbing Stairs Solution 2 | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Climbing Stairs Solution 2

By: J the Code Monkey
Posted: Jul 1, 2021 Updated: Jul 3, 2024

Climbing Stairs

Get the code & notes on

# Problem Description

You are climbing a staircase. It takes n steps to reach the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

# Examples

Ex 1) Input: n = 2 Output: 2

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Ex 2) Input: n = 3 Output: 3

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

# Constraints

# Thought Process

  • We previously came up with a solution for this problem by using a recursive formula that represents how many distinct ways we can climb the stairs.

  • The issue with the previous solution is it has a time complexity of O(2n) which is very inefficient.

  • To come up with a better solution we'll be drawing out multiple recursion trees to help us see a pattern.

  • When n = 1 we have:

  • From the diagram we can see there is 1 distinct way to climb to the top when n = 1 since we can ignore the scenarios where we take extra steps.

  • When n = 2 we have:

  • So, we have 2 distinct ways to climb to the top.

  • When n = 3 we have:

  • So, we have 3 distinct ways to climb to the top.

  • When n = 4 we have:

  • So, we have 5 distinct ways to climb to the top.

  • Now, let's take a look at our cases from n = 1 to n = 2 and see if we can find a pattern:

  • Here, waysToClimb denotes our function for determining how many unique ways we can climb the stairs.

  • This sequence of numbers follows the Fibonacci sequence with the only difference being the value of the 1st and 2nd terms.

  • Here, the 1st term has a value of 1 and the 2nd term has a value of 2.

  • Also, notice that we know we have two ways to climb the stairs to reach the nth step.

  • If we take 1 step, then we're n - 1 steps closer to n, and if we take 2 steps then we're n - 2 steps closer to n.

  • So, we can get the distinct number of ways to climb the steps by summing up the ways of climbing to the n - 1 step and the ways of climbing to the n - 2 step using the following formula:

  • The Fibonacci sequence is the following series of numbers:

  • The next number is found by adding up the two numbers before it.

  • For example, 5 is found by adding 2 and 3.

  • The first two terms are called seed numbers, which we'll denote as:

  • Here's the formula used to characterize the sequence:

  • The seed numbers for our problem are:

  • Now that we know our pattern of climbing the stairs follows a Fibonnaci sequence we can implement the sequence in our code using the waysToClimb formula and the seed numbers we came up with.

  • This will improve the time complexity of our solution from the O(2n) solution we previously came up with.

# Implementation

var climbStairs = function(n) {
+  if (n === 1) {
+    return 1;
+  } else if (n === 2) {
+    return 2;
+  } else {
+    let waysToClimb1 = 1;
+    let waysToClimb2 = 2;
+    let waysToClimb;
+    let i = 1;
+
+    while (n - 1 > i) {
+      waysToClimb = waysToClimb2 + waysToClimb1;
+      waysToClimb1 = waysToClimb2;
+      waysToClimb2 = waysToClimb;
+      i++;
+    }
+
+    return waysToClimb;
+  }
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+

# Analysis

  • Since we're looping over the length of n - 1 our time complexity is O(n) which is a much more efficient solution!

  • See if you can come up with an even more efficient solution using more properties of the Fibonnaci sequence!

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/contact/index.html b/contact/index.html new file mode 100644 index 00000000..64bebb65 --- /dev/null +++ b/contact/index.html @@ -0,0 +1,396 @@ + + + + + + Contact | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Contact Your Fellow Code
Monkeys !!! 📞 🐒

# Socials 🐵

🔑 Securely message with Keybase (opens new window) - codemonkeystech

📨 Join our Telegram (opens new window) - @codemonkeystech

🐸 Let's Gab (opens new window) - @codemonkeys

💡 Speak your mind on Minds (opens new window) - @codemonkeys

🐦 Send a Tweet (opens new window) - @codemonkeystech

  Subscribe to the RSS feed (opens new window)

# Primary PGP Key 🔐

If you know how to use Pretty Good Privacy (PGP), then you can securely communicate with your fellow Code Monkey by using the PGP public key below to send an encrypted message that only I can decrypt.

PGP Public Key
-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBGRC03cBEADDn1vVti8bek91JwLh65YNRvF5WRFEAzi8jQaAk55a2JKXvkfW
+S1QnP9jZBg/fVCYyi5fopjZqckDAiSjWaIkgZLyEJ4dVeUhw2AoTt8WVgjjC9BI3
+6neDCcpz2dHERflBOsR6M0QNUcR/8jzRS7zPUeXWY9VqZIEPanqjbgbU5HwoJvvi
+c/zikG3GLGXv3Hm2E2pO03IdOq3Q4y2vDpIptltB5FpTQi/iZzs+Wz2iHQkE3sMK
+J8MxubwYkmFoRjbtUHDnoegVHcoFJprdxMnzJYm2TYauneyAKIuSXdBe7pOCxEjO
+ikY9gTZ0ldufcfgnO3Harmie4hhuSIYCdLEJc86Yfz6MJVqducf/qjfOfvvJRBja
+WQR8eoTGatryQOaRWVqXuSfZb9qRRBbMtPhC4m5FajUBc0l1+YztkQ2UoNKlyTQW
+mZ0fshNqhuRb1mxSmUBEMvFxRLuXzyqrAj6dAyEug1vch7PweSMaG4WnY4OZwJcL
+DGgBg6p9cFrP9oyp5p+WBepOAHMxLSRgRXYusZH1/IKV1PZXWBqJV1W0Csv5cl6b
+/aSnrIU48G0YVYJSUds1LL6atbsuCYtcYMDS4vpCeNxsgpsIDnh22WKtSak8+5Po
+MPjx+Ttt5J35D8UGTd668CUtmzp5KEQ48lbTsl3OAq2I8xzJmC8b0Xy9mQARAQAB
+tCdKYXkgdGhlIENvZGUgTW9ua2V5IDxjMGRlbTBua2V5c0BwbS5tZT6JAlQEEwEK
+AD4WIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELTdwIbAQUJBaOagAULCQgHAwUV
+CgkICwUWAgMBAAIeAQIXgAAKCRAeB+dcGfGuDjW3D/9YjeFXfJLtoPrwdJpW8Y70
+FrJwkdu81bt7ilSy9w09aoa5IYyUit7UqS8EyjQPwUXtPLdKX7rswbab96SXjhqY
+52N+D2r3JqP3IUq6qRLFnI0MukHms0/BUqHvq5sgPJbEsCmmAJOtTQIoE6GT3xC3
+NcEvqiaztgTDsHaX02JZ9tjcGjyUdwKOy462cy/R2ATVhqWZcBSFaEH6u7unfkji
+WxZMPJHkCTKAiFBC9/3MRqoDrHO0t5VawHS3uZcjkF+7JpVPSJEjIN0Sq1st/uUA
+m88AptHpDrA+Q4c6+S+uli4PLhJ0HbRV/T3YwU9i6VdfDsK15cmGcqKk93EwJbo8
+Jqw+OFguoEqGVbZEqhiDOYdEZkfeCFiIvhy3TapqtLB6mmAbxRV5T+zVwY9qnYie
+qG2zMsPMGk8cGccYsqmoKHDlVu3YBpUBNCjxaxQGXTybCrF/rpx1gBL7bW9EdeUK
+JG05UrW+pJJ76Se5bGZLRtwR0/B8DUzXWCmzpz2lmaO/ll35AbFNQXlTIBsCak87
+XDkNgIUUl7r4lVqcYBGFI0LsOq3Dq2X3t8FYQAEO6yEg6V0ZxddHyjUIpJf9dsjP
+ZUMcYGLb0TIZFgQTBQ6LojfvsmmSYEY2pr8+EwJJTnk45xu8ZCx1Hsb99W7VKdcO
+rJT9uX4VF/rFrFl3aKYAzNHOyc7HARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklG
+AAEBAgAlACUAAP/+ACx4cjpkOkRBRmd3Qml2eDZrOjQsajozMTc5MTE2Njk3LHQ6
+MjMwNDIxMTb/4gKwSUNDX1BST0ZJTEUAAQEAAAKgbGNtcwRAAABtbnRyUkdCIFhZ
+WiAH5wAEABUAEAA4AAhhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAA
+ABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAA
+ABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAA
+ACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAA
+ACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAA
+AAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBu
+AABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA
+/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAA
+JJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA
+8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAA
+D1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAA
+AAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEL/2wBDADknKzIrJDkyLjJAPTlEVo9d
+Vk9PVq99hGiPz7ba1su2yMTk////5PP/9sTI////////////3f//////////////
+2wBDAT1AQFZLVqhdXaj/7Mjs////////////////////////////////////////
+////////////////////////////wgARCAEgAPADASIAAhEBAxEB/8QAFwABAQEB
+AAAAAAAAAAAAAAAAAAECA//EABcBAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEA
+AhADEAAAAeIAAAAAAAAAAAAAAAAAABSKJQASiKIsAAAAAAAFAAAAAAABKIAAAAUA
+AFI3rN561nN05w6ZaObrNzms3AAIsAAFAaM63JpcZN5jZDcAAtyb0vK5us61m8nT
+nUpRALKNrNY1qmMazsi6aqaw6Dm03Mt0w1c3k1mpBnXnuz0w1WcpZU0p057zNXUu
+bjNlw21lTBsrBq4ZthuLB0561NcllT0SzeOkjMzeKlvHXNzcdM3G86bzs6bLnYF2
+ZzvAGys02TpM3GstzfPpJpLS8+nM6cuvMblOdSp3rn0mue+dqdZ6ZzYjcBha3IYs
+NWdM1zuTWs6zcTWtyNZzc6wqes52a1RvOy1zdOdyk6YJY3OiWLzmy4Giy4mksqL0
+57m2ctwNwADVJrFlqAN53ibgqLrOpvAqHTnvKzLNxLGXpy65XIbgAAG03Ncms1NS
+nTn05zQVN1nU1gVLeNZsmsMF1OudTXIVIEsoAsHWc+s1zdIXn0HPeZs9GGVvmbjT
+WbnG6Z3eRrBUgJYAVKDRbeU1d82z1md5aJjLo3M6kKuW6xls7vPpm828VIgAAspe
+jnNIVIAG9crm6mrmxnJYVIAHTOes1yms1IACwWBUoAAAAAAAILBYAAAAACwVBUoA
+IVBYAAAAAAAAAAAAAAAAAAAH/8QAHhAAAwEBAQADAQEAAAAAAAAAAAERECAwMUBB
+cCH/2gAIAQEAAQUC/oEJsJ9ebdpchPowmUvhS5PVZS+1yeMIIfM7hO4NcouvhF2E
+Jlx8LKPr9mPUPilL4Ig8eoYteL0XCP1iHqGIermeKHiH8n6+p0svc1DETHjEPbqH
+53lD1DEPwfU7eIZCY3lyEH5vhD1ZS9UTHwvJD5fx4IfKHqH9ND5XCHwh+yH4ofCH
+7LJ4IfCHxPO5Ol0h5MvvNm3ZnyTH6pDy8TZl2iY/Rc3JxdvCGvJeFyH+kL2hryfj
+cvk/C/zD/8QAHxEAAgICAgMBAAAAAAAAAAAAAAEQESAxIUECMFBx/9oACAEDAQE/
+AfpUcFnBXposvGzgawoocUUUUUsKlykNxc7nsYhCEhsSHNQzoYxahCY1kkNi0UdF
+lnUJjUuHCLw6l6hajxlY9T5QtQhwstlDVmixuxIqzReWizcVH6WLLWFxeG/of//E
+AB0RAAICAwEBAQAAAAAAAAAAAAABEBEgMUEhUDD/2gAIAQIBAT8B+lZ6Uel/jZRW
+NHuViiyyyy81LFFTqeCGOGJFim4R0QjsOFk2JD2XFFS0JyoUMrDsrcPcOXj2VD3D
+FDy0WLw2VDZo3nsqbmh5bwqKw19D/8QAFBABAAAAAAAAAAAAAAAAAAAAoP/aAAgB
+AQAGPwIHH//EACAQAAICAgMBAQEBAAAAAAAAAAABETEQICEwUUFAYXD/2gAIAQEA
+AT8h/wAlj9aZiMJHA0G/5okRSSJSH5JnCYR4Yy2/CmEhQy2fQmEhCY/I012JJQ0G
+3bIvZKY06EpeMkV34e0hw1VEMRg1UcGSni+iRhKIWSBRAtCRpQlLHktVwi8K4RbK
+DRmXkllOC0NRmpYSBco4PPJnBFxuMWwg3HWw1Oak0K6640LCodiSUhueglI1GW+C
+TpLQuByWVwh8vDx+i4G5wklD1JwWPJpQpcciiwuUcGWOCxLQg6w0ifcJwTPRLCUl
+IbkuNA23muKSQ1hWOspyJqlI9iUDTixUmJCjgE4F7JTIFimU4LQ1Gi4wmiQN8zbD
+QbbJiQro0FlZTnDc5T6NGivqLldaFs2KaKh3q67+g7zYppQtr86t9VWlimlS+qrp
+cakcNPmlinTr0Nx1KAnIw1ArHWaEZeL5oUPz2qucfwSNSOGJZLK9FD8ChiU89v0G
+gkQiTlCcjkNRheij+CPSYGPgJPYkjcIvKgJyMS1ZMlDEN2UPxo0n06kkpDc7L0WP
+wchQHAbnZpPt0JSxcIaehOBBuB9BOBcoSN04JflTgl/41//aAAwDAQACAAMAAAAQ
+CCGe+++++++uKCCCO++6yiCSy2++OCe++iCCCOCCCS++u+6CCCQymyhMCC2++iAq
+2/8A/wD9ykIlL6qbF/o6Io27b8iNYB293CkI7ILLYyEEF1wXJ7b/AJJR6W9CVERJ
+hO/9/wDivciiQVsK9urvffel9iogktqw8v8A7+UBcmoIIKvQroL6IafquoKoJAno
+EPXI76VEJb4oTY+B6ZUxxqkb767UJLJnXbKJLtz7b7woIIJIIIIb7zoLL7644oIY
+5777IIIJLb7777777qIIL//EAB4RAQACAwADAQEAAAAAAAAAAAEAERAhMSBBYVFQ
+/9oACAEDAQE/EP6Q2UOz5m0X6iV5hepU7KnIp8BSH7lLko8AVbADZOsADc+ZeH7l
+miJWEELlE1g3NkIAOo9lG2WOLxVg1HS8FUXDVIKYdzZWBFWWMs1LNynrBV7j+YNM
+FlkC49WfuCo2RKblDPYS8Uu8CkslmjBZiVRgiVezVqxRplGD5KXqBbFRRh6Yt8/D
+HTHUe45fELoRKx6Y6Y7nWBW3xGoPDGvJ6ENpXAQ2xsjRinxC4tKIIgkP2fMKNEdQ
+tivTEp8efAr2UOyJNEu8jSmJX8//xAAeEQEAAgIDAQEBAAAAAAAAAAABABEhMRAg
+QVFhUP/aAAgBAgEBPxD+kmWtccIfcu+61LOpZ3AHRBj8yxuDfRW6IqqZpwpcT9yk
+fmW2wb4GmWjnhmixWsw1F4QVxSAES4ZVw3bUcwrI8TAqKViKiURpLe8N1iH3EuKm
+mLUfE+YtxuAuJcXjK4s1wgyiejwUIZbiGY6mbzxZmWcP7LVmLUF5eDmAO7Zxo41h
+rjz1WrQb6dHGs04V4OqXE8Q+4vUcJeBU8CDSZgA6rUC1sQxEh+T9xt3DOoAgrJBv
+rt0fmWkLZejlcG/5/wD/xAAkEAEAAgICAgICAwEAAAAAAAABABEhMRBBIGEwUUBx
+cIGRof/aAAgBAQABPxD+JKuKNn5fQQO2GgVLWLGK9QGsxE2fii0InbNIR3GfQitn
+gHdwHeJg6YDrEB1f4ALoit4gvcUGcQOi52HmKagt5ivUdgn2JtD5DTfUoHRBazFa
+xLvfyCNMTpDuRg4p+DER+rHoTdHkPAFaIqtxLZ4guiDeowvZ45n9S5wRO2VbNeOJ
+YVCQ1HjV4Us7iBqDdxbZE9MH2wD3MfQiXuCQtevDXHYZSwILTxNJH/aIrDC0Ph15
+ZSo3yBpg+yJ6Ip6i3vi96iEEVPgpUrLeNR0sFpyaYrYbTMeDYM28X5dSpFtt+Klp
+1CESmnjdxBf6x4SHTziWPIQ0fcd/rNH6myWvUUgit4BdQdZYlNeCwu3PelKzfHeY
+hn/SOQtOTSRZerhrEBbGaJv+0AKIy9cWIAPqfRNvhrdQQYgOTHKZIBmbIStgAold
+Y6WC0hsxW8GgxbpJs4pU7nW4RWRWz53WpgrhlUx6CXPXCpxNo8PCTUw4WOMR3DjV
+N/A02SpKWzXiixECzPiFtEAS1RrjXAoqCbxBbzMDohNDMXSfQhqMU6hUI4m/lFcE
+hc9chbUAMQR1KMnhSzudbnTFDcFrMVrEVdviDuWKTxbXqICJangxK3uYCXPXPelK
+jfhom74d01eOmbedPj65v8Dczfw7s6+Omb+dPl+/xc/1+HVmrxwEdvOnx9nkZH9R
++ATDAGY3scm448Gvx+02OQVohmYAZjv4W9iDBuTDE2Jqm7ln7Sl3WYg7mA6JS2tc
+mhw7lwQA/U6v9RVc/GXeJf2TDGjf+IFw4YP7RPY4C7i3qKu2Arg4WB9ETgMfcD2e
+EqfK7kpUbghsYbhwxAzP7SDAaYYu0BdcIAfUbNG2DW3cQMx3BgnclLG44+O9bqFJ
+VW8t7EHSA5MM0RZ9wAxANCoJgywyVRAB9TrhVbea1O5dhv4rfqKegjK3xGp1wIPs
+lGXUpaYHswvZi7eI02QT7lGGvgaggKpaxr4EWGG4cMAWsdwYPgRWREr+NeaaNRQp
+fxU0aixS/wANf//ZiQJUBBMBCgA+FiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC
+1WcCGwEFCQWjmoAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQHgfnXBnxrg4V
+Jg/7BvWZDlJgHzX2TymItJtEP7JHMpa5Yy4VWY+SdDb1Jz9s2YV/lxbSq7LBTSkP
+/9N6h8KMhwHmv0aenHFLLivUATGqmcJ6fpwkgDOPGde8VoH7IcoXxU0IXOI09POt
+7jCrq6cA2xgvEHoUEqHNysILHGPyK/ltMmIMprlR5y2VBpy41+zq3gHfQT+wsT8p
+cUAF0mNSYIlEDvvtvstWnbRdM+6NqL4DsCtCWdr6Tyb1kaIjjDVXiWDtGtbx5c2c
+Ess9cj8W4IvTyebDXuEWGiRjq6JjQNQZKFiG23y9QE1TAcSvpdL4f4/9caxCjEh/
+uLrDQx6MCo9NO/93at6ul6ZBS6saR8o3vn6gLv6u0Vc2/t46FGjReS7suFOU1M7o
+kYQEeaeRCKGESX6Chal7KdSU0t5kOgRsxPoMwFQhBa69MjNgLomDeOYDegnDdeqS
+huN8+vyBkBxkXtE6aG1nJ1C54MVtH7slH5ciaZ5vDNgh2XH4xmO3d+zG2Wwv/Gl+
+iI+HSJmuFtmw+99sTZpXVGINXr7dwAYWrdhSl0ts0Z/TzwN2PN38cDr6bnNgM2/v
+Lb7wfb9IUbJIr8vJj8qvcNOjML8LqeMTugwFyHx/EtSxBiH6f9z+mu2k1qMCY+wS
+zVrYjukls6Z707l1u/de6JBGFqYY796mv7po3Se+Qjd2Y9a0NkpheSB0aGUgQ29k
+ZSBNb25rZXkgPGpheXRoZWNvZGVtb25rZXkuN3ZrN2lAc2xtYWlsLm1lPokCVAQT
+AQoAPhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJkSSNcAhsBBQkFo5qABQsJCAcD
+BRUKCQgLBRYCAwEAAh4BAheAAAoJEB4H51wZ8a4OUN4P/0bbFhsQ9qbXIdcNelA5
+rurWVMmxK2BWjfYgfSmI1x/RlD/8rWqtPU/Wx0hx8pmoYMwmAiKG3epy2SJHorAf
+9C2WljX4d+OCA1Y7tmqiXY3Yh9nSbOwe3sytw3/b2YPotYr/b7R2v6l/3xaGdmxX
+R5bQUcWXmHV10ZU2mH+JvDvtyYXUHJHiC0hr1rXOcTpShYc/rV1ORRHA6rn820db
+3pSCnRJA/kL3WGgkLaM0mUfZQWqZr600AskutJTlDd1/aXJBn2GNougWorCI59Jz
+nb67Afnme8eBiz4wSXiyCQeE4Y1k7LZrat9toqS/oUs4f9cWwvmHP26//A02U0WA
+Hw4DRmqQXRyxxOsr+IJ4Nhp15mKhED5a4x20T2gy52TEtdamnYSBssLD9xeHYnLs
+Sg8q8FfojUlQdBtHqJjg51D8lqOm1cdeVg7W8qLYYIXmdFP8VEUDkG7vJ3fDeUd2
+BGvcV6DsRtynH3u5GwFY829CtCHeYICxiyfWQT4fEKJPB5y91lPFSCxQr9Fg4Ng/
+lelKQPCL7HoH5yNrvhoFVlOwmlXcuKxRdmQLgFw5eTfHLUx/fxX+JVW5uz3DG01d
+trfZ3MDhIenOmdg2DNmubpu7Gqb+qDrRJFpcg/7xS0NRxzQvl73Ts4RskhdREHG0
+/s1cPAk3FTLqvhLfwXoNW142uQINBGRC1DsBEACh+SSUsnokhUazmzj0L7CqKDHv
+rfDyoWnlSEGkiTiXhPjtzBMTYM7HKx9b79TV5U0EB+XdW3aCbSuV5gucuoibiKXe
+lBdFy0k2tnDnzAM0qUplKaPSvDC3BbNrCfw99hnoaUuFF4xzwiKfMKAVHtai7SK8
+sVyTWjyex45NPyySHHkLs0B9Lg/hzl01E4EugIzYO3BlGqhD2RbR9033gB8acD8o
+XWvn+3epus1diJKAQqDN0W1GLCaDR+1LKnQjHf5ECKvtvkWEQOylDVoMs/eTxKSv
+dsFcawjjuO7vPVPYlOpucG+zG+Oui5UnztgIQV6XaHvYxLTA6coDPkKpvcKOa+JV
+/qSNns+9ft3N9dybFvqIIoiIA62UVreDQ7P6R2RLdgdQzj4aba5raD3XZiA2FfY3
+CxQUZQkpDJcNE8+6ix09g9wRsdsAsycWPeIlHe3XTR4wrTUA3tasUqc0faIC+LN+
+ndc/OkuWciflgD6IspFelVtEHM6nyDu2iTd4ShJrt2rGPdNDTSpeGb1SYr9ArURw
+65/rWlaUk/OERO+MkfE3qijCMo10FpilEFCDlABVRHMsQTpJdOqjakIX4BfmBxN4
+jpNK5pjoteQtQ91wgclyfg/xr4o0Si78IZBujHtDCTI1V67wLn75e4ltL8eoJGI+
+Uf8eQlHNOaWEOyba6QARAQABiQRyBBgBCgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnx
+rg4FAmRC1DsCGwIFCQHhM4ACQAkQHgfnXBnxrg7BdCAEGQEKAB0WIQT8/9d3HMqd
+w6detRrXDCh3fL4EpQUCZELUOwAKCRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1
+ZX+du0LzBefalbuNCjkBUHFrvBFKa1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsV
+F98lYl9QdUnKMVoRnkfQ/U0zzAaNk/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlX
+pZv+aLhIo8jva2c/ZpMUcS6gZoScdtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q
+/9luPe0I2DUTqgJgCUp20egDTJwbwtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQH
+wHonktFhiOh0sOdINyQhm9qQt7mK/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMx
+dnq3uq11B18a4gGjBe6q5oyw0pI3QcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQE
+azCswwYkNmMmw/7Q5XPYrqkljecVgP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwD
+JYh5tpcqSRTz6ADLQAZCR/epM9+OS9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/
+9AOtpKvQyZEQSk8oQlcn/w/n2DhwPEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv
+0aB5Mpr/WbhKXqWkSSLawvHK/+qAXIA1dRzyVs87alvupmEGecoLroy//VT4qWlS
+OR1rB8opyEgg+4E2hCUCN9gBDJJ3EACQTCPWIB6+k1wzFaiyn7KoAcdnd3MJWgMe
+WmO41xcVvS2C8l5yytRwpqHzsodMMXneWqzRCWyZGNXldRwTu4nblRHKthX9tP+O
+0xIdnhWerZ2KzWevHPD+jlPrOncd7GnXAKpI523gyTTjR5oqXhswPL4vZgTD6+J/
+I5ubEiNnK6lgUTSOoDJ+MLPtXuviCgLyJJQIX8bpd4IwYSeS6l69shG9uDl7hC5s
+nND8Mf3CWyR+PQrC/XYqPimsRTweozO3ZaCIESpqGqA5RiNGduH/nmWXogVzoBvE
+UGhRSyxQHvlD9CtGE59JQAADoZ/dq/kz5p6J74Z6d0anp6exR9otV0xH/YTHLAyR
+0ug9RytaOdrEboI6PPvRrNy6ZQM7yx0lABGPqksa67neRoIpZP1S1+h9XyEvRgDn
+u9jigKIfJzjHDtZbAJrVuyjSEdE6SBqGQ9zEvlU/7iY53ZlnAqhIudKzwL8rEkGR
+MReWPdYsFNZSJNayj+0YxLIg1RAjmN7+1FDeoisyLrp9E35QfVYckmTuouJxJ/ab
+JyiM/yJaXrctYHeFxBIvnoAISk8DzFsw8iQ9/KT0pse+4udbAcqTzrgOzF+pJ946
+qun9jdeip49IFAEnN6pGH/883JHBAGNkm08pP0t5CZ/EoUKL9aCMlbmQVwCo5IgI
+RQR9fSMksIkEcgQYAQoAJgIbAhYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3
+BQkD22U8AkDBdCAEGQEKAB0WIQT8/9d3HMqdw6detRrXDCh3fL4EpQUCZELUOwAK
+CRDXDCh3fL4EpXeIEACT4aUW6pSzJWCD9eN1ZX+du0LzBefalbuNCjkBUHFrvBFK
+a1Uzzm2VeirCe0CIsvKvo+9YycbucNamaqsVF98lYl9QdUnKMVoRnkfQ/U0zzAaN
+k/uOmEf2ni/ZSldtACQATWk6kLLo9yHvePlXpZv+aLhIo8jva2c/ZpMUcS6gZoSc
+dtmsaAmLE4bakiLGzZ8tpYSrDv7CTPHBb36Q/9luPe0I2DUTqgJgCUp20egDTJwb
+wtbKsnTLmMVBz8y+lLYcSXWWQxLUAb5XlgQHwHonktFhiOh0sOdINyQhm9qQt7mK
+/knK4XOeBXg5YzX2nEhEgDvCHNPCIMHsCTMxdnq3uq11B18a4gGjBe6q5oyw0pI3
+QcQ4xJiVn7/ey0t553cANvWhm9F8XWd0ZDQEazCswwYkNmMmw/7Q5XPYrqkljecV
+gP5FINyIhwlesINTyE8QUTd7P4LDxYWQ5YwDJYh5tpcqSRTz6ADLQAZCR/epM9+O
+S9TzFjCwr0lpHF5qt2yr32kStf7PH5Kw3OJ/9AOtpKvQyZEQSk8oQlcn/w/n2Dhw
+PEzxM8HGewYmWSqSbPpmCegp3s9OAYHB/HRv0aB5Mpr/WbhKXqWkSSLawvHK/+qA
+XIA1dRzyVs87alvupmEGecoLroy//VT4qWlSOR1rB8opyEgg+4E2hCUCN9gBDAkQ
+HgfnXBnxrg4vYBAAl5cPhObEBiUicl2/L4rNFBGhwj+s+zPyrRi3sVWgKp+Zkkwl
+bPhTnaDu3KodRI7O1Ipq7EVoTMJeIqJp4Tf/Pkjxyb588A5dy+ccWILtr+lvUHE1
+0aFUaH8JS9+LdFq/zI7gFyeoxpF4f+8Rt2BsGl4SVPYCLB15mlV14yfSzTFchzjz
+rUicJWnjjR1EOlcUKl/aKsMt50wEtTpRpp06RR2CLzk9J164bCybqe9h1QjyLezh
+dMHkwFYKbmGRh5FGfjNUfLZD1lWjaDgUi1K5jROBmCcMxUw2M6Z47F2xBzmRPa5v
+4OWKWmAOvxYTVeUjckrLn/mbQ9yzi+uRWxBfYnstHpTPV+fr3GNY2shOcOS04nNQ
+jeG/vNvldi5To8EHtsZkf6ldzlE285dLin4p9Drr35rKR1Lx23OTdt44EYWp2Slw
+HMUOHSWFyXav+CLZW+mrYeHZon0hqA5XsCQeUAhLiDWTj73qjgPneRct/SftQgkj
+UsGaEjag+/iWarLhEPBdBomUfxbmhUuWjav3rlbd+EWJukBuIfdNW60A/YK9i+TN
+LaJ5piY21TY+L+cp2i42aIYUHTPiyKc/rzsIgDOzjKei4Mm/jXWRSIbMj8TImWGB
+fdjrXtJXpiNZAkLrRF9Oum+JuGE/6QRbAupjbBkGqV1RobrwyElVAefmvYG5Ag0E
+ZELUfQEQALI7Wlu2cra6plQz9UsmOUNMsA98FVx6lbYVCc12TVcZydbDIM5jitrB
+1x0k5rPDOoSKm/+VvaXcS1YKhNp8SjLoZsLVCMtdRmKDXo4s80v+jHYmXie8YoHB
+jLIc59Th+k931OhEMWgEI47O5Wr9YwELPXBnlVGgRyFKokUKk7w1+DToKCN5TPIT
+HxJaIU4tkZ5CM4Aa4Fpg9jSlSENpES/dHzajYpTju5yd1GKl2Ugl6OyKjUMAVYaE
+ZF4luO8QcRhZw8mgVOtYg0X1Y1VNDuDw3foQTvNaODPWF3CMd3FGD+UMT+eyKNCp
+trg61WKusoV4fLRIUcYM5ZFKcwa2p+LE1M0vEhroCSVnaimcII74gxKdra7695H+
+A2g9Gdzh7NV4KSZ/TZAmv7U0sv0cGJmUmid0vzJTepg+Hz4yJEsMIR+OdOgiagqB
+HmrQcNSBgcMe87t/dZM6nb7+IzRtnYNW2cqVpCWNh2YMMRAtrqS0Rkcf9nOtn4Rq
+Xk5E6R31qablD7gE3TikeKjCmHmmcq7ibq0znygUegEGgSVUzifdw+CTgPVGa9Fq
+X1ep/r2jJ9GQ5kS57sTSevE3/iKSBpp2DOzewZVxIWumqH0fw0pHIUsKNEuDZ7Qw
+4Oj92hYxfPLfz/e2ToUMKayfAN4/DVwjmZ1xmsLPOOvkuqiTRShpABEBAAGJAjwE
+GAEKACYWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZELUfQIbDAUJAeEzgAAKCRAe
+B+dcGfGuDuCzD/9gFnu/n1sm5fQ1F88xoHmLss0Cm3be7sueX4nDrG76B2lBn/Ca
+fSe5wj1iMHcoYeQJvq6oN6D1u3KyQKzFKQKOwCmaR6zNH77BZ8I3CDniBd4uukJD
+lFpTf49b7NM1akzuOGcL9f4767QiqFuRwL5RoXg6oqcRuiG1mRMrkOXW1t44z6LG
+L7Z8F3XyCfMH5LnPYBYbpgyZ1XpGVbPwebyJWnTlYQVx82neu3JW7xER0o2Gtsyn
+EyD220cLpXRkfc+bLL6GODDJNQ+E8nbIy9deyp9UoFD0C6tFTuNxDPZiiZv0PQ5d
+hc//DHXjeQh3svXU6nFseQmHrvs7SsUICNzeVO+iahhLHwhRAWT9u+8L1B4bnw87
+DhXXXA7hqHI3K/q2JP+OhvT2b07wTJNJGJGO3EUDS+0A/2+vNZQjAjU03VIKNo9r
+aKmKhSrk1uFZIF3+SGj9Als100MtfwcVREKtg+N6Myt1Zg4RQtIftc/r/3thDooH
+ijn44hOb4H+CgHAlATikU9IIUh2GDjIwETRks1AUcJa3Xny4xq6PzvxxIcI+PvND
+T8mDbJ3o/8mtWislOcq1u92Q1RY6tFt41f2d4zm22yl/66PIGDfPxWS3S9OZQEPA
+AuZtvKbQeLWCnQ1hD/nZt4ky3GiMd1bmazP/5oamoBqnmOPiHiAtVD4g2YkCPAQY
+AQoAJgIbDBYhBLfm+5SliYdsz8IeSx4H51wZ8a4OBQJmPQX3BQkD22T6AAoJEB4H
+51wZ8a4OUEkQAIUKljL4/4d2wst7g/sANzosJiK65AygXXf/REEPkAj5gEraUe8O
+zfk7tkN6iJAwhev4rjdy+aidpeKPWS5+7YRvnzR74WqnuFqnYE8Sra88Aib0X2Ox
+o7MN3i47jwHv/Ftyu7fQv3bZgDZVra7A8UfdxRaXQzYLq6VqLvPh7CWkHCv6DFwi
+itYhs+eBjOD8LykwrDrKpY/SusN5yA5GMiW7gcAEw1QCaezGcaqvgNMjqV9WO4Tn
+ZFOl1noLGsdweTDX/WQpCIqeKNkkaNW3zdYwqNLQT9jHPYXYFukGPJbGhiKfiWGL
+UgF62dc5V/+66VKjZl8i8QnNr9Vh/mV2GfphurkNEmyjtvGG3ODRLfm4BfYRxaGe
+Pcs888Atp4qZZ6oIIDz+ZK0IXWCPm5KsdLGtROAhS/YDedySHmGml2xpt7vCFRli
+3J0wvF1wyHMYENmka4sGzn099yOV4BylWFibNxCURGKpESWCpoiWyxrTkDdppCg2
+iM8uQhmJR5R5xCKFpeLWCVd1QTOZWDcggbOgd5Wm09CuyJrgC80YmKtRXhso9QYJ
+zF8csN7EgsU3ZCZCJXnJezl51ALM9rYqh+T9SkJmJBLyDHeBuesR32qWxYflkPQ8
+/QeO0wayiisTDZLQjLQk9nqXgIwujQmfa2ZWKILmZZwaHt4iFkPGlIH4uQINBGRC
+1LgBEADfGtrGYFhs45BPXUFM1pcfHXR9nI+fSOCNIeGdHf6RNRqdsnz18Y1c/QRl
+pmHY2yFqEIZhxGSbu8PbbvAKHDWc/XKE4LOLinznKv6Z4imfK1g32UO4t4tLVL0k
+Ypl2IpBPOPP6Ka6BfW8/xBXG1m2vuDSywGIYrx97maXjGFLd+ANeZTimLy3YF6T+
+VtNet4lZ1OlhC6qTAJwwXBJaXF/bolxvh+b/Nw2EO8xNxVJbF/Gg940Ca+MTaIFM
+iZIQRqjRlfPrdg1TWlMhriWYMaLxq3QtqDt7jPrhMnwkcyZEvEWMtjntoG6iaSYF
+Ippk/LMgPpXclOmbiNqqMiRLy5NpZkV7h5kb6YR0ueQAX3JpKgr2b6SXR+/NrqkV
+f+nifCk91X9JkNLgU22VJ2P6Zxfyhgb67hVWgOE2qLq8Of2mmaWIJZXG7fBgG8it
+EQ7VDUBmN7rMlJMFHYT4wRLDu9ordraaXhMcxwmsbWkJsMAzWwRXnlBceNZvPUJu
+7lvYKfIF4RWozeOv4aMTAvnUmVzKP9R0kio56qccmq454IQdEtV1viynHECSVCZK
+VVvDjjSo7fPta/Bxlodlbpog6LWlZR1838qUwfe/IYU1W/FYmiEjufAd4Xi1LaZQ
+S9mP0Oj0tbD2ax7CGhXeWVwutr7iBvsll+RATZxholYjWMEZMQARAQABiQI8BBgB
+CgAmFiEEt+b7lKWJh2zPwh5LHgfnXBnxrg4FAmRC1LgCGyAFCQHhM4AACgkQHgfn
+XBnxrg5E+BAAu3ktgguJ45wMBnDhmPfiACIZY69GirOQlbQrJSxmBElU9pKi94bL
+lglmegej51pm4GUe/Nm+64oVPXpsTWZb3uwEqmLBMKAmpKtABECDuVew040iycYl
+4Awfit4gdyCiKyfhdmrA/4698PD1GEfc9x0br244Y+MzBB8u4ytWf8O9ytaJAY8B
+EYQv9CIcmSXi6TH3X+Rsk9pDjFetnXFAAykOducBv9A769AiAMjOPd5hICjfLqhU
+sQtBXAppcAuIjR4SpdDX2R/dQIVAdmA8zV73d9GvJVNcPuxsRWIN2ERyEVdSOa5h
+VijljKA86i5WpvPeKscROesWSbp9h5P07PxwK1bjMTkhEKnBijSmRFLomGr0x2BI
+scN0bijR4KPlLIlnsv2a2xW5H6swu7psZcxGoTihLAOg+vFm5gtUh80VAwiEIEc6
+ysqmKYyPpZt3im0VlIMvgFu2eIaXgtVZ+tgYgG1Ytxj1ftOyXWIzQOuw9DdLoC/e
+qMtAt7o8OSQAUVzl72T8cWIm0Hn8Ur7nRTM4aPQt5mQ5V01EgRdhTQtx9BuZ9iKF
+BYRpVsBAxHU8vmPwfoudjIFPou84xCzAtJ4z6VQ8W2HJzXxr3Us48OG7bHRaP4DE
+MOk1MwW+CmRg/Wqp5HQGlpAahUKc1RyV4hHs/TDH+5IfP+ITHKDVQcOJAjwEGAEK
+ACYCGyAWIQS35vuUpYmHbM/CHkseB+dcGfGuDgUCZj0F9wUJA9tkvwAKCRAeB+dc
+GfGuDqOZEACm9ciK29vqx5Pa5mIdTqZ81pCqf6G9RwSlGmUnYM6VFxHRhZYsShIQ
+MbW2mZ/bKTUIU7NsRlRW/4LWUFzvCy9ZZqROdM3FP6+ULq/2r1hena7CKlZSf7qX
+xROsFBELtAAfo/anwSpq0fubngYG/4iyXvfKLcgHstbhWU4LRCx8gFJdY2QdeJIb
+QT2uhhi/Q27TU507U9YPZ7otMfqT5+bqg77pXS6WciGXk9gfEIt/zs0Uwsre8EVH
+/TwdEeLwXpKERGxhV02VwfFDP+9rIGy8l1O2uAJEMSs+rgGfuO80vU/8j6nIexqB
+1mq0Uq3SG8GhzrTNqPwMKuHWld8GpDTPZ+MAV3OTxTUd//1yk6qMd+f0/upznhB2
+eLxRBLSLZ6R/79kutKWItaDPncwWOmoA134tz5oMlo1JLXNztDneKLZ0Qejms8PP
+C1l9stHhpmaT5k4/331ZdPBmPc2LJo6X5I1G9GTtYI4NVV9hviAr95OhTqOEKWcF
+pWky8V+dgZkQY6sIPBZjxUG8zhMJCQfwL6xpOfVqtTxYgYfJdjQZDxJZ3Foe33Gp
+pco6XGCLaoPNxLUfgkSejsLynMgBJ6i2QUust3VDuiZViqjI3eU/OQ23bL3IHhzy
+RgASIlKD81FGqPYHtfO6qxN3B5CN18dRy2obvzpE1z7U62mj8JK3/w==
+=pysx
+-----END PGP PUBLIC KEY BLOCK-----
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/contains-duplicate/index.html b/contains-duplicate/index.html new file mode 100644 index 00000000..86891ee3 --- /dev/null +++ b/contains-duplicate/index.html @@ -0,0 +1,142 @@ + + + + + + Contains Duplicate | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Contains Duplicate

By: J the Code Monkey
Posted: Aug 6, 2021 Updated: Jul 3, 2024

Contains Duplicate

Get the code & notes on

# Problem Description

Given an integer array nums, return true if any value appears at least twice, and return false if every element is distinct.

# Examples

Ex 1) Input: nums = [1, 2, 3, 1] Output: true since 1 appears twice.

Ex 2) Input: nums = [1, 2, 3, 4] Output: false since no value appears twice.

Ex 3) Input: nums = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2] Output: true since 1, 3, and 2 appear more than once.

Ex 4) Input: nums = [] Output: false since there are no values.

# Constraints

# Thought Process

  • By looking at the examples, the 1st thought that comes to mind may be to simply take each value in nums, and compare it with every other value.

    • Basically, we'll be comparing each pair of values in nums to see if a duplicate has occurred.

    • To do this we'll start at the first value in nums, and compare it with each value to the right until we reach the end of nums.

    • Then we'll take the second value in nums, and compare it with each value to the right until we reach the end of nums.

    • We repeat this process until we reach the end of nums in the worst case or until we find a duplicate value.

    • Here's a visualization for nums = [1, 2, 3] which represents a worst case scenario:

      • Let's take our 1st value in nums, and compare it with each value to the right of it:

        • 1st Comparison:

        • 2nd Comparison:

      • Now, let's take our 2nd value in nums, and compare it with each value to the right of it:

        • 3rd Comparison:

        • The 3rd value in nums is also the last value, so there's no more comparisons to be made.
    • To achieve this we'll need to loop over each value in nums, and for each iteration of this loop we need to compare our current value which will denote as nums[i] with each value to the right of it.

    • The process of comparing nums[i] with each value to the right of it means we'll need a nested for loop that loops from nums[i + 1] to the last value in nums.

    • A nested for loop a time complexity of which is not efficient and will result in a Time Limit Exceeded error on LeetCode.

  • Before checking for duplicate values, we can realize that if we sort nums any duplicate values will be consecutive.

    • Let's visualize this with an example for nums = [1, 2, 3, 1]:

      • Sorting nums gives us:

      • Now, we can loop over nums and check for duplicates values.

    • Looping over nums has a time complexity of O(n), and the sorting algorithm can have a time complexity as good as O(nlogn) if something like heapsort is used.

    • So, the overall time complexity is O(nlogn) since it's the dominating factor.

  • Solving this problem requires the ability to efficiently search for values, and a great way to do that is to use a hash table.

    • A hash table is an object that maps keys to values.

    • The search and insert opertions in a hash table have a time complexity of O(1).

    • Using a hash table will allow us to store each value in nums as a key, and we can map a value of let's say true to it if it's the first time we've seen the value.

    • Now, to create our hash table we can loop over nums then check to see if the key is present.

    • If the key is present, then we have found a duplicate, and we'll return true.

    • If the key isn't present, then we'll store the current value of nums as a key in our hash table with a value of true.

    • If no key appears twice, then nums has no duplicates, and we'll return false.

    • Here's a visualization of creating our hash table which we'll denote as obj for nums = [1, 2, 1]:

      • 1st Iteration:

      • So, we'll store the value of nums[0] as a key in our hash table with a value of true.

      • 2nd Iteration:

      • So, we'll store the value of nums[1] as a key in our hash table with a value of true.

      • 3rd Iteration:

      • Since the same key appeared in our hash table, a duplicate has been found in nums, so we'll return false.

# Implementation

var containsDuplicate = function(nums) {
+  const obj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (obj[nums[i]]) {
+      return true;
+    }
+    obj[nums[i]] = true;
+  }
+
+  return false;
+};
+
+nums = [1, 2, 3, 1];
+console.log(containsDuplicate(nums));
+

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/donate/index.html b/donate/index.html new file mode 100644 index 00000000..e0febac0 --- /dev/null +++ b/donate/index.html @@ -0,0 +1,136 @@ + + + + + + Donate | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Thanks for the
Bananas!!! 🍌

# Crypto 🔗

⚠️ Sending Crypto to the Wrong Address will Result in Loss of Funds! ⚠️

✅ Always double check the address & amount before sending! ✅

🤖 Instead of using the static Bitcoin address below, improve your privacy by using a PayNym! (opens new window) 🤖

Payment Code
PM8TJf7wdgnWbAdnwbgTMY8ic3UZ2LFvkSJxuFtK4JwXSKFmqys1iL964UX55fGKfqZXfTdVjK1Z3FwbgTPbmEp2ErGPVaXZds8v9YUBxg fqvoQUBF2X
Bitcoin BTC
bc1q5rsnx4d320jtuvdf0k8kkmgjzfna c95gphyznn
Monero XMR
89DRhZtKrfPS5yuMcFoivqBCuXs19qRnChXn5VKGeYDG457WHFcGoWbQXqW92Gah2mZFChLCkV5Cfc6zcwFwm z9zN8GRuDF

# Fiat 💵

Subscribe for more monkey business on SubscribeStar! (opens new window)

Become a Code Monkeys Sponsor! (opens new window)

Sponsor J the Code Monkey on GitHub! (opens new window)

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/favicon-16x16.png b/favicon-16x16.png new file mode 100644 index 00000000..b5e42c08 Binary files /dev/null and b/favicon-16x16.png differ diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 00000000..d3727570 Binary files /dev/null and b/favicon-32x32.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..f473b4a5 Binary files /dev/null and b/favicon.ico differ diff --git a/images/code-monkeys-logos/code-monkeys-blog-open-graph.png b/images/code-monkeys-logos/code-monkeys-blog-open-graph.png new file mode 100644 index 00000000..cadf78e0 Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-blog-open-graph.png differ diff --git a/images/code-monkeys-logos/code-monkeys-blog-twitter-summary-large.png b/images/code-monkeys-logos/code-monkeys-blog-twitter-summary-large.png new file mode 100644 index 00000000..c9c2e5db Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-blog-twitter-summary-large.png differ diff --git a/images/code-monkeys-logos/code-monkeys-full-logo-150w.png b/images/code-monkeys-logos/code-monkeys-full-logo-150w.png new file mode 100644 index 00000000..a10dd99e Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-full-logo-150w.png differ diff --git a/images/code-monkeys-logos/code-monkeys-full-logo-260w.png b/images/code-monkeys-logos/code-monkeys-full-logo-260w.png new file mode 100644 index 00000000..af574593 Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-full-logo-260w.png differ diff --git a/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-115w.png b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-115w.png new file mode 100644 index 00000000..f946329d Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-115w.png differ diff --git a/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-200w.png b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-200w.png new file mode 100644 index 00000000..0ead9362 Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-200w.png differ diff --git a/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-35w.png b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-35w.png new file mode 100644 index 00000000..bad9ab2a Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo-35w.png differ diff --git a/images/code-monkeys-logos/code-monkeys-rss-icon.png b/images/code-monkeys-logos/code-monkeys-rss-icon.png new file mode 100644 index 00000000..515f2b9c Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-rss-icon.png differ diff --git a/images/code-monkeys-logos/code-monkeys-rss-image.png b/images/code-monkeys-logos/code-monkeys-rss-image.png new file mode 100644 index 00000000..414ea8ed Binary files /dev/null and b/images/code-monkeys-logos/code-monkeys-rss-image.png differ diff --git a/images/donate/logos/bitcoin-donate-logo-256w.png b/images/donate/logos/bitcoin-donate-logo-256w.png new file mode 100644 index 00000000..c9671071 Binary files /dev/null and b/images/donate/logos/bitcoin-donate-logo-256w.png differ diff --git a/images/donate/logos/bitcoin-donate-logo-28w.png b/images/donate/logos/bitcoin-donate-logo-28w.png new file mode 100644 index 00000000..5928eb9f Binary files /dev/null and b/images/donate/logos/bitcoin-donate-logo-28w.png differ diff --git a/images/donate/logos/monero-donate-logo-256w.png b/images/donate/logos/monero-donate-logo-256w.png new file mode 100644 index 00000000..ee113de6 Binary files /dev/null and b/images/donate/logos/monero-donate-logo-256w.png differ diff --git a/images/donate/logos/monero-donate-logo-28w.png b/images/donate/logos/monero-donate-logo-28w.png new file mode 100644 index 00000000..15e7c8de Binary files /dev/null and b/images/donate/logos/monero-donate-logo-28w.png differ diff --git a/images/donate/logos/paynym-bot-300w.png b/images/donate/logos/paynym-bot-300w.png new file mode 100644 index 00000000..dcfab34a Binary files /dev/null and b/images/donate/logos/paynym-bot-300w.png differ diff --git a/images/donate/logos/paynym-bot-86w.png b/images/donate/logos/paynym-bot-86w.png new file mode 100644 index 00000000..67e83853 Binary files /dev/null and b/images/donate/logos/paynym-bot-86w.png differ diff --git a/images/donate/qr-codes/bitcoin-donation-qr-code.png b/images/donate/qr-codes/bitcoin-donation-qr-code.png new file mode 100644 index 00000000..8d093ac4 Binary files /dev/null and b/images/donate/qr-codes/bitcoin-donation-qr-code.png differ diff --git a/images/donate/qr-codes/monero-donation-qr-code.png b/images/donate/qr-codes/monero-donation-qr-code.png new file mode 100644 index 00000000..f9b2409f Binary files /dev/null and b/images/donate/qr-codes/monero-donation-qr-code.png differ diff --git a/images/donate/qr-codes/paynym-donation-qr-code.png b/images/donate/qr-codes/paynym-donation-qr-code.png new file mode 100644 index 00000000..2589d5d1 Binary files /dev/null and b/images/donate/qr-codes/paynym-donation-qr-code.png differ diff --git a/images/leetcode/01-single-number/leetcode-single-number-post-90w.png b/images/leetcode/01-single-number/leetcode-single-number-post-90w.png new file mode 100644 index 00000000..b3926b1f Binary files /dev/null and b/images/leetcode/01-single-number/leetcode-single-number-post-90w.png differ diff --git a/images/leetcode/01-single-number/leetcode-single-number-post-link.png b/images/leetcode/01-single-number/leetcode-single-number-post-link.png new file mode 100644 index 00000000..a2243d1d Binary files /dev/null and b/images/leetcode/01-single-number/leetcode-single-number-post-link.png differ diff --git a/images/leetcode/01-single-number/leetcode-single-number-post.png b/images/leetcode/01-single-number/leetcode-single-number-post.png new file mode 100644 index 00000000..8a60be11 Binary files /dev/null and b/images/leetcode/01-single-number/leetcode-single-number-post.png differ diff --git a/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-90w.png b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-90w.png new file mode 100644 index 00000000..5270b500 Binary files /dev/null and b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-90w.png differ diff --git a/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png new file mode 100644 index 00000000..b682509d Binary files /dev/null and b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post-link.png differ diff --git a/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post.png b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post.png new file mode 100644 index 00000000..1ca4f9c8 Binary files /dev/null and b/images/leetcode/02-climbing-stairs-solution-1/leetcode-climbing-stairs-solution-1-post.png differ diff --git a/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-90w.png b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-90w.png new file mode 100644 index 00000000..142b1dac Binary files /dev/null and b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-90w.png differ diff --git a/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png new file mode 100644 index 00000000..f3acfd3d Binary files /dev/null and b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post-link.png differ diff --git a/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post.png b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post.png new file mode 100644 index 00000000..5aadc94e Binary files /dev/null and b/images/leetcode/03-climbing-stairs-solution-2/leetcode-climbing-stairs-solution-2-post.png differ diff --git a/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-90w.png b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-90w.png new file mode 100644 index 00000000..5803ab01 Binary files /dev/null and b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-90w.png differ diff --git a/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png new file mode 100644 index 00000000..74b37e76 Binary files /dev/null and b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post-link.png differ diff --git a/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post.png b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post.png new file mode 100644 index 00000000..d5acc2ee Binary files /dev/null and b/images/leetcode/04-valid-anagram/leetcode-valid-anagram-post.png differ diff --git a/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-90w.png b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-90w.png new file mode 100644 index 00000000..d735bb06 Binary files /dev/null and b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-90w.png differ diff --git a/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png new file mode 100644 index 00000000..49b7d09c Binary files /dev/null and b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post-link.png differ diff --git a/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post.png b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post.png new file mode 100644 index 00000000..98040e76 Binary files /dev/null and b/images/leetcode/05-remove-duplicates-from-sorted-array/leetcode-remove-duplicates-from-sorted-array-post.png differ diff --git a/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-90w.png b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-90w.png new file mode 100644 index 00000000..fea2f7d3 Binary files /dev/null and b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-90w.png differ diff --git a/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png new file mode 100644 index 00000000..dd7648c5 Binary files /dev/null and b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post-link.png differ diff --git a/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post.png b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post.png new file mode 100644 index 00000000..db54db8d Binary files /dev/null and b/images/leetcode/06-contains-duplicate/leetcode-contains-duplicate-post.png differ diff --git a/images/leetcode/07-reverse-string/leetcode-reverse-string-post-90w.png b/images/leetcode/07-reverse-string/leetcode-reverse-string-post-90w.png new file mode 100644 index 00000000..64720158 Binary files /dev/null and b/images/leetcode/07-reverse-string/leetcode-reverse-string-post-90w.png differ diff --git a/images/leetcode/07-reverse-string/leetcode-reverse-string-post-link.png b/images/leetcode/07-reverse-string/leetcode-reverse-string-post-link.png new file mode 100644 index 00000000..520f139e Binary files /dev/null and b/images/leetcode/07-reverse-string/leetcode-reverse-string-post-link.png differ diff --git a/images/leetcode/07-reverse-string/leetcode-reverse-string-post.png b/images/leetcode/07-reverse-string/leetcode-reverse-string-post.png new file mode 100644 index 00000000..899fa439 Binary files /dev/null and b/images/leetcode/07-reverse-string/leetcode-reverse-string-post.png differ diff --git a/images/leetcode/topic/leetcode-topic-logo-90w.png b/images/leetcode/topic/leetcode-topic-logo-90w.png new file mode 100644 index 00000000..e447d04f Binary files /dev/null and b/images/leetcode/topic/leetcode-topic-logo-90w.png differ diff --git a/images/leetcode/topic/leetcode-topic-logo.png b/images/leetcode/topic/leetcode-topic-logo.png new file mode 100644 index 00000000..cf0adaad Binary files /dev/null and b/images/leetcode/topic/leetcode-topic-logo.png differ diff --git a/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-90w.png b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-90w.png new file mode 100644 index 00000000..e4462991 Binary files /dev/null and b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-90w.png differ diff --git a/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png new file mode 100644 index 00000000..d0ff1d39 Binary files /dev/null and b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post-link.png differ diff --git a/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post.png b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post.png new file mode 100644 index 00000000..d092fa5c Binary files /dev/null and b/images/nodejs/01-installing-nvm/nodejs-installing-nvm-post.png differ diff --git a/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-90w.png b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-90w.png new file mode 100644 index 00000000..70f91098 Binary files /dev/null and b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-90w.png differ diff --git a/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png new file mode 100644 index 00000000..0ebcba43 Binary files /dev/null and b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post-link.png differ diff --git a/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post.png b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post.png new file mode 100644 index 00000000..0c030fb6 Binary files /dev/null and b/images/nodejs/02-installing-fnm/nodejs-installing-fnm-post.png differ diff --git a/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-90w.png b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-90w.png new file mode 100644 index 00000000..cb2581b8 Binary files /dev/null and b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-90w.png differ diff --git a/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png new file mode 100644 index 00000000..b5f69fb1 Binary files /dev/null and b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post-link.png differ diff --git a/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post.png b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post.png new file mode 100644 index 00000000..390a75dd Binary files /dev/null and b/images/nodejs/03-installing-yarn-1/nodejs-installing-yarn-1-post.png differ diff --git a/images/nodejs/topic/nodejs-topic-logo-90w.png b/images/nodejs/topic/nodejs-topic-logo-90w.png new file mode 100644 index 00000000..713beb8d Binary files /dev/null and b/images/nodejs/topic/nodejs-topic-logo-90w.png differ diff --git a/images/nodejs/topic/nodejs-topic-logo.png b/images/nodejs/topic/nodejs-topic-logo.png new file mode 100644 index 00000000..88b49ab5 Binary files /dev/null and b/images/nodejs/topic/nodejs-topic-logo.png differ diff --git a/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-90w.png b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-90w.png new file mode 100644 index 00000000..11c41908 Binary files /dev/null and b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-90w.png differ diff --git a/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png new file mode 100644 index 00000000..9981e48c Binary files /dev/null and b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post-link.png differ diff --git a/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post.png b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post.png new file mode 100644 index 00000000..e39a02a3 Binary files /dev/null and b/images/raspberry-pi/01-configuring-settings/raspberry-pi-configuring-settings-post.png differ diff --git a/images/raspberry-pi/topic/raspberry-pi-topic-logo-90w.png b/images/raspberry-pi/topic/raspberry-pi-topic-logo-90w.png new file mode 100644 index 00000000..811e69a6 Binary files /dev/null and b/images/raspberry-pi/topic/raspberry-pi-topic-logo-90w.png differ diff --git a/images/raspberry-pi/topic/raspberry-pi-topic-logo.png b/images/raspberry-pi/topic/raspberry-pi-topic-logo.png new file mode 100644 index 00000000..b0ba4bcf Binary files /dev/null and b/images/raspberry-pi/topic/raspberry-pi-topic-logo.png differ diff --git a/images/vuepress-tutorials/topic/vuepress-topic-logo-90w.png b/images/vuepress-tutorials/topic/vuepress-topic-logo-90w.png new file mode 100644 index 00000000..67c8fc68 Binary files /dev/null and b/images/vuepress-tutorials/topic/vuepress-topic-logo-90w.png differ diff --git a/images/vuepress-tutorials/topic/vuepress-topic-logo.png b/images/vuepress-tutorials/topic/vuepress-topic-logo.png new file mode 100644 index 00000000..2fdf7a6b Binary files /dev/null and b/images/vuepress-tutorials/topic/vuepress-topic-logo.png differ diff --git a/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-90w.png b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-90w.png new file mode 100644 index 00000000..f6d353e2 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png new file mode 100644 index 00000000..93e79d22 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post.png b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post.png new file mode 100644 index 00000000..e199318b Binary files /dev/null and b/images/vuepress-tutorials/tutorial-1/vuepress-tutorial-1-introduction-post.png differ diff --git a/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-90w.png b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-90w.png new file mode 100644 index 00000000..f8b59131 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png new file mode 100644 index 00000000..06c5dc0d Binary files /dev/null and b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post.png b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post.png new file mode 100644 index 00000000..952ac300 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-10/vuepress-tutorial-10-homepage-styling-part-2-post.png differ diff --git a/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-90w.png b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-90w.png new file mode 100644 index 00000000..3a9d3533 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png new file mode 100644 index 00000000..cc8c59f3 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post.png b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post.png new file mode 100644 index 00000000..264dc4c9 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-11/vuepress-tutorial-11-sticky-footer-post.png differ diff --git a/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-90w.png b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-90w.png new file mode 100644 index 00000000..018d86e1 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png new file mode 100644 index 00000000..38b7e59f Binary files /dev/null and b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post.png b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post.png new file mode 100644 index 00000000..5570a6a0 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-12/vuepress-tutorial-12-highlight-svgs-on-hover-post.png differ diff --git a/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-90w.png b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-90w.png new file mode 100644 index 00000000..1f7cc7ad Binary files /dev/null and b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png new file mode 100644 index 00000000..a9b75a40 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post.png b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post.png new file mode 100644 index 00000000..836ad7e2 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-13/vuepress-tutorial-13-navbar-styling-post.png differ diff --git a/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-90w.png b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-90w.png new file mode 100644 index 00000000..2248f76a Binary files /dev/null and b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png new file mode 100644 index 00000000..48af813e Binary files /dev/null and b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post.png b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post.png new file mode 100644 index 00000000..ccf04418 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-14/vuepress-tutorial-14-dropdown-menu-styling-post.png differ diff --git a/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-90w.png b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-90w.png new file mode 100644 index 00000000..09e91240 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png new file mode 100644 index 00000000..0e5c171a Binary files /dev/null and b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post.png b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post.png new file mode 100644 index 00000000..2b30523e Binary files /dev/null and b/images/vuepress-tutorials/tutorial-15/vuepress-tutorial-15-blog-plugin-post.png differ diff --git a/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-90w.png b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-90w.png new file mode 100644 index 00000000..c7903379 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png new file mode 100644 index 00000000..8ead9477 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post.png b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post.png new file mode 100644 index 00000000..ba8b3eb2 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-16/vuepress-tutorial-16-pagination-post.png differ diff --git a/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-90w.png b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-90w.png new file mode 100644 index 00000000..9ce3a5d5 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png new file mode 100644 index 00000000..3742203a Binary files /dev/null and b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post.png b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post.png new file mode 100644 index 00000000..77f0c091 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-17/vuepress-tutorial-17-indexpost-layout-post.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-1-155w.png b/images/vuepress-tutorials/tutorial-18/example-post-1-155w.png new file mode 100644 index 00000000..f30c997a Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-1-155w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-1-90w.png b/images/vuepress-tutorials/tutorial-18/example-post-1-90w.png new file mode 100644 index 00000000..40dc5cb7 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-1-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-2-155w.png b/images/vuepress-tutorials/tutorial-18/example-post-2-155w.png new file mode 100644 index 00000000..ec3dfe42 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-2-155w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-2-90w.png b/images/vuepress-tutorials/tutorial-18/example-post-2-90w.png new file mode 100644 index 00000000..49c69a25 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-2-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-3-155w.png b/images/vuepress-tutorials/tutorial-18/example-post-3-155w.png new file mode 100644 index 00000000..1f986fa8 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-3-155w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/example-post-3-90w.png b/images/vuepress-tutorials/tutorial-18/example-post-3-90w.png new file mode 100644 index 00000000..dde75885 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/example-post-3-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-90w.png b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-90w.png new file mode 100644 index 00000000..34b963da Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png new file mode 100644 index 00000000..22e713d9 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post.png b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post.png new file mode 100644 index 00000000..0c07319e Binary files /dev/null and b/images/vuepress-tutorials/tutorial-18/vuepress-tutorial-18-indexpost-images-post.png differ diff --git a/images/vuepress-tutorials/tutorial-19/example-post-4-155w.png b/images/vuepress-tutorials/tutorial-19/example-post-4-155w.png new file mode 100644 index 00000000..f85b8ff1 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/example-post-4-155w.png differ diff --git a/images/vuepress-tutorials/tutorial-19/example-post-4-90w.png b/images/vuepress-tutorials/tutorial-19/example-post-4-90w.png new file mode 100644 index 00000000..ade4e3cd Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/example-post-4-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-19/example-post-5-155w.png b/images/vuepress-tutorials/tutorial-19/example-post-5-155w.png new file mode 100644 index 00000000..d36c4a17 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/example-post-5-155w.png differ diff --git a/images/vuepress-tutorials/tutorial-19/example-post-5-90w.png b/images/vuepress-tutorials/tutorial-19/example-post-5-90w.png new file mode 100644 index 00000000..16eaa7b7 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/example-post-5-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-90w.png b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-90w.png new file mode 100644 index 00000000..46a4817c Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png new file mode 100644 index 00000000..cee7c9d5 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post.png b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post.png new file mode 100644 index 00000000..d7ba5522 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-19/vuepress-tutorial-19-pagination-links-post.png differ diff --git a/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-232w.png b/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-232w.png new file mode 100644 index 00000000..2f6416a7 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-232w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-760w.png b/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-760w.png new file mode 100644 index 00000000..ada6b3ca Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/server-side-rendered-diagram-760w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-232w.png b/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-232w.png new file mode 100644 index 00000000..2570529d Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-232w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-760w.png b/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-760w.png new file mode 100644 index 00000000..70523ff5 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/single-page-application-diagram-760w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-232w.png b/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-232w.png new file mode 100644 index 00000000..4e6748a5 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-232w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-760w.png b/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-760w.png new file mode 100644 index 00000000..73bc0fa1 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/static-site-generator-diagram-760w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/static-website-diagram-232w.png b/images/vuepress-tutorials/tutorial-2/static-website-diagram-232w.png new file mode 100644 index 00000000..d849a189 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/static-website-diagram-232w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/static-website-diagram-760w.png b/images/vuepress-tutorials/tutorial-2/static-website-diagram-760w.png new file mode 100644 index 00000000..09bd6da9 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/static-website-diagram-760w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-90w.png b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-90w.png new file mode 100644 index 00000000..76a8e155 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png new file mode 100644 index 00000000..f30fa347 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post.png b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post.png new file mode 100644 index 00000000..469c49ab Binary files /dev/null and b/images/vuepress-tutorials/tutorial-2/vuepress-tutorial-2-why-use-vuepress-post.png differ diff --git a/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-90w.png b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-90w.png new file mode 100644 index 00000000..87066f1f Binary files /dev/null and b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png new file mode 100644 index 00000000..943fc0b3 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post.png b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post.png new file mode 100644 index 00000000..cc029021 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-20/vuepress-tutorial-20-pagination-links-styling-post.png differ diff --git a/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-90w.png b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-90w.png new file mode 100644 index 00000000..c902e30b Binary files /dev/null and b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png new file mode 100644 index 00000000..016ddc68 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post.png b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post.png new file mode 100644 index 00000000..db3f56cb Binary files /dev/null and b/images/vuepress-tutorials/tutorial-3/vuepress-tutorial-3-set-up-and-installation-post.png differ diff --git a/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-90w.png b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-90w.png new file mode 100644 index 00000000..34ec4236 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png new file mode 100644 index 00000000..23d5c8bb Binary files /dev/null and b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post.png b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post.png new file mode 100644 index 00000000..bc098328 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-4/vuepress-tutorial-4-directory-structure-post.png differ diff --git a/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-90w.png b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-90w.png new file mode 100644 index 00000000..1bcc841c Binary files /dev/null and b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png new file mode 100644 index 00000000..554a592c Binary files /dev/null and b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post.png b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post.png new file mode 100644 index 00000000..07ee1754 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-5/vuepress-tutorial-5-configuration-basics-post.png differ diff --git a/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-90w.png b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-90w.png new file mode 100644 index 00000000..76c24210 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png new file mode 100644 index 00000000..412dd65f Binary files /dev/null and b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post.png b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post.png new file mode 100644 index 00000000..97aacdd7 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-6/vuepress-tutorial-6-homepage-layout-post.png differ diff --git a/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-90w.png b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-90w.png new file mode 100644 index 00000000..91cb8d65 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png new file mode 100644 index 00000000..6e67aee5 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post.png b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post.png new file mode 100644 index 00000000..bf2a8f3d Binary files /dev/null and b/images/vuepress-tutorials/tutorial-7/vuepress-tutorial-7-navbar-logo-and-links-post.png differ diff --git a/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-90w.png b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-90w.png new file mode 100644 index 00000000..447c95af Binary files /dev/null and b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png new file mode 100644 index 00000000..d2bff69b Binary files /dev/null and b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post.png b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post.png new file mode 100644 index 00000000..e620ffd6 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-8/vuepress-tutorial-8-custom-footer-post.png differ diff --git a/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-90w.png b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-90w.png new file mode 100644 index 00000000..774ddc45 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-90w.png differ diff --git a/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png new file mode 100644 index 00000000..3920e922 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post-link.png differ diff --git a/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post.png b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post.png new file mode 100644 index 00000000..0dc9a5b3 Binary files /dev/null and b/images/vuepress-tutorials/tutorial-9/vuepress-tutorial-9-styling-the-homepage-post.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..df10cbbf --- /dev/null +++ b/index.html @@ -0,0 +1,132 @@ + + + + + + Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/installing-fnm/index.html b/installing-fnm/index.html new file mode 100644 index 00000000..33e84da5 --- /dev/null +++ b/installing-fnm/index.html @@ -0,0 +1,128 @@ + + + + + + Installing Fast Node Manager (fnm) | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Installing Fast Node Manager (fnm)

By: J the Code Monkey
Posted: Dec 8, 2021 Updated: Apr 18, 2023

# Why use fnm?

Fast Node Manager (fnm) (opens new window) is a fast and simple Node version manager built in Rust (opens new window).

For those of you who haven't read the post Installing Node Version Manager (nvm), a Node version manager allows you to easily install and switch between numerous versions of Node.js (opens new window). This is useful when a project you’re working on requires a different version of Node.js (opens new window) than what you currently have installed.

Here are some features of fnm (opens new window):

Since fnm (opens new window) is much faster than nvm (opens new window), it's my preferred way to manage my Node versions.

# Installation

We'll be going over how to install fnm (opens new window) on Linux, macOS, and Windows. If you run into any issues with installation then check out the fnm (opens new window) repository for any updates.

Other Installation Methods

If you're interested in using Cargo (opens new window) or downloading a release binary, then check out the fnm (opens new window) repository for installation instructions.

# Linux

First make sure you have curl installed:

Next you can install fnm (opens new window) using either one of the following commands for bash, zsh, and fish shells.

Here we're setting the custom directory $HOME/.local/bin as the location to install fnm (opens new window) using --install-dir.

If you want to install fnm (opens new window) in a different location, then change $HOME/.local/bin to your preferred directory.

You can also remove --install-dir when installing to use the default directory $HOME/.fnm.

Run the following command if you don't have .local/bin in your path and you're using the custom directory $HOME/.local/bin.

If you're using a different custom directory and you don't have it in your path, then replace $HOME/.local/bin with you're preferred directory.

Run the following command to upgrade fnm (opens new window).

If you're using a different custom directory, then replace $HOME/.local/bin with you're preferred directory.

# macOS

The preferred way to install on macOS is to use Homebrew (opens new window):

Here's how to upgrade using Homebrew (opens new window):

# Windows

You can manually install on Windows using either Scoop (opens new window) or Chocolatey (opens new window):

# Shell Setup

Before you can use fnm (opens new window), you have to first set up your shell. We'll be going over how to set up fnm (opens new window) for bash, zsh, fish, and powershell.

Windows Command Prompt and Cmder

If you're interested in using Windows Command Prompt or Cmder then check out the fnm (opens new window) repository for instructions.

# Bash

Add the following to your .bashrc:

# Zsh

Add the following to your .zshrc:

# Fish Shell

Create ~/.config/fish/conf.d/fnm.fish and add this line:

# PowerShell

Add this line to the end of your profile file:

On Windows, the profile is located at ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 or $PROFILE

On macOS and Linux, the profile is located at ~/.config/powershell/Microsoft.PowerShell_profile.ps1

# Usage

Here are some useful commands to get started with fnm (opens new window). You can find more commands here (opens new window) or you can run fnm --help to see a list of subcommands and fnm <SUBCOMMAND> --help to see information for a specific subcommand.

# Completions

Here's how to set up fnm (opens new window) completions for bash and zsh:

# Bash

Add the following to your .bashrc:

# Zsh

Add the following to your .zshrc:

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/installing-nvm/index.html b/installing-nvm/index.html new file mode 100644 index 00000000..e983aa12 --- /dev/null +++ b/installing-nvm/index.html @@ -0,0 +1,128 @@ + + + + + + Installing Node Version Manager (nvm) | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Installing Node Version Manager (nvm)

By: J the Code Monkey
Posted: Dec 7, 2021 Updated: Apr 18, 2023

# Why use a Node Version Manager?

A Node version manager allows you to easily install and switch between numerous versions of Node.js (opens new window). This is useful when a project you’re working on requires a different version of Node.js (opens new window) than what you currently have installed.

# Installation

We'll be going over how to install nvm (opens new window) on Linux and macOS.

Windows

Windows is not supported, but you can get it to work by setting up Windows Subsystem for Linux (WSL) (opens new window), GitBash (opens new window), or Cygwin (opens new window). Other alternatives exist that are not supported or developed by nvm (opens new window) like nvm-windows (opens new window). Check out the nvm Important Notes (opens new window) for more alternatives and details.

Before installing make sure your using a POSIX-compliant shell like sh, dash, ksh, zsh, or bash.

Fish Shell

If you want to use fish (opens new window), then check out the nvm Important Notes (opens new window) repository for alternatives.

If you run into any issues with installation, then be sure to check out the nvm (opens new window) repository for any updates and troubleshooting tips.

# Linux Dependencies

You can install nvm (opens new window) using either curl or wget.

Here's how to install curl for Linux:

Here's how to install wget for Linux:

# macOS Dependencies

macOS should already have curl installed, but you can use Homebrew (opens new window) to upgrade to the latest version:

If you want to use wget on macOS, then you can use Homebrew (opens new window) to install it:

If you're using OS X 10.9 or newer, you'll need to install Xcode (opens new window) or just the Command Line Tools.

Here's a good post explaining how to install Xcode (opens new window):

If you don't want to install Xcode (opens new window), then you can install only the Command Line Tools by following along with this post:

# System Version

If you have a system version of Node.js (opens new window), i.e., you downloaded and installed Node.js (opens new window) without using nvm (opens new window), then version mismatches may occur.

This can occur since versions installed by nvm (opens new window) will only be available to the user account it was installed on, and any other user accounts will use the system version.

If version mismatches are occurring or any other issues, then you can uninstall node and npm associated with the system version and just use versions installed by nvm (opens new window).

Be sure to uninstall any globally installed npm packages associated with the system version as well.

Also, if you're using a ~/.npmrc file it may not be compatible see nvm Compatibility Issues (opens new window) in which case you should remove it.

When using nvm (opens new window), you don't need to use sudo npm install -g <package> instead use npm install -g <package> when installing global packages.

Finally, if you're using a different node version manager like fnm (opens new window), then you may run into issues with your installed versions from nvm (opens new window). If this is the case, then uninstall the node version manager you will not be using to resolve the issues.

Preferred Node Manager

My preferred way to manage my node versions is with fnm (opens new window). Check out Installing Fast Node Manager (fnm) to learn more about it.

# Install and Update Script

After installing the necessary dependencies, you can install or update nvm (opens new window) by using curl or wget on Linux or macOS:

The above commands will download and run a script to install or update nvm (opens new window).

The script clones the nvm (opens new window) repository to ~/.nvm.

Additional Notes

If you're interested, check out the nvm Additional Notes (opens new window) for information on more parameters and how to customize the install source, directory, profile, and version for the install script.

After running the command above, you'll be prompted to close and reopen your terminal to start using nvm (opens new window), or you can run the following commands to start using it in the current shell session:

The third line provides autocompletion for nvm (opens new window). Here's some examples of the autocompletion usage (opens new window).

# Verify Installation

To verify the installation you can run the following command:

If the installation was successful, then the command should output nvm.

If you get no output after running the above command, then see the troubleshooting sections below.

# Troubleshooting

Try closing the current terminal and opening a new terminal. Then try verifying the installation again.

Here are some examples of commands you can run depending on your shell:

After running the command for your shell, try verifying the installation again.

If you're still experiencing issues verifying your installtion for Linux, then check out Troubleshooting on Linux (opens new window).

For macOS check out Troubleshooting on macOS (opens new window) and macOS Troubleshooting (opens new window) which contain more specific information related to shell issues and to issues with Macs using the M1 chip.

For more general issues check out the Problems (opens new window) section.

Other Installation Methods

Instead of using the script above, you can also perform a git install (opens new window) or a manual install (opens new window) as well as a manaul upgrade (opens new window). The minimum required git (opens new window) version for the installation methods is v1.7.10.

# Usage

Here are some useful commands to get started with nvm (opens new window). You can run nvm --help to see a list of commands, their flags, and descriptions.

# Check nvm Version

The following command will display the version of nvm (opens new window):

# List Remote Versions

The following commands will list the remote versions of Node.js (opens new window).

List the all remote versions by using ls-remote:

Node.js (opens new window) has a release schedule (opens new window) for long-term support (LTS).

List the LTS remote versions by using --lts:

List all of the LTS remote versions for a specific line by using, e.g., --lts=boron:

List all of the LTS remote versions for a given version number by providing, e.g., 16 to ls-remote:

# Install Versions

The following commands are examples of how to install different versions of Node.js (opens new window).

If you try to install a version and the installation fails, then run nvm cache clear to delete the cached versions.

Install the latest version by using the special default alias node:

Install the latest LTS version by using --lts:

Install the latest LTS version for a specific line by using, e.g., --lts=boron:

Install a specific version by providing a version number:

# List Installed Versions

The following command will list all of the installed versions of Node.js (opens new window):

# Use a Version

The following commands will set which version of Node.js (opens new window) to use.

Use the latest version by using the special default alias node:

Use the latest LTS version by using --lts:

Use the latest LTS version for a specific line by using, e.g., --lts=boron:

Use a specific version by providing a version number:

If you have a system version installed, then you can use the special default alias system to use it:

# Check Active Version

Check the currently active Node.js (opens new window) version by using current:

# Set Aliases

Set an alias for a specific Node.js (opens new window) version by provding a name and a version.

Here, version 16.11.1 will get an alias of nickname:

The default version is the active version when opening new shells. The first installed version will get set as the default version. To change the default version run the command below.

Here, we're setting the default version to be 17.1.0:

# Get Path to Version

The following commands will get the path of where a Node.js (opens new window) version was installed.

Get the path of where a version was installed by specifying a version number:

Get the path to where a version is installed by specifying an alias:

# Uninstall Versions

The following commands are examples of how to uninstall different versions of Node.js (opens new window).

Uninstall the latest version by using the special default alias node:

Uninstall the latest LTS version by using --lts:

Uninstall the latest LTS version for a specific line by using, e.g., --lts=boron:

Uninstall a specific version by providing a version number:

# Uninstall nvm

To uninstall nvm (opens new window) run the following:

Then remove these lines from your ~/.bashrc, ~/.zshrc, ~/.profile, etc.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/installing-yarn-1/index.html b/installing-yarn-1/index.html new file mode 100644 index 00000000..4f52dba1 --- /dev/null +++ b/installing-yarn-1/index.html @@ -0,0 +1,135 @@ + + + + + + Installing Yarn 1 | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Installing Yarn 1

By: J the Code Monkey
Posted: Dec 28, 2021 Updated: Apr 18, 2023

# What is a Package Manager?

Before discussing Yarn (opens new window) in more detail, let's first define what a package manager is and what it handles for us.

A package manager is a tool that allows developers to manage a project's dependencies.

Dependencies also known as packages are programs that a project relys on to function properly.

Using dependencies makes development easier since you can use other developer's solutions for implementing features in your project.

A package manager handles the following for your packages:

  • Installing
  • Updating and upgrading
  • Uninstalling
  • Configuring

# What is Yarn?

Yarn (opens new window) is a package manager designed with three main goals in mind:

  • Speed
  • Security
  • Reliability

Like other package managers, Yarn (opens new window) allows you to use and share code with other developers which again makes development easier. The code is shared using a package.json file which describes the dependencies used in a project.

Yarn (opens new window) is an alternative to npm (opens new window) which is the default node package manager for Node.js (opens new window). It was originally developed to address the performance and security issues with npm (opens new window).

This post will cover the installation and some commands for Yarn 1 (opens new window).

Yarn 1 Maintenance Mode

Yarn 1 (opens new window) is officially in maintenance mode, so no further updates will be released unless they are needed to patch vulnerabilities. If you're starting a new project, it's recommended to use the latest stable version which at the time of this writing is Yarn 3 (opens new window).

If you're interested in learning more about the release history of Yarn (opens new window) and npm (opens new window), then check out the section below.

# Timeline of Yarn and npm Development

When Yarn (opens new window) was released in 2016 it achieved its goals of being a faster, more secure, and more reliable alternative to npm (opens new window). The improved reliability was accomplished by generating a yarn.lock file which handles keeping track of the exact versions of packages used in a project.

In 2017, npm (opens new window) addressed its speed and reliability issues with the release of npm 5 (opens new window). The reliability issue was addressed with the introduction of the package-lock.json file which provided similar functionality to the yarn.lock file.

In 2018, npm (opens new window) addressed its security issues with the release of npm 6 (opens new window) by checking vulnerabilities before installing dependencies as well as introducing more improvements to speed and reliability.

Yarn 2 (opens new window) and npm 7 (opens new window) were both released in 2020 with improved performance and some new features as well.

In 2021, Yarn 3 (opens new window) and npm 8 (opens new window) were released which again introduced improved performance and some new features.

Today, the performance and features of Yarn (opens new window) and npm (opens new window) are very similar, so which one to use mainly depends on a developer's preference.

# Installation

There are multiple ways to install Yarn 1 (opens new window). Currently, the recommended way to install it is with npm (opens new window) the default node package manager that comes with Node.js (opens new window). When installing Node.js (opens new window) you have the option to install a system version which you can do by downloading and installing a version directly from Node.js (opens new window), or you can install multiple node versions with a node version manager.

Using a Node Version Manager

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend installing either nvm (opens new window) or fnm (opens new window). My preferred way to manage my node versions is with fnm (opens new window). If you're interested in installing a node version manager, then check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm).

After installing a system version or a version with a node version manager, you can run the following command to install and upgrade Yarn 1 (opens new window):

This will install Yarn 1 (opens new window) globally. We'll see how to install a specific local version of yarn in the root of a project directory when looking at the usage of yarn.

Resolving Permissions Error

If you're using a system version, you may get a permissions error when attempting to install with npm (opens new window). To resolve this check out the installation (opens new window) documentation for platform-specific methods for Linux, macOS, and Windows. Alternatively, you can uninstall your system version and use a node version manager instead.

# Platform Installation Notes

When using a platform-specific method a version of Node.js (opens new window) will also be installed. To avoid the Node.js (opens new window) installation some platform-specific methods have the option of ignoring it by passing certain commands. See the installation (opens new window) documentation for more details on ignoring the Node.js (opens new window) installation, configuration requirements, and possible issues.

If the option to ignore the installation of Node.js (opens new window) is not available for your preferred platform-specific method, then you can uninstall your system version and just use the platform-specific method to install both Yarn 1 (opens new window) and Node.js (opens new window).

If you prefer to use a platform-specific method with a node version manager, then you should only use a method that can ignore the installation of Node.js (opens new window) since it can cause conflicts.

# Usage

Now we'll be discussing some useful and common commands to get you started with Yarn 1 (opens new window).

# Help Commands

Here's how to access the help documentation for the yarn command which is always useful and recommended to do for any installed tool.

Run the following command to see a list of commands, flags, and descriptions for yarn:

To see help information for a specific subcommand run the following:

# Check Yarn Version

To verify your installation was successful and to check your version of yarn run the following command:

# Setting a Local Version

To install and set a local version of yarn for a specific project you can use the global yarn command we installed earlier. This ensures everyone working on a project is using the exact same version of yarn which is useful to avoid any undesired behavior like producing a different yarn.lock file.

This is accomplished by using yarn policies (opens new window) which allows you to check in your Yarn 1 (opens new window) release within your repository. After running the command below in your project's root directory, a single-file release from the GitHub repository will be downloaded and stored in your project in a .yarn/releases directory. Then your yarn-path will be updated in a .yarnrc file.

Now any yarn command run in your project will be using the local version that you set. Be sure to push these changes to your project's remote branch, so everyone using the project will be downloading and using the same version of Yarn 1 (opens new window) as you.

If you're using an existing project, then you don't need to set the local version as long as the project has the desired version of Yarn 1 (opens new window) in the .yarn/releases directory, and the yarn-path is configured properly in the .yarnrc file.

If you don't have a project directory, then run the following:

Next, navigate to your project:

Now, set the version of Yarn 1 (opens new window) for your project:

There are multiple ways to specify which version you want to use:

  • yarn policies set-version downloads the latest stable release
  • yarn policies set-version --rc downloads the latest rc release
  • yarn policies set-version 1.22.4 downloads a specific version

Running yarn policies set-version [version] is also the recommended way to upgrade your version of Yarn 1 (opens new window).

Now run yarn --version in your project directory, and it should output the local version you just set. If you navigate out of your project directory and run yarn --version, then you should see the global version that you installed.

The global version of yarn will first check if it's in a directory with a .yarnrc file. If the directory has a .yarnrc file, then the configured yarn-path value will be used to switch the yarn version from the global version to the project specific version.

Resolving Installation Directory Issue

If you set the local version in your project's root directory and the .yarn directory and .yarnrc file aren't generated there, then delete the files that were generated and run the yarn init command in your project's root directory before setting the local version. The yarn init command is described in the Creating a New Project section.

# Updating the .gitignore File

After setting your local version of yarn, you should now have .yarn directory in the root of your project.

Some of the files yarn adds to your .yarn directory should be checked into version control, e.g., git and others should be ignored.

To specify which directories and files should be ignored when pushing to your repositiory you can create a .gitignore file.

After creating the .gitignore file, you can add the recommended basic configuration for yarn:

This will ignore the entire .yarn directory except for the directories specified after the !.

The yarn.lock and .yarnrc files should always be checked into version control.

# Adding a .gitattributes File

If you're using a local version of yarn, then it's recommended to add a .gitattributes file to your project which will prevent git from showing large diffs when you add or update releases and plugins:

This is accomplished by identifying the release and plugin directories as binary content.

# Creating a New Project

To create a new project first create and navigate to the project directory. See the commands above for creating and navigating to a project directory.

Then run the following command:

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept the defaults. Here's an example of running the command in a directory named project-directory:

After answering all of the questions, a package.json file containing the answers will be created. The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver) (opens new window).

Now, let's describe each property in a little more detail:

  • name is the name given to your project +
    • Must be less than or equal to 214 characters including the @scope/ for scoped packages (opens new window)
    • Cannot start with a dot or an underscore
    • Must contain only lowercase letters and URL-safe characters
    • If the project is published to npm (opens new window), it gets a URL based on the given value which is the reason for the requirements given above
    • The default value is the same name as the directory you're in when running the yarn init command
  • version indicates the current version of your project +
  • description is used to describe and provide more information about your project +
    • Especially useful to include if you plan on publishing your project to npm (opens new window)
    • If no value is given, it will not be set
  • entry point is a JavaScript file that starts the execution of your project +
    • This property is called main in the package.json file
    • The default value is index.js
  • repository url describes the location of the project repository containing the code +
    • This property is called repository in the package.json file
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/my-new-project" }
    • If no value is given, it will not be set
  • author describes the creator or owner of the project +
    • Used to describe one person
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
    • If no value is given, it will not be set
  • license indicates the type of license being used by the project +
    • Allows users to know how they're permitted to use the project
    • Check out Choose a License (opens new window) if you need help determining how you should license your project
    • The default value is MIT
  • private indicates whether or not the project can be published to npm (opens new window)
    • If set to true, it will prevent the project from being published
    • If no value is given, it's assumed the value is false, and it will not be explicitly set in the package.json file

If you're interested in learning more about the package.json file, then check out The package.json guide (opens new window) and the Yarn 1 package.json (opens new window) documentation. Also, check out the Versions of dependencies (opens new window) documentation for more information about how semver (opens new window) is used.

Here's the contents of the package.json file from the example above:

To update the package.json file you can open and edit it directly, or you can run the yarn init command again.

Check out the yarn init (opens new window) documentation for more information about the command.

# Adding Packages

When adding a package the package.json file gets updated by adding the package as a dependency to a dependencies object where each key is a package name and the value represents a range of allowed versions following semver (opens new window) notation.

A yarn.lock file will also be created if it doesn't exist or updated if it already exists. A yarn.lock file is used to keep track of the exact versions of packages added to a project. This allows consistent installs across machines by allowing developers to have the exact same versions of packages when installing all of a project's dependencies.

Here's how to handle the yarn.lock file in your project:

  • The yarn.lock file should be in the root of your project directory
  • You shouldn't directly edit the yarn.lock file it gets auto-generated and automatically updated
  • When installing only the top-level yarn.lock file is used and any yarn.lock files that exist in the dependencies will be ignored
  • The yarn.lock file should also be checked into version control since it's used to install the exact same versions of packages across machines

To add the latest version of a package run the following command:

To add a specific version of a package run the following command:

To add the latest version of a package within a specified version range run the following command:

The latest version within the given version range is determined by the range specifier and the version number.

In the example above the range specifier is the caret symbol, i.e., ^. You can use any desired range specifier, and the added package will be the latest version within the given version range.

You can also add a package with a specific tag by running the following command:

Tags are a way to mark published versions of a package with a label. Check out the yarn tag (opens new window) documentation for more information about them.

To add a package to your development dependencies, i.e., devDependencies you can add either the --dev or -D flag to the end of the command.

Development dependencies are dependencies that you need for the development workflow, e.g., Babel (opens new window), but not while running the project.

Here's an example of adding the latest version of a package to your devDependencies:

See the Types of dependencies (opens new window) documentation for more information about them.

To add a package globally to your operating system you can use the global subcommand before add:

When to Use Global

In general you should be adding packages locally because anyone else using your project will then get the same packages. If you install a package globally it will be available globally on your operating system, but it won't be available to anyone else using your project. You should only install a package globally if it's for developer tooling that isn't used for only a specific project, e.g., nodemon (opens new window). See the yarn global (opens new window) documentation for more details.

Check out the yarn add (opens new window) documentation for more information about adding packages.

# Listing Added Packages

To list all of your added packages in your project run the following command:

This will list all of the packages you added as well as their dependencies for the current working directory.

To list only the packages you explicitly added you can use the --depth flag as follows:

The above will restrict the depth of the displayed dependencies to be the first level. Notice that the levels are zero-indexed.

To learn more about listing added packages check out the yarn list (opens new window) documentation.

# Upgrading Packages

The upgrade subcommand will update the packages to their latest version based on the version ranges defined in the package.json file. See the Versions of dependencies (opens new window) documentation to get a better understanding of how version ranges are used.

After running the upgrade subcommand, the yarn.lock file will be updated with the latest versions specified by the version ranges. The versions in the package.json file will remain the same though since the upgraded packages will still be within the same version ranges.

To view the upgraded versions of your packages in a readable format you can use the yarn list command described in the previous section.

We'll see how to upgrade packages to versions outside of the specified version ranges which will update both the yarn.lock file and the package.json file.

The following command upgrades all packages within their specified version ranges:

You can also upgrade a specific package within its specified version range:

To upgrade all packages to their latest versions you can add the --latest flag:

You can also upgrade a specific package to its latest version using the --latest flag:

When using the --latest flag, the version range in the package.json file will be ignored. This can potentially result in the packages being upgraded across major versions which can lead to potential incompatible API changes, so be sure to check the packages for any breaking changes.

Since the range versions in the package.json file are ignored, both the yarn.lock and package.json files can be updated.

Also, the range specifiers in the package.json file will remain the same if it is still compatible with the latest version. If the range specifier isn't compatible with the new version a caret range specifier, i.e., ^ will be used instead.

So, e.g., a tilde range specifier, i.e., ~ will still be used for any packages that we're using it previously.

You can also explicitly set the range specifier by passing a flag after the --latest flag, e.g., --caret.

You can also upgrade a package to a specific version with the following command:

To upgrade a package to the latest version within a specified version range run the following:

The latest version within the given version range is again determined by the range specifier and the version number.

In the example above the range specifier is the caret symbol, i.e., ^. You can again use any desired range specifier, and the package will be upgraded to the latest version within the given version range.

You can also upgrade a package to a specific tag using the following command:

Tags are again a way to mark published versions of a package with a label. Check out the yarn tag (opens new window) documentation for more information about them.

You can specify a preferred range specifier when upgrading a package with a tag by passing, e.g., --tilde flag at the end of the command.

Downgrading Packages

Using specific versions and tags when upgrading packages also allows you to downgrade your package by specifying a version that is older than your currently installed version.

To learn more about upgrading packages check out the yarn upgrade (opens new window) documentation.

# Removing Packages

To remove a package run the following command:

After running the command above, the yarn.lock and package.json files will both always be updated. This ensures all developers will still be using the exact same versions of the packages.

Also, when removing a package it will be removed from all types of dependencies, e.g., dependencies, devDependencies, etc.

See the Types of dependencies (opens new window) documentation for more information about dependencies and the yarn remove (opens new window) documentation for more information about the command.

# Installing All Project Packages

The following command should be run when checking out code for a new project and when another developer adds or removes a package.

Run the following command to install all of a project's packages specified in the package.json file:

You can also just run the following:

After running either one of the commands above, a node_modules directory will be created in the current directory which contains all of the code for the installed packages.

Here's how the yarn.lock file is used:

  • If the yarn.lock file is present and if it contains all of the packages specified in the package.json file, then the exact versions specified in the yarn.lock file will be installed.
  • If there is no yarn.lock file or there is one that doesn't contain all of the packages in the package.json file, then the newest versions within the version ranges specified in the package.json file will be installed. This will then update the yarn.lock file.

To ensure the yarn.lock file is not updated when installing all of a project's dependencies you can run the following:

For more information about installing all the packages in a project check out the yarn install (opens new window) documentation.

# Running Scripts

To run a script you need to first add a scripts object to your package.json file. Then you can add each script as a key-value pair where the key is the name of the script you want to run, and the value is a command that gets run in your shell.

Here, we have defined two scripts in our scripts object with the names of test and build and with the commands of test-script and build-script, respectively.

To run a script you can run the following command:

You can also just run the following:

Potential Shorthand Issue

Built-in CLI commands will have preference over your scripts if they share the same name. To avoid running a built-in CLI command you can always include the run subcommand when running your scripts.

It's also possible to list all of the scripts available to run in your project by running the following:

See the yarn run (opens new window) documentation to lean more about the command and the yarn test (opens new window) documentation for more information about testing.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/mstile-144x144.png b/mstile-144x144.png new file mode 100644 index 00000000..8a8c9969 Binary files /dev/null and b/mstile-144x144.png differ diff --git a/mstile-150x150.png b/mstile-150x150.png new file mode 100644 index 00000000..090b0ed0 Binary files /dev/null and b/mstile-150x150.png differ diff --git a/mstile-310x150.png b/mstile-310x150.png new file mode 100644 index 00000000..fbdd3e84 Binary files /dev/null and b/mstile-310x150.png differ diff --git a/mstile-310x310.png b/mstile-310x310.png new file mode 100644 index 00000000..70cc8fa3 Binary files /dev/null and b/mstile-310x310.png differ diff --git a/mstile-70x70.png b/mstile-70x70.png new file mode 100644 index 00000000..4e8ce22c Binary files /dev/null and b/mstile-70x70.png differ diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 00000000..e202adb1 --- /dev/null +++ b/posts/index.html @@ -0,0 +1,151 @@ + + + + + + All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ Configuring Settings +

By: J the Code Monkey
Posted: Dec 20, 2022 Updated: Apr 27, 2023

+ In this tutorial we're going to learn how to configure various settings for a Raspberry Pi using standard Debian commands... +

Raspberry Pi - Configuring Settings Post Picture

+ VuePress Tutorial 20 - Pagination Links Styling +

By: J the Code Monkey
Posted: Nov 23, 2022 Updated: Jul 3, 2024

+ We're going to begin the process of styling the Prev and Next pagination links that we added to each of the... +

VuePress Tutorial 20 - Pagination Links Styling Post Picture

+ VuePress Tutorial 19 - Pagination Links +

By: J the Code Monkey
Posted: Nov 19, 2022 Updated: Apr 19, 2023

+ Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually... +

VuePress Tutorial 19 - Pagination Links Post Picture

+ VuePress Tutorial 18 - IndexPost Images +

By: J the Code Monkey
Posted: Nov 9, 2022 Updated: Apr 19, 2023

+ In this tutorial we're going to continue the development of the IndexPost layout component by using the globally... +

VuePress Tutorial 18 - IndexPost Images Post Picture

+ VuePress Tutorial 17 - IndexPost Layout +

By: J the Code Monkey
Posted: Oct 17, 2022 Updated: Apr 18, 2023

+ We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped... +

VuePress Tutorial 17 - IndexPost Layout Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/2/index.html b/posts/page/2/index.html new file mode 100644 index 00000000..fb526031 --- /dev/null +++ b/posts/page/2/index.html @@ -0,0 +1,152 @@ + + + + + + Page 2 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ VuePress Tutorial 16 - Pagination +

By: J the Code Monkey
Posted: Sep 30, 2022 Updated: Jul 10, 2024

+ Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blog... +

VuePress Tutorial 16 - Pagination Post Picture

+ VuePress Tutorial 15 - Blog Plugin +

By: J the Code Monkey
Posted: Sep 21, 2022 Updated: Jul 17, 2024

+ It's now time to install and begin the process of configuring @vuepress/plugin-blog. We're going to start by describing... +

VuePress Tutorial 15 - Blog Plugin Post Picture

+ VuePress Tutorial 14 - Dropdown Menu Styling +

By: J the Code Monkey
Posted: Sep 15, 2022 Updated: Apr 18, 2023

+ If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling... +

VuePress Tutorial 14 - Dropdown Menu Styling Post Picture

+ VuePress Tutorial 13 - Navbar Styling +

By: J the Code Monkey
Posted: Sep 11, 2022 Updated: Apr 18, 2023

+ Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling... +

VuePress Tutorial 13 - Navbar Styling Post Picture

+ VuePress Tutorial 12 - Highlight SVGs on Hover +

By: J the Code Monkey
Posted: Sep 8, 2022 Updated: Jul 17, 2024

+ We're now ready to add a highlight effect when hovering over the SVG icons. The method we'll be using doesn't require a lot of... +

VuePress Tutorial 12 - Highlight SVGs on Hover Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/3/index.html b/posts/page/3/index.html new file mode 100644 index 00000000..bdaa14a0 --- /dev/null +++ b/posts/page/3/index.html @@ -0,0 +1,152 @@ + + + + + + Page 3 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ VuePress Tutorial 11 - Sticky Footer +

By: J the Code Monkey
Posted: Sep 5, 2022 Updated: Apr 18, 2023

+ We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into... +

VuePress Tutorial 11 - Sticky Footer Post Picture

+ VuePress Tutorial 10 - Homepage Styling Part 2 +

By: J the Code Monkey
Posted: Sep 2, 2022 Updated: Apr 18, 2023

+ In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global... +

VuePress Tutorial 10 - Homepage Styling Part 2 Post Picture

+ VuePress Tutorial 9 - Styling the Homepage +

By: J the Code Monkey
Posted: Aug 31, 2022 Updated: Apr 18, 2023

+ The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files... +

VuePress Tutorial 9 - Styling the Homepage Post Picture

+ VuePress Tutorial 8 - Custom Footer +

By: J the Code Monkey
Posted: Apr 6, 2022 Updated: Jul 17, 2024

+ Now it's time to start building the custom footer component for the site. Before creating the footer component, we're... +

VuePress Tutorial 8 - Custom Footer Post Picture

+ VuePress Tutorial 7 - Navbar Logo and Links +

By: J the Code Monkey
Posted: Mar 12, 2022 Updated: Apr 19, 2023

+ In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default theme... +

VuePress Tutorial 7 - Navbar Logo and Links Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/4/index.html b/posts/page/4/index.html new file mode 100644 index 00000000..b146bf61 --- /dev/null +++ b/posts/page/4/index.html @@ -0,0 +1,152 @@ + + + + + + Page 4 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ VuePress Tutorial 6 - Homepage Layout +

By: J the Code Monkey
Posted: Feb 3, 2022 Updated: Jul 10, 2024

+ In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default theme... +

VuePress Tutorial 6 - Homepage Layout Post Picture

+ VuePress Tutorial 5 - Configuration Basics +

By: J the Code Monkey
Posted: Jan 26, 2022 Updated: Jul 10, 2024

+ Currently, the site consists of a homepage with a title saying "Hello VuePress", and a search box which builds an index from... +

VuePress Tutorial 5 - Configuration Basics Post Picture

+ VuePress Tutorial 4 - Directory Structure +

By: J the Code Monkey
Posted: Jan 22, 2022 Updated: Jul 17, 2024

+ We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the... +

VuePress Tutorial 4 - Directory Structure Post Picture

+ VuePress Tutorial 3 - Set Up and Installation +

By: J the Code Monkey
Posted: Jan 16, 2022 Updated: Apr 18, 2023

+ First we'll be going over how to create a repository on GitHub. If you plan on using these tutorials as guides and want to... +

VuePress Tutorial 3 - Set Up and Installation Post Picture

+ Installing Yarn 1 +

By: J the Code Monkey
Posted: Dec 28, 2021 Updated: Apr 18, 2023

+ Before discussing Yarn in more detail, let's first define what a package manager is and what it handles for us. A pacakage... +

Node.js - Installing Yarn 1 Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/5/index.html b/posts/page/5/index.html new file mode 100644 index 00000000..63382294 --- /dev/null +++ b/posts/page/5/index.html @@ -0,0 +1,152 @@ + + + + + + Page 5 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ Installing Fast Node Manager (fnm) +

By: J the Code Monkey
Posted: Dec 8, 2021 Updated: Apr 18, 2023

+ Fast Node Manager (fnm) is a fast and simple Node version manager built in Rust. For those of you who haven't read... +

Node.js - Installing Fast Node Manager (fnm) Post Picture

+ Installing Node Version Manager (nvm) +

By: J the Code Monkey
Posted: Dec 7, 2021 Updated: Apr 18, 2023

+ A Node version manager allows you to easily install and switch between numerous versions of Node.js. This is useful... +

Node.js - Installing Node Version Manager (nvm) Post Picture

+ VuePress Tutorial 2 - Why Use VuePress? +

By: J the Code Monkey
Posted: Nov 24, 2021 Updated: Apr 19, 2023

+ VuePress is a minimalistic static site generator (SSG) with a Vue-powered theming system and Plugin API. Originally... +

VuePress Tutorial 2 - Why Use VuePress? Post Picture

+ VuePress Tutorial 1 - Introduction +

By: J the Code Monkey
Posted: Sep 24, 2021 Updated: Apr 18, 2023

+ Welcome to our VuePress series! In this series we'll be developing the Code Monkeys Blog starting from the basics... +

VuePress Tutorial 1 - Introduction Post Picture

+ Reverse String +

By: J the Code Monkey
Posted: Aug 11, 2021 Updated: Jul 3, 2024

+ Write a function that reverses a string. The input string is given as an array of characters. Ex) 1 Input... +

LeetCode - Reverse String Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/6/index.html b/posts/page/6/index.html new file mode 100644 index 00000000..290aad74 --- /dev/null +++ b/posts/page/6/index.html @@ -0,0 +1,152 @@ + + + + + + Page 6 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ Contains Duplicate +

By: J the Code Monkey
Posted: Aug 6, 2021 Updated: Jul 3, 2024

+ Given an integer array nums, return true if any value appears at least twice, and return false if every... +

LeetCode - Contains Duplicate Post Picture

+ Remove Duplicates from Sorted Array +

By: J the Code Monkey
Posted: Jul 3, 2021 Updated: Jul 3, 2024

+ Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each... +

LeetCode - Remove Duplicates from Sorted Array Post Picture

+ Valid Anagram +

By: J the Code Monkey
Posted: Jul 2, 2021 Updated: Jul 3, 2024

+ Given two strings s and t, return true if t is an anagram of s, and false otherwise. Ex 1) Input... +

LeetCode - Valid Anagram Post Picture

+ Climbing Stairs Solution 2 +

By: J the Code Monkey
Posted: Jul 1, 2021 Updated: Jul 3, 2024

+ You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps... +

LeetCode - Climbing Stairs Solution 2 Post Picture

+ Climbing Stairs Solution 1 +

By: J the Code Monkey
Posted: Jun 30, 2021 Updated: Jul 3, 2024

+ You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps... +

LeetCode - Climbing Stairs Solution 1 Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/posts/page/7/index.html b/posts/page/7/index.html new file mode 100644 index 00000000..3ff75815 --- /dev/null +++ b/posts/page/7/index.html @@ -0,0 +1,135 @@ + + + + + + Page 7 - All Posts | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ The Scribblings of a +
Monkey!!! 📝🐒

+ Single Number +

By: J the Code Monkey
Posted: Jun 29, 2021 Updated: Jul 3, 2024

+ Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single... +

LeetCode - Single Number Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/raspberry-pi-configuring-settings/index.html b/raspberry-pi-configuring-settings/index.html new file mode 100644 index 00000000..daae56ff --- /dev/null +++ b/raspberry-pi-configuring-settings/index.html @@ -0,0 +1,128 @@ + + + + + + Configuring Settings | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Configuring Settings

By: J the Code Monkey
Posted: Dec 20, 2022 Updated: Apr 27, 2023

# What We're Doing

In this tutorial we're going to learn how to configure various settings for a Raspberry Pi (opens new window) using standard Debian (opens new window) commands. Since we'll be using standard Debian commands, the commands will be compatible with most other hardware platforms running Debian.

Instead of using the standard Debian commands to configure the settings, you can preconfigure the settings with the Raspberry Pi Imager (opens new window) by using the advanced options when installing the Raspberry Pi OS (opens new window). You also have the option to use the raspi-config (opens new window) tool to configure the settings.

If you preconfigure the settings using the Raspberry Pi Imager, you can always update them later by using either the raspi-config tool or the standard Debian commands discussed in this post.

Raspberry Pi Imager Boot Issues

If you're having issues booting your Raspberry Pi after preconfiguring the settings using the Raspberry Pi Imager, then don't preconfigure the settings. Instead you can use the raspi-config tool or the standard Debian commands to configure the settings after booting into the Raspberry Pi.

We'll be configuring the following settings:

  • Username
  • Password
  • Secure Shell (SSH)
  • WiFi
  • Time Zone
  • Keyboard Layout

We'll be using the nano text editor to edit the configuration files.

Here's how to save and exit nano:

  • Save: press Ctrl+o, confirm the filename, and press the Enter key
  • Exit: press Ctrl+x

# Assumptions

We're making the following assumptions:

# Username

There are multiple ways to update your username. We'll be updating the username by logging in as the root user. Instead of using the root user, it's also possible to create another user and log into it to update the username.

Don't Use pi for your Username

For security reasons it's recommended to not use pi as your username since it has been used in the past as the default username. Potential hackers have a list of commonly used usernames which may include the pi username.

# Enable root User

To update the username using the root user, you first need to enable it which you can do by running the following command:

Be sure to choose a secure password for the root user. You can use a password mananger like KeePass (opens new window) or Bitwarden (opens new window) to generate and store your passwords.

Disabling the root User

You can also disable the root user if you want after updating the username which we'll demonstrate below. For security reasons it's recommended to disable the root user after updating the username.

# Logout

After enabling the root user, you need to log out of the current user which you can do with the following command:

# Update Username

Now, you'll need to log in using the root user by entering root for the username and the password you just created for the root user.

After logging in as the root user, you're now ready to update the username by running the following command:

Be sure to replace:

  • <new_username> with the updated username
  • <old_username> with the username you want to update

# Update home Directory

The username has been updated, but the user's home directory will still be using the previous username. To update the home directory to reflect the updated username you need to run the following command:

Be sure to replace:

  • <new_username> with the updated username

You can now log out of the root user by running the logout command we used earlier, and log in using the updated username and the user's password.

# Disable root User

You can now disable the root user if you want, but you'll first want to make sure the updated user still has sudo privileges. You can check this by running the following command:

Be sure to replace:

  • <new_username> with the updated username

If the user still has sudo privileges, you should see the sudo group in the output.

After confirming the updated user still has sudo privileges, you can disable the root user by running the following command:

# Password

To update the password for your user you can run the following command:

You will need to enter the current password for the user. Then you will be asked to enter the updated password and to re-enter the updated password.

Be sure to choose a secure password for your user. You can again use a password mananger like KeePass (opens new window) or Bitwarden (opens new window) to generate and store your passwords.

Don't Use raspberry for your Password

It's recommended to not use raspberry as your password since it has been used in the past as the default password plus it isn't a secure password anyway.

# Hostname

Every Raspberry Pi using Raspberry Pi OS Lite (64-bit) uses the default hostname raspberrypi which isn't very helpful when you're using multiple Raspberry Pi devices that you're trying to distinguish between on your network.

hostname Restrictions

The hostname may contain lowercase letters 'a' through 'z', uppercase letters 'A' through 'Z', numbers '0' through '9', and hyphens '-' as long as the first and last characters aren't hyphens. No other symbols, punctuation characters, or white space are allowed in the hostname.

# hosts File

To update the hostname you can open the /etc/hosts file by running the following command:

Your hosts file should look something like this:

Be sure to replace:

  • <old_hostname> with the updated hostname

Then save and exit the file.

# hostname File

Next you need to open the /etc/hostname file by running the following command:

Your hostname file should look something like this:

Be sure to replace:

  • <old_hostname> with the updated hostname

Then save and exit the file.

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

After rebooting the command prompt should now display, <username>@<new_hostname>.

Where:

  • <username> is the username of the current user
  • <new_hostname> is the updated hostname

# Enable and Start SSH

Secure Shell (SSH) is a network communication protocol that enables you to connect securely to a remote computer or a server by using a text-based interface. When a secure SSH connection is established, a shell session is started, and you'll be able to manipulate the server by typing commands from your local computer.

If you want to remotely connect to your Raspberry Pi, i.e., be able to access it from your local computer, then you'll need to enable and start the SSH service on the Raspberry Pi.

# Enable SSH

To enable SSH run the following command:

# Start SSH

To start the SSH service run the following command:

You should now be able to SSH into the Raspberry Pi from your local computer.

# Configure WiFi

To configure WiFi you need to edit the wpa_supplicant.conf file.

# wpa_supplicant.conf

The wpa_supplicant.conf file should be located in the /etc/wpa_supplicant directory.

To open the wpa_supplicant.conf file you can run the following command:

After editing the file, it should look like this:

Be sure to replace:

Then save and exit the file.

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

# Unblock WiFi

If you get the following message after rebooting:

Then you can run the following command to unblock the WiFi;

Be sure to replace:

Instead of using raspi-config to unblock the WiFi which isn't a standard Debian command, you can also try installing and running urfkill.

Run the following command to install urfkill:

To unblock the WiFi using urfkill run the following command:

# Test Connection

To test the WiFi connection you can check the IP address by running the following command:

# Locale Settings

We're now going to go over how to update the time zone and keyboard layout locale settings.

# Time Zone

You can check the current time zone by running the following command:

To update the time zone you can run the following command:

Be sure to replace:

  • <area> with your own area
  • <location> with your own location

If you're unsure what your area and location are, then take a look at the list of tz database time zones (opens new window).

# Keyboard Layout

To update the keyboard layout you can edit the keyboard file which is located in the /etc/default directory.

To open the keyboard file you can run the following command:

After editing the file, it should look like this:

Be sure to replace:

  • <layout> with your preferred keyboard layout, e.g., us

Then save and exit the file.

The value for the keyboard layout is typically the two character country code (opens new window).

After updating the time zone and keyboard layout locale settings, you need to reboot your Raspberry Pi to see the changes take effect which you can do by running the following command:

# Conclusion

After following only with this tutorial, you should now know how to configure various settings for your Raspberry Pi using standard Debian commands.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/remove-duplicates-from-sorted-array/index.html b/remove-duplicates-from-sorted-array/index.html new file mode 100644 index 00000000..82068dae --- /dev/null +++ b/remove-duplicates-from-sorted-array/index.html @@ -0,0 +1,149 @@ + + + + + + Remove Duplicates from Sorted Array | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Remove Duplicates from Sorted Array

By: J the Code Monkey
Posted: Jul 3, 2021 Updated: Jul 3, 2024

Remove Duplicates from Sorted Array

Get the code & notes on

# Problem Description

Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.

Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.

Return k after placing the final result in the first k slots of nums.

Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.

# Examples

Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _]

Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

# Constraints

  • nums is sorted in non-decreasing order.

# What does In-Place mean?

  • Let's start by defining in-place which is an algorithm that transforms input using no auxiliary data structure.

  • So, we cannot allocate extra space for another array, a hash table, or any other data structure.

  • Another way of saying this is we must use O(1) extra memory.

# Removing (or Moving) Duplicates & Maintaining Relative Order

  • In JavaScript we can change the length of an array by adding or removing elements, but in other languages like C for example we cannot change the length of an array after it's created.

  • So, to get around this we're told we can place the result in the first part of nums.

  • Recall the formal description from earlier: if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result, and it doesn't matter what is left after the first k elements.

  • The examples from earlier should make this clearer:

    • Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _ ]

    • Notice:

      • The output maintains the relative order for nums by keeping the elements we care about in non-decreasing order.

      • Also, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

    • Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

    • Notice:

      • The output maintains the relative order again for nums by keeping the elements we care about in non-decreasing order.

      • And again, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

# How to Modify nums In-Place?

  • We're told we can only modify nums in-place.

  • Let's start with nums = [1, 1, 1, 2, 2], and see if we can come up with some way to move around the elements to get our desired output.

  • Let's start by taking our 1st element in nums and compare it with the 2nd element, then we can compare the 2nd element with the 3rd and so on...

  • 1st Iteration:

  • 2nd Iteration:

  • 3rd Iteration:

  • 4th Iteration:

  • After the 4th iteration, there's nothing left to compare nums[4] with, so that's the last iteration we need.

  • During our iterations we had to keep track of our current element in nums which we'll call nums[i] and the next element in nums which will be nums[i + 1].

  • We also had to keep track of which element we needed to replace in nums if we ran into an element we hadn't seen before which we'll call nums[j].

  • So, to implement this we'll loop over nums from the beginning to the length of nums - 1 since when we get to the last element there's nothing else for us to compare it with.

  • On each iteration we'll compare the current element of nums which is nums[i] with the next element of nums which is nums[i + 1].

  • If they're not equal then we'll set nums[j] = nums[i + 1] where j gets initialized to 1, and we'll increment j every time nums[i] doesn't equal nums[i + 1].

  • We also need to remember the case of nums.length = 0 which means we have no elements in our array, so we'll just return 0.

# Implementation

var removeDuplicates = function(nums) {
+  const numsLength = nums.length;
+
+  if (numsLength === 0) {
+    return 0;
+  }
+
+  let j = 1;
+  for (let i = 0; i < numsLength - 1; i++) {
+    if (nums[i] !== nums[i + 1]) {
+      nums[j] = nums[i + 1];
+      j++;
+    }
+  }
+
+  return j;
+};
+
+nums = [1, 1, 1, 2, 2];
+console.log('k =', removeDuplicates(nums), 'nums =', nums);
+
+

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/bitcoin/index.html b/resources/bitcoin/index.html new file mode 100644 index 00000000..35c284dd --- /dev/null +++ b/resources/bitcoin/index.html @@ -0,0 +1,128 @@ + + + + + + Bitcoin | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Bitcoin
₿ 🐒

Here you'll find a list of resources related to Bitcoin presented in alphabetical order. While I believe these links are to resources that will help you gain a better conceptual and practical understanding of Bitcoin, I haven't personally used and verified all of them. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

# Blockchain Explorers

Blockstream Explorer (opens new window) - Open source blockchain explorer that supports Bitcoin mainnet, Bitcoin testnet, Liquid mainnet, and Liquid testnet that can be used with Tor to conceal your IP address

Mempool.space (opens new window) - Open source self-hostable mempool explorer and blockchain explorer for Bitcoin that can be used with Tor to conceal your IP address

Other eXploration Tool (OXT) (opens new window) - Blockchain explorer, visualization tool, and analysis platform for the Bitcoin ledger. Be sure to check out the FAQ (opens new window) page to see how they handle your personal information when using the site

# Books

21 Lessons (opens new window) - Distillation of the lessons learned after falling down the Bitcoin rabbit hole written by Gigi

Bitcoin: A Work in Progress (opens new window) - Focused on guiding the reader through the latest developments in Bitcoin through the eyes of Sjors Provoost one of the many Bitcoin core developers

Mastering Bitcoin (opens new window) - Focused on providing developers with a technical understanding of Bitcoin written by Andreas M. Antonopoulos

Mastering the Lightning Network (opens new window) - Focused on providing developers with a technical understanding of the Lightning Network written by Andreas M. Antonopoulos, Olaoluwa Osuntokun, and Rene Pickhardt

Programming Bitcoin (opens new window) - Learn how to program a Bitcoin library with this hands-on guide that goes over the math, blocks, network, transactions, proof-of-work, and more written by Jimmy Song a Bitcoin core developer and educator

Thank God for Bitcoin (opens new window) - Explores the creation of money, its corruption, and its potential redemption by examining the effects Bitcoin is having on transitioning the world to a sound monetary standard

The Bitcoin Standard (opens new window) - Analyzes the historical context of the rise of Bitcoin, the economic properties that have allowed it to grow quickly, and its likely economic, political, and social implications written by Saifedean Ammous

The Fiat Standard (opens new window) - Provides an examination of twentieth century monetary technology and explains its benefits, drawbacks, and its many modes of failure written by Saifedean Ammous

The Little Bitcoin Book (opens new window) - Focused on describing in simple terms what Bitcoin is, how it works, why it's valuable, and how it affects individual freedom and opportunities of people everywhere written by the Bitcoin Collective

# Collaborative Custody

Unchained Capital (opens new window) - Trusted multisig storage solution where you are making the decision to trust Unchained Capital with your privacy but not with your funds in exchange for better security, redundancy, and support when storing your Bitcoin

# Dashboard

Clark Moody's Dashboard (opens new window) - A single page view into the metrics of the Bitcoin ecosystem which includes market data, network data, mining data, and more

# Education

6102bitcoin (opens new window) - Pseudonymous bitcoin user and educator with the goal of accelerating bitcoin understanding

Bitcoiner.Guide (opens new window) - A collection of resources from BitcoinQnA focused on providing Bitcoin education with an emphasis on how to use Bitcoin in a sovereign and private way

Bitcoin Only (opens new window) - A collection of high quality Bitcoin resources including meetups, books, wallets, hardware, podcasts, and more

Bitcoin Optech (opens new window) - Helping Bitcoin users and businesses integrate scaling technologies by providing workshops, documentation, weekly newsletters, original research, case studies and announcements, analysis of Bitcoin software and services, and a podcast

Bitcoin Resources (opens new window) - Provides numerous Bitcoin related resources including videos, books, articles, podcasts, and more

Bitcoin Stack Exchange (opens new window) - Question and answer site for Bitcoin cryptocurrency enthusiasts

Bitcoin University (opens new window) - Educational content devoted to Bitcoin, financial freedom, self-sovereignty, and relevant macro and financial news

Bitcoin Wiki (opens new window) - Wiki dedicated to providing all of your Bitcoin information needs including how to get started, software, mining, exchanges, technical content, economics, and more

BTC Sessions (opens new window) - Bitcoin educator focused on helping people gain an understanding of Bitcoin by providing tutorials on wallets, hardware, security, exchanges, and more

Diverter (opens new window) - Focused on Bitcoin, privacy, and censorship-resistance by learning how to use the related tools

Econoalchemist (opens new window) - Blog focused on bringing you articles about interacting with Bitcoin in a self-custodial, censorship-resistant, and private way

k3tan (opens new window) - Focused on providing educational content on how to transition to a Bitcoin standard by showing people how to hold their own keys, use their own node, and more

Keep it Simple (opens new window) - Focused on teaching people how to interact with Bitcoin

Odell (opens new window) - A Bitcoin entrepreneur attempting to stay humble and stack sats with a focus on using Bitcoin and free and open source software as sovereignly and privately as possible

We Run BTC (opens new window) - Focused on providing guides and resources about Bitcoin with an emphasis on how to interact with Bitcoin in a sovereign and private way

# Entertainment

Bitcoin Yoda (opens new window) - An entertaining YouTube channel that makes funny videos about Bitcoin like The Bitcoin HODL Dance, Money Printer Goes Brrr! (Central Bank's Favorite Song), Michael Saylor's Investment Advice, and more

# Hardware Wallets

Coldcard Mk4 (opens new window) - Viewable, editable, and verifiable source code, Bitcoin-only, and has numerous security features including dual secure elements to store your private key, air-gapped, i.e., can be used without ever connecting it directly to a computer, duress PIN, comes in a tamper-evident numbered bag with the bag number recorded into the device, and more

SeedSigner (opens new window) - Build your own air-gapped and stateless hardware wallet using publicly available hardware components. The benefits of creating your own hardware wallet are you're not relying on centralized companies, and you can buy the pieces privately from multiple vendors spaced out over time. Note that there are no secure elements used to store your private key and you're relying on closed source hardware since it uses a Raspberry Pi

Trezor Model T (opens new window) - Open source hardware and software that has numerous security features including PIN and passphrase entry directly into the device, shamir backup, FIDO2 and U2F authentication standards, transaction anonymization using CoinJoin, and more. Note that there are no secure elements used to store your private key

# Jobs

Bitcoiner Jobs (opens new window) - Leading career site with the goal of helping to build the emerging Bitcoin industry and the careers of Bitcoiners within it

PlebLab (opens new window) - Bitcoin hackerspace and community accelerator based in Austin, Texas focused on supporting early stage Bitcoin start-ups and developers building the future of Bitcoin

# Media

Bitcoin Magazine (opens new window) - Source of news, information and expert commentary on Bitcoin, its underlying blockchain technology and the industry that has been built up around it

BitcoinTV (opens new window) - A repository of educational video content for the Bitcoin community, without distractions like advertising, altcoins, or third-party trackers

No BS Bitcoin (opens new window) - A news desk for Bitcoiners by Bitcoiners without ads, paywalls, or clickbait includes Bitcoin related news, updates, research, guides, weekly digest, and more

TFTC (opens new window) - A media company focused on Bitcoin, Beauty, and Freedom in the Digital Age

# Meetups

Bitcoin Park (opens new window) - Community supported campus in Nashville, Tennessee focused on grassroots Bitcoin adoption and a home for Bitcoiners to work, learn, collaborate, and build

Bitcoiner Events (opens new window) - Curated list of all the best Bitcoin-only events, meetups, and conferences around the world

Bitcoin Meetup Groups (opens new window) - Find a local Bitcoin meetup group by searching for upcoming meetups near you. Remember to do your own research to avoid any sketchy meetups, and don't share any personal information that you don't want others to know

# Nodes

myNode (opens new window) - Open source prebuilt Bitcoin and Lightning node that comes with many features including Tor support, Bitcoin Explorer, Electrum Server, multisig tools, an easy-to-use web interface, and more

Nodl (opens new window) - Open source prebuilt Bitcoin and Lightning full node that comes with many features including BTCPay Server, Tor support, Electrum Rust Server (Electrs), Ride the Lightning (RTL), BTC RPC Explorer, and more

RaspiBolt (opens new window) - Set up your own Bitcoin and Lightning node from scratch doing everything yourself. You'll learn about Linux, Bitcoin, and Lightning

RoninDojo (opens new window) - Open source high performance plug and play full node with an emphasis on maintaining strong privacy while interacting with Bitcoin

Start9 (opens new window) - They develop the open source Linux-based Operating System (OS) embassyOS which is built specifically for self-hosting open source software like a Bitcoin full node, a Lightning full node, Mempool.space, and more. You have the option of buying a prebuilt server or you can build your own server and install embassyOS on it

Umbrel (opens new window) - Open source Operating System (OS) for running a personal server in your home that allows you to self-host numerous apps like Nextcloud, a Bitcoin full node, a Lightning node, and more

# Payment Processors

BTCPay Server (opens new window) - Open source self-hostable cryptocurrency payment processor focused on providing secure, private, and censorship-resistant payments

# Peer-to-Peer (P2P) Exchanges

# Reviews

KYCNOT.ME (opens new window) - Open source privacy focused website with the goal of providing a list of Non KYC exchanges and ranking them based on how well you can use them in an anonymous way. The website may not always be up to date, so be sure to do your own research. Don't trust, verify!

# Exchanges

AgoraDesk (opens new window) - Closed source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin, Monero, and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a semi-custodial wallet, no JavaScript needed to use the service, the service has an API available, and Android and iOS apps are available

Bisq (opens new window) - Open source peer-to-peer (P2P) exchange that you run on your own hardware over Tor, accepts Bitcoin, Monero, and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and no JavaScript needed to use the service

Hodl Hodl (opens new window) - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a non-custodial wallet, JavaScript is needed to use the service, the service has an API available, and refunds may require KYC

Peach (opens new window) - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin and cash, doesn't allow you to swap coins, doesn't require an account, uses a non-custodial wallet, no JavaScript needed to use the service, Android and iOS apps are available, and refunds are handled without the need of a KYC procedure

Robosats (opens new window) - Open source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and the service has an API available

# Podcasts

Bitcoin Explained (opens new window) - If you're interested in learning more about the technical side of Bitcoin, then you should check out this podcast with Bitcoin Magazine's Technical editor Aaron van Wirdum and Bitcoin core contributor Sjors Provoost

Bitcoin Fixes This (opens new window) - An exploration of the impact Bitcoin has had and continues to have on multiple aspects of society hosted by Jimmy Song

Bitcoin Fundamentals (opens new window) - Show focused on discussing Bitcoin fundamentals, investing, and news hosted by Preston Pysh

Bitcoin Review Podcast (opens new window) - Technical updates and commentary on Bitcoin and related projects hosted by Rodolfo Novak (NVK)

Citadel Dispatch (opens new window) - An interactive live show about Bitcoin and freedom tech with an emphasis on actionable steps one can take to become more sovereign and private when using Bitcoin hosted by Matt Odell

Rabbit Hole Recap (opens new window) - Recap of the weeks events in the world of Bitcoin hosted by Matt Odell and Marty Bent

The Bitcoin Standard Podcast (opens new window) - Discusses Bitcoin, Austrian economics, and various news and events hosted by Saifedean Ammous

What Bitcoin Did (opens new window) - A tri-weekly Bitcoin podcast where host Peter McCormack interviews experts in the world of Bitcoin development, privacy, investment and adoption

# Products

Coinkite (opens new window) - Company focused on designing and manufacturing bitcoin security and fun devices like the Coldcard, Opendime, Tapsigner, Satscard, Blockclock, and more

Crypto Cloaks (opens new window) - Company focused on designing and manufacturing 3D printed Bitcoin related products like node shells, hardware wallet mounts, home mining devices, and more

# Website

Bitcoin (opens new window) - Bitcoin core website that has introductory resources for individuals, businesses, and developers, resources, ways to participate, FAQs, and more

# Seed Storage

# Reviews

Metal Bitcoin Seed Storage Reviews (opens new window) - Stress tests and reviews of seed storage devices by Jameson Lopp the grades are based on how well the devices resist heat, corrosion, and being crushed

# Storage Devices

Bitplates (opens new window) - Multiple plate sizes available, uses stainless steel (Marine Grade 316L), plates are laser cut for precision and engraved to ensure permanent marking, suitable for use with BIP39 and SLIP39 compatible Bitcoin wallets, up to 24 seed words per plate, and received an overall grade of A from Jameson Lopp

Blockplate (opens new window) - Inventor of center punch style seed storage, 12 word, 24 word, and passphrase plates available, uses thick 12 gauge stainless steel, plates are laser cut for precision and engraved to ensure permanent marking, received an overall grade of A from Jameson Lopp, and made in the USA

Codl (opens new window) - Multiple plate sizes and types of plates available including passphrase plates, uses 304 stainless steel, received an overall grade of A from Jameson Lopp, made in the USA, and they make a really cool stainless steel copy of the Bitcoin white paper

Quadrat Register (opens new window) - Multiple plate sizes and types of plates available, uses AISI 316 Ti stainless steel, received an overall grade of A from Jameson Lopp, made in Germany

Seedplate (opens new window) - Single plate design, 12 words per side, etch marks chemically colored in black for better legibility, designed to be small, compatible with Seed XOR, received an overall grade of A from Jameson Lopp, and made by Coinkite in Canada

# Software Wallets

# Lightning and On-Chain

Blue Wallet (opens new window) - Open source wallet for Android and iOS that supports numerous features including multiple wallets, watch-only wallets, multisig vault, fee and transaction control, plausible deniability, batch transactions, coin control, PayJoin, ability to use your own Bitcoin and Lightning nodes, and more

Electrum (opens new window) - Open source wallet for Linux, macOS, Windows, and Android that supports numerous features including multiple wallets, watch-only wallets, multisig, fee and transaction control, passphrases, coin control, ability to use your own Bitcoin node, and more

Fully Noded (opens new window) - Open source wallet for iOS and macOS that automatically prompts you to connect your own Bitcoin full node and acts as an offline signer using your node as a watch-only wallet

Muun (opens new window) - Open source wallet for Android and iOS that uses a unique 2 of 2 multisig setup that stores only one private key on your phone and both of the private keys in an emergency kit which allows for a balance between hot and cold storage

# Lightning Only

Alby (opens new window) - Open source browser extension that allows you to connect one or multiple Lightning wallets and control them in your browser, generate and manage multiple Nostr keys, and interact with numerous Bitcoin applications seamlessly. Note connecting your own Lightning node is an experimental feature, so the extension uses a custodial Lightning node which means you're trusting a third-party with your funds and privacy

Breez (opens new window) - Open source Android and iOS full-service, non-custodial Lightning client that offers many features like cloud backups, connecting to multiple nodes including your own, built-in next-generation podcast player, and more

Phoenix (opens new window) - Open source Android and iOS non-custodial Lightning wallet and node that offers many features and is powered by Eclair

RTL (opens new window) - Open source full function, device agnostic, web user interface Lightning wallet and node management tool available on Lightning Network Daemon (LND), Core Lightning, and Eclair implementations

Zap (opens new window) - Open source non-custodial Lightning wallet available for Android, iOS, Linux, macOS, and Windows that offers many features including connecting to your own Lightning node

Zeus (opens new window) - Open source Android and iOS non-custodial Lightning wallet that offers many features including connecting to your own Lightning node

# On-Chain Only

Nunchuk (opens new window) - Open source wallet available for Android, iOS, Linux, macOS, and Windows with an emphasis on combining security and ease of use. It supports numerous features including multisig, collaborative custody, inheritance planning, Tapsigner integration, connecting to your own Bitcoin full node, and more

Sparrow (opens new window) - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to use all Hierarchical Deterministic (HD) wallets, strong encryption, detailed wallet history, coin control, connecting to your own Bitcoin full node, using your own blockchain explorer, and more

Specter (opens new window) - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to connect your own Bitcoin full node, support for numerous hardware wallets, multisig, coin control, and more

# Statistics

Know Your Coin Privacy (KYCP) (opens new window) - Open source online tool for users to visualize the degree of privacy in a Bitcon transaction. Their zero log policy states KYCP is a static client for OXT, no backend or third-party service involved other than OXT, queries are directly sent to OXT over HTTPS, and there is no way to see or log your searches

Mempool Observer (opens new window) - Interesting statistics about the Bitcoin mempool including current data, historical data, recent blocks, Segregated Witness (SegWit) data, a transaction monitor, and more

# Support

Bitcoin Dev List (opens new window) - Open source Bitcoin donation portal that lists people working on Bitcoin and related projects with the goal of increasing visibility of contributors to the space that are accepting donations

OpenSats (opens new window) - Focused on helping to support and maintain a sustainable ecosystem of funding for free and open source projects and contributors related to Bitcoin

Ten31 (opens new window) - Venture capital fund focused exclusively on investing in the Bitcoin ecosystem

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/foss/index.html b/resources/foss/index.html new file mode 100644 index 00000000..5ea9d60b --- /dev/null +++ b/resources/foss/index.html @@ -0,0 +1,128 @@ + + + + + + Free and Open Source Software (FOSS) | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Free and Open Source Software (FOSS)
💻 🐒

Here you'll find a list of resources related to free and open source software (FOSS) presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

# Education

Free Software vs Open Source vs Freeware (opens new window) - Clarifies the differences between free software, open source, and freeware which are often confusingly used interchangeably

Luke Smith (opens new window) - A LandChad that emphasizes the importance of using FOSS as well as self-hosting your own websites and applications

What is Free Software? (opens new window) - Description of the philosophy and principles behind free software from the Free Software Foundation (FSF)

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/index.html b/resources/index.html new file mode 100644 index 00000000..46fc6d13 --- /dev/null +++ b/resources/index.html @@ -0,0 +1,128 @@ + + + + + + Resources | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Giving Credit to the Great
Apes!!! 🦍 🍌 🐒

Here you'll find a list of topics I'm interested in presented in alphabetical order. The goal of providing resources for these topics is to help people learn more about programming as well as to provide people with free and open source software that also respects their privacy.

Moving over to using only free and open source software that also respects users' privacy is a process, so don't feel like you have to switch everything at once. I'm still using proprietary software that doesn't respect users' privacy, and I may continue to do so if I feel the pros outweigh the cons. However, over time if possible I would prefer to phase out all of the proprietary software I'm using.

While I believe these links are to resources that will help you gain a better conceptual and practical understanding of the topics, I haven't personally used and verified all of these resources. Be sure to do your own research and always double check the links are bringing you to the correct sites, especially when dealing with a site related to privacy or finances. Don't trust, verify.

I'll be updating these resources from time to time, so if you have any suggestions on how to improve them let me know.

# Bitcoin

"The root problem with conventional currency is all the trust that’s required to make it work. The central bank must be trusted not to debase the currency, but the history of fiat currencies is full of breaches of that trust." - Satoshi Nakamoto

Bitcoin is a decentralized digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer (P2P) technology to operate with no central authority: transaction management and money issuance are carried out collectively by the network.

# Free and Open Source Software (FOSS)

“Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change, and improve the software.

"Open source software" also gives the users the ability to run, copy, distribute, study, change, and improve the software; however, it does not share the same goal of making sure the software that is being developed is actually attempting to improve users' freedom.

# Notes and Other Stuff Transmitted by Relays (Nostr)

The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all.

It doesn't rely on any trusted central server, hence it is resilient; it is based on cryptographic keys and signatures, so it is tamperproof; it does not rely on peer-to-peer (P2P) techniques, and therefore it works.

# Privacy

“Privacy is the power to selectively reveal oneself to the world." - Eric Hughes

To learn more about why privacy is important especially in our digital age, then be sure to check out these resources which include tools that you can use to increase and maintain your privacy.

# Web Development

To learn about the process of building, programming, and maintaining websites and web applications using HTML, CSS, JavaScript, TypeScript, etc., then be sure to check out these resources.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/nostr/index.html b/resources/nostr/index.html new file mode 100644 index 00000000..1ee70ed3 --- /dev/null +++ b/resources/nostr/index.html @@ -0,0 +1,128 @@ + + + + + + Notes and Other Stuff Transmitted by Relays (Nostr) | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Notes and Other Stuff Transmitted by Relays (Nostr)
🗒️ 🐒

Here you'll find a list of resources related to Notes and Other Stuff Transmitted by Relays (Nostr) presented in alphabetical order. The way the Nostr protocol works along with the fact that it is still in early development means you may come across inappropriate material on some of the sites.

While I believe these links are to resources that are attempting to remove unrelated and inappropriate content and will help you gain a better conceptual and practical understanding of Nostr, I cannot guarantee that will always be the case. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

# Clients

Astral (opens new window) - A Twitter-like client with a global feed

Blogstack (opens new window) - Decentralized blog posts

Damus (opens new window) - A Twitter-like client for iPhone, iPad, and MacOS

Hamstr (opens new window) - A Twitter-like web client built with Vue.js

Notebin (opens new window) - Decentralized notes

# Documentation

Nostr (opens new window) - Documentation about what Nostr is, why we need it, and how to use it

# Protocol

Nostr (opens new window) - The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all

NIPs (opens new window) - Nostr Implementation Possibilities

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/privacy/index.html b/resources/privacy/index.html new file mode 100644 index 00000000..57cef0f8 --- /dev/null +++ b/resources/privacy/index.html @@ -0,0 +1,128 @@ + + + + + + Privacy | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Privacy
🔒 🐒

Here you'll find a list of resources related to privacy presented in alphabetical order. While I believe these links are to resources that will help you gain better privacy, I haven't personally used and verified all of them. Also, using these recommended resources doesn't guarantee that you'll achieve perfect privacy. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

# Android Web Browsers

Brave (opens new window) - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

Bromite (opens new window) - Open source Chromium based mobile browser with privacy and security focused enhancements including built-in ad blocking

Firefox (opens new window) - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is limited on Android

Firefox Focus (opens new window) - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

Tor (opens new window) - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

# App Stores

F-Droid (opens new window) - App store that contains free and open source software (FOSS) applications for Android

# Card Aliasing

MySudo (opens new window) - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

Privacy (opens new window) - A proprietary credit/debit card aliasing solution when making online purchases

# Cloud Storage

Nextcloud (opens new window) - Open source, self-hostable, and scalable suite for storing photos, documents, files, contacts, and more. It's similar in functionality to Dropbox, Office 365, and Google Drive

# Desktop Web Browsers

Brave (opens new window) - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

Firefox (opens new window) - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons. You can use Firefox Profilemaker (opens new window) to adjust the settings for your needs or use the Arkenfox user.js (opens new window) file instead of the default settings. It's also recommended to download the browser releases from the Mozilla FTP (opens new window) to avoid telemetry tracking on your download

LibreWolf (opens new window) - Open source Firefox based browser with a focus on improving privacy and security by handling the majority of Firefox hardening for you and does a good job of maintaining security updates

Tor (opens new window) - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

UnGoogled Chromium (opens new window) - Open source Chromium based browser with a focus on removing the remaining Google privacy concerns from the open source Chromium browser. Be aware that security updated tend to be a bit slower

# Electronic SIM (eSIM)

Silent Link (opens new window) - A proprietary anonymous electronic SIM (eSIM) that supports global mobile 4G/5G internet as well as inbound texting and calling for US and UK phone numbers that can be used with any modern eSIM compatible smartphone

# Email

ProtonMail (opens new window) - Open source email based in Switzerland with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), zero-access encryption, anti-phishing, anti-spam, two-factor authentication (2FA), and accessibility via Tor

Tutanota (opens new window) - Open source email based in Germany with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), two-factor authentication (2FA), session handling, phishing protection, and more features

# Email Aliasing

SimpleLogin (opens new window) - Open source and self-hostable email aliasing solution built with privacy and security in mind

# Encryption

GNU Privacy Guard (GnuPG) (opens new window) - Open source, complete, and free implementation of the OpenPGP standard. Allows you to encrypt and sign your data and communications

VeraCrypt (opens new window) - Open source encryption software that allows you to create virtual encrypted disks within files and to encrypt entire partitions or storage devices

# File Sharing

Keybase (opens new window) - Open source end-to-end encryption (E2EE) for messaging and file sharing

OnionShare (opens new window) - Open source tool that lets you securely and anonymously share files, host websites, and chat using the Tor network

Syncthing (opens new window) - Open source continuous file synchronization tool that encrypts all communication and allows users to sync files between authenticated devices

# Guides

A Cypherpunk's Manifesto (opens new window) - A summary of the importance of privacy in the digital age written by Eric Hughes

Prism Break (opens new window) - Website dedicated to providing information about privacy services, tools, and protocols

Privacy Tests (opens new window) - Open source tests of web browser privacy

Privacy Guides (opens new window) - Website that provides information for protecting your data security and privacy, and their mission is to inform the public about the value of digital privacy and global government initiatives which aim to monitor your online activity

Privacy Tools (opens new window) - Website dedicated to providing privacy services, tools, and guides. A lot of the services and tools listed here were initially found through this website, so it's a great site to learn more about them as well as privacy in general

Seth for Privacy (opens new window) - An individual interested in educating and learning more about privacy and technology. Check out the Opt Out (opens new window) podcast where he sits down with passionate people within the privacy community to discuss why privacy matters, the tools and techniques they've found and use, and to encourage others towards achieving personal privacy and data sovereignty

Techlore (opens new window) - A team dedicated to spreading privacy and security to the masses by producing projects, communities, and content to help individuals achieve personal privacy. A lot of the services and tools listed here were initially found through their website and content, so it's a great site to learn more about them as well as privacy in general

The Hitchhiker’s Guide to Online Anonymity (opens new window) - Open source and non-profit guide dedicated to providing an introduction to various online tracking techniques, online ID verification techniques, and detailed guidance to creating and maintaining anonymous online identities

The New Oil (opens new window) - Aimed at people who are new to privacy and/or do not consider themselves “tech savvy”, and goes over the basics of various ideas, subjects, and concepts to help you feel educated and capable of making decisions that are right for you without going too in depth to the point that you feel overwhelmed

# iOS Web Browsers

Brave (opens new window) - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

Firefox (opens new window) - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is significantly limited on iOS

Firefox Focus (opens new window) - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

Onion Browser (opens new window) - Open source unofficial Tor browser that prioritizes privacy, anonymity, and censorship resistance, but be aware that iOS limitations means it should not be considered as safe as Tor

# Messengers

Briar (opens new window) - Open source, Tor routed, peer-to-peer (P2P), end-to-end encrypted (E2EE) messaging. The messages are stored securely on your device not in the cloud, and it can be used without internet access by connecting directly with nearby contacts using bluetooth or WiFi

Keybase (opens new window) - Open source end-to-end encryption (E2EE) for messaging and file sharing

Matrix (opens new window) - Open standard for interoperable, secure, decentralized, and real-time communication over IP with end-to-end encryption (E2EE) enabled by default for direct messaging and invite-only rooms. You have the option to self host your own server or to use a public server. One of the more popular clients to use when connecting to the Matrix protocol is Element (opens new window)

Session (opens new window) - Open source messenger that uses end-to-end encryption (E2EE), doesn't collect user data, accounts are completely anonymous, i.e., no phone number is required, messages can be sent through an onion routing network, and is more censorship resistant than other messengers

Signal (opens new window) - Open source messenger that uses end-to-end encryption (E2EE) with a simple interface that requires a phone number to create an account

Threema (opens new window) - Open source messenger that uses end-to-end encryption (E2EE) and can be used without disclosing your phone number or email. Payment is required to use the application which can be paid with Bitcoin

# Mobile Phone

Calyx (opens new window) - Open source Android mobile operating system that focuses on improving privacy and security

GrapheneOS (opens new window) - Non-profit open source mobile operating system project with Android app compatibility that focuses on improving privacy and security

Librem 5 (opens new window) - Uses PureOS which is a Linux distribution with a focus on privacy and security and it incorporates open hardware specifications when possible

PinePhone Pro (opens new window) - Uses an open source Linux based mobile operating system that incorporates open hardware specifications when possible

# Notes

Standard Notes (opens new window) - Open source self-hostable note-taking application that uses end-to-end encryption (E2EE)

# Operating Systems

Arch (opens new window) - Independently developed open source GNU/Linux distribution that provides the latest stable versions of most software by following a rolling-release model. The default installation is a minimal base system configured by the user to only add what they require and offers the flexibility to harden the OS as the user sees fit

Debian (opens new window) - Open source GNU/Linux distribution that offers users security, stability, and reliability

Fedora (opens new window) - Open source GNU/Linux distribution that that focuses on providing users with strong privacy and security by default

Pop!_OS (opens new window) - Open source GNU/Linux distribution developed and maintained by System76 with a focus on providing users with privacy, security, and reliability while maintaining ease of use

Qubes OS (opens new window) - Open source security focused operating system for single user desktop computing that leverages Xen based virtualization to allow for the creation and management of isolated compartments called qubes which are implemented as virtual machines (VMs). Basically it allows you to separate operating systems and the installed programs on those operating systems into multiple and secure environments

# Operating Systems (Live)

Tails (opens new window) - Open source live operating system that routes all traffic through Tor for privacy and anonymity when online and deletes all of your data when you shutdown your computer

Whonix (opens new window) - Open source live and virtual operating system that runs inside your current operating system. All traffic is routed through Tor for privacy and anonymity when online

# Password Managers

Bitwarden (opens new window) - Open source, self-hostable, and cloud-based option password manager that uses zero knowledge end-to-end encryption (E2EE)

KeePass (opens new window) - Open source password manager that uses industry standard encryption and stores all password databases locally on your device

# Phone Number Aliasing

Hushed (opens new window) - A proprietary Voice over IP (VoIP) temporary and secondary US and Canadian phone number aliasing app for data calling and texting that can be used over WiFi

JMP.chat (opens new window) - An open source XMPP based solution that turns your XMPP account into a fully functional US or Canadian phone number that can make and receive calls, texts, and picture messages to standard phone numbers

MySudo (opens new window) - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

Textverified (opens new window) - A proprietary fully functional US phone number aliasing solution that you can use for phone and SMS verification

Viber (opens new window) - A proprietary Voice over IP (VoIP) phone number aliasing solution that supports worldwide numbers

# Prebuilt Computers

Purism (opens new window) - Engineer and manufacture personal computing devices with a focus on privacy and security by producing devices that rely on open hardware and open firmware when possible and open source software

System76 (opens new window) - Engineer and manufacture premium Linux computers and keyboards that use open hardware and open firmware when possible and open source software with a focus on allowing users to freely upgrade and repair their computers, the freedom to use and alter the software on their computer, and to provide the ability for users to learn how their system works

# Search Engines

Brave Search (opens new window) - Proprietary privacy-focused search engine that uses its own independent search index for search results

Searx (opens new window) - Open source configurable and self-hostable metasearch engine which aggregates results from numerous search engines and can be used over Tor for online anonymity

Startpage (opens new window) - Proprietary privacy-focused search engine that consists of privately proxied Google search results without the unwanted tracking, third-party cookies, and targeted ads

# Two-Factor Authentication (2FA)

# Software

Aegis (opens new window) - Open source time-based one-time passwords (TOTP) service for Android that gives you the ability to encrypt your tokens at rest as well as to export your tokens

Tofu (opens new window) - Open source counter-based and time-based one-time passwords (TOTP) service for iOS that requires no network or cellular connection and account details are stored in the iOS keychain

# Hardware

Yubico (opens new window) - Proprietary phishing-resistant multi-factor authentication (MFA)

SoloKeys (opens new window) - First open source fast identity online 2 (FIDO2) security key

Nitrokey (opens new window) - Open source device that enables secure login, email encryption, encrypted mobile storage, disk and file encryption, key and certificate management, and server administration using secure shell (SSH). The company also provides other devices including phones, personal computers, laptops, and more

# VPNs

IVPN (opens new window) - Open source, transparent, and secure VPN provider based in Gibraltar

Mullvad (opens new window) - Open source, transparent, and secure VPN provider based in Sweden

ProtonVPN (opens new window) - Open source, transparent, and secure VPN provider based in Switzerland

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/resources/webdev/index.html b/resources/webdev/index.html new file mode 100644 index 00000000..088784f4 --- /dev/null +++ b/resources/webdev/index.html @@ -0,0 +1,129 @@ + + + + + + Web Development | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Web Development
🕸️ 🐒

Here you'll find a list of resources related to web development presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

# Tutorials

Net Ninja (opens new window) - Black belt your coding skills

Traversy Media (opens new window) - Practical project-based courses that are easy to understand and +straight to the point with no fluff

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/reverse-string/index.html b/reverse-string/index.html new file mode 100644 index 00000000..8d94ca4a --- /dev/null +++ b/reverse-string/index.html @@ -0,0 +1,151 @@ + + + + + + Reverse String | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Reverse String

By: J the Code Monkey
Posted: Aug 11, 2021 Updated: Jul 3, 2024

Reverse String

Get the code & notes on

# Problem Description

Write a function that reverses a string. The input string is given as an array of characters s.

# Examples

Ex 1) Input: s = ["h", "e", "l", "l", "o"] Output: ["o", "l", "l", "e", "h"]

Ex 2) Input: s = ["H", "a", "n", "n", "a", "h"] Output: ["h", "a", "n", "n", "a", "H"]

# Constraints

  • s[i] is a printable ASCII character.

  • Do not allocate extra space for another array. You must do this in-place with O(1) extra memory.

# What is a printable ASCII Character?

  • ASCII stands for American Standard Code for Information Interchange and it consists of 33 non-printable and 95 printable characters.

  • You can check out the non-printable, printable, and extended ASCII characters here (opens new window).

  • For this problem we only care about the printable ASCII characters.

# What does In-Place Mean?

  • In-place refers to an algorithm that transforms input using no auxiliary data structure.

  • So, we cannot allocate extra space for another array, a hash table, or any other data structure.

  • Another way of saying this is we must use O(1) extra memory.

# Thought Process

  • Let's take our two examples from earlier and find a way to model the reversing of the characters in s.

  • Let's start with Ex 1)

    • Initially, we have

    and after reversing s our output should be:

    • To perform the reversal we need to swap the characters in s.

    • We can start by swapping the leftmost character and the rightmost character.

    • Then we'll move to the second leftmost character and the second rightmost character and swap them.

    • We'll continue this process until every character has been swapped if we have an even number of characters, or until we have one unswapped character left if we have an odd number of characters.

    • To perform this swapping we'll need to loop over s while there are still characters that can be swapped.

    • Let's visualize this process to help us see how the swapping will occur and to better understand what we need to keep track of.

      • 1st Iteration:

        • Current Leftmost Character: h

        • Current Rightmost Character: o

        • Now, we can swap the characters by assigning s[0] to be s[4], but if we want to assign s[4] to be s[0], then we must first store s[0] in a temp variable.

        • Storing s[0] in a temp variable will allow us to still have the original character that was stored in s[0].

        • Here's the steps for the swapping process:

        • Here's s after the 1st swap:

      • 2nd Iteration:

        • Current Leftmost Character: e

        • Current Rightmost Character: l

        • Now, we can swap the characters by assigning s[1] to be s[3] and by assinging s[3] to be s[1] using the swapping process from before.

        • Here's the steps for the swapping process:

        • Here's s after the 2nd swap:

        • There are no unswapped characters left to swap with our only remaining unswapped character, s[2], so the reversal is complete.
    • To perform these swaps we had to keep track of the index of our current leftmost character which we'll denote with i and the index of our current rightmost character which we'll denote with j.

    • Keeping track of the current leftmost index required us to start with i = 0 and to increment i on each subsequent iteration.

    • Keeping track of the current rightmost index required us to start with j = s.length - 1 and to decrement j on each subsequent iteration.

    • We continued the loop while i < j.

  • Let's now look at Ex 2)

    • Initially, we have

    and after reversing s our output should be:

    • We need to swap the characters in s again like in Ex) 1.

    • Let's visualize this process to help us see how the swapping will occur for this example:

      • 1st Iteration:

        • Current Leftmost Character: H

        • Current Rightmost Character: h

        • Now, we can swap the characters by assigning s[0] to be s[5] and by assinging s[5] to be s[0] using the swapping process from before.

        • Here's the steps for the swapping process:

        • Here's s after the 1st swap:

      • 2nd Iteration:

        • Current Leftmost Character: a

        • Current Rightmost Character: a

        • Now, we can swap the characters by assigning s[1] to be s[4] and by assinging s[4] to be s[1] using the swapping process from before.

        • Here's the steps for the swapping process:

        • Here's s after the 2nd swap:

      • Note if you wanted to you could include a check to see if the characters are the same before swapping since the result after swapping will be the same.

      • 3rd Iteration:

        • Current Leftmost Character: n

        • Current Rightmost Character: n

        • Now, we can swap the characters by assigning s[2] to be s[3] and by assinging s[3] to be s[2] using the swapping process from before.

        • Here's the steps for the swapping process:

        • Here's s after the 3rd swap:

        • Every character has been swapped, so the reversal is complete.
    • Notice again we continued the loop while i < j.

    • Using the model we described above we can come up with the following implementation:

# Implementation

var reverseString = function(s) {
+  let temp;
+  let i = 0;
+  let j = s.length - 1;
+
+  while (i < j) {
+    temp = s[i];
+    s[i] = s[j];
+    s[j] = temp;
+    i++;
+    j--;
+  }
+};
+
+// Case 1: s has an odd length
+s = ['h', 'e', 'l', 'l', 'o'];
+reverseString(s);
+console.log(s);
+
+// Case 2: s has an even length
+s = ['H', 'a', 'n', 'n', 'a', 'h'];
+reverseString(s);
+console.log(s);
+

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000..56f143dc --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Disallow: +Sitemap: https://codemonkeys.tech/sitemap.xml diff --git a/rss.xml b/rss.xml new file mode 100644 index 00000000..6799a5ff --- /dev/null +++ b/rss.xml @@ -0,0 +1,11328 @@ + + + + + Code Monkeys + https://codemonkeys.tech/ + Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵 + en-US + Wed, 17 Jul 2024 04:15:09 GMT + Wed, 17 Jul 2024 04:15:09 GMT + vuepress-plugin-feed1 + https://validator.w3.org/feed/docs/rss2.html + Made by and for Code Monkeys 🐵 + + Code Monkeys + https://codemonkeys.tech/images/code-monkeys-logos/code-monkeys-rss-image.png + https://codemonkeys.tech/ + + + Climbing Stairs Solution 1 + https://codemonkeys.tech/climbing-stairs-solution-1/ + https://codemonkeys.tech/climbing-stairs-solution-1/ + Climbing Stairs Solution 1 + Hey fellow Code Monkeys!!! 🐵 Check out the first Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒 + Wed, 30 Jun 2021 16:43:32 GMT +

Climbing Stairs Solution 1

+ +

Climbing Stairs

+

Get the code & notes on

+

Problem Description

+

You are climbing a staircase. It takes n steps to reach the top.

+

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

+

Examples

+

Ex 1) Input: n = 2 Output: 2

+

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

+

Ex 2) Input: n = 3 Output: 3

+

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

+

Constraints

+
    +
  • +
+

Thought Process

+
    +
  • +

    Let's start by diagramming the different ways we can climb the steps to see if we can find a pattern.

    +
      +
    • When n = 3 we have:
    • +
    +
  • +
+
    +
  • +

    From the diagram we can see there are 3 distinct ways to climb to the top when n = 3 since we can ignore the scenarios where we take extra steps.

    +
  • +
  • +

    To help you see a pattern try drawing out more diagrams for larger values of n or creating a generalized diagram for any value of n.

    +
  • +
  • +

    The diagram above is an example of a recursion tree.

    +
  • +
  • +

    So, one way to solve this problem is to come up with a recursive formula that represents how many distinct ways we can climb the stairs.

    +
  • +
  • +

    Let's use the diagram to help us come up with our recursive formula.

    +
  • +
  • +

    We know we can either add 1 step or 2 steps each time we climb up the stairs, and we want to hit our target of n steps.

    +
  • +
  • +

    So, we need to keep track of how many steps we have taken which we can represent with the variable , where represents the current choice when climbing the stairs.

    +
  • +
  • +

    Initially, , here means we haven't made a choice to take 1 step or 2 steps yet.

    +
  • +
  • +

    Each time we climb the stairs we make one of the following choices:

    +
  • +
+

+

+

+
    +
  • +

    Now, we'll let denote our function for climbing the stairs.

    +
  • +
  • +

    Here's how we can represent the different scenarios for climbing the stairs:

    +
  • +
+

+
    +
  • +

    We're passing the + and our target value of steps to our function .

    +
  • +
  • +

    Now, we need to determine how many times we need to to call .

    +
  • +
  • +

    We know from the diagram if , then we can ignore that way of climbing the stairs

    +
  • +
  • +

    We also know if , then we have found a valid way to climb the steps.

    +
  • +
  • +

    Using this knowledge we can come up with the following:

    +
  • +
+

Implementation

+ +
+var climbStairs = function(n) {
+  return wayToClimb(0, n);
+};
+
+var wayToClimb = function(stepsTaken, n) {
+  if (stepsTaken > n) {
+    return 0;
+  }
+
+  if (stepsTaken === n) {
+    return 1;
+  }
+
+  return wayToClimb(stepsTaken + 1, n) + wayToClimb(stepsTaken + 2, n);
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+
+
+

Downsides

+
    +
  • +

    Our solution will work, but it's not efficient.

    +
  • +
  • +

    We'll actually get a time limit exceeded error on LeetCode if we submit this.

    +
  • +
  • +

    This is because the time complexity of our solution is O(2n).

    +
  • +
  • +

    We can look at our recursion tree above and count the number of nodes to determine the time complexity.

    +
  • +
  • +

    Now, we won't count exactly 2n nodes since our recursive formula isn't exactly 2n, but when dealing with Big-Oh we only care about the behavior as n becomes very large.

    +
  • +
  • +

    We'll be improving this in the next post by drawing out recursion trees for larger values of n which will allow us to see an interesting pattern.

    +
  • +
+]]>
+
+ + Contains Duplicate + https://codemonkeys.tech/contains-duplicate/ + https://codemonkeys.tech/contains-duplicate/ + Contains Duplicate + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Contains Duplicate! 🍌🐒 + Fri, 06 Aug 2021 18:24:00 GMT +

Contains Duplicate

+ +

Contains Duplicate

+

Get the code & notes on

+

Problem Description

+

Given an integer array nums, return true if any value appears at least twice, and return false if every element is distinct.

+

Examples

+

Ex 1) Input: nums = [1, 2, 3, 1] Output: true since 1 appears twice.

+

Ex 2) Input: nums = [1, 2, 3, 4] Output: false since no value appears twice.

+

Ex 3) Input: nums = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2] Output: true since 1, 3, and 2 appear more than once.

+

Ex 4) Input: nums = [] Output: false since there are no values.

+

Constraints

+

+

+

Thought Process

+
    +
  • +

    By looking at the examples, the 1st thought that comes to mind may be to simply take each value in nums, and compare it with every other value.

    +
      +
    • +

      Basically, we'll be comparing each pair of values in nums to see if a duplicate has occurred.

      +
    • +
    • +

      To do this we'll start at the first value in nums, and compare it with each value to the right until we reach the end of nums.

      +
    • +
    • +

      Then we'll take the second value in nums, and compare it with each value to the right until we reach the end of nums.

      +
    • +
    • +

      We repeat this process until we reach the end of nums in the worst case or until we find a duplicate value.

      +
    • +
    • +

      Here's a visualization for nums = [1, 2, 3] which represents a worst case scenario:

      +
        +
      • +

        Let's take our 1st value in nums, and compare it with each value to the right of it:

        +
          +
        • 1st Comparison:
        • +
        +

        +

        +
          +
        • 2nd Comparison:
        • +
        +

        +

        +
      • +
      • +

        Now, let's take our 2nd value in nums, and compare it with each value to the right of it:

        +
          +
        • 3rd Comparison:
        • +
        +

        +

        +
          +
        • The 3rd value in nums is also the last value, so there's no more comparisons to be made.
        • +
        +
      • +
      +
    • +
    • +

      To achieve this we'll need to loop over each value in nums, and for each iteration of this loop we need to compare our current value which will denote as nums[i] with each value to the right of it.

      +
    • +
    • +

      The process of comparing nums[i] with each value to the right of it means we'll need a nested for loop that loops from nums[i + 1] to the last value in nums.

      +
    • +
    • +

      A nested for loop a time complexity of which is not efficient and will result in a Time Limit Exceeded error on LeetCode.

      +
    • +
    +
  • +
  • +

    Before checking for duplicate values, we can realize that if we sort nums any duplicate values will be consecutive.

    +
      +
    • +

      Let's visualize this with an example for nums = [1, 2, 3, 1]:

      +
        +
      • +

        Sorting nums gives us:

        +

        +
      • +
      • +

        Now, we can loop over nums and check for duplicates values.

        +
      • +
      +
    • +
    • +

      Looping over nums has a time complexity of O(n), and the sorting algorithm can have a time complexity as good as O(nlogn) if something like heapsort is used.

      +
    • +
    • +

      So, the overall time complexity is O(nlogn) since it's the dominating factor.

      +
    • +
    +
  • +
  • +

    Solving this problem requires the ability to efficiently search for values, and a great way to do that is to use a hash table.

    +
      +
    • +

      A hash table is an object that maps keys to values.

      +
    • +
    • +

      The search and insert opertions in a hash table have a time complexity of O(1).

      +
    • +
    • +

      Using a hash table will allow us to store each value in nums as a key, and we can map a value of let's say true to it if it's the first time we've seen the value.

      +
    • +
    • +

      Now, to create our hash table we can loop over nums then check to see if the key is present.

      +
    • +
    • +

      If the key is present, then we have found a duplicate, and we'll return true.

      +
    • +
    • +

      If the key isn't present, then we'll store the current value of nums as a key in our hash table with a value of true.

      +
    • +
    • +

      If no key appears twice, then nums has no duplicates, and we'll return false.

      +
    • +
    • +

      Here's a visualization of creating our hash table which we'll denote as obj for nums = [1, 2, 1]:

      +
        +
      • 1st Iteration:
      • +
      +

      +

      +
        +
      • +

        So, we'll store the value of nums[0] as a key in our hash table with a value of true.

        +

        +
      • +
      • +

        2nd Iteration:

        +
      • +
      +

      +

      +
        +
      • +

        So, we'll store the value of nums[1] as a key in our hash table with a value of true.

        +

        +
      • +
      • +

        3rd Iteration:

        +
      • +
      +

      +

      +
        +
      • Since the same key appeared in our hash table, a duplicate has been found in nums, so we'll return false.
      • +
      +
    • +
    +
  • +
+

Implementation

+ +
+var containsDuplicate = function(nums) {
+  const obj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (obj[nums[i]]) {
+      return true;
+    }
+    obj[nums[i]] = true;
+  }
+
+  return false;
+};
+
+nums = [1, 2, 3, 1];
+console.log(containsDuplicate(nums));
+
+
+]]>
+
+ + Climbing Stairs Solution 2 + https://codemonkeys.tech/climbing-stairs-solution-2/ + https://codemonkeys.tech/climbing-stairs-solution-2/ + Climbing Stairs Solution 2 + Hey fellow Code Monkeys!!! 🐵 Check out the second Solution & Notes for the LeetCode problem Climbing Stairs! 🍌🐒 + Thu, 01 Jul 2021 15:45:32 GMT +

Climbing Stairs Solution 2

+ +

Climbing Stairs

+

Get the code & notes on

+

Problem Description

+

You are climbing a staircase. It takes n steps to reach the top.

+

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

+

Examples

+

Ex 1) Input: n = 2 Output: 2

+

Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

+

Ex 2) Input: n = 3 Output: 3

+

Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

+

Constraints

+
    +
  • +
+

Thought Process

+
    +
  • +

    We previously came up with a solution for this problem by using a recursive formula that represents how many distinct ways we can climb the stairs.

    +
  • +
  • +

    The issue with the previous solution is it has a time complexity of O(2n) which is very inefficient.

    +
  • +
  • +

    To come up with a better solution we'll be drawing out multiple recursion trees to help us see a pattern.

    +
  • +
  • +

    When n = 1 we have:

    +
  • +
+
    +
  • +

    From the diagram we can see there is 1 distinct way to climb to the top when n = 1 since we can ignore the scenarios where we take extra steps.

    +
  • +
  • +

    When n = 2 we have:

    +
  • +
+
    +
  • +

    So, we have 2 distinct ways to climb to the top.

    +
  • +
  • +

    When n = 3 we have:

    +
  • +
+
    +
  • +

    So, we have 3 distinct ways to climb to the top.

    +
  • +
  • +

    When n = 4 we have:

    +
  • +
+
    +
  • +

    So, we have 5 distinct ways to climb to the top.

    +
  • +
  • +

    Now, let's take a look at our cases from n = 1 to n = 2 and see if we can find a pattern:

    +
  • +
+

+

+
    +
  • +

    Here, waysToClimb denotes our function for determining how many unique ways we can climb the stairs.

    +
  • +
  • +

    This sequence of numbers follows the Fibonacci sequence with the only difference being the value of the 1st and 2nd terms.

    +
  • +
  • +

    Here, the 1st term has a value of 1 and the 2nd term has a value of 2.

    +
  • +
  • +

    Also, notice that we know we have two ways to climb the stairs to reach the nth step.

    +
  • +
  • +

    If we take 1 step, then we're n - 1 steps closer to n, and if we take 2 steps then we're n - 2 steps closer to n.

    +
  • +
  • +

    So, we can get the distinct number of ways to climb the steps by summing up the ways of climbing to the n - 1 step and the ways of climbing to the n - 2 step using the following formula:

    +
  • +
+

+
    +
  • The Fibonacci sequence is the following series of numbers:
  • +
+

+
    +
  • +

    The next number is found by adding up the two numbers before it.

    +
  • +
  • +

    For example, 5 is found by adding 2 and 3.

    +
  • +
  • +

    The first two terms are called seed numbers, which we'll denote as:

    +
  • +
+

+
    +
  • Here's the formula used to characterize the sequence:
  • +
+

+
    +
  • The seed numbers for our problem are:
  • +
+

+
    +
  • +

    Now that we know our pattern of climbing the stairs follows a Fibonnaci sequence we can implement the sequence in our code using the waysToClimb formula and the seed numbers we came up with.

    +
  • +
  • +

    This will improve the time complexity of our solution from the O(2n) solution we previously came up with.

    +
  • +
+

Implementation

+ +
+var climbStairs = function(n) {
+  if (n === 1) {
+    return 1;
+  } else if (n === 2) {
+    return 2;
+  } else {
+    let waysToClimb1 = 1;
+    let waysToClimb2 = 2;
+    let waysToClimb;
+    let i = 1;
+
+    while (n - 1 > i) {
+      waysToClimb = waysToClimb2 + waysToClimb1;
+      waysToClimb1 = waysToClimb2;
+      waysToClimb2 = waysToClimb;
+      i++;
+    }
+
+    return waysToClimb;
+  }
+};
+
+let n = 4;
+console.log(climbStairs(n));
+
+
+
+

Analysis

+
    +
  • +

    Since we're looping over the length of n - 1 our time complexity is O(n) which is a much more efficient solution!

    +
  • +
  • +

    See if you can come up with an even more efficient solution using more properties of the Fibonnaci sequence!

    +
  • +
+]]>
+
+ + Reverse String + https://codemonkeys.tech/reverse-string/ + https://codemonkeys.tech/reverse-string/ + Reverse String + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Reverse String! 🍌🐒 + Wed, 11 Aug 2021 15:35:00 GMT +

Reverse String

+ +

Reverse String

+

Get the code & notes on

+

Problem Description

+

Write a function that reverses a string. The input string is given as an array of characters s.

+

Examples

+

Ex 1) Input: s = ["h", "e", "l", "l", "o"] Output: ["o", "l", "l", "e", "h"]

+

Ex 2) Input: s = ["H", "a", "n", "n", "a", "h"] Output: ["h", "a", "n", "n", "a", "H"]

+

Constraints

+
    +
  • +

    +
  • +
  • +

    s[i] is a printable ASCII character.

    +
  • +
  • +

    Do not allocate extra space for another array. You must do this in-place with O(1) extra memory.

    +
  • +
+

What is a printable ASCII Character?

+
    +
  • +

    ASCII stands for American Standard Code for Information Interchange and it consists of 33 non-printable and 95 printable characters.

    +
  • +
  • +

    You can check out the non-printable, printable, and extended ASCII characters hereContent not supported.

    +
  • +
  • +

    For this problem we only care about the printable ASCII characters.

    +
  • +
+

What does In-Place Mean?

+
    +
  • +

    In-place refers to an algorithm that transforms input using no auxiliary data structure.

    +
  • +
  • +

    So, we cannot allocate extra space for another array, a hash table, or any other data structure.

    +
  • +
  • +

    Another way of saying this is we must use O(1) extra memory.

    +
  • +
+

Thought Process

+
    +
  • +

    Let's take our two examples from earlier and find a way to model the reversing of the characters in s.

    +
  • +
  • +

    Let's start with Ex 1)

    +
      +
    • Initially, we have
    • +
    +

    +

    and after reversing s our output should be:

    +

    +
      +
    • +

      To perform the reversal we need to swap the characters in s.

      +
    • +
    • +

      We can start by swapping the leftmost character and the rightmost character.

      +
    • +
    • +

      Then we'll move to the second leftmost character and the second rightmost character and swap them.

      +
    • +
    • +

      We'll continue this process until every character has been swapped if we have an even number of characters, or until we have one unswapped character left if we have an odd number of characters.

      +
    • +
    • +

      To perform this swapping we'll need to loop over s while there are still characters that can be swapped.

      +
    • +
    • +

      Let's visualize this process to help us see how the swapping will occur and to better understand what we need to keep track of.

      +
        +
      • +

        1st Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: h

          +
        • +
        • +

          Current Rightmost Character: o

          +
        • +
        • +

          Now, we can swap the characters by assigning s[0] to be s[4], but if we want to assign s[4] to be s[0], then we must first store s[0] in a temp variable.

          +
        • +
        • +

          Storing s[0] in a temp variable will allow us to still have the original character that was stored in s[0].

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 1st swap:
        • +
        +

        +
      • +
      • +

        2nd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: e

          +
        • +
        • +

          Current Rightmost Character: l

          +
        • +
        • +

          Now, we can swap the characters by assigning s[1] to be s[3] and by assinging s[3] to be s[1] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 2nd swap:
        • +
        +

        +
          +
        • There are no unswapped characters left to swap with our only remaining unswapped character, s[2], so the reversal is complete.
        • +
        +
      • +
      +
    • +
    • +

      To perform these swaps we had to keep track of the index of our current leftmost character which we'll denote with i and the index of our current rightmost character which we'll denote with j.

      +
    • +
    • +

      Keeping track of the current leftmost index required us to start with i = 0 and to increment i on each subsequent iteration.

      +
    • +
    • +

      Keeping track of the current rightmost index required us to start with j = s.length - 1 and to decrement j on each subsequent iteration.

      +
    • +
    • +

      We continued the loop while i < j.

      +
    • +
    +
  • +
  • +

    Let's now look at Ex 2)

    +
      +
    • Initially, we have
    • +
    +

    +

    and after reversing s our output should be:

    +

    +
      +
    • +

      We need to swap the characters in s again like in Ex) 1.

      +
    • +
    • +

      Let's visualize this process to help us see how the swapping will occur for this example:

      +
        +
      • +

        1st Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: H

          +
        • +
        • +

          Current Rightmost Character: h

          +
        • +
        • +

          Now, we can swap the characters by assigning s[0] to be s[5] and by assinging s[5] to be s[0] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 1st swap:
        • +
        +

        +
      • +
      • +

        2nd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: a

          +
        • +
        • +

          Current Rightmost Character: a

          +
        • +
        • +

          Now, we can swap the characters by assigning s[1] to be s[4] and by assinging s[4] to be s[1] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 2nd swap:
        • +
        +

        +
      • +
      • +

        Note if you wanted to you could include a check to see if the characters are the same before swapping since the result after swapping will be the same.

        +
      • +
      • +

        3rd Iteration:

        +

        +
          +
        • +

          Current Leftmost Character: n

          +
        • +
        • +

          Current Rightmost Character: n

          +
        • +
        • +

          Now, we can swap the characters by assigning s[2] to be s[3] and by assinging s[3] to be s[2] using the swapping process from before.

          +
        • +
        • +

          Here's the steps for the swapping process:

          +
        • +
        +

        +

        +

        +
          +
        • Here's s after the 3rd swap:
        • +
        +

        +
          +
        • Every character has been swapped, so the reversal is complete.
        • +
        +
      • +
      +
    • +
    • +

      Notice again we continued the loop while i < j.

      +
    • +
    • +

      Using the model we described above we can come up with the following implementation:

      +
    • +
    +
  • +
+

Implementation

+ +
+var reverseString = function(s) {
+  let temp;
+  let i = 0;
+  let j = s.length - 1;
+
+  while (i < j) {
+    temp = s[i];
+    s[i] = s[j];
+    s[j] = temp;
+    i++;
+    j--;
+  }
+};
+
+// Case 1: s has an odd length
+s = ['h', 'e', 'l', 'l', 'o'];
+reverseString(s);
+console.log(s);
+
+// Case 2: s has an even length
+s = ['H', 'a', 'n', 'n', 'a', 'h'];
+reverseString(s);
+console.log(s);
+
+
+]]>
+
+ + Remove Duplicates from Sorted Array + https://codemonkeys.tech/remove-duplicates-from-sorted-array/ + https://codemonkeys.tech/remove-duplicates-from-sorted-array/ + Remove Duplicates from Sorted Array + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Remove Duplicates from Sorted Array! 🍌🐒 + Sat, 03 Jul 2021 17:25:34 GMT +

Remove Duplicates from Sorted Array

+ +

Remove Duplicates from Sorted Array

+

Get the code & notes on

+

Problem Description

+

Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.

+

Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.

+

Return k after placing the final result in the first k slots of nums.

+

Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.

+

Examples

+

Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _]

+

Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

+

Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

+

Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

+

Constraints

+
    +
  • +

    +
  • +
  • +

    +
  • +
  • +

    nums is sorted in non-decreasing order.

    +
  • +
+

What does In-Place mean?

+
    +
  • +

    Let's start by defining in-place which is an algorithm that transforms input using no auxiliary data structure.

    +
  • +
  • +

    So, we cannot allocate extra space for another array, a hash table, or any other data structure.

    +
  • +
  • +

    Another way of saying this is we must use O(1) extra memory.

    +
  • +
+

Removing (or Moving) Duplicates & Maintaining Relative Order

+
    +
  • +

    In JavaScript we can change the length of an array by adding or removing elements, but in other languages like C for example we cannot change the length of an array after it's created.

    +
  • +
  • +

    So, to get around this we're told we can place the result in the first part of nums.

    +
  • +
  • +

    Recall the formal description from earlier: if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result, and it doesn't matter what is left after the first k elements.

    +
  • +
  • +

    The examples from earlier should make this clearer:

    +
      +
    • +

      Ex 1) Input: nums = [1, 1, 2] Output: 2, nums = [1, 2, _ ]

      +
    • +
    • +

      Notice:

      +
        +
      • +

        The output maintains the relative order for nums by keeping the elements we care about in non-decreasing order.

        +
      • +
      • +

        Also, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

        +
      • +
      +
    • +
    • +

      Ex 2) Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: 5, nums = [0, 1, 2, 3, 4, _, _, _, _, _]

      +
    • +
    • +

      Notice:

      +
        +
      • +

        The output maintains the relative order again for nums by keeping the elements we care about in non-decreasing order.

        +
      • +
      • +

        And again, recall if we're moving the duplicates it doesn't matter what we leave after the kth element, so those elements were denoted with underscores.

        +
      • +
      +
    • +
    +
  • +
+

How to Modify nums In-Place?

+
    +
  • +

    We're told we can only modify nums in-place.

    +
  • +
  • +

    Let's start with nums = [1, 1, 1, 2, 2], and see if we can come up with some way to move around the elements to get our desired output.

    +
  • +
  • +

    Let's start by taking our 1st element in nums and compare it with the 2nd element, then we can compare the 2nd element with the 3rd and so on...

    +
  • +
  • +

    1st Iteration:

    +
  • +
+

+

+
    +
  • 2nd Iteration:
  • +
+

+

+
    +
  • 3rd Iteration:
  • +
+

+

+

+
    +
  • 4th Iteration:
  • +
+

+

+
    +
  • +

    After the 4th iteration, there's nothing left to compare nums[4] with, so that's the last iteration we need.

    +
  • +
  • +

    During our iterations we had to keep track of our current element in nums which we'll call nums[i] and the next element in nums which will be nums[i + 1].

    +
  • +
  • +

    We also had to keep track of which element we needed to replace in nums if we ran into an element we hadn't seen before which we'll call nums[j].

    +
  • +
  • +

    So, to implement this we'll loop over nums from the beginning to the length of nums - 1 since when we get to the last element there's nothing else for us to compare it with.

    +
  • +
  • +

    On each iteration we'll compare the current element of nums which is nums[i] with the next element of nums which is nums[i + 1].

    +
  • +
  • +

    If they're not equal then we'll set nums[j] = nums[i + 1] where j gets initialized to 1, and we'll increment j every time nums[i] doesn't equal nums[i + 1].

    +
  • +
  • +

    We also need to remember the case of nums.length = 0 which means we have no elements in our array, so we'll just return 0.

    +
  • +
+

Implementation

+ +
+var removeDuplicates = function(nums) {
+  const numsLength = nums.length;
+
+  if (numsLength === 0) {
+    return 0;
+  }
+
+  let j = 1;
+  for (let i = 0; i < numsLength - 1; i++) {
+    if (nums[i] !== nums[i + 1]) {
+      nums[j] = nums[i + 1];
+      j++;
+    }
+  }
+
+  return j;
+};
+
+nums = [1, 1, 1, 2, 2];
+console.log('k =', removeDuplicates(nums), 'nums =', nums);
+
+
+
+]]>
+
+ + Single Number + https://codemonkeys.tech/single-number/ + https://codemonkeys.tech/single-number/ + Single Number + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Single Number! 🍌🐒 + Tue, 29 Jun 2021 17:23:42 GMT +

Single Number

+ +

Single Number

+

Get the code & notes on

+

Problem Description

+

Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single one.

+

You must implement a solution with a linear runtime complexity and use only constant extra space.

+

Examples

+

Ex 1) Input: nums = [2, 2, 1] Output: 1 since 1 appears once.

+

Ex 2) Input: nums = [4, 1, 2, 1, 2] Output: 4 since 4 appears once.

+

Ex 3) Input: nums = [1] Output: 1 since 1 appears once.

+

Constraints

+
    +
  • +

    +
  • +
  • +

    +
  • +
  • +

    Each element in the array appears twice except for one element which appears only once.

    +
  • +
+

What does Linear Runtime Mean?

+
    +
  • +

    A linear runtime means our solution must have a time complexity of O(n).

    +
  • +
  • +

    So, it's ok to use a loop in our solution but not a nested loop.

    +
  • +
+

What does Using Constant Extra Space Mean?

+
    +
  • +

    Our given space complexity is O(n) since we're given nums which is an array of length n.

    +
  • +
  • +

    Since we want to use constant extra space, our solution must have at most O(n) space complexity.

    +
  • +
+

Thought Process

+
    +
  • +

    We need to iterate over nums since we need to find out which element appears only once.

    +
  • +
  • +

    The iteration can be done using a for loop.

    +
  • +
  • +

    Now, to keep track of how many times an element has appeared in nums we can use a hash table.

    +
  • +
  • +

    A hash table is an object that maps keys to values.

    +
  • +
  • +

    Here, the key will represent the element in nums, and the value can be set to true if it has appeared once.

    +
  • +
  • +

    If the key appears again we can remove it since we know every element other than the unique element appears twice.

    +
  • +
  • +

    After removing the keys that appear twice, we just need to return the key of our hash table that appeared once.

    +
  • +
  • +

    Here's a visualization of creating our hash table which we'll denote as myObj for nums = [2, 2, 1]:

    +
      +
    • 1st Iteration:
    • +
    +

    +

    +
      +
    • +

      So, we'll store the value of nums[0] as a key in our hash table with a value of true.

      +

      +
    • +
    • +

      2nd Iteration:

      +
    • +
    +

    +

    +
      +
    • +

      So, we'll remove the 2 key from our hash table since it has now appeared twice.

      +

      +
    • +
    • +

      3rd Iteration:

      +
    • +
    +

    +

    +
      +
    • +

      So, we'll store the value of nums[2] as a key in our hash table with a value of true.

      +
    • +
    • +

      Now, we have reached the end of the loop, so we'll return the value of the only key left in our hash table which in this case is 1.

      +
    • +
    +
  • +
+

Implementation

+ +
+var singleNumber = function(nums) {
+  const myObj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (myObj[nums[i]]) {
+      delete myObj[nums[i]];
+    } else {
+      myObj[nums[i]] = true;
+    }
+  }
+
+  return Object.keys(myObj)[0];
+};
+
+nums = [2, 2, 1];
+console.log(singleNumber(nums));
+
+
+
+]]>
+
+ + Valid Anagram + https://codemonkeys.tech/valid-anagram/ + https://codemonkeys.tech/valid-anagram/ + Valid Anagram + Hey fellow Code Monkeys!!! 🐵 Check out the Solution & Notes for the LeetCode problem Valid Anagram! 🍌🐒 + Fri, 02 Jul 2021 18:15:23 GMT +

Valid Anagram

+ +

Valid Anagram

+

Get the code & notes on

+

Problem Description

+

Given two strings s and t, return true +if t is an anagram of s, and false otherwise.

+

Examples

+

Ex 1) Input: s = "anagram", t = "nagaram" Output: true

+

Ex 2) Input: s = "rat", t = "car" Output: false

+

Constraints

+
    +
  • +
  • s and t consist of lowercase English letters
  • +
+

What is an Anagram?

+
    +
  • A word or a phrase that is formed by rearranging the letters of a different word or phrase typically using all of the original letters exactly once.
  • +
+

Assumptions

+
    +
  • To clarify the provided constraints we're also assuming s and t contain no spaces, and we're only able to use each letter once.
  • +
+

How to Check if t is an Anagram of s?

+
    +
  • +

    Since we're assuming we can only use each letter in s and t once, then for t to be an anagram of s they must be the same length.

    +
  • +
  • +

    We can first check that s and t are the same length, and if they aren't we can return false.

    +
  • +
  • +

    Now, if s and t are the same length, they must also contain the same letters.

    +
  • +
+

How to Check if s and t contain the same letters?

+
    +
  • +

    We're given s and t as strings, but we care about being able to examine each character in the strings. So, what we can do is create an array of characters for s and t.

    +
      +
    • +

      Ex 1) s = "anagram" sArray = ["a", "n", "a", "g", "r", "a", "m"]
      t = "nagaram" tArray = ["n", "a", "g", "a", "r", "a", "m"]

      +
    • +
    • +

      Ex 2) s = "rat" sArray = ["r", "a", "t"]
      t = "car" tArray = ["c", "a", "r"]

      +
    • +
    +
  • +
  • +

    We can use the split() method, and pass it a pattern of "".

    +
  • +
  • +

    This tells split() to split our strings into substrings where a "" pattern occurs which is between each character in our strings.

    +
  • +
  • +

    split() will then return an array of these substrings.

    +
  • +
  • +

    Now, we need a way to compare the letters of sArray with the letters of tArray.

    +
  • +
  • +

    We could take the first value of sArray and compare it with each value of tArray. Then break when the letters are the same, and keep track of which index the match occurred at. This will allow us to not use the value at the matched index again on the next comparison.

    +
  • +
  • +

    A simplier solution though is to realize that we can sort our arrays, and if t is an anagram of s, then our arrays will have all the same letters in the same order.

    +
      +
    • +

      Ex 1) sArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]
      tArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]

      +
    • +
    • +

      Ex 2) sArray.sort() = ["a", "r", "t"]
      tArray.sort() = ["a", "c", "r"]

      +
    • +
    +
  • +
  • +

    Then we can check if the letters in the arrays are equal by comparing each value at index i of sArray with each value at index i of tArray.

    +
  • +
  • +

    To do this we can loop over the length of one of the arrays, and if the values of our arrays at index i are not equal, then we can break the loop by returning false.

    +
  • +
  • +

    If the arrays are equal, then we'll loop over the entire length of our array and return true.

    +
  • +
+

Implementation

+ +
+var isAnagram = function(s, t) {
+  if (s.length === t.length) {
+    let sArray = s.split('');
+    let tArray = t.split('');
+
+    sArray.sort();
+    tArray.sort();
+
+    for (let i = 0; i < s.length; i++) {
+      if (sArray[i] !== tArray[i]) {
+        return false;
+      }
+    }
+
+    return true;
+
+  } else {
+    return false;
+  }
+};
+
+let s = 'rat';
+let t = 'car';
+
+console.log(isAnagram(s, t));
+
+
+
+]]>
+
+ + Installing Fast Node Manager (fnm) + https://codemonkeys.tech/installing-fnm/ + https://codemonkeys.tech/installing-fnm/ + Installing Fast Node Manager (fnm) + Hey fellow Code Monkeys!!! 🐵 Want to switch between Node versions extremely fast, then check out Installing Fast Node Manager (fnm)! 🍌🐒 + Wed, 08 Dec 2021 21:27:15 GMT +

Installing Fast Node Manager (fnm)

+

Why use fnm?

+

Fast Node Manager (fnm)Content not supported is a fast and simple Node version manager built in RustContent not supported.

+

For those of you who haven't read the post Installing Node Version Manager (nvm), a Node version manager allows you to easily install and switch between numerous versions of Node.jsContent not supported. This is useful when a project you’re working on requires a different version of Node.jsContent not supported than what you currently have installed.

+

Here are some features of fnmContent not supported:

+ +

Since fnmContent not supported is much faster than nvmContent not supported, it's my preferred way to manage my Node versions.

+

Installation

+

We'll be going over how to install fnmContent not supported on Linux, macOS, and Windows. If you run into any issues with installation then check out the fnmContent not supported repository for any updates.

+

Other Installation Methods

+

If you're interested in using CargoContent not supported or downloading a release binary, then check out the fnmContent not supported repository for installation instructions.

+
+

Linux

+

First make sure you have curl installed:

+ + +
pacman -Sy curl
+
+
1
+ +
apt-get install curl
+
+
1
+
+

Next you can install fnmContent not supported using either one of the following commands for bash, zsh, and fish shells.

+

Here we're setting the custom directory $HOME/.local/bin as the location to install fnmContent not supported using --install-dir.

+

If you want to install fnmContent not supported in a different location, then change $HOME/.local/bin to your preferred directory.

+

You can also remove --install-dir when installing to use the default directory $HOME/.fnm.

+ + +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir $HOME/.local/bin
+
+
1
+ +
curl -fsSL https://fnm.vercel.app/install | bash
+
+
1
+
+

Run the following command if you don't have .local/bin in your path and you're using the custom directory $HOME/.local/bin.

+

If you're using a different custom directory and you don't have it in your path, then replace $HOME/.local/bin with you're preferred directory.

+ + +
export PATH=/home/$USER/.local/bin/fnm:$PATH
+
+
1
+
+

Run the following command to upgrade fnmContent not supported.

+

If you're using a different custom directory, then replace $HOME/.local/bin with you're preferred directory.

+ + +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir $HOME/.local/bin --skip-shell
+
+
1
+ +
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell
+
+
1
+
+

macOS

+

The preferred way to install on macOS is to use HomebrewContent not supported:

+ + +
brew install fnm
+
+
1
+
+

Here's how to upgrade using HomebrewContent not supported:

+ + +
brew upgrade fnm
+
+
1
+
+

Windows

+

You can manually install on Windows using either ScoopContent not supported or ChocolateyContent not supported:

+ + +
scoop install fnm
+
+
1
+ +
choco install fnm
+
+
1
+
+

Shell Setup

+

Before you can use fnmContent not supported, you have to first set up your shell. We'll be going over how to set up fnmContent not supported for bash, zsh, fish, and powershell.

+

Windows Command Prompt and Cmder

+

If you're interested in using Windows Command Prompt or Cmder then check out the fnmContent not supported repository for instructions.

+
+

Bash

+

Add the following to your .bashrc:

+ + +
eval "$(fnm env)"
+
+
1
+
+

Zsh

+

Add the following to your .zshrc:

+ + +
eval "$(fnm env)"
+
+
1
+
+

Fish Shell

+

Create ~/.config/fish/conf.d/fnm.fish and add this line:

+ + +
fnm env | source
+
+
1
+
+

PowerShell

+

Add this line to the end of your profile file:

+ + +
fnm env --use-on-cd | Out-String | Invoke-Expression
+
+
1
+
+

On Windows, the profile is located at ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 or $PROFILE

+

On macOS and Linux, the profile is located at ~/.config/powershell/Microsoft.PowerShell_profile.ps1

+

Usage

+

Here are some useful commands to get started with fnmContent not supported. You can find more commands hereContent not supported or you can run fnm --help to see a list of subcommands and fnm <SUBCOMMAND> --help to see information for a specific subcommand.

+ + +
fnm ls-remote
+
+
1
+
+ + +
fnm install 16.11.1
+
+
1
+
+ + +
fnm ls
+
+
1
+
+ + +
fnm use 16.11.1
+
+
1
+
+ + +
fnm current
+
+
1
+
+ + +
fnm alias 16.11.1 nickname
+fnm use nickname
+
+
1
2
+
+ + +
fnm default 16.11.1
+
+
1
+
+

Completions

+

Here's how to set up fnmContent not supported completions for bash and zsh:

+

Bash

+ + +
mkdir -p ~/.config/bash/completions
+
+touch ~/.config/bash/completions/_fnm
+
+fnm completions --shell=bash > ~/.config/bash/completions/_fnm
+
+
1
2
3
4
5
+
+

Add the following to your .bashrc:

+ + +
fpath+=~/.config/bash/completions/_fnm
+compinit
+
+
1
2
+
+

Zsh

+ + +
mkdir -p ~/.config/zsh/completions
+
+touch ~/.config/zsh/completions/_fnm
+
+fnm completions --shell=zsh > ~/.config/zsh/completions/_fnm
+
+
1
2
3
4
5
+
+

Add the following to your .zshrc:

+ + +
fpath+=~/.config/zsh/completions/_fnm
+compinit
+
+
1
2
+
+]]>
+
+ + Installing Node Version Manager (nvm) + https://codemonkeys.tech/installing-nvm/ + https://codemonkeys.tech/installing-nvm/ + Installing Node Version Manager (nvm) + Hey fellow Code Monkeys!!! 🐵 Want to be able to easily install and switch between Node versions, then check out Installing Node Version Manager (nvm)! 🍌🐒 + Tue, 07 Dec 2021 22:01:15 GMT +

Installing Node Version Manager (nvm)

+

Why use a Node Version Manager?

+

A Node version manager allows you to easily install and switch between numerous versions of Node.jsContent not supported. This is useful when a project you’re working on requires a different version of Node.jsContent not supported than what you currently have installed.

+

Installation

+

We'll be going over how to install nvmContent not supported on Linux and macOS.

+

Windows

+

Windows is not supported, but you can get it to work by setting up Windows Subsystem for Linux (WSL)Content not supported, GitBashContent not supported, or CygwinContent not supported. Other alternatives exist that are not supported or developed by nvmContent not supported like nvm-windowsContent not supported. Check out the nvm Important NotesContent not supported for more alternatives and details.

+
+

Before installing make sure your using a POSIX-compliant shell like sh, dash, ksh, zsh, or bash.

+

Fish Shell

+

If you want to use fishContent not supported, then check out the nvm Important NotesContent not supported repository for alternatives.

+
+

If you run into any issues with installation, then be sure to check out the nvmContent not supported repository for any updates and troubleshooting tips.

+

Linux Dependencies

+

You can install nvmContent not supported using either curl or wget.

+

Here's how to install curl for Linux:

+ + +
pacman -Sy curl
+
+
1
+ +
apt-get install curl
+
+
1
+
+

Here's how to install wget for Linux:

+ + +
pacman -Sy wget
+
+
1
+ +
apt-get install wget
+
+
1
+
+

macOS Dependencies

+

macOS should already have curl installed, but you can use HomebrewContent not supported to upgrade to the latest version:

+ + +
brew install curl
+
+
1
+
+

If you want to use wget on macOS, then you can use HomebrewContent not supported to install it:

+ + +
brew install wget
+
+
1
+
+

If you're using OS X 10.9 or newer, you'll need to install XcodeContent not supported or just the Command Line Tools.

+

Here's a good post explaining how to install XcodeContent not supported:

+ +

If you don't want to install XcodeContent not supported, then you can install only the Command Line Tools by following along with this post:

+ +

System Version

+

If you have a system version of Node.jsContent not supported, i.e., you downloaded and installed Node.jsContent not supported without using nvmContent not supported, then version mismatches may occur.

+

This can occur since versions installed by nvmContent not supported will only be available to the user account it was installed on, and any other user accounts will use the system version.

+

If version mismatches are occurring or any other issues, then you can uninstall node and npm associated with the system version and just use versions installed by nvmContent not supported.

+

Be sure to uninstall any globally installed npm packages associated with the system version as well.

+

Also, if you're using a ~/.npmrc file it may not be compatible see nvm Compatibility IssuesContent not supported in which case you should remove it.

+

When using nvmContent not supported, you don't need to use sudo npm install -g <package> instead use npm install -g <package> when installing global packages.

+

Finally, if you're using a different node version manager like fnmContent not supported, then you may run into issues with your installed versions from nvmContent not supported. If this is the case, then uninstall the node version manager you will not be using to resolve the issues.

+

Preferred Node Manager

+

My preferred way to manage my node versions is with fnmContent not supported. Check out Installing Fast Node Manager (fnm) to learn more about it.

+
+

Install and Update Script

+

After installing the necessary dependencies, you can install or update nvmContent not supported by using curl or wget on Linux or macOS:

+ + +
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
+
+
1
+ +
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
+
+
1
+
+

The above commands will download and run a script to install or update nvmContent not supported.

+

The script clones the nvmContent not supported repository to ~/.nvm.

+

Additional Notes

+

If you're interested, check out the nvm Additional NotesContent not supported for information on more parameters and how to customize the install source, directory, profile, and version for the install script.

+
+

After running the command above, you'll be prompted to close and reopen your terminal to start using nvmContent not supported, or you can run the following commands to start using it in the current shell session:

+ + +
export NVM_DIR="$HOME/.config/nvm" && 
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && # This loads nvm
+[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
+
+
1
2
3
+
+

The third line provides autocompletion for nvmContent not supported. Here's some examples of the autocompletion usageContent not supported.

+

Verify Installation

+

To verify the installation you can run the following command:

+ + +
command -v nvm
+
+
1
+
+

If the installation was successful, then the command should output nvm.

+

If you get no output after running the above command, then see the troubleshooting sections below.

+

Troubleshooting

+

Try closing the current terminal and opening a new terminal. Then try verifying the installation again.

+

Here are some examples of commands you can run depending on your shell:

+ + +
source ~/.bashrc
+
+
1
+
+ + +
source ~/.zshrc
+
+
1
+
+ + +
. ~/.profile
+
+
1
+
+

After running the command for your shell, try verifying the installation again.

+

If you're still experiencing issues verifying your installtion for Linux, then check out Troubleshooting on LinuxContent not supported.

+

For macOS check out Troubleshooting on macOSContent not supported and macOS TroubleshootingContent not supported which contain more specific information related to shell issues and to issues with Macs using the M1 chip.

+

For more general issues check out the ProblemsContent not supported section.

+

Other Installation Methods

+

Instead of using the script above, you can also perform a git installContent not supported or a manual installContent not supported as well as a manaul upgradeContent not supported. The minimum required gitContent not supported version for the installation methods is v1.7.10.

+
+

Usage

+

Here are some useful commands to get started with nvmContent not supported. You can run nvm --help to see a list of commands, their flags, and descriptions.

+

Check nvm Version

+

The following command will display the version of nvmContent not supported:

+ + +
nvm --version
+
+
1
+
+

List Remote Versions

+

The following commands will list the remote versions of Node.jsContent not supported.

+

List the all remote versions by using ls-remote:

+ + +
nvm ls-remote
+
+
1
+
+

Node.jsContent not supported has a release scheduleContent not supported for long-term support (LTS).

+

List the LTS remote versions by using --lts:

+ + +
nvm ls-remote --lts
+
+
1
+
+

List all of the LTS remote versions for a specific line by using, e.g., --lts=boron:

+ + +
nvm ls-remote --lts=boron
+
+
1
+
+

List all of the LTS remote versions for a given version number by providing, e.g., 16 to ls-remote:

+ + +
nvm ls-remote 16
+
+
1
+
+

Install Versions

+

The following commands are examples of how to install different versions of Node.jsContent not supported.

+

If you try to install a version and the installation fails, then run nvm cache clear to delete the cached versions.

+

Install the latest version by using the special default alias node:

+ + +
nvm install node
+
+
1
+
+

Install the latest LTS version by using --lts:

+ + +
nvm install --lts
+
+
1
+
+

Install the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm install --lts=boron
+
+
1
+
+

Install a specific version by providing a version number:

+ + +
nvm install 16.11.1
+
+
1
+
+

List Installed Versions

+

The following command will list all of the installed versions of Node.jsContent not supported:

+ + +
nvm ls
+
+
1
+
+

Use a Version

+

The following commands will set which version of Node.jsContent not supported to use.

+

Use the latest version by using the special default alias node:

+ + +
nvm use node
+
+
1
+
+

Use the latest LTS version by using --lts:

+ + +
nvm use --lts
+
+
1
+
+

Use the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm use --lts=boron
+
+
1
+
+

Use a specific version by providing a version number:

+ + +
nvm use 16.11.1
+
+
1
+
+

If you have a system version installed, then you can use the special default alias system to use it:

+ + +
nvm use system
+
+
1
+
+

Check Active Version

+

Check the currently active Node.jsContent not supported version by using current:

+ + +
nvm current
+
+
1
+
+

Set Aliases

+

Set an alias for a specific Node.jsContent not supported version by provding a name and a version.

+

Here, version 16.11.1 will get an alias of nickname:

+ + +
nvm alias nickname 16.11.1
+
+
1
+
+

The default version is the active version when opening new shells. The first installed version will get set as the default version. To change the default version run the command below.

+

Here, we're setting the default version to be 17.1.0:

+ + +
nvm alias default 17.1.0
+
+
1
+
+

Get Path to Version

+

The following commands will get the path of where a Node.jsContent not supported version was installed.

+

Get the path of where a version was installed by specifying a version number:

+ + +
nvm which 16.11.1
+
+
1
+
+

Get the path to where a version is installed by specifying an alias:

+ + +
nvm which nickname
+
+
1
+
+

Uninstall Versions

+

The following commands are examples of how to uninstall different versions of Node.jsContent not supported.

+

Uninstall the latest version by using the special default alias node:

+ + +
nvm uninstall node
+
+
1
+
+

Uninstall the latest LTS version by using --lts:

+ + +
nvm uninstall --lts
+
+
1
+
+

Uninstall the latest LTS version for a specific line by using, e.g., --lts=boron:

+ + +
nvm uninstall --lts=boron
+
+
1
+
+

Uninstall a specific version by providing a version number:

+ + +
nvm uninstall 16.11.1
+
+
1
+
+

Uninstall nvm

+

To uninstall nvmContent not supported run the following:

+ + +
rm -rf "$NVM_DIR"
+
+
1
+
+

Then remove these lines from your ~/.bashrc, ~/.zshrc, ~/.profile, etc.

+ + +
export NVM_DIR="$HOME/.config/nvm"
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
+[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
+
+
1
2
3
+
+]]>
+
+ + Installing Yarn 1 + https://codemonkeys.tech/installing-yarn-1/ + https://codemonkeys.tech/installing-yarn-1/ + Installing Yarn 1 + Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and use Yarn 1, then check out this post! 🍌🐒 + Tue, 28 Dec 2021 22:56:00 GMT +

Installing Yarn 1

+

What is a Package Manager?

+

Before discussing YarnContent not supported in more detail, let's first define what a package manager is and what it handles for us.

+

A package manager is a tool that allows developers to manage a project's dependencies.

+

Dependencies also known as packages are programs that a project relys on to function properly.

+

Using dependencies makes development easier since you can use other developer's solutions for implementing features in your project.

+

A package manager handles the following for your packages:

+
    +
  • Installing
  • +
  • Updating and upgrading
  • +
  • Uninstalling
  • +
  • Configuring
  • +
+

What is Yarn?

+

YarnContent not supported is a package manager designed with three main goals in mind:

+
    +
  • Speed
  • +
  • Security
  • +
  • Reliability
  • +
+

Like other package managers, YarnContent not supported allows you to use and share code with other developers which again makes development easier. The code is shared using a package.json file which describes the dependencies used in a project.

+

YarnContent not supported is an alternative to npmContent not supported which is the default node package manager for Node.jsContent not supported. It was originally developed to address the performance and security issues with npmContent not supported.

+

This post will cover the installation and some commands for Yarn 1Content not supported.

+

Yarn 1 Maintenance Mode

+

Yarn 1Content not supported is officially in maintenance mode, so no further updates will be released unless they are needed to patch vulnerabilities. If you're starting a new project, it's recommended to use the latest stable version which at the time of this writing is Yarn 3Content not supported.

+
+

If you're interested in learning more about the release history of YarnContent not supported and npmContent not supported, then check out the section below.

+

Timeline of Yarn and npm Development

+

When YarnContent not supported was released in 2016 it achieved its goals of being a faster, more secure, and more reliable alternative to npmContent not supported. The improved reliability was accomplished by generating a yarn.lock file which handles keeping track of the exact versions of packages used in a project.

+

In 2017, npmContent not supported addressed its speed and reliability issues with the release of npm 5Content not supported. The reliability issue was addressed with the introduction of the package-lock.json file which provided similar functionality to the yarn.lock file.

+

In 2018, npmContent not supported addressed its security issues with the release of npm 6Content not supported by checking vulnerabilities before installing dependencies as well as introducing more improvements to speed and reliability.

+

Yarn 2Content not supported and npm 7Content not supported were both released in 2020 with improved performance and some new features as well.

+

In 2021, Yarn 3Content not supported and npm 8Content not supported were released which again introduced improved performance and some new features.

+

Today, the performance and features of YarnContent not supported and npmContent not supported are very similar, so which one to use mainly depends on a developer's preference.

+

Installation

+

There are multiple ways to install Yarn 1Content not supported. Currently, the recommended way to install it is with npmContent not supported the default node package manager that comes with Node.jsContent not supported. When installing Node.jsContent not supported you have the option to install a system version which you can do by downloading and installing a version directly from Node.jsContent not supported, or you can install multiple node versions with a node version manager.

+

Using a Node Version Manager

+

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend installing either nvmContent not supported or fnmContent not supported. My preferred way to manage my node versions is with fnmContent not supported. If you're interested in installing a node version manager, then check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm).

+
+

After installing a system version or a version with a node version manager, you can run the following command to install and upgrade Yarn 1Content not supported:

+ + +
npm install --global yarn
+
+
1
+
+

This will install Yarn 1Content not supported globally. We'll see how to install a specific local version of yarn in the root of a project directory when looking at the usage of yarn.

+

Resolving Permissions Error

+

If you're using a system version, you may get a permissions error when attempting to install with npmContent not supported. To resolve this check out the installationContent not supported documentation for platform-specific methods for Linux, macOS, and Windows. Alternatively, you can uninstall your system version and use a node version manager instead.

+
+

Platform Installation Notes

+

When using a platform-specific method a version of Node.jsContent not supported will also be installed. To avoid the Node.jsContent not supported installation some platform-specific methods have the option of ignoring it by passing certain commands. See the installationContent not supported documentation for more details on ignoring the Node.jsContent not supported installation, configuration requirements, and possible issues.

+

If the option to ignore the installation of Node.jsContent not supported is not available for your preferred platform-specific method, then you can uninstall your system version and just use the platform-specific method to install both Yarn 1Content not supported and Node.jsContent not supported.

+

If you prefer to use a platform-specific method with a node version manager, then you should only use a method that can ignore the installation of Node.jsContent not supported since it can cause conflicts.

+

Usage

+

Now we'll be discussing some useful and common commands to get you started with Yarn 1Content not supported.

+

Help Commands

+

Here's how to access the help documentation for the yarn command which is always useful and recommended to do for any installed tool.

+

Run the following command to see a list of commands, flags, and descriptions for yarn:

+ + +
yarn --help
+
+
1
+
+

To see help information for a specific subcommand run the following:

+ + +
yarn [subcommand] --help
+
+
1
+
+

Check Yarn Version

+

To verify your installation was successful and to check your version of yarn run the following command:

+ + +
yarn --version
+
+
1
+
+

Setting a Local Version

+

To install and set a local version of yarn for a specific project you can use the global yarn command we installed earlier. This ensures everyone working on a project is using the exact same version of yarn which is useful to avoid any undesired behavior like producing a different yarn.lock file.

+

This is accomplished by using yarn policiesContent not supported which allows you to check in your Yarn 1Content not supported release within your repository. After running the command below in your project's root directory, a single-file release from the GitHub repository will be downloaded and stored in your project in a .yarn/releases directory. Then your yarn-path will be updated in a .yarnrc file.

+

Now any yarn command run in your project will be using the local version that you set. Be sure to push these changes to your project's remote branch, so everyone using the project will be downloading and using the same version of Yarn 1Content not supported as you.

+

If you're using an existing project, then you don't need to set the local version as long as the project has the desired version of Yarn 1Content not supported in the .yarn/releases directory, and the yarn-path is configured properly in the .yarnrc file.

+

If you don't have a project directory, then run the following:

+ + +
mkdir ~/<path-to-project-directory>
+
+
1
+
+

Next, navigate to your project:

+ + +
cd ~/<path-to-project-directory>
+
+
1
+
+

Now, set the version of Yarn 1Content not supported for your project:

+ + +
yarn policies set-version [version]
+
+
1
+
+

There are multiple ways to specify which version you want to use:

+
    +
  • yarn policies set-version downloads the latest stable release
  • +
  • yarn policies set-version --rc downloads the latest rc release
  • +
  • yarn policies set-version 1.22.4 downloads a specific version
  • +
+

Running yarn policies set-version [version] is also the recommended way to upgrade your version of Yarn 1Content not supported.

+

Now run yarn --version in your project directory, and it should output the local version you just set. If you navigate out of your project directory and run yarn --version, then you should see the global version that you installed.

+

The global version of yarn will first check if it's in a directory with a .yarnrc file. If the directory has a .yarnrc file, then the configured yarn-path value will be used to switch the yarn version from the global version to the project specific version.

+

Resolving Installation Directory Issue

+

If you set the local version in your project's root directory and the .yarn directory and .yarnrc file aren't generated there, then delete the files that were generated and run the yarn init command in your project's root directory before setting the local version. The yarn init command is described in the Creating a New Project section.

+
+

Updating the .gitignore File

+

After setting your local version of yarn, you should now have .yarn directory in the root of your project.

+

Some of the files yarn adds to your .yarn directory should be checked into version control, e.g., git and others should be ignored.

+

To specify which directories and files should be ignored when pushing to your repositiory you can create a .gitignore file.

+

After creating the .gitignore file, you can add the recommended basic configuration for yarn:

+ + +
.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
+
+
1
2
3
4
5
6
7
+
+

This will ignore the entire .yarn directory except for the directories specified after the !.

+

The yarn.lock and .yarnrc files should always be checked into version control.

+

Adding a .gitattributes File

+

If you're using a local version of yarn, then it's recommended to add a .gitattributes file to your project which will prevent git from showing large diffs when you add or update releases and plugins:

+ + +
.yarn/releases/** binary
+.yarn/plugins/** binary
+
+
1
2
+
+

This is accomplished by identifying the release and plugin directories as binary content.

+

Creating a New Project

+

To create a new project first create and navigate to the project directory. See the commands above for creating and navigating to a project directory.

+

Then run the following command:

+ + +
yarn init
+
+
1
+
+

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept the defaults. Here's an example of running the command in a directory named project-directory:

+ + +
question name (project-directory): my-new-project
+question version (1.0.0): 1.2.4
+question description: Learning Yarn
+question entry point (index.js):
+question repository url: https://github.com/github-username/my-new-project
+question author: Your Name
+question license (MIT):
+question private:
+success Saved package.json
+Done in 34.11s.
+
+
1
2
3
4
5
6
7
8
9
10
+
+

After answering all of the questions, a package.json file containing the answers will be created. The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver)Content not supported.

+

Now, let's describe each property in a little more detail:

+
    +
  • name is the name given to your project +
      +
    • Must be less than or equal to 214 characters including the @scope/ for scoped packagesContent not supported
    • +
    • Cannot start with a dot or an underscore
    • +
    • Must contain only lowercase letters and URL-safe characters
    • +
    • If the project is published to npmContent not supported, it gets a URL based on the given value which is the reason for the requirements given above
    • +
    • The default value is the same name as the directory you're in when running the yarn init command
    • +
    +
  • +
  • version indicates the current version of your project + +
  • +
  • description is used to describe and provide more information about your project +
      +
    • Especially useful to include if you plan on publishing your project to npmContent not supported
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • entry point is a JavaScript file that starts the execution of your project +
      +
    • This property is called main in the package.json file
    • +
    • The default value is index.js
    • +
    +
  • +
  • repository url describes the location of the project repository containing the code +
      +
    • This property is called repository in the package.json file
    • +
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/my-new-project" }
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • author describes the creator or owner of the project +
      +
    • Used to describe one person
    • +
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
    • +
    • If no value is given, it will not be set
    • +
    +
  • +
  • license indicates the type of license being used by the project +
      +
    • Allows users to know how they're permitted to use the project
    • +
    • Check out Choose a LicenseContent not supported if you need help determining how you should license your project
    • +
    • The default value is MIT
    • +
    +
  • +
  • private indicates whether or not the project can be published to npmContent not supported +
      +
    • If set to true, it will prevent the project from being published
    • +
    • If no value is given, it's assumed the value is false, and it will not be explicitly set in the package.json file
    • +
    +
  • +
+

If you're interested in learning more about the package.json file, then check out The package.json guideContent not supported and the Yarn 1 package.jsonContent not supported documentation. Also, check out the Versions of dependenciesContent not supported documentation for more information about how semverContent not supported is used.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "my-new-project",
+  "version": "1.2.4",
+  "description": "Learning Yarn",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/my-new-project",
+  "author": "Your Name",
+  "license": "MIT"
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

To update the package.json file you can open and edit it directly, or you can run the yarn init command again.

+

Check out the yarn initContent not supported documentation for more information about the command.

+

Adding Packages

+

When adding a package the package.json file gets updated by adding the package as a dependency to a dependencies object where each key is a package name and the value represents a range of allowed versions following semverContent not supported notation.

+

A yarn.lock file will also be created if it doesn't exist or updated if it already exists. A yarn.lock file is used to keep track of the exact versions of packages added to a project. This allows consistent installs across machines by allowing developers to have the exact same versions of packages when installing all of a project's dependencies.

+

Here's how to handle the yarn.lock file in your project:

+
    +
  • The yarn.lock file should be in the root of your project directory
  • +
  • You shouldn't directly edit the yarn.lock file it gets auto-generated and automatically updated
  • +
  • When installing only the top-level yarn.lock file is used and any yarn.lock files that exist in the dependencies will be ignored
  • +
  • The yarn.lock file should also be checked into version control since it's used to install the exact same versions of packages across machines
  • +
+

To add the latest version of a package run the following command:

+ + +
yarn add <package-name>
+
+
1
+
+

To add a specific version of a package run the following command:

+ + +
yarn add <package-name>@1.2.3
+
+
1
+
+

To add the latest version of a package within a specified version range run the following command:

+ + +
yarn add <package-name>@"^1.2.3"
+
+
1
+
+

The latest version within the given version range is determined by the range specifier and the version number.

+

In the example above the range specifier is the caret symbol, i.e., ^. You can use any desired range specifier, and the added package will be the latest version within the given version range.

+

You can also add a package with a specific tag by running the following command:

+ + +
yarn add <package-name>@tag
+
+
1
+
+

Tags are a way to mark published versions of a package with a label. Check out the yarn tagContent not supported documentation for more information about them.

+

To add a package to your development dependencies, i.e., devDependencies you can add either the --dev or -D flag to the end of the command.

+

Development dependencies are dependencies that you need for the development workflow, e.g., BabelContent not supported, but not while running the project.

+

Here's an example of adding the latest version of a package to your devDependencies:

+ + +
yarn add <package-name> --dev
+
+
1
+
+

See the Types of dependenciesContent not supported documentation for more information about them.

+

To add a package globally to your operating system you can use the global subcommand before add:

+ + +
yarn global add <package-name>
+
+
1
+
+

When to Use Global

+

In general you should be adding packages locally because anyone else using your project will then get the same packages. If you install a package globally it will be available globally on your operating system, but it won't be available to anyone else using your project. You should only install a package globally if it's for developer tooling that isn't used for only a specific project, e.g., nodemonContent not supported. See the yarn globalContent not supported documentation for more details.

+
+

Check out the yarn addContent not supported documentation for more information about adding packages.

+

Listing Added Packages

+

To list all of your added packages in your project run the following command:

+ + +
yarn list
+
+
1
+
+

This will list all of the packages you added as well as their dependencies for the current working directory.

+

To list only the packages you explicitly added you can use the --depth flag as follows:

+ + +
yarn list --depth=0
+
+
1
+
+

The above will restrict the depth of the displayed dependencies to be the first level. Notice that the levels are zero-indexed.

+

To learn more about listing added packages check out the yarn listContent not supported documentation.

+

Upgrading Packages

+

The upgrade subcommand will update the packages to their latest version based on the version ranges defined in the package.json file. See the Versions of dependenciesContent not supported documentation to get a better understanding of how version ranges are used.

+

After running the upgrade subcommand, the yarn.lock file will be updated with the latest versions specified by the version ranges. The versions in the package.json file will remain the same though since the upgraded packages will still be within the same version ranges.

+

To view the upgraded versions of your packages in a readable format you can use the yarn list command described in the previous section.

+

We'll see how to upgrade packages to versions outside of the specified version ranges which will update both the yarn.lock file and the package.json file.

+

The following command upgrades all packages within their specified version ranges:

+ + +
yarn upgrade
+
+
1
+
+

You can also upgrade a specific package within its specified version range:

+ + +
yarn upgrade [package-name]
+
+
1
+
+

To upgrade all packages to their latest versions you can add the --latest flag:

+ + +
yarn upgrade --latest
+
+
1
+
+

You can also upgrade a specific package to its latest version using the --latest flag:

+ + +
yarn upgrade [package-name] --latest
+
+
1
+
+

When using the --latest flag, the version range in the package.json file will be ignored. This can potentially result in the packages being upgraded across major versions which can lead to potential incompatible API changes, so be sure to check the packages for any breaking changes.

+

Since the range versions in the package.json file are ignored, both the yarn.lock and package.json files can be updated.

+

Also, the range specifiers in the package.json file will remain the same if it is still compatible with the latest version. If the range specifier isn't compatible with the new version a caret range specifier, i.e., ^ will be used instead.

+

So, e.g., a tilde range specifier, i.e., ~ will still be used for any packages that we're using it previously.

+

You can also explicitly set the range specifier by passing a flag after the --latest flag, e.g., --caret.

+

You can also upgrade a package to a specific version with the following command:

+ + +
yarn upgrade <package-name>@1.2.3
+
+
1
+
+

To upgrade a package to the latest version within a specified version range run the following:

+ + +
yarn upgrade <package-name>"@^1.2.3"
+
+
1
+
+

The latest version within the given version range is again determined by the range specifier and the version number.

+

In the example above the range specifier is the caret symbol, i.e., ^. You can again use any desired range specifier, and the package will be upgraded to the latest version within the given version range.

+

You can also upgrade a package to a specific tag using the following command:

+ + +
yarn upgrade <package-name>@tag
+
+
1
+
+

Tags are again a way to mark published versions of a package with a label. Check out the yarn tagContent not supported documentation for more information about them.

+

You can specify a preferred range specifier when upgrading a package with a tag by passing, e.g., --tilde flag at the end of the command.

+

Downgrading Packages

+

Using specific versions and tags when upgrading packages also allows you to downgrade your package by specifying a version that is older than your currently installed version.

+
+

To learn more about upgrading packages check out the yarn upgradeContent not supported documentation.

+

Removing Packages

+

To remove a package run the following command:

+ + +
yarn remove <package-name>
+
+
1
+
+

After running the command above, the yarn.lock and package.json files will both always be updated. This ensures all developers will still be using the exact same versions of the packages.

+

Also, when removing a package it will be removed from all types of dependencies, e.g., dependencies, devDependencies, etc.

+

See the Types of dependenciesContent not supported documentation for more information about dependencies and the yarn removeContent not supported documentation for more information about the command.

+

Installing All Project Packages

+

The following command should be run when checking out code for a new project and when another developer adds or removes a package.

+

Run the following command to install all of a project's packages specified in the package.json file:

+ + +
yarn install
+
+
1
+
+

You can also just run the following:

+ + +
yarn
+
+
1
+
+

After running either one of the commands above, a node_modules directory will be created in the current directory which contains all of the code for the installed packages.

+

Here's how the yarn.lock file is used:

+
    +
  • If the yarn.lock file is present and if it contains all of the packages specified in the package.json file, then the exact versions specified in the yarn.lock file will be installed.
  • +
  • If there is no yarn.lock file or there is one that doesn't contain all of the packages in the package.json file, then the newest versions within the version ranges specified in the package.json file will be installed. This will then update the yarn.lock file.
  • +
+

To ensure the yarn.lock file is not updated when installing all of a project's dependencies you can run the following:

+ + +
yarn --frozen-lockfile
+
+
1
+
+

For more information about installing all the packages in a project check out the yarn installContent not supported documentation.

+

Running Scripts

+

To run a script you need to first add a scripts object to your package.json file. Then you can add each script as a key-value pair where the key is the name of the script you want to run, and the value is a command that gets run in your shell.

+ + +
"scripts": {
+  "test": "test-script",
+  "build": "build-script"
+}
+
+
1
2
3
4
+
+

Here, we have defined two scripts in our scripts object with the names of test and build and with the commands of test-script and build-script, respectively.

+

To run a script you can run the following command:

+ + +
yarn run [script-name]
+
+
1
+
+

You can also just run the following:

+ + +
yarn [script-name]
+
+
1
+
+

Potential Shorthand Issue

+

Built-in CLI commands will have preference over your scripts if they share the same name. To avoid running a built-in CLI command you can always include the run subcommand when running your scripts.

+
+

It's also possible to list all of the scripts available to run in your project by running the following:

+ + +
yarn run
+
+
1
+
+

See the yarn runContent not supported documentation to lean more about the command and the yarn testContent not supported documentation for more information about testing.

+]]>
+
+ + Configuring Settings + https://codemonkeys.tech/raspberry-pi-configuring-settings/ + https://codemonkeys.tech/raspberry-pi-configuring-settings/ + Configuring Settings + Hey fellow Code Monkeys!!! 🐵 If you're interested in learning how to configure the settings for your Raspberry Pi, then check out the Configuring Settings post! 🍌🐒 + Tue, 20 Dec 2022 15:02:00 GMT +

Configuring Settings

+

What We're Doing

+

In this tutorial we're going to learn how to configure various settings for a Raspberry PiContent not supported using standard DebianContent not supported commands. Since we'll be using standard Debian commands, the commands will be compatible with most other hardware platforms running Debian.

+

Instead of using the standard Debian commands to configure the settings, you can preconfigure the settings with the Raspberry Pi ImagerContent not supported by using the advanced options when installing the Raspberry Pi OSContent not supported. You also have the option to use the raspi-configContent not supported tool to configure the settings.

+

If you preconfigure the settings using the Raspberry Pi Imager, you can always update them later by using either the raspi-config tool or the standard Debian commands discussed in this post.

+

Raspberry Pi Imager Boot Issues

+

If you're having issues booting your Raspberry Pi after preconfiguring the settings using the Raspberry Pi Imager, then don't preconfigure the settings. Instead you can use the raspi-config tool or the standard Debian commands to configure the settings after booting into the Raspberry Pi.

+
+

We'll be configuring the following settings:

+
    +
  • Username
  • +
  • Password
  • +
  • Secure Shell (SSH)
  • +
  • WiFi
  • +
  • Time Zone
  • +
  • Keyboard Layout
  • +
+

We'll be using the nano text editor to edit the configuration files.

+

Here's how to save and exit nano:

+
    +
  • Save: press Ctrl+o, confirm the filename, and press the Enter key
  • +
  • Exit: press Ctrl+x
  • +
+

Assumptions

+

We're making the following assumptions:

+ +

Username

+

There are multiple ways to update your username. We'll be updating the username by logging in as the root user. Instead of using the root user, it's also possible to create another user and log into it to update the username.

+

Don't Use pi for your Username

+

For security reasons it's recommended to not use pi as your username since it has been used in the past as the default username. Potential hackers have a list of commonly used usernames which may include the pi username.

+
+

Enable root User

+

To update the username using the root user, you first need to enable it which you can do by running the following command:

+ + +
sudo passwd root
+
+
1
+
+

Be sure to choose a secure password for the root user. You can use a password mananger like KeePassContent not supported or BitwardenContent not supported to generate and store your passwords.

+

Disabling the root User

+

You can also disable the root user if you want after updating the username which we'll demonstrate below. For security reasons it's recommended to disable the root user after updating the username.

+
+

Logout

+

After enabling the root user, you need to log out of the current user which you can do with the following command:

+ + +
logout
+
+
1
+
+

Update Username

+

Now, you'll need to log in using the root user by entering root for the username and the password you just created for the root user.

+

After logging in as the root user, you're now ready to update the username by running the following command:

+ + +
usermod -l <new_username> <old_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
  • <old_username> with the username you want to update
  • +
+

Update home Directory

+

The username has been updated, but the user's home directory will still be using the previous username. To update the home directory to reflect the updated username you need to run the following command:

+ + +
usermod -m -d /home/<new_username> <new_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
+

You can now log out of the root user by running the logout command we used earlier, and log in using the updated username and the user's password.

+

Disable root User

+

You can now disable the root user if you want, but you'll first want to make sure the updated user still has sudo privileges. You can check this by running the following command:

+ + +
groups <new_username>
+
+
1
+
+

Be sure to replace:

+
    +
  • <new_username> with the updated username
  • +
+

If the user still has sudo privileges, you should see the sudo group in the output.

+

After confirming the updated user still has sudo privileges, you can disable the root user by running the following command:

+ + +
sudo passwd -l root
+
+
1
+
+

Password

+

To update the password for your user you can run the following command:

+ + +
passwd
+
+
1
+
+

You will need to enter the current password for the user. Then you will be asked to enter the updated password and to re-enter the updated password.

+

Be sure to choose a secure password for your user. You can again use a password mananger like KeePassContent not supported or BitwardenContent not supported to generate and store your passwords.

+

Don't Use raspberry for your Password

+

It's recommended to not use raspberry as your password since it has been used in the past as the default password plus it isn't a secure password anyway.

+
+

Hostname

+

Every Raspberry Pi using Raspberry Pi OS Lite (64-bit) uses the default hostname raspberrypi which isn't very helpful when you're using multiple Raspberry Pi devices that you're trying to distinguish between on your network.

+

hostname Restrictions

+

The hostname may contain lowercase letters 'a' through 'z', uppercase letters 'A' through 'Z', numbers '0' through '9', and hyphens '-' as long as the first and last characters aren't hyphens. No other symbols, punctuation characters, or white space are allowed in the hostname.

+
+

hosts File

+

To update the hostname you can open the /etc/hosts file by running the following command:

+ + +
sudo nano /etc/hosts
+
+
1
+
+

Your hosts file should look something like this:

+ + +





 

127.0.0.1       localhost
+::1             localhost ip6-localhost ip6-loopback
+ff02::1         ip6-allnodes
+ff02::2         ip6-allrouters
+
+127.0.1.1       <old_hostname>
+
1
2
3
4
5
6
+
+

Be sure to replace:

+
    +
  • <old_hostname> with the updated hostname
  • +
+

Then save and exit the file.

+

hostname File

+

Next you need to open the /etc/hostname file by running the following command:

+ + +
sudo nano /etc/hostname
+
+
1
+
+

Your hostname file should look something like this:

+ + +
<old_hostname>
+
+
1
+
+

Be sure to replace:

+
    +
  • <old_hostname> with the updated hostname
  • +
+

Then save and exit the file.

+

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

After rebooting the command prompt should now display, <username>@<new_hostname>.

+

Where:

+
    +
  • <username> is the username of the current user
  • +
  • <new_hostname> is the updated hostname
  • +
+

Enable and Start SSH

+

Secure Shell (SSH) is a network communication protocol that enables you to connect securely to a remote computer or a server by using a text-based interface. When a secure SSH connection is established, a shell session is started, and you'll be able to manipulate the server by typing commands from your local computer.

+

If you want to remotely connect to your Raspberry Pi, i.e., be able to access it from your local computer, then you'll need to enable and start the SSH service on the Raspberry Pi.

+

Enable SSH

+

To enable SSH run the following command:

+ + +
sudo systemctl enable ssh
+
+
1
+
+

Start SSH

+

To start the SSH service run the following command:

+ + +
sudo systemctl start ssh
+
+
1
+
+

You should now be able to SSH into the Raspberry Pi from your local computer.

+

Configure WiFi

+

To configure WiFi you need to edit the wpa_supplicant.conf file.

+

wpa_supplicant.conf

+

The wpa_supplicant.conf file should be located in the /etc/wpa_supplicant directory.

+

To open the wpa_supplicant.conf file you can run the following command:

+ + +
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
+
+
1
+
+

After editing the file, it should look like this:

+ + +


 


 
 



ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
+update_config=1
+country=<country_code>
+
+network={
+     ssid="<ssid>"
+     psk="<password>"
+     scan_ssid=1
+}
+
1
2
3
4
5
6
7
8
9
+
+

Be sure to replace:

+ +

Then save and exit the file.

+

For the changes to take effect you need to reboot your Raspberry Pi which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

Unblock WiFi

+

If you get the following message after rebooting:

+ + +
Wi-Fi is currently blocked by rfkill.
+Use raspi-config to set the country before use.
+
+
1
2
+
+

Then you can run the following command to unblock the WiFi;

+ + +
sudo raspi-config nonint do_wifi_country <country_code>
+
+
1
+
+

Be sure to replace:

+ +

Instead of using raspi-config to unblock the WiFi which isn't a standard Debian command, you can also try installing and running urfkill.

+

Run the following command to install urfkill:

+ + +
sudo apt install urfkill
+
+
1
+
+

To unblock the WiFi using urfkill run the following command:

+ + +
sudo unblock wifi
+
+
1
+
+

Test Connection

+

To test the WiFi connection you can check the IP address by running the following command:

+ + +
hostname -I
+
+
1
+
+

Locale Settings

+

We're now going to go over how to update the time zone and keyboard layout locale settings.

+

Time Zone

+

You can check the current time zone by running the following command:

+ + +
ls -l /etc/localtime
+
+
1
+
+

To update the time zone you can run the following command:

+ + +
sudo timedatectl set-timezone <area>/<location>
+
+
1
+
+

Be sure to replace:

+
    +
  • <area> with your own area
  • +
  • <location> with your own location
  • +
+

If you're unsure what your area and location are, then take a look at the list of tz database time zonesContent not supported.

+

Keyboard Layout

+

To update the keyboard layout you can edit the keyboard file which is located in the /etc/default directory.

+

To open the keyboard file you can run the following command:

+ + +
sudo nano /etc/default/keyboard
+
+
1
+
+

After editing the file, it should look like this:

+ + +





 





# KEYBOARD CONFIGURATION FILE
+
+# Consult the keyboard(5) manual page.
+
+XKBMODEL="pc105"
+XKBLAYOUT="<layout>"
+XKBVARIANT=""
+XKBOPTIONS=""
+
+BACKSPACE="guess"
+
1
2
3
4
5
6
7
8
9
10
+
+

Be sure to replace:

+
    +
  • <layout> with your preferred keyboard layout, e.g., us
  • +
+

Then save and exit the file.

+

The value for the keyboard layout is typically the two character country codeContent not supported.

+

After updating the time zone and keyboard layout locale settings, you need to reboot your Raspberry Pi to see the changes take effect which you can do by running the following command:

+ + +
sudo reboot
+
+
1
+
+

Conclusion

+

After following only with this tutorial, you should now know how to configure various settings for your Raspberry Pi using standard Debian commands.

+]]>
+
+ + VuePress Tutorial 1 - Introduction + https://codemonkeys.tech/vuepress-tutorial-1/ + https://codemonkeys.tech/vuepress-tutorial-1/ + VuePress Tutorial 1 - Introduction + Hey fellow Code Monkeys!!! 🐵 If you're interested in learning Vuepress, then check out VuePress Tutorial 1 - Introduction! 🍌🐒 + Fri, 24 Sep 2021 16:26:30 GMT +

VuePress Tutorial 1 - Introduction

+

What We'll be Developing

+

Welcome to our VuePressContent not supported series!

+

In this series we'll be developing the Code Monkeys Blog starting from the basics.

+

So, have a look around if you haven't already.

+

Now grab a 🍌 and let's get to it!

+

Why Create a Blog?

+
    +
  • +

    Benefits of creating a blog:

    +
      +
    • Learn how to Create a Website
    • +
    • Improve your Web Development Skills & Writing Ability
    • +
    • Document your Thoughts & Ideas
    • +
    • Help Others Learn & Meet New People
    • +
    • Build your Online Brand
    • +
    • Source of Independent Income
    • +
    • Show it to Employers
    • +
    +
  • +
+

What We'll be Covering

+ +

Nice to Know

+

Since VuePressContent not supported uses HTML, CSS, JavaScript, VueContent not supported, and Markdown, it's good to have a solid grasp of them before starting.

+

However, in these posts and the accompanying videos I'll try to explain everything in sufficient detail, and anything that may need more explanation I'll provide links to helpful resources.

+

How to Use these Tutorials

+
    +
  • +

    If you want to recreate the Code Monkeys Blog or create a very similar blog then you can simply follow these tutorials in order.

    +
  • +
  • +

    Each tutorial will give you some general information about a VuePressContent not supported topic and provide helpful resources.

    +
  • +
  • +

    Then we'll apply what we've learned to the blog as an example.

    +
  • +
  • +

    This way you don't have to necessarily follow the tutorials in a linear order.

    +
  • +
  • +

    You'll be able to just learn a VuePressContent not supported topic if you don't want to recreate the entire blog or create a very similar blog.

    +
  • +
+

Updates

+

Note that the Code Monkeys Blog is not a finished product.

+

This means new features will be added, and the current code will be optimized and refactored as needed.

+

So, when something gets updated a new post will be made discussing the changes and/or an old post may be updated.

+

Also, this blog is currently using VuePress v1Content not supported.

+

VuePress v2Content not supported is still in beta at the time of this writing.

+

Once VuePress v2Content not supported is out of beta and the plugins being used are updated, the plan is to migrate over.

+

Resources

+ +]]>
+
+ + VuePress Tutorial 10 - Homepage Styling Part 2 + https://codemonkeys.tech/vuepress-tutorial-10/ + https://codemonkeys.tech/vuepress-tutorial-10/ + VuePress Tutorial 10 - Homepage Styling Part 2 + Hey fellow Code Monkeys!!! 🐵 Ready to continue the homepage styling for your VuePress site, then check out VuePress Tutorial 10 - Homepage Styling Part 2! 🍌🐒 + Fri, 02 Sep 2022 21:56:00 GMT +

VuePress Tutorial 10 - Homepage Styling Part 2

+

Homepage Styling Recap

+

In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global styling variables for the $accentColor, $textColor, and $borderColor in the palette.styl file. The colors of these variables then get applied instead of the colors originally set by the default themeContent not supported. These variables can also be used to style other elements of the blog as well.

+

We also added our own global styling variables to the palette.styl file which included the $backgroundColor and the $darkBorderColor. These variables were then used in the index.styl file.

+

In the index.styl file we used some of the global styling variables along with overriding and adding our own global styling to style the background-color of the blog, the main tag with a class of home, the header tag with a class of hero, and the div tag with a class of features.

+

After overriding and adding these styles to the blog, the main card on the homepage was being covered by the navbar, so in this tutorial we'll be fixing this issue. Then we'll be adding some hover effects to the main card logo and to the box shadow around the main card. Finally, we'll be adding a radial gradient background to the main card.

+

Homepage Styling Updates

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-10 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Fixing the Main Card Placement

+

We'll start by fixing the issue of the main card being covered by the navbar. To fix this issue we just need to update the padding in the home class:

+ + +





 


















html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+
    +
  • padding: 8rem 0 0 adds a padding of 8rem to the top and a padding of 0 to the left, right, and bottom of the main card. This pushes the main card down, so it is no longer being covered by the navbar.
  • +
+

Why not Start with this Padding?

+

In the previous tutorial we used padding: 0 to style the home class since that code was based off of a more complicated way of styling the Footer component which has now been simplified. We'll be going over this simplified Footer component styling in the next tutorial.

+
+

Now that we've fixed the placement of the main card, let's add the hover effects to the main card logo and to the box shadow around the main card.

+

Adding Hover Effects

+

To implement the hover effects we'll be adding a CSS pseudo-class of hover to the header tag with a class of hero which we'll use along with the transition property to smoothly apply the hover effects to the main card logo and to the box shadow around the main card.

+

First, let's add the hover pseudo-class:

+ + +














 
 
 
 










html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+
+
    +
  • .hero:hover applies the hover pseudo-class to the .hero selector which will apply the styles defined inside of it when the user hovers their pointer over the header tag with a class of hero.
  • +
  • box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f changes the box shadow style defined in the hero class.
  • +
  • transform: scale(1.1) applies the scale() method to the transform property to increase the size of the img tag to be 1.1 times the original width and height.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

When you hover your pointer over the main card, you should see the logo increase in width and height and the box shadow around the main card should now be more prevalent.

+

The hover effects are working, but they aren't that smooth. To make them smoother we're going to use the transition property.

+

The transition property allows you to change CSS property values smoothly over a specified duration. To create a transition you need to specify two values:

+
    +
  • The CSS property you want to add the transition to
  • +
  • The duration of the transition
  • +
+

Here's what the index.styl file looks like after adding our transition properties:

+ + +











 



 
 














html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        transition: box-shadow 0.2s
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+        img
+          transition: transform 0.2s
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+
    +
  • transition: box-shadow 0.2s adds the transition effect to the box-shadow property with a specified duration of 0.2s.
  • +
  • transition: transform 0.2s adds the transition effect to the transform property used by the img tag with a specified duration of 0.2s.
  • +
+

When you hover your pointer over the main card, the hover effects should look much smoother.

+

If you want to learn more about the transition property, then check out CSS TransitionsContent not supported.

+

Now that we have added our hover effects, let's add the radial gradient background to the main card.

+

Adding Gradient Background

+

CSS gradients allow you to display smooth transitions between two or more specified colors. +You can control numerous aspects of the transitions between the colors including the direction, shape, number of colors, etc.

+

We'll be adding a circular radial gradient background to the center of the header tag with a class of hero:

+ + +














 

















html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 8rem 0 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        transition: box-shadow 0.2s
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+        padding: 2rem
+        img
+          transition: transform 0.2s
+      .hero:hover
+        box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+        img
+          transform: scale(1.1)
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+
+
    +
  • background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor) adds a radial gradient with a circular shape to the center of the element starting with a color of #2c303a which transitions to the $backgroundColor variable that is defined in the palette.styl file.
  • +
+

If you want to learn more about CSS gradients, then check out these resources:

+ +

You can also check out Gradient MagicContent not supported which is a gallery of CSS gradients that you can freely use in your own projects.

+

The background of the main card should now be a radial gradient that starts at the center of the card with a color of #2c303a that circularly transitions to the $backgroundColor.

+

Next Steps

+

In the next tutorial we'll add styling to make the Footer component stick to the bottom of the page, and we'll add a highlight effect to the SVG icons.

+]]>
+
+ + VuePress Tutorial 11 - Sticky Footer + https://codemonkeys.tech/vuepress-tutorial-11/ + https://codemonkeys.tech/vuepress-tutorial-11/ + VuePress Tutorial 11 - Sticky Footer + Hey fellow Code Monkeys!!! 🐵 Want to learn how to make your footer stick to the bottom of the page, then check out VuePress Tutorial 11 - Sticky Footer! 🍌🐒 + Mon, 05 Sep 2022 20:04:00 GMT +

VuePress Tutorial 11 - Sticky Footer

+

What We're Doing

+

We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into a sticky footer. We were going to be adding a highlight effect when hovering over the SVGContent not supported icons in this tutorial as well, but the process is a little more involved than I remembered. So, we're going to be adding the highlight effect when hovering in the next tutorial.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-11 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's get started by discussing what a sticky footer is.

+ +

A sticky footer adheres or sticks to the bottom of the browser window assuming there isn't enough content on the page to push the footer lower like on this blog post for example. If the content on the page is short like on the homepage, then the footer will still stick to the bottom of the page instead of appearing directly below the content above it.

+

There are multiple ways to add a sticky footer to your site, but we're only going to discuss how to use the CSS calc() function. If you're interested in learning about the other ways of adding a sticky footer, then check out Sticky Footer, Five WaysContent not supported.

+ +

Here's what the index.styl file looks like after adding the sticky footer styling:

+ + +




 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

Here we added min-height: calc(100vh - 10.3125rem) to a div tag with a class of theme-container.

+

If you inspect the browser and go to the Elements tab, you can see where the div tag with a class of theme-container is in the HTML of the blog.

+ + +



 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">...</div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
+
+

The div tag with a class of theme-container contains all of the content of the blog except for the footer tag.

+

So, here we're using min-height: calc(100vh - 10.3125rem) to set the minimum height of the content inside of the div tag with a class of theme-container to be 100vh minus 10.3125rem which is the height of the Footer component including the top and bottom padding.

+

The unit of vh is relative to 1% of the height of the viewport which is the browser window size, so 100vh is 100% of the height of the viewport.

+

So, when we subtract 10.3125rem from 100vh, we're subtracting the height of the Footer component from 100% of the viewport height.

+

This means the minimum height of the content inside of the div tag with a class of theme-container will be the entire homepage height minus the height of the Footer component.

+

After setting this style, notice how the Footer component is now pushed to the bottom of the page. This is how we get the Footer component to stick to the bottom of the page.

+

Also, since we added this style to the index.styl file, this style will be applied globally to the blog which is fine since the Footer component will be used on every page in the blog.

+

Using a Fixed Footer Size

+

We're using a fixed size for the height of the Footer component which means if we change the height later on we'll have to update this value. In a future tutorial we'll be changing the height, so we'll have to update this value. If you prefer to not update this value whenever you update the height of the Footer component, then it may be worth looking into implementing the flexbox or grid methods for adding a sticky footer which you can find in the Sticky Footer, Five WaysContent not supported post.

+
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

As mentioned in the beginning of this post, in the next tutorial we're going to be adding a highlight effect when hovering over the SVGContent not supported icons.

+]]>
+
+ + VuePress Tutorial 12 - Highlight SVGs on Hover + https://codemonkeys.tech/vuepress-tutorial-12/ + https://codemonkeys.tech/vuepress-tutorial-12/ + VuePress Tutorial 12 - Highlight SVGs on Hover + Hey fellow Code Monkeys!!! 🐵 Want to learn how to add a highlight effect when hovering over SVGs, then check out VuePress Tutorial 12 - Highlight SVGs on Hover! 🍌🐒 + Thu, 08 Sep 2022 18:18:00 GMT +

VuePress Tutorial 12 - Highlight SVGs on Hover

+

What We're Doing

+

We're now ready to add a highlight effect when hovering over the SVGContent not supported icons. The method we'll be using doesn't require a lot of styling, but it does require us to edit the fill attribute of the SVGContent not supported icons.

+

We'll demonstrate how to edit the fill attribute by manually editing the files as well as using a Command-line Interface (CLI) command provided by vuepress-plugin-svg-iconsContent not supported which will automate the process and optimize the files.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-12 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's begin by manually editing one of the icon files.

+

Manual Editing

+

When we downloaded the icons from iconfontContent not supported we downloaded them with a fill attribute which will override the color we set for the hover effect.

+

To fix this issue we can manually remove the fill attribute from each icon file.

+

Icon Example

+

We'll use the GitHub.svg file as an example:

+ + +
































 




<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+>
+<svg
+  t="1625711611350"
+  class="icon"
+  viewBox="0 0 1024 1024"
+  version="1.1"
+  xmlns="http://www.w3.org/2000/svg"
+  p-id="2770"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="200"
+  height="200"
+>
+  <defs>
+    <style type="text/css"></style>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+       19.9-10.8 19.9-22.2v-77.6c-135.8
+       15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+       31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+       17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+       16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+       118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+       80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+       24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+       188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8
+       9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+       512.1c0-247.5-200.6-447.9-447.9-447.9C265
+       64.1 64.6 264.5 64.6 512z"
+    fill="#e6e6e6"
+    p-id="2771"
+  ></path>
+</svg>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
+
+

After removing fill="e6e6e6", the file will look like this:

+ + +
<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+>
+<svg
+  t="1625711611350"
+  class="icon"
+  viewBox="0 0 1024 1024"
+  version="1.1"
+  xmlns="http://www.w3.org/2000/svg"
+  p-id="2770"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="200"
+  height="200"
+>
+  <defs>
+    <style type="text/css"></style>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+       19.9-10.8 19.9-22.2v-77.6c-135.8
+       15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+       31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+       17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+       16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+       118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+       80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+       24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+       188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c0.8
+       9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+       512.1c0-247.5-200.6-447.9-447.9-447.9C265
+       64.1 64.6 264.5 64.6 512z"
+    p-id="2771"
+  ></path>
+</svg>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+
+

SVG File Formatting

+

The files above have been formatted to make them easier to read for this post, but the contents in your file may all be on one line. If this is the case, just scroll until you find the fill attribute or search for fill in the file to be able to easily find and remove it.

+
+

Icon Styles

+

Now that we have removed the fill attribute from the file, we can add the styling to highlight the icon when hovering over it.

+

Here's what the Footer.vue file looks like after adding the hover effect:

+ + +









































































 
 






<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+    svg:hover
+      fill: $accentColor
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
+
+
    +
  • svg:hover applies the hover pseudo-class to the svg selector which will apply the styles defined inside of it when the user hovers their pointer over the svg tag.
  • +
  • fill: $accentColor changes the fill of the svg tag to be the accent color.
  • +
+

Notice the icon fill is now set to be the accent color even if you're not hovering over the icon.

+

This is because we haven't set a fill attribute value for when the user isn't hovering over the icon, so it falls back to the value set in svg:hover.

+

To fix this issue we'll add the following styling to the Footer.vue file:

+ + +









































































 
 








<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+    svg
+      fill: $textColor
+    svg:hover
+      fill: $accentColor
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
+
+
    +
  • svg is the selector used to target the icon.
  • +
  • fill: $textColor sets the fill of the svg to be the text color when the user isn't hovering over the icon.
  • +
+

The fill should now be the same as the text color when you're not hovering over the icon, and it should get set to be the accent color when you hover over the icon.

+

To set the hover effect for the other icons, you will need to remove the fill attribute from the other icon files.

+

If you have questions about the CSS discussed above, then check out these resources:

+ +

You can also check out this CSS-Tricks postContent not supported if you're interested in learning about other ways to change the fill on hover.

+

Instead of manually editing each file, we can use the CLI command provided by vuepress-plugin-svg-iconsContent not supported to automate the process.

+

Automated Editing

+

The CLI command provided by vuepress-plugin-svg-iconsContent not supported optimizes SVGContent not supported files by removing a lot of redundant and useless information including the fill attribute. The plugin does this by integrating SVGOContent not supported which stands for Scalable Vector Graphic Optimizer and is a Node.jsContent not supported based tool for optimizing SVGContent not supported files.

+

CLI Command

+

Here's the CLI command you need to run vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

+

You can add the CLI command to the scripts object in the package.json file:

+ + +


















 







{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://www.codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs",
+    "svgo": "vuepress svgo docs"
+  },
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Then you can run the script using:

+ + +
yarn svgo
+
+
1
+ +
npm run svgo
+
+
1
+
+

After running the script, the SVGContent not supported files will be optimized which includes removing the fill attribute from the files.

+

The hover effect should now be applied to each icon assuming you added the styling from the section above.

+

If you have any questions or want to learn more about the plugin, then check out the guideContent not supported.

+

You can also check out SVGOContent not supported if you want to learn more about the optimization tool including CLI usage, configuration, API usage, etc.

+

Optimized Icon Example

+

Here's the contents of the optimized GitHub.svg file:

+ + +
























<svg
+  viewBox="0 0 1024 1024"
+  xmlns="http://www.w3.org/2000/svg"
+>
+  <defs>
+    <style/>
+  </defs>
+  <path
+    d="M64.6 512c0 195.6 125.4 361.9 300.1 422.9 23.5 5.9
+    19.9-10.8 19.9-22.2v-77.6c-135.8
+    15.9-141.3-74-150.5-89-18.5-31.5-61.9-39.5-49-54.5
+    31-15.9 62.5 4 98.9 58 26.4 39.1 77.9 32.5 104.1 26 5.7-23.5
+    17.9-44.5 34.7-60.9-140.7-25.2-199.4-111.1-199.4-213.3 0-49.5
+    16.4-95.1 48.4-131.8-20.4-60.6 1.9-112.4 4.9-120.1 58.2-5.2
+    118.5 41.6 123.3 45.3 33.1-8.9 70.8-13.7 112.9-13.7 42.4 0
+    80.3 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.4-43.9 2.9 7.7
+    24.7 58.3 5.5 118.1 32.5 36.8 49 82.8 49 132.4 0 102.3-59
+    188.3-200.2 213.2 23.5 23.3 38.1 55.5 38.1 91.1v112.7c.8
+    9 0 17.9 15.1 17.9C832.7 877 960.4 709.4 960.4
+    512.1c0-247.5-200.6-447.9-447.9-447.9C265
+    64.1 64.6 264.5 64.6 512z"
+  />
+</svg>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

SVG File Formatting

+

Just like the previous examples the file is formatted to make it easier to read for this post, but the contents in your file may all be on one line.

+
+

If you compare the optimized file with the original file above, you'll notice a lot of unnecessary information was removed including the fill attribute without affecting the rendering of the icons.

+

Next Steps

+

In the next tutorial we'll be styling the navbar by updating the background color, height, border, etc.

+]]>
+
+ + VuePress Tutorial 14 - Dropdown Menu Styling + https://codemonkeys.tech/vuepress-tutorial-14/ + https://codemonkeys.tech/vuepress-tutorial-14/ + VuePress Tutorial 14 - Dropdown Menu Styling + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the dropdown menu for your VuePress site, then check out VuePress Tutorial 14 - Dropdown Menu Styling! 🍌🐒 + Thu, 15 Sep 2022 22:17:00 GMT +

VuePress Tutorial 14 - Dropdown Menu Styling

+

What We're Doing

+

If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling to make it match the rest of the blog. To implement the styling we'll be targeting these CSS classes nav-dropdown and dropdown-item which are provided by the default themeContent not supported.

+

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-14 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Force Dropdown Menu to Hover

+

Before we start styling the dropdown menu, we're going to force an element state of hover on the div tag with a class of dropdown-wrapper. This will ensure we can see the changes we're making to the dropdown menu even when we move the cursor away from the dropdown-wrapper class.

+

To do this we need to select the dropdown-wrapper class in the Elements tab.

+

Here's the location of the dropdown-wrapper class in the HTML:

+ + +












 


















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">...</div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+

After selecting the dropdown-wrapper class in the Elements tab, we need to go to the Styles tab, click on the :hov tab, then force the element state of hover by checking the :hover checkbox.

+

The dropdown menu should now be shown even when the cursor is moved away from the dropdown-wrapper class.

+ +

We're now ready to begin styling the dropdown menu.

+

HTML Location

+

We're going to begin the styling by locating where the nav-dropdown class is in the HTML:

+ + +















 



















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">...</ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

From the HTML above we can see that the nav-dropdown class is attached to a ul tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

+

Styling

+

This means in the index.styl file we can nest the nav-dropdown class inside of the nav-item class and apply the following styles:

+ + +

































 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+              .nav-dropdown
+                text-align: center
+                background-color: $backgroundColor
+                border: 0.125rem solid $borderColor
+                padding: 0.8rem 0
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
+
+
    +
  • text-align: center horizontally aligns the text in the dropdown menu.
  • +
  • background-color: $backgroundColor sets the background color of the dropdown menu to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • +
  • border: 0.125rem solid $borderColor adds a border around the dropdown menu with a thickness of 0.125rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • +
  • padding: 0.8rem 0 adds a padding of 0.8rem to the top and bottom and 0 to the left and right of the dropdown menu.
  • +
+ +

We're now ready to style the dropdown-item class.

+

HTML Location

+

Here's the location of the dropdown-item class in the HTML:

+ + +
















 
 
 
 
 
 
 
 
 
 




















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style="max-width: 2337px;">
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">
+                    <li class="dropdown-item">
+                      ::marker
+                      <!---->
+                      <a href="/posts/" class="nav-link"> All Posts </a>
+                    </li>
+                    <li class="dropdown-item">
+                      ::marker
+                      <h4> By Topic </h4>
+                      <ul class="dropdown-subitem-wrapper">...</ul>
+                    </li>
+                  </ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
+
+

From the HTML above we can see that there are two dropdown-item classes. Each one is attached to an li tag and is a child of the ul tag with a class of nav-dropdown.

+

Also, notice the h4 tag which is a child of the li tag with a class of dropdown-item. We'll be styling this h4 tag as well.

+

Styling

+

In the index.styl file we can nest the dropdown-item class inside of the nav-dropdown class as well as nest the h4 tag inside of the dropdown-item class and apply the following styles:

+ + +






































 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+              .nav-dropdown
+                text-align: center
+                background-color: $backgroundColor
+                border: 0.125rem solid $borderColor
+                padding: 0.8rem 0
+                .dropdown-item
+                  padding-bottom: 0.4rem
+                  h4
+                    border-top: 0.0625rem solid $borderColor
+                    cursor: text
+                    margin: 0.45rem 0.375rem 0
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
+
+
    +
  • padding-bottom: 0.4rem adds a padding of 0.4rem to the bottom of each of the dropdown items.
  • +
  • border-top: 0.0625rem solid $borderColor adds a border to the top of the h4 tag, i.e., the By Topics text with a thickness of 0.0625rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • +
  • cursor: text sets the cursor when pointing over the h4 tag, i.e., the By Topics text to be the text cursor which indicates the text can be selected and is typically in the shape of an I-beam.
  • +
  • margin: 0.45rem 0.375rem 0 adds a margin of 0.45rem to the top, 0.375rem to the left and right, and 0 to the bottom of the h4 tag, i.e., the By Topics text.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

In the next tutorial we'll be installing and beginning the process of configuring the @vuepress/plugin-blogContent not supported.

+]]>
+
+ + VuePress Tutorial 13 - Navbar Styling + https://codemonkeys.tech/vuepress-tutorial-13/ + https://codemonkeys.tech/vuepress-tutorial-13/ + VuePress Tutorial 13 - Navbar Styling + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the navbar for your VuePress site, then check out VuePress Tutorial 13 - Navbar Styling! 🍌🐒 + Sun, 11 Sep 2022 17:11:00 GMT +

VuePress Tutorial 13 - Navbar Styling

+

What We're Doing

+

Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling. We're going to be targeting these CSS classes provided by the default themeContent not supported: navbar, site-name, links, search-box, nav-links, nav-item, and dropdown-title.

+

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-13 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+ +

Alright, now we're ready to begin styling the navbar.

+

HTML Location

+

We're going to start by locating where the navbar class is in the HTML:

+ + +




 











<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+
+

From the HTML above we can see that the navbar class is attached to a header tag and is a child of the div tag with a class of theme-container.

+

Styling

+

This means in the index.styl file we can nest the navbar class inside of the theme-container class and apply the following styles:

+ + +






 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
+
+
    +
  • display: flex defines a flex container for all of the direct children of the header tag with a class of navbar.
  • +
  • align-items: center vertically centers the flex items, i.e., the direct children of the header tag with a class of navbar.
  • +
  • height: 4.5rem sets the height of the navbar to be 4.5rem.
  • +
  • background-color: $backgroundColor sets the background color of the navbar to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • +
  • border-bottom-width: 0.125rem sets the border bottom width of the navbar to be 0.125rem.
  • +
+

Site Name Class

+

After locating and styling the navbar class, we're ready to move on to the site-name class.

+

HTML Location

+

Here's the location of the site-name class in the HTML:

+ + +








 














<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">
+            <img src="/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png" alt="Code Monkeys" class="logo">
+            <span class="site-name can-hide">Code Monkeys</span>
+          </a>
+          <div class="links" style>...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the site-name class is attached to a span tag and is a child of the a tag with a class of home-link which is a child of the header tag with a class of navbar.

+

Styling

+

This means in the index.styl file we can nest the site-name class inside of the navbar class and apply the following style:

+ + +












 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
+
+
    +
  • font-size: 1.5rem sets the font size of the site name in the navbar, i.e., Code Monkeys to be 1.5rem.
  • +
+ +

We're now ready to style the links class.

+

HTML Location

+

Here's the location of the links class in the HTML:

+ + +







 












<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

From the HTML above we can see that the links class is attached to a div tag and is a child of the header tag with a class of navbar.

+

Styling

+

This means in the index.styl file we can nest the links class inside of the navbar class and apply the following styles:

+ + +














 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
+
+
    +
  • background-color: transparent sets the background color behind the search box and of the links on the right side of the navbar to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the links class.
  • +
  • height: 3rem sets the height of the div tag which contains the search box and the links on the right side of the navbar to be 3rem.
  • +
  • align-items: center vertically centers the flex items, i.e., the direct children of the div tag with a class of links which was given a style of display: flex by the default themeContent not supported.
  • +
+

Search Box Class

+

We've finished styling the links class, so let's begin the styling of the search-box class.

+

HTML Location

+

Here's the location of the search-box class in the HTML:

+ + +








 














<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">...</nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the search-box class is attached to a div tag and is a child of the div tag with a class of links.

+

Styling

+

This means in the index.styl file we can nest the search-box class inside of the links class and apply the following styles:

+ + +


















 
 
 
 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
+
+
    +
  • margin-right: 1.5rem adds a margin of 1.5rem to the right of the search box.
  • +
  • font-size: 1.125rem sets the font size of the text in the input tag to be 1.125rem.
  • +
  • background-color: transparent sets the background color of the input tag to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the input tag.
  • +
  • border-width: 0.125rem sets the width of the border around the input tag to be 0.125rem.
  • +
  • color: $textColor sets the color of the text in the input tag to be $textColor which is a global styling variable we set in the palette.styl file.
  • +
+

Viewing the font-size and color Styles

+

To see the font-size and color styles in action try typing some text in the search box. Once you click in the search box, notice the border gets its color set to the $accentColor which is a global styling variable we set in the palette.styl file. This effect is provided by the default themeContent not supported and uses the focus pseudo-class.

+
+ +

Now that we have styled the search-box class and its child input tag, we're ready to move on to the styling of the nav-links class.

+

HTML Location

+

Here's the location of the nav-links class in the HTML:

+ + +









 













<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">...</nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

From the HTML above we can see that the nav-links class is attached to a nav tag and is a child of the div tag with a class of links.

+

Styling

+

This means in the index.styl file we can nest the nav-links class inside of the links class and apply the following style:

+ + +

























 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
+
+
    +
  • font-size: 1.25rem sets the font size of the nav links on the right side of the navbar to be 1.25rem.
  • +
+ +

We're now ready to style the nav-item class.

+

HTML Location

+

Here's the location of the nav-item class in the HTML:

+ + +










 
 
 
 















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

From the HTML above we can see that there are four nav-item classes. Each one is attached to a div tag and is a child of the nav tag with a class of nav-links.

+

Styling

+

This means in the index.styl file we can nest the nav-item class inside of the nav-links class and apply the following styles:

+ + +



























 
 
 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
+
+
    +
  • .nav-item:first-child applies the first-child pseudo-class to the .nav-item selector. The first-child pseudo-class applies the styles defined inside of it to the first element among a group of sibling elements which in our case is the first div tag with a class of nav-item in the group of sibling div tags that have the class of nav-item.
  • +
  • margin-left: 0 adds a margin of 0 to the left of the first div tag with a class of nav-item within the group of sibling div tags that have a class of nav-item.
  • +
  • margin-left: 1.75rem adds a margin of 1.75rem to the left of all of the div tags that have a class of nav-item except for the first one since that is being styled by the first-child pseudo-class.
  • +
+ +

After finishing the styling for the nav-item class, we're now ready to move on to the styling of the dropdown-title class.

+

HTML Location

+

Here's the location of the dropdown-title class in the HTML:

+ + +













 





















<body>
+ <div id="app">
+    <div id="global-layout">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+          <div class="sidebar-button">...</div>
+          <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+          <div class="links" style>
+            <div class="search-box">...</div>
+            <nav class="nav-links can-hide">
+              <div class="nav-item">...</div>
+              <div class="nav-item">
+                <div class="dropdown-wrapper">
+                  <button type="button" aria-label="Posts" class="dropdown-title">...</button>
+                  <button type="button" aria-label="Posts" class="mobile-dropdown-title">...</button>
+                  <ul class="nav-dropdown" style="display: none;">...</ul>
+                </div>
+              </div>
+              <div class="nav-item">...</div>
+              <div class="nav-item">...</div>
+              <!---->
+            </nav>
+          </div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    <div class="global-ui"></div>
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

From the HTML above we can see that the dropdown-title class is attached to a button tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

+

Styling

+

This means in the index.styl file we can nest the dropdown-title class inside of the nav-item class and apply the following style:

+ + +































 
 




























html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .theme-container
+      min-height: calc(100vh - 10.3125rem)
+      .navbar
+         display: flex
+         align-items: center
+         height: 4.5rem
+         background-color: $backgroundColor
+         border-bottom-width: 0.125rem
+        .site-name
+          font-size: 1.5rem
+        .links
+          background-color: transparent
+          height: 3rem
+          align-items: center
+          .search-box
+            margin-right: 1.5rem
+            input
+              font-size: 1.125rem
+              background-color: transparent
+              border-width: 0.125rem
+              color: $textColor
+          .nav-links
+            font-size: 1.25rem
+            .nav-item:first-child
+              margin-left: 0
+            .nav-item
+              margin-left: 1.75rem
+              .dropdown-title
+                font-size: 1.25rem
+      .home
+        padding: 8rem 0 0
+        .hero
+          margin-left: 2rem
+          margin-right: 2rem
+          border: 0.125rem solid $darkBorderColor
+          box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+          transition: box-shadow 0.2s
+          border-radius: 5.625rem
+          margin-bottom: 0.625rem
+          background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor)
+          padding: 2rem
+          img
+            transition: transform 0.2s
+        .hero:hover
+          box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f
+          img
+            transform: scale(1.1)
+        .features
+          margin-left: 2rem
+          margin-right: 2rem
+          border-top: 0.125rem solid $borderColor
+          border-bottom: 0.125rem solid $borderColor
+          .feature
+            text-align: center
+            h2
+              font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+
    +
  • font-size: 1.25rem sets the font size of the dropdown title, i.e., Posts to be 1.25rem.
  • +
+

If you have questions about the CSS discussed above, then check out these resources:

+ +

Next Steps

+

In the next tutorial we'll be styling the dropdown menu in the navbar by updating the background color, border, padding, etc.

+]]>
+
+ + VuePress Tutorial 15 - Blog Plugin + https://codemonkeys.tech/vuepress-tutorial-15/ + https://codemonkeys.tech/vuepress-tutorial-15/ + VuePress Tutorial 15 - Blog Plugin + Hey fellow Code Monkeys!!! 🐵 Want to learn how to install and configure the blog plugin for your VuePress site, then check out VuePress Tutorial 15 - Blog Plugin! 🍌🐒 + Wed, 21 Sep 2022 12:26:00 GMT +

VuePress Tutorial 15 - Blog Plugin

+

What We're Doing

+

It's now time to install and begin the process of configuring @vuepress/plugin-blogContent not supported. We're going to start by describing the main features provided by the plugin. Then we'll go over the installation and usage. After going over the installation and usage, we'll describe the concepts and implementation of document classification, permalinks, and directory classification.

+

If you're interested you can check out the blog plugin code hereContent not supported. You can also check out the @vuepress/theme-blogContent not supported if you're interested in learning more about it. We won't be discussing the blog theme in detail since we're using the default themeContent not supported.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-15 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Features

+

The blog plugin provides the following main features:

+ +

We'll be discussing pagination and the Client API in more detail in future tutorials.

+

Installation

+

We're now ready to discuss the installation of the plugin.

+

Using the Tutorials Repo

+

If you're following along with the tutorials, then when you switch to the tutorial-15 branch you can run the following command to install the package instead of running the installation command:

+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

+

Using the Installation Command

+

To install the blog plugin in your own project you can run the following command:

+ + +
yarn add -D @vuepress/plugin-blog
+
+
1
+ +
npm install -D @vuepress/plugin-blog
+
+
1
+
+

Installing the Same Blog Plugin Version

+

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @vuepress/plugin-blog@1.9.4.

+
+

Updated package.json File

+

After installing the plugin, the package.json file should look something like this:

+ + +






















 




{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://www.codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs",
+    "svgo": "vuepress svgo docs"
+  },
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "@vuepress/plugin-blog": "^1.9.4",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+

Automatically Installed Plugins

+

When installing the blog plugin you may have noticed the following plugins also get installed:

+ +

These plugins provide features that are common to blogs, so they're included in the installation of the blog plugin. Including these plugins in the installation of the blog plugin saves you the time of searching for plugins that provide these common features as well as from having to separately install each plugin.

+

The plugins will only be used though if you enable them in the config.js file.

+

They can also be installed as standalone plugins, so you don't need to use the blog plugin to use them for your site.

+

We'll be discussing these plugins in more detail in future tutorials.

+

Usage

+

To use the blog plugin we need to add the following to the config.js file which should now look something like this:

+ + +












































 


module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: ['@goy/svg-icons', '@vuepress/blog'],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
+
+

Document Classification

+

The blog plugin provides a document classifier which is a set of functions that handles the classifications of pages with the same characteristics.

+

These characteristics for pages in a blog may consist of:

+
    +
  • Pages in the same directory, e.g., a _posts directory.
  • +
  • Pages containing the same frontmatter key, e.g., tag: js which signifies those pages contain content related to js, i.e., JavaScript.
  • +
+

Another common requirement is the ability to group all pages as well as pages with specific tags for pagination.

+

Before discussing directory classification, we're going to first define what a permalink is as well as discuss how they're built and configured. This will give us a better understanding of how the blog plugin uses permalinks to build customizable links for blog posts which is preferable to using the default way of creating links.

+ +

A permalink is a URL that is intended to remain unchanged for a long time. This leads to links that are less susceptible to link rotContent not supported which is when a link ceases to point to its originally targeted web page due to the page being relocated to a new address or becoming permanently unavailable.

+

VuePress v1Content not supported provided support for creating customizable links by introducing the ability to build permalinks.

+

Template Variables

+

We're able to build permalinks by using the following template variables:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableDescription
:yearPublished year of post (4-digit)
:monthPublished month of post (2-digit)
:i_monthPublished month of post (without leading zeros)
:dayPublished day of post (2-digit)
:i_dayPublished day of post (without leading zeros)
:slugSlugified file path (without extension)
:regularPermalink generated by VuePress by default.
+

Default Configuration

+

The default configuration for permalinks is /:regular.

+

The :regular template variable will first check if the Markdown files in the documents directory which in our case is the docs directory are index files, i.e., README.md or index.md.

+
    +
  • If they're index files, they get converted to URLs without extensions that are based on the file hierarchy.
  • +
  • If they're not index files, they get converted to URLs with html extensions that are based on the file hierarchy.
  • +
+

Let's look at some examples to make this clearer where the file paths are relative to the documents directory which again in our case is the docs directory:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Relative PathPage Routing
/README.md/
/foo/README.md/foo/
/foo.md/foo.html
/foo/bar.md/foo/bar.html
+

Using Vue Files

+

Files with a vue extension follow the same conventions described for Markdown files above, e.g., /README.vue gets converted to /.

+
+

You can take a look at fileToPath.tsContent not supported to see the code that handles converting files to paths.

+

Global Configuration

+

To globally change the default configuration for permalinks for your site you can add the permalink property to the config.js file.

+

We can build a permalink to use in the config.js file by using the template variables.

+

For example we can use the template variables to build the following permalink: /:year/:month/:day/:slug.

+

We can then set this as the value for the permalink property in the config.js file:

+ + +




module.exports = {
+  permalink: '/:year/:month/:day/:slug'
+}
+
1
2
3
+
+

Using the Default Configuration

+

We'll be leaving the permalink property with the default value of /:regular, and we'll use the configuration provided by the blog plugin to customize the permalinks for each blog post.

+
+

Local Configuration

+

It's also possible to set a permalink locally for a single page which overrides any globally set configuration.

+

This is done be setting the permalink property in the frontmatter of the Markdown file:

+ + +


 


---
+title: Local Permalink
+permalink: /using-a-local-permalink
+---
+
1
2
3
4
+
+

This will set the permalink property to be /using-a-local-permalink instead of following the global configuration.

+

Now that we have an understanding of document classification and permalinks, let's move onto the directory classifier which handles classifying pages placed in the same directory.

+

Directory Classification

+

First we need to create a directory that will contain all of the pages we want to classify. To do this we'll create a _posts directory inside of the docs directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ ├── _posts +│ ├── icons +│ └── README.md

+

Next, we'll create the following example pages in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

The _posts directory for your site should now look like this:

+

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ └── 2022-05-08-example-page-3.md

+

By default VuePressContent not supported will create the following page URLs since it uses the /:regular template variable described above when building the links:

+
    +
  • /_posts/2020-07-03-example-page-1.html
  • +
  • /_posts/2021-11-16-example-page-2.html
  • +
  • /_posts/2022-05-08-example-page-3.html
  • +
+

You should now be able to navigate to these pages in the browser:

+ +

The default behavior is fine for creating the main pages on the site, but having the ability to build customizable links for blog posts is preferable.

+

After using the configuration provided by the blog plugin to build customized permalinks, the page URLs will look like this:

+
    +
  • /2020/07/03/example-page-1/
  • +
  • /2021/11/16/example-page-2/
  • +
  • /2022/05/08/example-page-3/
  • +
+

To build these customizable links we're going to start setting up the directory classifier configuration in the config.js file.

+

directories

+

First, we'll add the directories property which is used to create the directory classifier.

+

The expected type is a DirectoryClassifier[], and the default value is [].

+

Here's the updated config.js file:

+ + +














































 
 
 
 
 
 



module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
+
+

id

+

Next, we'll add the id property which sets a unique id for the current classifier. We'll use a value of posts.

+

The expected type is a string, and the default value is undefined.

+

Here's the updated config.js file:

+ + +


















































 
 
 






module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
+
+

dirname

+

Now, we'll add the dirname property which is used to identify the directory we want to classify. This is the _posts directory we created earlier.

+

The expected type is a string, and the default value is undefined.

+

Here's the updated config.js file:

+ + +




















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
+
+

After setting the dirname property, the page URLs get set to the customized permalinks mentioned above:

+ +

The customized permalinks are actually built using properties we haven't discussed yet. The blog plugin sets default values that don't need to be explicitly set in the config.js file. We'll be discussing these other properties and their default values below.

+

The previously provided links still work because they get converted to the customized permalinks when navigating to those pages.

+

Unknown Custom Element

+

When navigating to the links if you inspect the browser then go to the Console, you'll see the following error: Unknown custom element: <Post>.

+
+

This error is occurring because the plugin is looking for a Post layout component in the layouts directory which we haven't created yet.

+

Before creating a Post layout component to fix this error, we're going to first add the path property.

+

path

+

The path property specifies the entry page, also known as the list page for the current classifier. This page will be used to display your posts as a paginated list.

+

The expected type is a string, and the default value is /${id}/ where ${id} is the value of the id property we previously set.

+

This means you don't need to explicitly set the path property if you're going to be using the same value as the id property. We'll be using a value of /posts/ for the path property, so we don't need to explicitly set the property. However, we're going to explicitly set the property because it allows us to have a quick reference to the property and its value.

+

Here's the updated config.js file:

+ + +





















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+

You can navigate to the entry page by using the following link:

+ +

Notice this link has the value of the path property in it, i.e., /posts/. This is the same link we set in the navbar dropdown menu for All Posts, so you can click on that link to navigate to the entry page which will eventually be a paginated list of all of the posts.

+

Currently, when navigating to that link the Layout component provided by the default themeContent not supported is displayed. The blog plugin will fallback to using the Layout component if it's unable to find an IndexPost layout component in the layouts directory.

+

This means we can create an IndexPost layout component that specifically handles the layout of the paginated list of all of the posts instead of using the Layout component.

+

Creating the IndexPost Layout

+

To create the IndexPost layout component we're going to add an IndexPost.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

+

. +├── layouts +│ ├── GlobalLayout.vue +│ └── IndexPost.vue

+

We're going to begin the development of the IndexPost layout component by adding template, script, and style tags:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

We'll continue developing the IndexPost layout component in a future tutorial.

+

layout

+

We're now ready to add the layout property which is used to specify which layout to use for the entry page.

+

The expected type is a string, and the default value is 'IndexPost' || 'Layout'.

+

From the default value we can see why the entry page originally defaulted to using the Layout component before we created the IndexPost layout component. Since the blog plugin looks for the IndexPost layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the layout property, e.g., you could use a value of MyIndexPost which you would have to explicitly set in the config.js file. Then you would have to create a MyIndexPost.vue file inside of the layouts directory.

+

Here's the updated config.js file:

+ + +






















































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
+
+

We're now going to fix the Unknown Custom Element error we got after adding the dirname property. To fix this error we need to create the previously mentioned Post layout component.

+

Creating the Post Layout

+

The Post layout component is used to handle the layout for individual post pages.

+

To create the Post layout component we're going to add a Post.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

+

. +├── layouts +│ ├── GlobalLayout.vue +│ ├── IndexPost.vue +│ └── Post.vue

+

We're going to begin the development of the Post layout component by adding template, script, and style tags:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

We'll continue developing the Post layout component in a future tutorial.

+

itemLayout

+

We're now ready to add the itemLayout property which is used to specify which layout to use for individual post pages.

+

The expected type is a string, and the default value is 'Post'.

+

From the default value we can see why the blog plugin looks for a Post layout component. Since the blog plugin looks for the Post layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the itemLayout property, e.g., you could use a value of MyPost which you would have to explicitly set in the config.js file. Then you would have to create a MyPost.vue file inside of the layouts directory.

+

Here's the updated config.js file:

+ + +























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
+
+ +

We're now ready to add the itemPermalink property which is used to build customized permalinks for each blog post.

+

The expected type is a string, and the default value is '/:year/:month/:day/:slug'.

+

From the default value we can see how the blog plugin built the customized permalinks after only setting the dirname property. Since the blog plugin uses the value we currently want, we don't need to explicitly set the property. However, just like the other properties we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

Here's the updated config.js file:

+ + +
























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
+
+

Summary of URLs and Layouts

+

Here's a table that summarizes the relationship between the page URLs the blog plugin builds using customized permalinks and the layout components.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
URLsLayouts
/posts/IndexPost (falls back to Layout)
/2020/07/03/example-page-1/Post
/2021/11/16/example-page-2/Post
/2022/05/08/example-page-3/Post
+

Next Steps

+

In the next tutorial we'll be discussing the configuration for the pagination property as well as how to access the pagination data in the layout components by using the Client API.

+]]>
+
+ + VuePress Tutorial 16 - Pagination + https://codemonkeys.tech/vuepress-tutorial-16/ + https://codemonkeys.tech/vuepress-tutorial-16/ + VuePress Tutorial 16 - Pagination + Hey fellow Code Monkeys!!! 🐵 Ready to learn about the pagination feature provided by the blog plugin, then check out VuePress Tutorial 16 - Pagination! 🍌🐒 + Fri, 30 Sep 2022 20:07:00 GMT +

VuePress Tutorial 16 - Pagination

+

What We're Doing

+

Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blogContent not supported. In this tutorial we're going to begin the configuration of the pagination property as well as discuss the globally scoped $pagination variable provided by the Client API.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

You can view all of the code in this tutorial by going to the tutorial-16 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Pagination Configuration

+

As mentioned in the previous tutorial pagination allows you to break up the display of your posts into multiple pages. This provides easier navigation and a better user experience.

+

If you have any questions or want to learn more about the pagination configuration, then check out the pagination propertyContent not supported and Pagination ConfigContent not supported documentation.

+

pagination

+

We're going to begin the configuration by adding the pagination property which allows you to customize the pagination of your posts.

+

The expected type is a Pagination object.

+

Here's the updated config.js file:

+ + +

























































 







module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {},
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
+
+

lengthPerPage

+

Next, we'll add the lengthPerPage property which sets the maximum number of posts to display per page.

+

The expected type is a number, and the default value is 10.

+

When the number of posts is greater than the lengthPerPage value, the blog plugin will generate the necessary pages to display all of the posts.

+

The blog plugin does this by adding page/n/ onto the end of the entry page where n represents the number of the page.

+

So, the second page in the paginated list of pages would be page/2/.

+

If you remember from the previous tutorial VuePress Tutorial 15 - Blog Plugin, the entry page is set by the path property which was given a value of /posts/.

+

This means in our case the blog plugin will generate pages with the following format: /posts/page/n/ where n once again represents the number of the page.

+

We also created the following posts in the _posts directory in the previous tutorial:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Since we only have three posts and the default value for lengthPerPage is 10, the blog plugin won't generate any more pages. You can test this by attempting to navigate to the following page:

+ +

To demonstrate the generation of pages we can set the lengthPerPage to have a value of 2.

+

Here's the updated config.js file:

+ + +


























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
+
+

You should now be able to navigate to the following page:

+ +

Updating lengthPerPage

+

In a future tutorial we'll be updating the value of lengthPerPage to be 5 which is the current value being used in the blog.

+
+

layout

+

Now we're going to add the layout property which is used to specify which layout component to use for the pagination pages except for the entry page. The entry page uses the IndexPost layout component which we set in the previous tutorial.

+

The expected type is a string, and the default value is 'DirectoryPagination' || 'Layout'.

+

Since we haven't created a DirectoryPagination layout component in the layouts directory, the layout property uses the other default value which is the Layout component. In our case the Layout component is provided by the default themeContent not supported.

+

To see the difference between the layout of the entry page and the layout of the second page you can navigate to the following pages:

+ +

If you want your pagination pages except for the entry page to use a layout specifically designed for them, then you can create a DirectoryPagination.vue file inside of the layouts directory. Since DirectoryPagination is the default value for the layout property you won't need to explicitly set it in the config.js file.

+

We'll be using the same layout for the entry page and for the other pagination pages, so we're going to provide a custom value of IndexPost to the layout property.

+

Here's the updated config.js file:

+ + +



























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
+
+

When navigating to the following page you should now see the IndexPost layout component being used instead of the Layout component:

+ +

Here's a table that summarizes the relationship between the pagination and post page URLs the blog plugin builds and the layout components:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
URLsLayouts
/posts/IndexPost (falls back to Layout)
/posts/page/2/IndexPost (falls back to DirectoryPagination or Layout)
/2020/07/03/example-page-1/Post
/2021/11/16/example-page-2/Post
/2022/05/08/example-page-3/Post
+

Post Pages Reminder

+

The post pages were given the URLs above by building customized permalinks using the format specified by the itemPermalink property, and the layout components used by the post pages were set by the itemLayout property. Both of these properties can be found in the config.js file, and you can refer to the previous tutorial VuePress Tutorial 15 - Blog Plugin if you have any questions about the post pages.

+
+

prevText

+

Now we'll add the prevText property which is used to specify the text for the previous links. The previous links are used to navigate to the previous page in the list of pagination pages.

+

The expected type is a string, and the default value is 'Prev'.

+

We'll be using the default value of 'Prev' for the prevText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the prevText property, e.g., you could use a value of Older which you would have to explicitly set in the config.js file.

+

Here's the updated config.js file:

+ + +




























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+              prevText: 'Prev',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
+
+

nextText

+

We're now ready to add the nextText property which is used to specify the text for the next links. The next links are used to navigate to the next page in the list of pagination pages.

+

The expected type is a string, and the default value is 'Next'.

+

We'll be using the default value of 'Next' for the nextText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

+

It's also possible to use a custom value for the nextText property, e.g., you could use a value of Newer which you would have to explicitly set in the config.js file.

+

Here's the updated config.js file:

+ + +





























































 








module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+  plugins: [
+    '@goy/svg-icons',
+    [
+      '@vuepress/blog',
+      {
+        directories: [
+          {
+            id: 'posts',
+            dirname: '_posts',
+            path: '/posts/',
+            layout: 'IndexPost',
+            itemLayout: 'Post',
+            itemPermalink: '/:year/:month/:day/:slug',
+            pagination: {
+              lengthPerPage: 2,
+              layout: 'IndexPost',
+              prevText: 'Prev',
+              nextText: 'Next',
+            },
+          },
+        ],
+      },
+    ],
+  ],
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
+
+

Client API

+

We're now going to take a look at how to use the Client API to access the pagination data in the layout components used by the blog plugin.

+

The Client API uses globally scoped variables which means you can access these variables from any component as well as in Markdown files when using Vue. You can check out the Using Vue in MarkdownContent not supported documentation if you're interested.

+

The Client API provides the following globally scoped variables: $pagination, $frontmatterKey, and $service. We'll be focusing on the $pagination variable in this tutorial.

+

If you have any questions or want to learn more about the Client API, then check out the Client APIContent not supported documentation.

+

$pagination

+

We're going to discuss each property the $pagination variable exposes as well as demonstrate how to access the properties in the layout components.

+

To get a better understanding of the pagination data we're going to log each property to the console. The logging will be added to the created lifecycle hook in the script tag. To view the data in the console we're going to inspect the browser then go to the Console tab.

+

If you have questions about the created lifecycle hook, then check out this resources:

+ +

null $paginaton

+

If you access the $pagination variable at a route which doesn't match any classification, i.e., the route isn't a pagination page, then the value of $pagination will be null.

+

This means when developing layout components you should check if $pagination has a value of null before using the variable.

+
+

pages

+

The $pagination.pages property is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

+

Since the $pagination.pages property contains data related to post pages that are accessible on the current pagination page, the data of $pagination.pages will be different depending on which pagination page is being viewed.

+

To see the differences between the data, we're going to look at the entry page and the second page which in our case is also the last page.

+

Here are the links to both the entry page and the second page:

+ +

Let's add the code to log the $pagination.pages property in the layout component which in our case is being used by both the entry page and the second page, i.e., the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.pages', this.$pagination.pages)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Using Different Layout Components

+

If you're using different layout components for your entry page and the other pagination pages, then you'll need to add the logging of the $pagination.pages property to both of the files.

+
+

After adding the above code to the IndexPost.vue file and navigating to the entry page, the console should log an array of page objects with the following data:

+ + +
[
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-4e4f6ae5",
+    "path": "/2020/07/03/example-page-1/",
+    "pid": "posts",
+    "regularPath": "/_posts/2020-07-03-example-page-1.html",
+    "relativePath": "_posts/2020-07-03-example-page-1.md"
+  },
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-60c9aaf7",
+    "path": "/2021/11/16/example-page-2/",
+    "pid": "posts",
+    "regularPath": "/_posts/2021-11-16-example-page-2.html",
+    "relativePath": "_posts/2021-11-16-example-page-2.md"
+  }
+]
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+

Since the lengthPerPage property was given a value of 2 and we have three post pages, the $pagination.pages property for the entry page contains two page objects one for each post.

+

Formatting Differences

+

The log in the Console tab will be formatted differently than the $pagination.pages data shown here which was formatted using JSONContent not supported. The properties and values will be the same though.

+
+

After navigating to the second page, the console should log an array consisting of one page object with the following data:

+ + +
[
+  {
+    "frontmatter": {
+      "layout": "Post",
+      "permalink": "/:year/:month/:day/:slug"
+    },
+    "id": "posts",
+    "key": "v-9dca171a",
+    "path": "/2022/05/08/example-page-3/",
+    "pid": "posts",
+    "regularPath": "/_posts/2022-05-08-example-page-3.html",
+    "relativePath": "_posts/2022-05-08-example-page-3.md"
+  }
+]
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Now let's describe what each property in the $pagination.pages data represents:

+
    +
  • frontmatter: Contains the data present in the frontmatterContent not supported of the post pages.
  • +
  • layout: Layout component used by the post pages which is set using the itemLayout property in the config.js file.
  • +
  • permalink: Permalink format used for the post pages which is set using the itemPermalink property in the config.js file.
  • +
  • id: Unique id for the current classifier which is set using the id property in the config.js file.
  • +
  • key: Unique key generated for each page in the site.
  • +
  • path: Path for the post page which uses a customized permalink built from the format specified by the itemPermalink property found in the config.js file.
  • +
  • pid: Represents the pid for the current classifier which is set using the id property in the config.js file.
  • +
  • regularPath: Default path for the post page which is built using the :regular template variable.
  • +
  • relativePath: Location of the post page Markdown file relative to the documents directory which in our case is the docs directory.
  • +
+

The $page Variable

+

The page objects in the $pagination.pages property are the same page objects found by logging the globally scoped $page variable in the Post layout component. After writing the code to log the $page variable, you can view the log by navigating to a post page, e.g., http://localhost:8080/2020/07/03/example-page-1/Content not supported.

+

To learn more about the $page variable and other globally scoped variables you can take a look at the Global ComputedContent not supported documentation.

+
+

length

+

The $pagination.length property is a number whose value is determined by the number of pagination pages.

+

Let's add the code to log the $pagination.length property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.length', this.$pagination.length)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to either the entry page or the second page, the console should log a value of 2 since in our case there are a total of two pagination pages.

+

hasPrev

+

The $pagination.hasPrev property is a boolean which has a value of true when a previous pagination page exists and a value of false when a previous pagination page doesn't exist.

+

Let's add the code to log the $pagination.hasPrev property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.hasPrev', this.$pagination.hasPrev)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of false. This makes sense since the entry page is the first pagination page which means there is no previous pagination page.

+

If we navigate to the second page, the console should log a value of true which makes sense since the entry page is before the second page.

+ +

The $pagination.prevLink property is a string whose value is the previous pagination page path if a previous pagination page exists and a value of null when a previous pagination page doesn't exist.

+

Let's add the code to log the $pagination.prevLink property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.prevLink', this.$pagination.prevLink)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of null. This makes sense since the entry page is the first pagination page which means there is no link to a previous pagination page.

+

If we navigate to the second page, the console should log a value of /posts/ which makes sense since the previous link before the second page is the entry page which has a path of /posts/.

+

hasNext

+

The $pagination.hasNext property is a boolean which has a value of true when a pagination page exists after the current pagination page and a value of false when a pagination page doesn't exist after the current pagination page.

+

Let's add the code to log the $pagination.hasNext property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.hasNext', this.$pagination.hasNext)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of true. This makes sense since there is a next page in the paginated list of pages, i.e., the second page.

+

If we navigate to the second page, the console should log a value of false which makes sense since in our case there is no pagination page after the second page.

+ +

The $pagination.nextLink property is a string whose value is the path of the next pagination page if it exists and a value of null when the next pagination page doesn't exist.

+

Let's add the code to log the $pagination.nextLink property in the IndexPost.vue file:

+ + +





 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log('$pagination.nextLink', this.$pagination.nextLink)
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

If we navigate to the entry page, the console should log a value of /posts/page/2/. This makes sense since the entry page is the first pagination page, and in our case there is a link to the next pagination page, i.e., the second page.

+

If we navigate to the second page, the console should log a value of null. This makes sense since in our case the second page is the last page in the list of pagination pages which means there is no link to the next pagination page.

+ +

The $pagination.getSpecificPageLink() is a method that accepts a page number and returns the path of a pagination page. The page numbers start at 0, so to get the entry page path you need to provide a value of 0. If an input is provided that is unable to return a path to a pagination page, then an error is thrown which can be found in the Console tab.

+

Let's add the code to log the output of the $pagination.getSpecificPageLink() method in the IndexPost.vue file:

+ + +





 
 
 
 






<template></template>
+
+<script>
+export default {
+  created() {
+    console.log(
+      '$pagination.getSpecificPageLink(0)',
+      this.$pagination.getSpecificPageLink(0)
+    )
+  },
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Since we used a page number of 0 in the code above, the console should log a value of /posts/. This makes sense since a value of 0 refers to the entry page which has a path of /posts/.

+

If we want to get the path of the second page, then we can use a value of 1 as the page number, so the console should log a value of /posts/page/2/. This makes sense since a value of 1 refers to the second page which has a path of /posts/page/2/.

+

Next Steps

+

In the next tutorial we'll begin the development of the IndexPost layout component which will involve using the $pagination variable provided by the Client API.

+]]>
+
+ + VuePress Tutorial 17 - IndexPost Layout + https://codemonkeys.tech/vuepress-tutorial-17/ + https://codemonkeys.tech/vuepress-tutorial-17/ + VuePress Tutorial 17 - IndexPost Layout + Hey fellow Code Monkeys!!! 🐵 Ready to start developing the IndexPost layout component, then check out VuePress Tutorial 17 - IndexPost Layout! 🍌🐒 + Mon, 17 Oct 2022 14:12:00 GMT +

VuePress Tutorial 17 - IndexPost Layout

+

What We're Doing

+

We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped $pagination variable provided by the blog plugin Client APIContent not supported to access the pagination data. In this tutorial we'll be focusing on the post title and preview pagination data. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-17 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Naming the Component

+

Before accessing and displaying the pagination data, we're going to first give the component a name and remove the created lifecycle hook which we were using in the previous tutorial to log the pagination data to the console.

+

Here's the updated IndexPost.vue file:

+ + +




 





<template></template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
+
+

Looping Over Pagination Pages

+

To display the pagination data we're going to loop over the $pagination.pages property which if you remember from the previous tutorial VuePress Tutorial 16 - Pagination is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

+

Using the v-for Directive

+

Since $pagination.pages is an array that we want to loop over, we're going to use the v-for directive to render a list of post pages based on the data within the array. The v-for directive uses the following syntax v-for="item in items" where items is the array you want to loop over, and item is an alias for the array element being iterated on. Here, items corresponds to $pagination.pages, and we'll use post as the alias for the array element being iterated on. This means our v-for directive will be v-for="post in $pagination.pages".

+

Using the key Attribute

+

When using the v-for directive the common best practice is to bind a key attribute where each value given to the key attribute should be unique. The key attribute uses the following syntax :key="item.id" where id is a property with a unique value for every item in the items array.

+

You really only need to use the key attribute when the rendered list relies on child component state or temporary Document Object Model (DOM)Content not supported state, e.g., form input values . This means we don't actually need to include the key attribute since we're currently just rendering a static list.

+

However, we're going to bind the key attribute in case we ever need to use it in the future. To ensure the key attribute has a unique value for each item in the list, we're going to use the key property which is a unique value generated for each page object within the $pagination.pages array. Here's what the key attribute will look like in our case :key="post.key".

+

Determining a Tag

+

Now we need to determine what tag we want to add our v-for directive and key attribute to. We're going to add them to a div tag which will allow us to wrap the pagination data for each post in the list of post pages. Here's what the div tag is going to look like after adding the v-for directive and key attribute <div v-for="post in $pagination.pages" :key="post.key"></div>.

+

Using a Root Element

+

Since the div tag uses the v-for directive, it's going to render multiple elements. This means we cannot use it as the root element, i.e., the first element in the template tag because the template tag can only have one root element. To resolve this issue we're going to wrap the div tag that's using the v-for directive within another div tag which will serve as the root element.

+

Adding the Loop

+

Here's what the IndexPost.vue file should now look like:

+ + +

 
 
 










<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

If you any questions or want to learn more about the v-for directive and the key attribute then check out these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you won't notice any changes on the page. This is because we've rendered div tags without any of the pagination data inside of them.

+

If you navigate to the entry page, inspect the browser, and go to the Elements tab, the HTML for the body tag should now look something like this:

+ + +



 
 
 
 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div></div>
+        <div></div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

Notice how the entry page consists of two div tags wrapped inside of the div tag that's being used as the root element of the template tag. Each of those div tags inside of the parent div tag corresponds to a post page that is accessible on the entry page.

+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you also won't notice any changes on the page. This is because we've rendered a div tag without any of the pagination data inside of it.

+

The HTML for the body tag for the second page should now look something like this:

+ + +



 
 
 







<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div></div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

Notice how the second page consists of one div tag wrapped inside of the div tag that's being used as the root element of the template tag. There is only one div tag since we have one post page accessible on the second page.

+

Post Titles

+

Before we can access the post title data using the $pagination.pages property, we need to first add titles to the post files we created in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Adding Titles to Post Files

+

Since the post files are Markdown files, we can add titles to the files by adding a heading level one, e.g., # Heading Level 1 to each file which gets converted to the following HTML <h1>Heading Level 1</h1>.

+

Here's what the post files look like after adding the titles:

+ + +
# Example Post 1
+
+
1
+
+ + +
# Example Post 2
+
+
1
+
+ + +
# Example Post 3
+
+
1
+
+

If you have any questions or want to learn more about Markdown headings, then check out the Basic SyntaxContent not supported guide.

+

Adding Titles to $page Variables

+

When VuePressContent not supported encounters a heading level one in a Markdown file it automatically adds a title property to the globally scoped $page variable.

+

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a title property that we can access in the IndexPost layout component.

+

You can take a look at the Global ComputedContent not supported documentation to learn more about the $page variable and other globally scoped variables.

+

Displaying Post Titles

+

Now that we can access the post titles in the $pagination.pages property, we're ready to render the post titles on the pagination pages.

+

We're going to display the post titles as h2 tags which we'll be wrapping inside of two div tags. We'll be using the div tags to add styling to the list of post pages in a future tutorial.

+

To display the post titles we'll be using Text InterpolationContent not supported which allows us to use variables inside of HTML tags by using the "Mustache" syntax. The "Mustache" syntax consists of wrapping a variable inside of double curly braces.

+

We can access the title property on each page object in our loop by using post.title. We can then display this by using the text interpolation described above.

+

The IndexPost.vue file should now look like this:

+ + +



 
 
 
 
 
 
 












<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the post titles being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +




 
 
 
 
 
 
 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see one post title being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +




 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+
+

Post Previews

+

The post preview data is a snippet of text taken from the beginning of a post which is used as an introduction to the post in the list of post pages. Before we can access the post preview data using the $pagination.pages property, we need to first add previews to the post files we created in the _posts directory:

+
    +
  • 2020-07-03-example-page-1.md
  • +
  • 2021-11-16-example-page-2.md
  • +
  • 2022-05-08-example-page-3.md
  • +
+

Adding Previews to Post Files

+

Since the post files are Markdown files, we can use YAMLContent not supported frontmatter blocks in the files and define a custom variable preview.

+

Here's what the post files look like after adding the preview variables:

+ + +
 
 
 



---
+preview: Example Post 1 preview
+---
+
+# Example Post 1
+
1
2
3
4
5
+
+ + +
 
 
 



---
+preview: Example Post 2 preview
+---
+
+# Example Post 2
+
1
2
3
4
5
+
+ + +
 
 
 



---
+preview: Example Post 3 preview
+---
+
+# Example Post 3
+
1
2
3
4
5
+
+

If you have any questions or want to learn more about YAMLContent not supported frontmatter blocks in VuePressContent not supported then check these resources:

+ +

Number of Characters Used in Preview

+

The value for each post preview variable should be within a preferred minimum and maximum number of characters. This will ensure the post previews in the list of post pages looks consistent.

+
+

Adding Previews to $page Variables

+

When VuePressContent not supported encounters a YAMLContent not supported frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

+

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a frontmatter.preview property that we can access in the IndexPost layout component.

+

You can take a look at the Global ComputedContent not supported documentation to learn more about the $page variable and other globally scoped variables.

+

Content Excerpt

+

Instead of defining the custom variable preview in the YAMLContent not supported frontmatter blocks of Markdown files, VuePressContent not supported provides the ability to use a Content ExcerptContent not supported by adding a <!-- more --> comment to a Markdown file. Any content above the comment gets extracted and exposed as a globally scoped $page.excerpt variable. This variable can then be used to render the list of post pages with excerpts for each post just like our custom variable preview. I prefer to use the custom variable preview because the <!-- more --> comment takes all of the content above it which includes any HTML as opposed to using just the text of a post.

+
+

Displaying Post Previews

+

Now that we can access the post previews in the $pagination.pages property, we're ready to render the post previews on the pagination pages.

+

We're going to display the post previews as p tags which we'll place underneath the parent div tag of the h2 tag.

+

To display the post previews we'll be using Text InterpolationContent not supported just like we did when displaying the post titles.

+

We can access the preview property on each page object in our loop by using post.frontmatter.preview.

+

The IndexPost.vue file should now look like this:

+ + +









 
 
 













<template>
+  <div>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the post previews being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +









 







 










<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see one post preview being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +









 










<body>
+  <div id="app">
+    <div id="global-layout">
+      <div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

IndexPost Styling

+

When viewing the pagination pages you probably noticed the list of post pages stretches across the entire width of the page. This styling doesn't look too good, so we're going to update the styling by adding the following class theme-default-content to the outermost div tag.

+

Adding theme-default-content

+

The IndexPost.vue file should now look like this:

+ + +

 























<template>
+  <div class="theme-default-content">
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

theme-default-content Styles

+

The theme-default-content class is provided by the default themeContent not supported and provides the following styles:

+ + +
.theme-default-content:not(.custom) {
+  max-width: 740px;
+  margin: 0 auto;
+  padding: 2rem 2.5rem;
+}
+
+@media (max-width: 959px) {
+  .theme-default-content:not(.custom) {
+    padding: 2rem;
+  }
+}
+
+@media (max-width: 419px) {
+  .theme-default-content:not(.custom) {
+    padding: 1.5rem;
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+
+
    +
  • .theme-default-content:not(.custom) is used to select tags that have a class of theme-default-content and that don't have a class of custom by using the :not() pseudo-class. This selector is defined by the default themeContent not supported since other pages can use the theme-default-content class along with a class of custom to apply different styles than the ones shown here. The homepage is an example of a page that uses the theme-default-content class along with a class of custom to apply different styles.
  • +
  • max-width: 740px; sets the maximum width of the div tag to be 740px. If the content is greater than the max-width, then the height of the div tag will automatically be changed. If the content is smaller than the max-width, then the max-width property has no effect.
  • +
  • margin: 0 auto; sets the margins for the div tag by setting the top and bottom margins to be 0 and the left and right margins to a value of auto. The value of auto means the browser will automatically set the left and right margins to horizontally center the div tag.
  • +
  • padding: 2rem 2.5rem; sets the padding for the div tag by setting the top and bottom paddings to be 2rem and the left and right paddings to be 2.5rem.
  • +
  • @media (max-width: 959px) will apply the styles within it when the maximum width of the display area, e.g., the browser window is less than or equal to the provided value which in this case is 959px.
  • +
  • padding: 2rem; sets the padding for all of the sides of the div tag to be 2rem when the width of the display area is less than or equal to 959px.
  • +
  • @media (max-width: 419px) will apply the styles within it when the maximum width of the display area is less than or equal to the provided value which in this case is 419px.
  • +
  • padding: 1.5rem; sets the padding for all of the sides of the div tag to be 1.5rem when the width of the display area is less than or equal to 419px.
  • +
+

If you have any questions about the CSS discussed above, then check out these resources:

+ +

To view these styles in the browser you can navigate to the entry page http://localhost:8080/posts/Content not supported or to the second page http://localhost:8080/posts/page/2/Content not supported, inspect the browser, go to the Elements tab, locate the div tag with a class of theme-default-content, and then go to the Styles tab.

+

Use in the Default Theme

+

The theme-default-content class is used on the global Content component within the Page and Home components provided by the default themeContent not supported. If you look at the HTML on the homepage, you'll see the theme-default-content class being used on a div tag within the main tag with a class of home. We'll be discussing the global Content component, the Page component, and the Home component in more detail in future tutorials.

+
+

IndexPost Heading

+

We're now going to add a heading to the pagination pages. This heading will be displayed on each pagination page.

+

Displaying the Heading

+

We're going to display the heading as an h1 tag which we'll be adding as the first child tag of the outermost div tag.

+

The IndexPost.vue file should now look like this:

+ + +


 























<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
+
+

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the heading being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +




 
























<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the heading being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +




 
















<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 Preview </p>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

Next Steps

+

In the next tutorial we'll be continuing the development of the IndexPost layout component by using the $pagination variable to add images to each post in the list of post pages.

+]]>
+
+ + VuePress Tutorial 18 - IndexPost Images + https://codemonkeys.tech/vuepress-tutorial-18/ + https://codemonkeys.tech/vuepress-tutorial-18/ + VuePress Tutorial 18 - IndexPost Images + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add images to the IndexPost layout component, then check out VuePress Tutorial 18 - IndexPost Images! 🍌🐒 + Wed, 09 Nov 2022 22:15:00 GMT +

VuePress Tutorial 18 - IndexPost Images

+

What We're Doing

+

In this tutorial we're going to continue the development of the IndexPost layout component by using the globally scoped $pagination variable to access pagination data related to images. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag like we did in the previous tutorial.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-18 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Adding Post Images

+

Before we can access the pagination data related to images, we need to first add the images that we'll be displaying in the list of post pages. We're going to be adding three post images to the blog one for each post.

+

Each post image has a width of 155px and a height of 185px. Using the same width and height for the post images makes the list of post pages look consistent.

+

You can download all of the images below from your browser, and they're also available in the tutorial-18 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

The images were created using CanvaContent not supported. The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMPContent not supported.

+

Here are some other useful online image tools:

+ +

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. CanvaContent not supported and GIMPContent not supported, and some of the other image tools mentioned above offer the ability to compress your images.

+

Here are some other useful online tools for image compression:

+ +

Adding an Examples Directory

+

Let's start by creating an examples directory inside of the images directory. The examples directory will be used to store the post images for each example post.

+

The directory structure for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ └── examples +│ │ ├── theme +│ │ └── config.js

+

Example Post 1

+

After adding the examples directory, we're now ready to add the post images for each example post. We'll be creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories of each example post.

+

We're going to start with the first example post by adding an example-post-1 directory inside of the examples directory. Then we'll add the image for the first example post which is named example-post-1.png inside of the example-post-1 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ │ └── example-post-1.png

+

Here's the example post 1 image:

+
+ Content not supported +
+

Example Post 2

+

For the second example post we'll be adding an example-post-2 directory inside of the examples directory. Then we'll add the image for the second example post which is named example-post-2.png inside of the example-post-2 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ │ └── example-post-2.png

+

Here's the example post 2 image:

+
+ Content not supported +
+

Example Post 3

+

For the third example post we'll be adding an example-post-3 directory inside of the examples directory. Then we'll add the image for the third example post which is named example-post-3.png inside of the example-post-3 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ │ └── example-post-3.png

+

Here's the example post 3 image:

+
+ Content not supported +
+

Post Images

+

After adding the post images to the blog, we now need to add a way to access each image in the IndexPost layout component which we'll accomplish by adding a custom variable img to the YAMLContent not supported frontmatter blocks of each post file. The value of the img custom variable will be the path to the image in the project.

+

We're also going to add another custom variable of alt to the YAMLContent not supported frontmatter blocks of each post file. The value of the alt custom variable will be a description of the image.

+

If you have any questions or want to learn more about YAMLContent not supported frontmatter blocks in VuePressContent not supported then check these resources:

+ +

Adding Img and Alt to Post Files

+

Here's what the post files look like after adding the img and alt custom variables:

+ + +


 
 




---
+preview: Example Post 1 preview
+img: examples/example-post-1/example-post-1.png
+alt: Example Post 1 Post Picture
+---
+
+# Example Post 1
+
1
2
3
4
5
6
7
+
+ + +


 
 




---
+preview: Example Post 2 preview
+img: examples/example-post-2/example-post-2.png
+alt: Example Post 2 Post Picture
+---
+
+# Example Post 2
+
1
2
3
4
5
6
7
+
+ + +


 
 




---
+preview: Example Post 3 preview
+img: examples/example-post-3/example-post-3.png
+alt: Example Post 3 Post Picture
+---
+
+# Example Post 3
+
1
2
3
4
5
6
7
+
+

Adding Img and Alt to $page Variables

+

As mentioned in the previous tutorial when VuePressContent not supported encounters a YAMLContent not supported frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

+

Since the page objects in the $pagination.pages property are the same as the $page variables used by the post pages, we will now have a frontmatter.img property and a frontmatter.alt property that we can access in the IndexPost layout component.

+

Displaying Images

+

Now that we can access the values of the img and alt custom variables in the $pagination.pages property, we're ready to render the images on the pagination pages.

+

We're going to display the images using the img tag which we'll place in a div tag underneath the parent div tag of the p tag.

+

The img tag allows us to embed an image into the page. We'll be using the src and alt attributes provided by the img tag.

+

The src attribute is required, and it contains the path to the image you want to display which in our case are the post images we created earlier.

+

The alt attribute is optional and consists of a text description of the image which is useful for accessibilityContent not supported because screen readers will be able to read the description to the users. This allows the users to gain an understanding of what the image is. The description is also displayed on the page if the image is unable to be loaded.

+

If you want to learn more about the img tag, then check out <img>: The Image Embed elementContent not supported.

+

We can access the img and alt properties on each page object in our loop by using post.frontmatter.img and post.frontmatter.alt, respectively.

+

The IndexPost.vue file should now look like this:

+ + +














 
 
 
 
 
 












<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+
+

Here we're binding the src and alt attributes by placing a : before them which is shorthand for v-bind. This allows us to bind the JavaScript expressions to the HTML attributes.

+

Also, notice /images/ was added to the beginning of the path to the post images which we need to add since they're all located in the images directory. We don't need to include .vuepress/public in the path to the post images though because whenever you reference assets stored in the public directory that gets added automatically.

+

We also added an alternative value for the post image alt attribute in case the alt custom variable isn't present in the frontmatter of a post. This is done by using a logical OR operator, i.e., ||. Here, we're using "post.frontmatter.alt || 'Post Picture'" which means if the alt property evaluates to a falsyContent not supported value, then we'll display the Post Picture text instead.

+

If you have any questions or want to learn more about v-bind or the logical OR operator, then check these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the images being displayed with some styling provided by the default themeContent not supported.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +












 
 
 
 








 
 
 
 









<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-1/example-post-1.png"
+                  alt="Exmple Post 1 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-2/example-post-2.png"
+                 alt="Example Post 2 Post Picture">
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the image being displayed with some styling which again is being provided by the default themeContent not supported.

+

The HTML for the body tag for the second page should now look something like this:

+ + +












 
 
 
 









<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 Preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-3/example-post-3.png"
+                 alt="Example Post 3 Post Picture">
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

Next Steps

+

In the next tutorial we'll be continuing the development of the IndexPost layout component by beginning the process of adding the pagination buttons to the pagination pages.

+]]>
+
+ + VuePress Tutorial 19 - Pagination Links + https://codemonkeys.tech/vuepress-tutorial-19/ + https://codemonkeys.tech/vuepress-tutorial-19/ + VuePress Tutorial 19 - Pagination Links + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to add the pagination links to the IndexPost layout component, then check out VuePress Tutorial 19 - Pagination Links! 🍌🐒 + Sat, 19 Nov 2022 20:47:00 GMT +

VuePress Tutorial 19 - Pagination Links

+

What We're Doing

+

Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually input the URL into the search bar of the browser which isn't a great user experience. To resolve this issue we're going to be adding pagination links to each of the pagination pages.

+

To accomplish this we'll be using the following properties provided by the blog plugin Client APIContent not supported:

+
    +
  • $pagination.hasPrev
  • +
  • $pagintaion.prevLink
  • +
  • $pagination.hasNext
  • +
  • $pagintaion.nextLink
  • +
+

Before, we use the properties to add the pagination links, we're going to add two more example posts to the blog. This will allow us to view the pagination links in every scenario, i.e., when there isn't a previous page, when there isn't a next page, and when there is a previous page and a next page.

+

You can view all of the code in this tutorial by going to the tutorial-19 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Adding More Example Pages

+

We'll be adding the following example pages to the _posts directory:

+
    +
  • 2022-07-14-example-page-4.md
  • +
  • 2022-11-10-example-page-5.md
  • +
+

The _posts directory for your site should now look like this:

+

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ ├── 2022-05-08-example-page-3.md +│ ├── 2022-07-14-example-page-4.md +│ └── 2022-11-10-example-page-5.md

+

Adding Titles and Frontmatter

+

We're now going to add post titles and frontmatter to the example pages we just added like we did for the other example pages.

+

Here's what the 2022-07-14-example-page-4.md file and the 2022-11-10-example-page-5.md file look like after adding the titles and frontmatter:

+ + +
---
+preview: Example Post 4 preview
+img: examples/example-post-4/example-post-4.png
+alt: Example Post 4 Post Picture
+---
+
+# Example Post 4
+
+
1
2
3
4
5
6
7
+
+ + +
---
+preview: Example Post 5 preview
+img: examples/example-post-5/example-post-5.png
+alt: Example Post 5 Post Picture
+---
+
+# Example Post 5
+
+
1
2
3
4
5
6
7
+
+

Adding Images

+

We also need to add the post images for the example pages we just added. We'll do this just like we did in the previous tutorial by creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories for each example post.

+

You can download all of the images below from your browser, and they're also available in the tutorial-19 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Example Post 4

+

For the fourth example post we'll be adding an example-post-4 directory inside of the examples directory. Then we'll add the image for the fourth example post which is named example-post-4.png inside of the example-post-4 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ │ └── example-post-4.png

+

Here's the example post 4 image:

+
+ Content not supported +
+

Example Post 5

+

For the fifth example post we'll be adding an example-post-5 directory inside of the examples directory. Then we'll add the image for the fifth example post which is named example-post-5.png inside of the example-post-5 directory.

+

The directory structure for your site should now look something like this:

+

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ ├── example-post-5 +│ │ └── example-post-5.png

+

Here's the example post 5 image:

+
+ Content not supported +
+

Viewing the Pagination Pages

+

After adding the titles and frontmatter to the example pages and adding the post images, you should now have the following pagination pages:

+ +

Having these three pagination pages will allow us to view the pagination links in every scenario that we mentioned in the beginning of the post.

+

Order of Posts

+

The order of the posts may not be what you're expecting and may change each time you start the local development server. This is because the blog plugin uses a date property to sort the posts which it looks for on the frontmatter of each post page. Since we haven't added a date custom variable to the frontmatter blocks for the post pages, the blog plugin will not sort the posts in a predictable way. We'll fix this issue in a future tutorial by adding the date custom variable to the frontmatter blocks of the post pages.

+
+

If you have any questions about adding the example pages to the _posts directory, adding titles to the post pages, adding the frontmatter to the post pages, and/or adding the post images, then check out the relevant sections from the previous tutorials:

+ + +

We're now ready to use the properties provided by the blog plugin Client APIContent not supported to add the pagination links to the pagination pages.

+

We're going to display the pagination links using two router-link components one for the previous page and one for the next page. We'll be wrapping each router-link component in a div tag.

+

We'll then wrap the div tags inside another div tag which we'll place underneath the div tag that is being used to loop over the pagination pages.

+

The router-link component is provided by Vue RouterContent not supported which gets installed when installing VuePressContent not supported. The router-link component is used for enabling user navigation for the site. The target location for the link is specified by using the to prop, and it renders as an a tag with the specified href by default.

+

If you want to learn more about the router-link component, then check out the <router-link>Content not supported documentation.

+

To display the pagination link for the previous page we'll be using the $pagination.hasPrev property to check if the current pagination page has a previous page. We'll use the $pagination.prevLink property to provide the path of the previous pagination page to the router-link component to prop.

+

Similarly, to display the pagination link for the next page we'll be using the $pagination.hasNext property to check if the current pagination page has a next page. We'll use the $pagination.nextLink property to provide the path of the next pagination page to the router-link component to prop.

+

We discussed the properties above in detail in the VuePress Tutorial 16 - Pagination post, so if you need a refresher or if you have any questions read through the relevant sections in that post.

+

The IndexPost.vue file should now look like this:

+ + +





















 
 
 
 
 
 
 
 
 
 
 
 











<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div>
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
+
+

Here we're using the v-if directive to conditionally render the pagination links by using the values of the $pagination.hasPrev and $pagination.hasNext properties. The block of code using the v-if directive will only be rendered if the expression provided to it returns a truthyContent not supported value.

+

We're also binding the to prop by placing a : before it which is shorthand for v-bind. Using v-bind allows us to bind JavaScript expressions to the HTML attributes.

+

If you have any questions or want to learn more about conditional rendering or v-bind, then check these resources:

+ +

Entry Page HTML

+

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/Content not supported you should now see the Next pagination link being displayed with some styling provided by the default themeContent not supported.

+

You should now be able to click on the Next pagination link, and it should take you to the next page in the list of pagination pages.

+

The HTML for the body tag for the entry page should now look something like this:

+ + +





























 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 1 </h2>
+            </div>
+            <p> Example Post 1 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-1/example-post-1.png"
+                  alt="Exmple Post 1 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 2 </h2>
+            </div>
+            <p> Example Post 2 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-2/example-post-2.png"
+                 alt="Example Post 2 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <!---->
+          </div>
+          <div>
+            <a href="/posts/page/2/" class=""> Next </a>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
+
+

Page 2 HTML

+

If you navigate to the second page http://localhost:8080/posts/page/2/Content not supported you should now see the Prev and Next pagination links being displayed with some styling provided by the default themeContent not supported.

+

You should be able to click on the Prev pagination link, and it should take you to the previous page. You should also be able to click on the Next pagination link, and it should take you to the next page.

+

The HTML for the body tag for the second page should now look something like this:

+ + +





























 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 3 </h2>
+            </div>
+            <p> Example Post 3 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-3/example-post-3.png"
+                  alt="Exmple Post 3 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 4 </h2>
+            </div>
+            <p> Example Post 4 preview </p>
+          </div>
+          <div>
+            <img src="/images/examples/example-post-4/example-post-4.png"
+                 alt="Example Post 4 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <a href="/posts/" class="router-link-active"> Prev </a>
+          </div>
+          <div>
+            <a href="/posts/page/3/" class> Next </a>
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
+
+

Page 3 HTML

+

If you navigate to the third page http://localhost:8080/posts/page/3/Content not supported you should now see the Prev pagination link being displayed with some styling provided by the default themeContent not supported.

+

You should be able to click on the Prev pagination link, and it should take you to the previous page.

+

The HTML for the body tag for the third page should now look something like this:

+ + +

















 
 
 
 
 
 
 
 








<body>
+  <div id="app">
+    <div id="global-layout">
+      <div class="theme-default-content">
+        <h1>The Scribblings of a Monkey!!!</h1>
+        <div>
+          <div>
+            <div>
+              <h2> Example Post 5 </h2>
+            </div>
+            <p> Example Post 5 preview </p>
+          </div>
+          <div>
+             <img src="/images/examples/example-post-5/example-post-5.png"
+                  alt="Exmple Post 5 Post Picture">
+          </div>
+        </div>
+        <div>
+          <div>
+            <a href="/posts/page/2/" class> Prev </a>
+          </div>
+          <div>
+            <!---->
+          </div>
+        </div>
+      </div>
+      <footer data-v-60ae214a class="footer">...</footer>
+    </div>
+    ...
+  </div>
+  ...
+</body>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
+
+

Next Steps

+

You may have noticed the styling of the Prev and Next pagination links doesn't look too good, so in the next tutorial we'll begin styling these links. We'll also be adding left and right arrow icons to the Prev and Next pagination links, respectively.

+]]>
+
+ + VuePress Tutorial 2 - Why Use VuePress? + https://codemonkeys.tech/vuepress-tutorial-2/ + https://codemonkeys.tech/vuepress-tutorial-2/ + VuePress Tutorial 2 - Why Use VuePress? + Hey fellow Code Monkeys!!! 🐵 Wondering if you should use VuePress, then check out VuePress Tutorial 2 - Why Use VuePress? 🍌🐒 + Wed, 24 Nov 2021 20:50:30 GMT +

VuePress Tutorial 2 - Why Use VuePress?

+

What is VuePress?

+

VuePressContent not supported is a minimalistic static site generator (SSG) with a Vue-powered theming systemContent not supported and Plugin APIContent not supported.

+

Originally, it was created to serve the documentation needs of Vue'sContent not supported own sub projects, so it comes with a default themeContent not supported optimized for writing technical documentation.

+

As well has being useful for writing technical documentation, it also has a blog pluginContent not supported which we'll be looking at in more detail in future tutorials.

+

Now, to clear up any confusion we'll define what an SSG is, then we'll talk more about the theming systemContent not supported and the Plugin APIContent not supported.

+

After that we'll provide a list of some of the features of VuePressContent not supported, and then we'll give some quick comparisons with similar technologies.

+

Different Types of Websites

+

Before we define what an SSG is, let's first look at some different types of websites. This will allow us to get a better understanding of the pros and cons of using an SSG.

+

We'll mainly be looking at each type of website in terms of search engine optimization (SEO), speed, and ease of updating.

+

Static Website

+
    +
  • Uses static HTML pages with possible CSS and JavaScript
  • +
  • Pages are uploaded to a content delivery network (CDN) or a web host
  • +
+

Here's a simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since a search engine can crawl the site and fully rendered HTML pages with content are provided
  • +
+

Cons

+
    +
  • Need to do a request to the server for each page a user visits which slows down the site
  • +
  • Difficult to update since you need to rewrite the same code on multiple pages, e.g., the footer
  • +
  • Has limited functionality and generally doesn't contain dynamic data
  • +
+

Single-Page Application (SPA)

+
    +
  • Typical VueContent not supported and ReactContent not supported application
  • +
  • A single request is made to the server which returns a simple HTML page with the styles and scripts linked
  • +
  • The SPA then handles rendering the page content in the browser, e.g., routing, data, etc.
  • +
+

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • Fast, no extra requests are made to the server when navigating to new pages since the SPA handles rendering the pages in the browser
  • +
  • Component driven which means easier updating, e.g., if you want to update the footer you only need to update it in one file
  • +
+

Cons

+
    +
  • More difficult for search engines to crawl and index the site for SEO since the page returned by the server is a simple HTML page
  • +
+

Server-Side Rendered (SSR)

+ +

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since each request returns a fully rendered HTML page, so a search engine can easily crawl and index the site
  • +
  • Easy to update since the server is using a templating system
  • +
+

Cons

+
    +
  • Since the server has to send back fully rendered HTML pages for each request, it can slow down the page rendering
  • +
+

Static Site Generator (SSG)

+
    +
  • An SSG creates pre-rendered static HTML pages using a combination of templates, components, and data
  • +
  • These static HTML pages are generated at build-time, i.e., before deployment
  • +
  • The static pages are then deployed to the web
  • +
+

Simple diagram illustrating the process:

+
+ Content not supported +
+

Pros

+
    +
  • SEO-friendly since it returns fully rendered HTML which can then be crawled and indexed
  • +
  • Navigating to new pages is fast since after the initial request the site behaves like a normal SPA
  • +
  • Easy to update since the site is component driven
  • +
+

Cons

+
    +
  • Have to rebuild the static pages evey time a change is made to the site, and the build time will increase as more pages are added
  • +
+

Use Cases for SSGs

+

Since SSGs create static HTML pages at build-time then behave like an SPA, they are suited for websites that don't have a lot of frequent content changes.

+
    +
  • Here are some examples: +
      +
    • Personal Website/Portfolio
    • +
    • Documentation
    • +
    • Blog
    • +
    +
  • +
+

How it Works in VuePress

+

Like other SSGs, the static HTML pages are rendered at build-time. Then the static HTML pages are deployed to the web.

+

Once the page is loaded, VueContent not supported takes control of the static content and the site behaves like an SPA. The SPA is powered by VueContent not supported, Vue RouterContent not supported, and webpackContent not supported.

+

Each Markdown file gets compiled into HTML with markdown-itContent not supported which is then processed as the template of a VueContent not supported component. This is what enables you to use VueContent not supported directly in your Markdown files and also makes it possible to embed dynamic content.

+

Theming

+

A theme in VuePressContent not supported allows you to control how your project is structured. You can simply use the provided default themeContent not supported, use theme inheritanceContent not supported to create a child theme based on a parent theme, or write your own themeContent not supported.

+

Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configurations and app level enhancements. When writing your own theme the only file that is necessary is Layout.vue, everything else is up to. You can also publish your theme as an npmContent not supported package which allows other people to easily install it.

+

The Code Monkeys Blog is currently a child theme inherited from the default theme. Eventually, I would like to look into publishing it as an npmContent not supported package.

+

We'll go over the directory structure, what each directory in a theme is used for, theme configuration, app level enhancement, and theme inheritanceContent not supported in future tutorials.

+ +

Plugin API

+

PluginsContent not supported allow you to add global-level functionality to VuePressContent not supported. You can configure them by passing in options. It's also possible to write your own and publish them as npmContent not supported packages.

+

We'll go over installing and configuring pluginsContent not supported in future tutorials.

+ +

Features

+

Here are some of the features that come with VuePressContent not supported:

+

Built-in Markdown Extensions

+ +

Ability to Use Vue In Markdown Files

+ +

Vue-powered Custom Theme System

+ +

A Default Theme with

+ +

It also has a blog themeContent not supported, numerous community themes, official plugins, and community plugins.

+

You can find a list of these themes, plugins, and more resources at Awesome VuePressContent not supported.

+

Comparisons

+

Here are some similar technologies and how they compare with VuePressContent not supported:

+

NuxtContent not supported

+
    +
  • Designed for building applications whereas VuePressContent not supported is focused on content-centric static sites with a focus on technical documentation
  • +
+

DocsifyContent not supported / DocuteContent not supported

+
    +
  • Both are runtime-driven, so they're not SEO-friendly
  • +
  • Good if SEO isn't a concern and you don't want to deal with installing dependencies
  • +
+

HexoContent not supported

+
    +
  • Static and string-based theming system, so we're unable to take advantage of VueContent not supported for layout and interactivity
  • +
  • Markdown rendering configuration is not that flexible
  • +
+

GitBookContent not supported

+
    +
  • Development reload performance is not ideal with a large amount of files
  • +
  • Limiting navigation structure for the default theme
  • +
  • Theming system is not VueContent not supported based
  • +
+]]>
+
+ + VuePress Tutorial 20 - Pagination Links Styling + https://codemonkeys.tech/vuepress-tutorial-20/ + https://codemonkeys.tech/vuepress-tutorial-20/ + VuePress Tutorial 20 - Pagination Links Styling + Hey fellow Code Monkeys!!! 🐵 Ready to learn how to style the pagination links, then check out VuePress Tutorial 20 - Pagination Links Styling! 🍌🐒 + Wed, 23 Nov 2022 19:23:00 GMT +

VuePress Tutorial 20 - Pagination Links Styling

+

What We're Doing

+

We're going to begin the process of styling the Prev and Next pagination links that we added to each of the pagination pages in the previous tutorial. To implement the styling we'll be adding the following CSS classes pagination, left-arrow, and right-arrow to the IndexPost layout component.

+

The pagination class will be used to properly space out the Prev and Next pagination links. The left-arrow and right-arrow classes will be used to add some styling to the left arrow and right arrow icons which we'll be adding using the global vp-icon component which is provided by vuepress-plugin-svg-iconsContent not supported.

+

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

You can view all of the code in this tutorial by going to the tutorial-20 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Pagination Class

+

We're going to start by adding the pagination class to the div tag that is wrapping both of the router-link components in the IndexPost.vue file.

+

Then we'll apply the following styles:

+ + +





















 




















 
 
 
 
 
 

<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
+
+
    +
  • lang="stylus" is used to specify which pre-processor we want to use in the component which in our case is StylusContent not supported which is the default pre-processor used by VuePressContent not supported.
  • +
  • scoped is used to only apply the styles to the current component, i.e., the IndexPost layout component. We're scoping these styles since they currently only apply to the IndexPost layout component.
  • +
  • display: flex defines a flex container for all of the direct children of the div tag with a class of pagination.
  • +
  • justify-content: space-between evenly spaces out the flex items along the main-axis of the flex container where the first item is flush with the start of the flex container, and the last item is flush with the end of the flex container. Here, the main-axis of the flex container is the horizontal axis. The flex items are the direct children of the div tag with a class of pagination, i.e., the div tags that are wrapping the router-link components.
  • +
  • padding-top: 2rem adds a padding of 2rem to the top of the div tag with a class of pagination.
  • +
+

The pagination links should now be properly spaced out, and you can view the styling updates by navigating to the pagination pages:

+ +

If you have any questions about the lang attribute, the scoped attribute, flexbox, or CSS in general, then check out these resources:

+ +

Left and Right Arrow Icons

+

We're now ready to add the left and right arrow icons to the pagination links.

+

Downloading the Icons

+

To add the left and right arrow icons to the site we need to first download the icons. To find icons for your site vuepress-plugin-svg-iconsContent not supported recommends using iconfontContent not supported. After searching for the icons and downloading them, you'll be asked to specify a color and size for the icons. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

+

Instead of searching iconfontContent not supported for the left and right arrow icons, you can download them from the tutorial-20 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Using SVG Export

+

To easily download the left and right arrow icons you can also install the browser extension SVG ExportContent not supported. After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

+
+

Updating the Icons Directory

+

After downloading the left and right arrow icons, we'll need to add them to the icons directory which should now look something like this:

+

├── icons +│ ├── Gab.svg +│ ├── leftArrow.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── rightArrow.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

Displaying the Icons

+

After adding the left and right arrow icons to the icons directory, the plugin will automatically load the icons and provides the global vp-icon component. To use the vp-icon component we need to pass a name attribute to it where the value is the name of the SVG file we want to use.

+

Here, the value for the name attribute will be leftArrow for the Prev pagination link and rightArrow for the Next pagination link.

+

We're going to be adding the vp-icon components inside of the corresponding router-link components.

+

The IndexPost.vue file should now look like this:

+ + +
























 




 



















<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          <vp-icon name="leftArrow"></vp-icon>Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next<vp-icon name="rightArrow"></vp-icon>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
+
+

To view the left and right arrow icons navigate to the pagination pages:

+ +

Notice how the left arrow icon is being displayed to the left of the Prev pagination text and how the right arrow icon is being displayed to the right of the Next pagination text. This ensures the arrows and the text look correct when being displayed.

+

Styling the Icons

+

We're now going to add some styling to the left and right arrow icons. The IndexPost.vue file should now look like this:

+ + +
























 




 

















 
 
 
 


<template>
+  <div class="theme-default-content">
+    <h1>The Scribblings of a Monkey!!!</h1>
+    <div v-for="post in $pagination.pages" :key="post.key">
+      <div>
+        <div>
+          <h2>
+            {{ post.title }}
+          </h2>
+        </div>
+        <p>
+          {{ post.frontmatter.preview }}
+        </p>
+      </div>
+      <div>
+        <img
+          :src="`/images/${post.frontmatter.img}`"
+          :alt="post.frontmatter.alt || 'Post Picture'"
+        />
+      </div>
+    </div>
+    <div class="pagination">
+      <div>
+        <router-link v-if="$pagination.hasPrev" :to="$pagination.prevLink">
+          <vp-icon name="leftArrow" class="left-arrow"></vp-icon>Prev
+        </router-link>
+      </div>
+      <div>
+        <router-link v-if="$pagination.hasNext" :to="$pagination.nextLink">
+          Next<vp-icon name="rightArrow" class="right-arrow"></vp-icon>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'IndexPost',
+}
+</script>
+
+<style lang="stylus" scoped>
+.pagination
+  display: flex
+  justify-content: space-between
+  padding-top: 2rem
+  .left-arrow
+    padding-right: 0.25rem
+  .right-arrow
+    padding-left: 0.25rem
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
+
+
    +
  • +

    padding-right: 0.25rem adds a padding of 0.25rem to the right of the vp-icon component with a class of left-arrow.

    +
  • +
  • +

    padding-left: 0.25rem adds a padding of 0.25rem to the left of the vp-icon component with a class of right-arrow.

    +
  • +
+

To view the styling updates to the left and right arrow icons navigate to the pagination pages:

+ +

If you have any questions about the CSS discussed above, then check out this resource:

+ +

Optimizing the Icons

+

When downloading the left and right arrow icons from iconfontContent not supported, the icons will have a lot of redundant and useless information. We can use a Command-line Interface (CLI) command provided by vuepress-plugin-svg-iconsContent not supported to optimize the icons.

+

Icons Already Optimized

+

If you downloaded the left and right arrow icons from the repository or by using the SVG ExportContent not supported browser extension, then the icons should already be optimized and you shouldn't have to run the CLI command.

+
+

Here's the CLI command you can run to optimize the icons vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

+

We added this CLI command to the scripts object in the package.json file in the previous post VuePress Tutorial 12 - Highlight SVGs on Hover.

+

Here's how to run the script:

+ + +
yarn svgo
+
+
1
+ +
npm run svgo
+
+
1
+
+

After running the script, the icons should be optimized.

+

If you have questions about how the plugin implements the CLI command or about the plugin in general, then checkout the guideContent not supported.

+

You can also check out SVGOContent not supported which is the optimization tool being used by the plugin to optimize the icons.

+

Next Steps

+

In the next tutorial we're going to continue styling the IndexPost layout component by making each post in the list of posts look like a card.

+]]>
+
+ + VuePress Tutorial 3 - Set Up and Installation + https://codemonkeys.tech/vuepress-tutorial-3/ + https://codemonkeys.tech/vuepress-tutorial-3/ + VuePress Tutorial 3 - Set Up and Installation + Hey fellow Code Monkeys!!! 🐵 Ready to set up and install VuePress, then check out VuePress Tutorial 3 - Set Up and Installation! 🍌🐒 + Sun, 16 Jan 2022 05:40:00 GMT +

VuePress Tutorial 3 - Set Up and Installation

+

Setting Up and Using GitHub

+

First we'll be going over how to create a repository on GitHubContent not supported. If you plan on using these tutorials as guides and want to start your own project from scratch, then you should create your own repository.

+

Each tutorial in this series involving code will also have a branch in the code-monkeys-blog-tutorialsContent not supported repository. If you want the code for a specific tutorial, then you can download a specific branch or clone the repository and switch to one of the remote-tracking branches. We'll go over how to download and clone the code in more detail in the sections below.

+

You can also download, clone, or fork the current version of the code-monkeys-blogContent not supported.

+

If you don't have git installed, then check out the Installing GitContent not supported documentation. Also, if you don't have a GitHub account, then Join GitHubContent not supported and Set up GitContent not supported.

+

Creating a Repository

+

A repository is a directory where you store the code and other files used in a project. A repository can be a local directory on your computer and can be stored and accessed online from a website like GitHubContent not supported.

+

If you want to create your own repository for your own project, then you need to:

+
    +
  1. Go to your profile page, click on the Repositories tab, then click the New button or on any page in the upper right corner, click the + drop-down menu, then select New repository
  2. +
  3. Type a short and descriptive name in the Repository name field
  4. +
  5. Type a description in the Description field (optional)
  6. +
  7. Choose if you want the repository to be Public or Private
  8. +
  9. Add a README.md file which you can use to describe your project in more detail and to document how to install and use your project
  10. +
  11. Add a .gitignore file which is used to ignore specified files and directories when making a commit, I recommend selecting the Node template from the drop-down menu
  12. +
  13. Add your preferred license which is used to tell others how they can use your code
  14. +
  15. You can also choose a different default branch name, e.g., master instead of main by clicking on the settings link
  16. +
  17. Click the Create repository button
  18. +
+

If you run into any issues when creating the repository or want to learn more, then check out the Create a RepoContent not supported documentation. If you need help determining which license you should use, then check out Choose a LicenseContent not supported. You can also learn more about the .gitignore file from the gitignoreContent not supported documentation.

+

After successfully creating your repository, you can now clone it to make a local copy on your computer.

+

Cloning a Repository

+

To clone your newly created repository, you need to:

+
    +
  1. Go to the main page of your repository
  2. +
  3. Click the Code button and select your preferred method to clone the repositroy, e.g., SSH
  4. +
  5. Copy your preferred remote URL
  6. +
  7. Replace the example URL below with your copied URL, then run one of the following commands in your preferred directory:
  8. +
+ + +
git clone git@github.com:<username>/<repository-name>
+
+
1
+ +
git clone https://github.com/<username>/<repository-name>
+
+
1
+
+

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a RepositoryContent not supported and About Remote RepositoriesContent not supported.

+

The next sections will show you how to download and clone the code from the code-monkeys-blog-tutorialsContent not supported repository.

+

Downloading Tutorials from GitHub

+

If you want to download the code for a specific tutorial, then you need to:

+
    +
  1. Go to the code-monkeys-blog-tutorialsContent not supported repository
  2. +
  3. Select which branch you want to download, e.g., tutorial-3
  4. +
  5. Click the Code button and select Download ZIP
  6. +
  7. Save the ZIP file to your preferred directory
  8. +
  9. Unzip the file in your preferred directory
  10. +
+

Cloning and Using Tutorials from GitHub

+

If you want to clone the tutorials, then you need to run one of the following commands in your preferred directory depending on your preferred method:

+ + +
git clone git@github.com:codemonkeysio/code-monkeys-blog-tutorials.git
+
+
1
+ +
git clone https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git
+
+
1
+
+

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a RepositoryContent not supported and About Remote RepositoriesContent not supported.

+

After successfully cloning the repository, you can run the following command to list both the remote-tracking and local branches:

+ + +
git branch -a
+
+
1
+
+

Before switching to one of the remote-tracking branches, run the following command to get all of the latest changes from the remote repository without modifying your working directory:

+ + +
git fetch
+
+
1
+
+

Now, to work on the code for a remote-tracking branch you need to make a local copy of it which you can do by running the following command:

+ + +
git switch <branch-name>
+
+
1
+
+

If you get an error when running the above command and the provided branch name exists, then check your version of git by running git --version. You need to be using at least Git 2.23Content not supported to use the switch command.

+

If you have an older version of git or if you prefer to not use the switch command, you can alternatively run the following command to work on the code for a remote-tracking branch:

+ + +
git checkout [branch-name]
+
+
1
+
+

The recommended way to switch branches is with the switch command since the checkout command does more than just switching branches which can lead to confusion.

+

If a remote-tracking branch is updated and you want to integrate those changes into your local branch, then switch to the branch you want to update and run the following command:

+ + +
git pull
+
+
1
+
+

If you edit the code for a branch and attempt to pull, you may run into merge conflicts. You can check out About Merge ConflictsContent not supported to learn more about what they are and how to resolve them.

+

Dependencies

+

Before installing VuePressContent not supported, you first need to have Node.js 10+Content not supported installed and optionally Yarn 1Content not supported.

+

It's recommended to use Yarn 1Content not supported if either one of the following applies to you:

+
    +
  • You're using webpack 3.xContent not supported in which case you may notice installation issues with npm.
  • +
  • You're going to be closely following along with these turtorials in which case I recommend using v1.22.17 since it's the same version being used by the Code Monkeys Blog. This will allow you to avoid any potential issues with packages and with the GitHub ActionsContent not supported workflow which is used when deploying the site.
  • +
+

Using the Locally Set Version of Yarn in the Repositories

+

The code-monkeys-blog-tutorialsContent not supported and the code-monkeys-blogContent not supported repositories both have a local version of yarn set to v1.22.17 in a .yarn/releases directory. This means if you use the code from the repositories, then you'll be able to use the locally set version of yarn instead of having to install the specific local version of yarn yourself.

+
+

The next sections will show you how to check your current versions of node and yarn.

+

If you don't have node or yarn installed or you want to change the versions, then check out the provided resources explaining how to install specific versions.

+

Checking Node Version

+

To check if you have node installed run the following command:

+ + +
node -v
+
+
1
+
+

If you see an output of v10.xx.xx or greater, then you can continue on with the VuePressContent not supported installation.

+

Code Monkeys Blog Node Version

+

The Code Monkeys Blog is currently using Node.js v16.11.1Content not supported. If you're going to be closely following along with these turtorials, then I recommend using the same version to avoid any potential issues.

+
+

If you don't see the proper output or want to use the same version in these tutorials, then you need to either install or upgrade node.

+

To install a system version of node you can go to Node.jsContent not supported and download a compatible version.

+

If you previously installed a system version of node from Node.jsContent not supported, then you can go back to the site and download a newer version to upgrade your current version.

+

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend using a node version manager. Before installing a node version manager like nvmContent not supported or fnmContent not supported, I recommend uninstalling your system version of node, npm, and any globally installed npm packages to avoid potential issues.

+

Check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm) to learn how to install and use them.

+

Preferred Node Version Manager

+

My preferred way to manage my node versions is with fnmContent not supported since it's much faster than nvmContent not supported.

+
+

After installing a compatible version of node, you will now have npm the default package manager for node. If you prefer you can use npm to install VuePressContent not supported. However, if you're going to be closely following along with these tutorials, then I recommend using yarn.

+

Checking Yarn Version

+

To check if you have yarn installed run the following command:

+ + +
yarn -v
+
+
1
+
+

If you don't see your preferred version of yarn, then it's recommended to install or upgrade a global version of Yarn 1Content not supported which can then be used to set a local version of yarn for the project.

+

To learn more about how to install a global version of Yarn 1Content not supported, how to use the global version to set a local version of yarn for a project, and other commonly used commands check out the Installing Yarn 1 post.

+

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

+

Recommended Version and Repositories Reminder

+

Remember the recommended version of yarn to use with your project if you're closely following along with these tutorials is v1.22.17. Also, if you use the code from the repositories, then there will be a provided local version of yarn which you can use instead of installing the specific local version yourself.

+
+

Installing Tutorial Packages

+

If you downloaded or cloned the code from the code-monkeys-blog-tutorialsContent not supported, first check your version of yarn by running the following command in the project directory:

+ + +
yarn -v
+
+
1
+
+

If the version of yarn is v1.22.17, then you can install all of the packages being used in the project by running the following command in the root project directory:

+ + +
yarn
+
+
1
+
+

Make sure you're not using the master branch when checking the version since it doesn't have the .yarn directory and that you have a global version of yarn installed.

+

If you're using your own repository and want to install VuePressContent not supported yourself, then use one of the installation methods described below.

+

Installing VuePress

+

When installing VuePressContent not supported you have the option to use the create-vuepress-site generatorContent not supported for a quick start installation or a manual installation. We'll go over both of the installation methods, but the future tutorials will be based off of the manual installation.

+

Quick Start

+

Using the generator will help scaffold a basic site structure for you by creating common directories and files found in VuePressContent not supported sites.

+
    +
  1. To use the generator run the following command in your preferred directory using your preferred package manager:
  2. +
+ + +
yarn create vuepress-site [optional-directory-name]
+
+
1
+ +
npx create-vuepress-site [optional-directory-name]
+
+
1
+
+

After running the above command, you'll be asked to answer some questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named quick-start-project:

+ + +
Whats the name of your project? quick-start-project
+Whats the description of your project? Learning VuePress
+Whats your email? youremail@example.com
+Whats your name? Your Name
+Whats the repo of your project? https://github.com/github-username/quick-start-project
+   create docs/.gitignore
+   create docs/package.json
+   create docs/src/.vuepress/components/demo-component.vue
+   create docs/src/.vuepress/components/Foo/Bar.vue
+   create docs/src/.vuepress/components/OtherComponent.vue
+   create docs/src/.vuepress/config.js
+   create docs/src/.vuepress/enhanceApp.js
+   create docs/src/.vuepress/styles/index.styl
+   create docs/src/.vuepress/styles/palette.styl
+   create docs/src/config/README.md
+   create docs/src/guide/README.md
+   create docs/src/guide/using-vue.md
+   create docs/src/index.md
+✨ File Generate Done
+Done in 38.23s.
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

The scaffolded basic site is created in a docs directory in your current directory which in the example above was quick-start-project. All of the created directories and files are listed above.

+

If you're using npm you'll see a .npmignore file in the docs directory instead of a .gitignore file.

+

Using an Optional Directory Name

+

If you passed an optional directory name, then the scaffolded basic site is created in the given directory in a docs directory.

+
+

The answers given to the questions can be found in the docs directory in the package.json file which contains your site's metadata.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "quick-start-project",
+  "version": "0.0.1",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "authors": {
+    "name": "Your Name",
+    "email": "youremail@example.com"
+  },
+  "repository": "https://github.com/github-username/quick-start-project.git",
+  "scripts": {
+    "dev": "vuepress dev src",
+    "build": "vuepress build src"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "vuepress": "^1.5.3"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+
+

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guideContent not supported.

+
    +
  1. To see your newly created site, navigate to the docs directory:
  2. +
+ + +
cd docs
+
+
1
+
+
    +
  1. Install your site's packages using your preferred package manager:
  2. +
+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

Installing the Same VuePress Version

+

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

+
+
    +
  1. Start the hot reloading local development server:
  2. +
+ + +
yarn dev
+
+
1
+ +
npm run dev
+
+
1
+
+

Your site should now be running at http://localhost:8080/Content not supported.

+

Manual Installation

+

The manual installation method allows you to start building your site from scratch unlike the quick start method which scaffolds a basic site structure for you.

+

As mentioned above, the following tutorials will be based off of the manual installation method.

+

Using an Existing Project

+

If you already have an existing project and you would like to keep the documentation inside of it, then start from the third command.

+
+
    +
  1. Navigate to your preferred directory which should be where you cloned your site's repository:
  2. +
+ + +
cd <preferred-directory>
+
+
1
+
+
    +
  1. Initialize your project with your preferred package manager:
  2. +
+ + +
yarn init
+
+
1
+ +
npm init
+
+
1
+
+

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named project-directory:

+ + +
question name (project-directory):
+question version (1.0.0):
+question description: Learning VuePress
+question entry point (index.js):
+question repository url: https://github.com/github-username/project-directory.git
+question author: Your Name
+question license (MIT):
+question private:
+success Saved package.json
+Done in 40.63s.
+
+
1
2
3
4
5
6
7
8
9
10
+
+

After answering all of the questions, a package.json file containing the answers is created. The package.json file is used to describe metadata about your site.

+

Here's the contents of the package.json file from the example above:

+ + +
{
+  "name": "project-directory",
+  "version": "1.0.0",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/project-directory.git",
+  "author": "Your Name",
+  "license": "MIT"
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guideContent not supported.

+
    +
  1. Install VuePressContent not supported:
  2. +
+ + +
yarn add -D vuepress
+
+
1
+ +
npm install -D vuepress
+
+
1
+
+

Installing the Same VuePress Version

+

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

+
+
    +
  1. Create a docs directory and your first document:
  2. +
+ + +
mkdir docs && echo '# Hello VuePress' > docs/README.md
+
+
1
+
+
    +
  1. Add the following scripts object to your package.json file:
  2. +
+ + +
"scripts": {
+  "docs:dev": "vuepress dev docs",
+  "docs:build": "vuepress build docs"
+}
+
+
1
2
3
4
+
+

Here's the contents of the package.json file from the example above after installing VuePressContent not supported and adding the scripts object:

+ + +
{
+  "name": "project-directory",
+  "version": "1.0.0",
+  "description": "Learning VuePress",
+  "main": "index.js",
+  "repository": "https://github.com/github-username/project-directory.git",
+  "author": "Your Name",
+  "license": "MIT",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "^1.9.5"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+
+
    +
  1. Start the hot reloading local development server:
  2. +
+ + +
yarn docs:dev
+
+
1
+ +
npm run docs:dev
+
+
1
+
+

Your site should now be running at http://localhost:8080/Content not supported.

+

Next Steps

+

In the next tutorial we'll be summarizing our current directory structure as well as going over the recommended directory structureContent not supported for a VuePressContent not supported site.

+]]>
+
+ + VuePress Tutorial 6 - Homepage Layout + https://codemonkeys.tech/vuepress-tutorial-6/ + https://codemonkeys.tech/vuepress-tutorial-6/ + VuePress Tutorial 6 - Homepage Layout + Hey fellow Code Monkeys!!! 🐵 Want to learn about the default theme homepage layout for VuePress, then check out VuePress Tutorial 6 - Homepage Layout! 🍌🐒 + Thu, 03 Feb 2022 05:06:00 GMT +

VuePress Tutorial 6 - Homepage Layout

+

What is a VuePress Theme?

+

In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default themeContent not supported which comes with the installation of VuePressContent not supported and is designed for technical documentation. Along with the homepage the default themeContent not supported also allows customization for the navbar, sidebar, search box, etc. We'll discuss those customizations in more detail in future tutorials.

+

Before moving on to the homepage layout, we're going to first describe what a theme is. If you remember from the VuePress Tutorial 2 - Why Use VuePress? post, a VuePressContent not supported theme allows you to control how your project is structured. Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configuration and app level enhancements. So, a theme handles all of the layout and interactivity details for your site.

+

Now that we have a good understanding of what a theme is, let's move on to configuring the homepage layout.

+

Homepage Layout

+

To see the homepage layout in action you can take a look at the homepages of the VuePressContent not supported site and the Code Monkeys Blog.

+

Using a Custom Theme

+

Since the options being used for the homepage are provided by the default themeContent not supported, they may be different if you're using a custom themeContent not supported.

+
+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes to your site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

Using the Homepage Layout

+

To use the homepage layout open the README.md file in the docs directory of your project then you need to add home: true to a YAMLContent not supported frontmatter block at the top of the page.

+

We're also going to remove the # Hello VuePress line from the file since we're going to start customizing the homepage.

+

The README.md file now looks like this:

+ + +
---
+home: true
+---
+
+
1
2
3
+
+

Before discussing the changes to the site, let's first describe what YAMLContent not supported and frontmatter are.

+

YAML Frontmatter Blocks

+

YAMLContent not supported is a recursive acroynym for "YAML Ain't Markup Language", and it's a human-readable data serialization language that can be used with a wide variety of programming languages. Frontmatter is structured metadata that allows you to add variables to your pages.

+

The YAMLContent not supported frontmatter block support comes with the installation of VuePressContent not supported and is processed using the frontmatter parser gray-matterContent not supported.

+

When you add a YAMLContent not supported frontmatter block to a page you need to declare it at the top of a Markdown file, and the content must adhere to proper YAMLContent not supported formatting between a set of triple-dashed lines, i.e., --- like the example above.

+

Within the triple-dashed lines you are able to set predefined variablesContent not supported, predefined variables powered by the default themeContent not supported, and you can define your own custom variables. These variables can then be accessed within the current page by using the $frontmatterContent not supported variable. We'll be discussing and adding predefined and custom variables and using the $frontmatterContent not supported variable as we continue to develop the site.

+

If you have any questions, then check out the FrontmatterContent not supported documentation.

+

Alternative Frontmatter Formats

+

VuePressContent not supported also supports JSONContent not supported and TOMLContent not supported frontmatter syntax.

+

We'll be using the YAMLContent not supported syntax throughout the tutorials, but if you're interested here's how to set the homepage layout using the other supported syntaxes.

+

For JSONContent not supported the frontmatter needs to start and end with curly brackets:

+ + +
---
+{
+  "home": "true"
+}
+---
+
+
1
2
3
4
5
+
+

For TOMLContent not supported the frontmatter needs to be explicitly marked as toml:

+ + +
---toml
+home = "true"
+---
+
+
1
2
3
+
+

Now that we have a better understanding of YAMLContent not supported frontmatter blocks, let's discuss the changes to the site after specifying the homepage layout.

+

Homepage Layout Changes

+

Before specifying the homepage layout, the HTML for the homepage consists of the following:

+ + +


 











 
 
 
 
 
 
 
 
 
 
 
 
 







<html lang="en-US">
+  <head>
+    <title>Hello VuePress | Code Monkeys</title>
+    ...
+    <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+    <meta name="author" content="J the Code Monkey">
+    ...
+  </head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main class="page">
+          <div class="theme-default-content content__default">
+            <h1 id="hello-vuepress">
+              <a href="#hello-vuepress" class="header-anchor">#</a>
+              " Hello VuePress"
+            </h1>
+          </div>
+          <footer class="page-edit">
+            <!---->
+            <!---->
+          </footer>
+          <!---->
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

The highlighted lines refer to what gets changed after specifying the homepage layout.

+

After specifying the homepage layout, the HTML for the homepage consists of the following:

+ + +


 











 
 
 
 
 
 
 
 
 
 
 
 
 







<html lang="en-US">
+  <head>
+    <title>Code Monkeys</title>
+    ...
+    <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+    <meta name="author" content="J the Code Monkey">
+    ...
+  </head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">
+          <header class="hero">
+            <!---->
+            <h1 id="main-title"> Code Monkeys </h1>
+            <p class="description">
+              " Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵"
+            </p>
+            <!---->
+          </header>
+          <!---->
+          <div class="theme-default-content custom content__default"></div>
+          <!---->
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+
+

Here are the changes in the HTML after specifying the homepage layout:

+
    +
  • Line 3: The initial title tag that was set to Hello VuePress | Code Monkeys is now set to Code Monkeys.
  • +
  • Line 15: The initial main tag had a class of "page", and it now has a class of "home" and an attribute of aria-labelledby="main-title".
  • +
  • Line 16: The initial child elements of the div tag are removed since the # Hello VuePress line was removed from the README.md file, and the div tag is moved to line 25 with an added class of "custom". Line 16 now consists of a header tag with a class of "hero", and the child tags of <h1 id="main-title">Code Monkeys</h1> and <p class="description">" Learn to Code like a Monkey... "</p>.
  • +
  • Line 22: The initial footer tag is removed from the page.
  • +
+

Adding an Image

+

Before adding a homepage image, we're going to first create a public directory inside of the .vuepress directory.

+

The directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The public directory is a static resource directory which is useful in the following cases:

+
    +
  • You need to provide static assests that aren't directly referenced in any of your Markdown or component files, e.g., favicons and PWA icons which we'll discuss in more detail in future tutorials.
  • +
  • You need to serve shared static assets that are referenced outside of your site, e.g., logo images.
  • +
  • You want to reference images using absolute URLs in your Markdown and component files.
  • +
+

In a future tutorial we'll discuss what absolute URLs are in more detail as well as relative URLs, the base URL, and how to use aliases. If you're interested in learning more now, then check out the Assest HandlingContent not supported documentation.

+

The image we're going to be adding to the homepage is the Code Monkeys full logo. We're going to create an images directory in the public directory. Then we're going to create a code-monkeys-logos directory inside of the images directory. These directories are optional, but will be helpful for organizational purposes when we add more images in the future. Now inside of the code-monkeys-logos directory, we're going to add the full Code Monkeys logo which is named code-monkeys-full-logo.png.

+

After adding those directories and the image, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ └── code-monkeys-full-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Here's the full Code Monkeys logo:

+
+ Content not supported +
+

You can download the logo right here from your browser, and it will also be in the tutorial-6 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

The logo was created using CanvaContent not supported. The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMPContent not supported.

+

Here are some other useful online image tools:

+ +

Here are some useful resources for coming up with color schemes and palettes for your site:

+ +

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. CanvaContent not supported and GIMPContent not supported, and some of the other image tools mentioned above offer the ability to compress your images.

+

Here are some other useful online tools for image compression:

+ +

After adding the logo to the site, we can reference the logo in our homepage by adding heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png to the frontmatter.

+

Notice you don't need to include .vuepress/public in the path to the logo because whenever you reference assets stored in the public directory it's added automatically.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+---
+
+
1
2
3
4
+
+

The homepage image is added as a child element of the <header> tag that has a class of "hero".

+

Here's what the HTML looks like after adding the homepage image:

+ + +


 









<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description">...</p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding a Title

+

Since we already added a site title property in the config.js file, we already have a title on the homepage which has the same value as the site title property.

+

If you prefer to have the site title property and the title on the homepage to be different, then you can add heroText: Homepage Title to the frontmatter.

+

The README.md file would look like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+heroText: Homepage Title
+---
+
+
1
2
3
4
5
+
+

For the Code Monkeys Blog we'll be using the value of the site title property for the homepage title, so the README.md file will look the same as before:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+---
+
+
1
2
3
4
+
+

Here's the HTML with the homepage title highlighted:

+ + +



 








<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description">...</p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding a Tagline

+

Since we already added a site description property in the config.js file, we already have a tagline on the homepage which has the same value as the site description property.

+

If you prefer to have the site description property and the tagline on the homepage to be different, then you can add tagline: Your tagline to the frontmatter.

+

We're going to update the tagline on the homepage from the value of the site description to be tagline: Let's get down to Monkey Business.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+---
+
+
1
2
3
4
5
+
+

Here's the HTML with the homepage tagline highlighted:

+ + +




 







<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <!---->
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Adding an Action Button

+

An action button provides a link to a preferred page on your site, and it's placed directly below the tagline.

+

To add an action button you need to add actionText: Text on Action Button and actionLink: /preferred-page/ to the frontmatter.

+

We're going to add the actionText: Learn to Code like a Monkey → and the actionLink: /topics/ to the homepage of the site.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+---
+
+
1
2
3
4
5
6
7
+
+

Here's the HTML with the action button highlighted:

+ + +





 
 
 






<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <p class="action">
+      <a href="/topics/" class="nav-link action-button"> Learn to Code like a Monkey → </a>
+    </p>
+  </header>
+  <!---->
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
+
+

404 When Clicking the Action Button

+

If you click the action button, it will show the 404 layout because we haven't set up the route to /topics/. In a future tutorial we'll create the Topics page which will fix this issue.

+
+

Adding Features

+

Features are text that get displayed under the action button that are used to provide a summary of what your site is about.

+

You can add as many features as you like, but the recommended number is three. Using three features looks the best with the default styling, and it gives a user a quick introduction to your site.

+

Here's the format for adding features with titles and details to the frontmatter of your page:

+ + +
---
+home: true
+features:
+  - title: Feature 1
+    details: Feature 1 details
+  - title: Feature 2
+    details: Feature 2 details
+  - title: Feature 3
+    details: Feature 3 details
+---
+
+
1
2
3
4
5
6
7
8
9
10
+
+

We're going to be adding only the feature titles to the homepage of the site.

+

The README.md file now looks like this:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+---
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

Here's the HTML with the features highlighted:

+ + +









 
 
 
 
 
 
 
 
 
 
 
 
 
 




<main aria-labelledby="main-title" class="home">
+  <header class="hero">
+    <img src="/images/code-monkeys-logos/code-monkeys-full-logo.png" alt="hero">
+    <h1 id="main-title"> Code Monkeys </h1>
+    <p class="description"> Let's get down to Monkey Business </p>
+    <p class="action">
+      <a href="/topics/" class="nav-link action-button"> Learn to Code like a Monkey → </a>
+    </p>
+  </header>
+  <div class="features">
+    <div class="feature">
+      <h2>Learn</h2>
+      <p></p>
+    </div>
+    <div class="feature">
+      <h2>Code</h2>
+      <p></p>
+    </div>
+    <div class="feature">
+      <h2>Crush</h2>
+      <p></p>
+    </div>
+  </div>
+  <div class="theme-default-content custom content__default"></div>
+  <!---->
+</main>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+
+ +

A footer typically contains:

+
    +
  • Authorship Information
  • +
  • Copyright Information
  • +
  • Contact Information
  • +
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)
  • +
+

Here's how to add a footer to the frontmatter of your page:

+ + +
---
+home: true
+footer: Your Site's License | Copyright © 2022-present Your Name
+---
+
+
1
2
3
4
+
+

We're not going to be adding a footer using the frontmatter in the homepage for the site. Instead we're going to be creating a Footer component in a future tutorial that sticks to the bottom of the page.

+

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

+ + +




 


<main aria-labelledby="main-title" class="home">
+  <header class="hero">...</header>
+  <div class="features">...</div>
+  <div class="theme-default-content custom content__default"></div>
+  <div class="footer"> Your Site's License | Copyright © 2022-present Your Name </div>
+</main>
+
1
2
3
4
5
6
+
+

Final Homepage Layout

+

Here's the contents of the README.md file for the homepage after adding all of the desired frontmatter:

+ + +
---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+---
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

The contents of your README.md file may be different depending on what metadata you decide to use in the frontmatter of your homepage.

+

Homepage Layout Notes

+

Here are some general notes about the homepage layout:

+
    +
  • You can disable any frontmatter by setting any of the options to null.
  • +
  • Any content after the frontmatter block gets parsed as normal Markdown and will be rendered after the features section.
  • +
  • You can also use a fully custom homepage layout. We'll discuss how to use a Custom Layout for Specific PagesContent not supported in a future tutorial.
  • +
+

Next Steps

+

In the next tutorial we'll discuss how to configure the navbar that comes with the default themeContent not supported.

+]]>
+
+ + VuePress Tutorial 4 - Directory Structure + https://codemonkeys.tech/vuepress-tutorial-4/ + https://codemonkeys.tech/vuepress-tutorial-4/ + VuePress Tutorial 4 - Directory Structure + Hey fellow Code Monkeys!!! 🐵 Want to learn how to structure your VuePress site, then check out VuePress Tutorial 4 - Directory Structure! 🍌🐒 + Sat, 22 Jan 2022 16:55:00 GMT +

VuePress Tutorial 4 - Directory Structure

+

Current Directory Structure

+

We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the recommended directory structure for a VuePressContent not supported site.

+

The current directory structure of the project is based off of creating a repository for your project on GitHubContent not supported, cloning the repository, setting a local version of yarn for your project, and doing a manual installation of VuePressContent not supported. This means if you're not using a local version of yarn and/or did a quick start installation your current directory structure will be a little different.

+

Here's the current directory structure of the project:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+
    +
  • .yarn/releases: Stores a local version of yarn for the project which ensures everyone working on the project is using the same version. If you didn't set a local version of yarn for your project, you won't have this directory.
  • +
  • .yarn/releases/yarn-1.22.17.cjs: Specific local version of yarn used in the code-monkeys-blog-tutorialsContent not supported and the code-monkeys-blogContent not supported repositories. The file name will be different if you're using a different version.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage.
  • +
  • node_modules: Contains all of the code for the installed packages.
  • +
  • .gitattributes: Used to prevent git from showing large diffs when you add or update local versions of yarn. If you didn't set a local version of yarn for your project, you won't have this file.
  • +
  • .gitignore: Ignores specified files and directories when making a commit to your repository.
  • +
  • .yarnrc: Instructs your global version of yarn to use the specified local version in the project. If you didn't set a local version of yarn for your project, you won't have this file.
  • +
  • LICENSE: Tells others how they can use your code.
  • +
  • package.json: Describes metadata about your site.
  • +
  • README.md: Used to describe your project in more detail and to document how to install and use your project.
  • +
  • yarn.lock: Keeps track of the exact versions of packages installed in the project. If you're using npm you'll have a package-lock.json file instead.
  • +
+

Reminder to Update the .gitattributes and .gitignore Files

+

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

+
+

Contents of the package.json File

+

Before moving on to the recommended directory structure, we're going to first go over the contents of the package.json file and add some simple updates.

+

The properties of your package.json file may be different depending on how you answered the questions when initializing your project and if you used the quick start installation method instead of the manual installation method. If you want to update any properties or values, you can edit your package.json file directly.

+

If you plan on publishing your project to the npmContent not supported registry, then take a look at the npm package.jsonContent not supported documentation to make sure you are following all of the specifications.

+

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorialsContent not supported:

+ + +
{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git",
+  "author": "J the Code Monkey",
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "1.8.2"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+
+

The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver)Content not supported.

+

Let's describe each property in a little more detail:

+
    +
  • name is the name given to your project
  • +
  • version indicates the current version of your project + +
  • +
  • description is used to describe and provide more information about your project
  • +
  • main is a JavaScript file that starts the execution of your project
  • +
  • repository describes the location of the project repository containing the code +
      +
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }
    • +
    +
  • +
  • author describes the creator or owner of the project +
      +
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
    • +
    +
  • +
  • license indicates the type of license being used by the project
  • +
  • scripts are command-line applications that are described as an object where the property is the name of the script and the value is a command that gets run
  • +
  • devDependencies are dependencies you need during development only, i.e., not during production
  • +
+

Installing the Same VuePress Version

+

If you see a different version of VuePressContent not supported and want to install the same version being used in the tutorials and blog, then you can run yarn upgrade vuepress@1.8.2.

+
+

Now, let's make some simple updates to the package.json file.

+

To start we're going to be adding a version control type to the repository property by updating it to be "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }.

+

Next we're going to be adding an optional email and url to the author property by updating it to be "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }.

+

If you prefer you can also shorten the author property to be one string by defining it like this "author": "Your Name <youremail@example.com> (https://your-website.com)".

+

The email could be a personal or work email, and the url could be a link to a personal website or the website related to your project.

+

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorialsContent not supported after adding the updates:

+ + +
{
+  "name": "code-monkeys-blog-tutorials",
+  "version": "1.0.0",
+  "description": "Learn VuePress and how to create the Code Monkeys Blog by following along with these tutorials!",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/codemonkeysio/code-monkeys-blog-tutorials.git"
+  },
+  "author": {
+    "name": "J the Code Monkey",
+    "email": "support@codemonkeys.tech",
+    "url": "https://codemonkeys.tech/"
+  },
+  "license": "GPL-3.0-or-later",
+  "scripts": {
+    "docs:dev": "vuepress dev docs",
+    "docs:build": "vuepress build docs"
+  },
+  "devDependencies": {
+    "vuepress": "1.8.2"
+  }
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

Now that we have a good understanding of our current directory structure and the package.json file, let's discuss the recommended directory structure.

+ +

Here's the recommended directory structure for a standard VuePressContent not supported site:

+

. +├── docs +│ ├── .vuepress (Optional) +│ │ ├── components (Optional) +│ │ ├── public (Optional) +│ │ ├── styles (Optional) +│ │ │ ├── index.styl +│ │ │ └── palette.styl +│ │ ├── templates (Optional, Danger Zone) +│ │ │ ├── dev.html +│ │ │ └── ssr.html +│ │ ├── theme (Optional) +│ │ │ └── Layout.vue +│ │ ├── config.js (Optional) +│ │ └── enhanceApp.js (Optional) +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

+

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

+
+
    +
  • docs/.vuepress: Stores the global configuration, components, static resources, etc.
  • +
  • docs/.vuepress/components: The Vue components in this directory automatically get registered as global components.
  • +
  • docs/.vuepress/public: Static resource directory.
  • +
  • docs/.vuepress/styles: Stores style related files.
  • +
  • docs/.vuepress/styles/index.styl: Used to add global styles that can override the default styles.
  • +
  • docs/.vuepress/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • +
  • docs/.vuepress/templates: Stores HTML template files.
  • +
  • docs/.vuepress/templates/dev.html: HTML template file for development environment.
  • +
  • docs/.vuepress/templates/ssr.html: HTML template file used in the build time.
  • +
  • docs/.vuepress/theme: Stores the local theme of the site.
  • +
  • docs/.vuepress/theme/Layout.vue: Layout component used by the theme.
  • +
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • +
  • docs/.vuepress/enhanceApp.js: App level enhancement.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • +
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • +
  • package.json: Describes metadata about your site (same file described in the current directory structure section).
  • +
+

Using the Recommended Directory Structure for Themes

+

If you plan on writing your own theme for your site or you plan on closely following along with these tutorials, then be sure to use the recommended directory structure for themes instead of the recommended directory structure for a standard VuePressContent not supported site.

+
+

Be sure to check out the Directory StructureContent not supported documentation if you have any questions.

+ +

Here's the recommended directory structure if you plan on writing your own theme for your site. Since the Code Monkeys Blog is a child theme inherited from the default themeContent not supported, we'll be using the recommended directory structure for themes when developing the blog.

+

We'll be going over child themes and parent themes in more detail in future tutorials, but if you want to learn more now, you can read through the Theme InheritanceContent not supported documentation.

+

If you're not using a theme when developing your site, you have the option of using the recommended directory structure for a standard VuePressContent not supported site. There should only be minor differences when following along with these tutorials.

+

Only the Layout.vue file is mandatory when writing a theme, but we'll be using the other recommended directories as we continue to develop the blog.

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── components +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ │ └── Layout.vue (Mandatory) +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ ├── templates +│ │ │ │ ├── dev.html +│ │ │ │ └── ssr.html +│ │ │ ├── enhanceApp.js +│ │ │ └── index.js +│ │ └── config.js +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

+

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

+
+
    +
  • docs/.vuepress: Stores the global configuration, theme, static resources, etc.
  • +
  • docs/.vuepress/public: Static resource directory.
  • +
  • docs/.vuepress/theme: Stores the theme of the site.
  • +
  • theme/components: Stores the Vue components.
  • +
  • theme/global-components: The Vue components in this directory automatically get registered as global components.
  • +
  • theme/layouts: Stores the layout components used by the theme.
  • +
  • theme/layouts/Layout.vue: Mandatory layout component used by the theme.
  • +
  • theme/styles: Stores style related files.
  • +
  • theme/styles/index.styl: Used to add global styles that can override the default styles.
  • +
  • theme/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • +
  • theme/templates: Stores HTML template files.
  • +
  • theme/templates/dev.html: HTML template file for development environment.
  • +
  • theme/templates/ssr.html: HTML template file used in the build time.
  • +
  • theme/enhanceApp.js: Theme level enhancement.
  • +
  • theme/index.js: Entry file for theme configuration.
  • +
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • +
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • +
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • +
  • package.json: Describes metadata about your site (same file described in the current directory structure section).
  • +
+

We'll be discussing themes in more detail as we continue to develop the blog. If you want to learn more now though or have any questions, then check out the ThemeContent not supported documentation.

+

Default Page Routing

+

In the directory structure above we used the docs directory as the targetDir. If you want to learn more about how the targetDir is used, then take a look at the Command-line InterfaceContent not supported documentation.

+

To see an example of the docs directory being used as the targetDir we can take a look at the scripts object we defined in the package.json file which is in the root directory of the project. Notice the targetDir gets set as the docs directory for the docs:dev and docs:build scripts:

+ + +
"scripts": {
+  "docs:dev": "vuepress dev docs",
+  "docs:build": "vuepress build docs"
+}
+
+
1
2
3
4
+
+

All the relative paths are relative to the docs directory. Here are the relative paths and the default page routing paths for the directory structure described above:

+ + + + + + + + + + + + + + + + + +
Relative PathPage Routing
/README.md/
/example-page/README.md/example-page/
+

From the table we can see the relative path for the homepage is /README.md and the default page routing path for the homepage is /. We can also see the relative path for the example page is /example-page/README.md, and the default page routing path for the example page is /example-page/.

+

Next Steps

+

In the next tutorial we'll discuss the basics of ConfigurationContent not supported.

+]]>
+
+ + VuePress Tutorial 7 - Navbar Logo and Links + https://codemonkeys.tech/vuepress-tutorial-7/ + https://codemonkeys.tech/vuepress-tutorial-7/ + VuePress Tutorial 7 - Navbar Logo and Links + Hey fellow Code Monkeys!!! 🐵 Want to learn how to configure the navbar for VuePress, then check out VuePress Tutorial 7 - Navbar Logo and Links! 🍌🐒 + Sat, 12 Mar 2022 17:46:45 GMT +

VuePress Tutorial 7 - Navbar Logo and Links

+

What is a Navbar?

+

In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default themeContent not supported. A navbar is used to provide users with a quick and easy way to navigate to the main pages of a site. Most sites display the navbar on most or all of the pages, so it's generally designed to be a global component which allows it to be easily shown on all pages.

+

The navbar for a site made with VuePressContent not supported can consist of a logo, a site title, a search box, internal links, languages the site can be translated to, and external links. Depending on how you want to configure your navbar your site can have all or some of these options. We'll be discussing how to configure the logo, site title, internal links, and external links. We'll also discuss how to disable the navbar globally as well as locally for specific pages.

+

Take a look at the navbar on this page to see what we'll be designing for the Code Monkeys Blog. To see another example you can check out the VuePressContent not supported site navbar as well.

+

Using a Custom Theme

+

Since the options being used for the navbar are provided by the default themeContent not supported, they may be different if you're using a custom themeContent not supported.

+
+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+ +

The navbar logo is used to brand your site, and it provides a link to the homepage. The image we're going to be using for the navbar is the Code Monkeys head and shoulders logo. We're going to be adding the image which is named code-monkeys-head-and-shoulders-logo.png to the code-monkeys-logos directory.

+

The site title in the navbar also provides a link to the homepage, and it's being set by the value of the title property in the config.js file which we set up in a previous tutorial.

+

After adding the image, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ ├── code-monkeys-full-logo.png +│ │ │ │ │ └── code-monkeys-head-and-shoulders-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

If the directory structure is confusing you, then be sure to take a look at the Adding an Image section from the previous tutorial where it's described in more detail. That section also contains links to resources for creating, editing, and compressing images and for coming up with color schemes and palettes for your site.

+

Here's the Code Monkeys head and shoulders logo:

+
+ Content not supported +
+

You can download the logo right here from your browser, and it will also be in the tutorial-7 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

After adding the image to the site, we can reference it in the config.js file as follows:

+ + +






 
 
 


module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

Notice you don't need to include .vuepress/public in the path to the navbar logo because whenever you reference assets stored in the public directory it's added automatically.

+

Also, notice the value of the site title is being set here by using the title property.

+

Here's what the HTML looks like after adding the navbar logo:

+ + +








 
 













<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">
+                <img src="/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png" alt="Code Monkeys" class="logo">
+                <span class="site-name can-hide">Code Monkeys</span>
+            </a>
+            <div class="links" style="max-width: 1093px;">...</div>
+        </header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">...</main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+

You should now see the navbar logo in the upper left of the page.

+ +

To add links to the navbar other than to the homepage we need to add a nav property to the themeConfig object. The nav property expects an array of navbar link objects. We're going to start by adding internal links.

+ +

An internal link is a link that points to another section of the same page or to another page on the same site or domain.

+

To add an internal link you need to add { text: 'Link Name', link: '/path-to-page/' } to the nav property where the text defines the name of the link in the navbar and link defines the path to the preferred page.

+

For our site we're going to add the following internal links: Topics, Posts, Resources, and Donate.

+

Here's what the config.js file looks like after adding the internal links:

+ + +








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        link: '/posts/',
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

Here's what the HTML looks like after adding the internal links:

+ + +










 
 
 
 
 
 
 
 
 
 
 
 
 
 
 










<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+            <div class="links" style="max-width: 1093px;">
+                <div class="search-box">...</div>
+                <nav class="nav-links can-hide">
+                    <div class="nav-item">
+                        <a href="/topics/" class="nav-link"> Topics </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/posts/" class="nav-link"> Posts </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/resources/" class="nav-link"> Resources </a>
+                    </div>
+                    <div class="nav-item">
+                        <a href="/donate/" class="nav-link"> Donate </a>
+                    </div>
+                    <!---->
+                </nav>
+            </div>
+        </header>
+        ...
+      </div>
+      ...
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Your navbar should now have Topics, Posts, Resources, and Donate links to the right of the search box.

+

404 When Clicking the Links

+

If you click the links they will show the 404 layout because we haven't set up the pages for Topics, Posts, Resources, and Donate yet. In future tutorials we'll create these pages which will fix these issues.

+
+ +

An external link is a link that points to a page outside of the same site or domain.

+

Adding an external link is the same as adding an internal link except the value provided to the link property is a URL to an external site.

+

External links automatically get target="_blank" rel="noopener noreferrer" attributes added to the <a> tag. The target attribute specifies where to open the linked document, and the rel attribute specifies the relationship between the current document and the linked document.

+

These attributes are used to prevent a vulnerability known as reverse tabnabbingContent not supported which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

+

You can also customize the values for the target and rel attributes by specifying them as properties in the external link. You can disable the rel attribute for a link by setting it like this rel: false.

+

For example, we could add an external link to the code-monkeys-blogContent not supported repository on our site with custom values for target and rel.

+

Here's what the config.js file looks like after adding the external link:

+ + +

























 
 
 
 
 
 




module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        link: '/posts/',
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+      {
+        text: 'GitHub',
+        link: 'https://github.com/codemonkeysio/code-monkeys-blog',
+        target:'_self',
+        rel:false,
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Here's what the HTML looks like after adding the external link:

+ + +















 
 
 
 
 
 












<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">
+            <div class="sidebar-button">...</div>
+            <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+            <div class="links" style="max-width: 1093px;">
+                <div class="search-box">...</div>
+                <nav class="nav-links can-hide">
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">...</div>
+                    <div class="nav-item">
+                        <a href="https://github.com/codemonkeysio/code-monkeys-blog" target="_self" class="nav-link external"> 
+                            " GitHub "
+                            <!---->
+                        </a>
+                    </div>
+                    <!---->
+                </nav>
+            </div>
+        </header>
+        ...
+      </div>
+      ...
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
+
+

No External Link in Navbar

+

Currently, the Code Monkeys Blog doesn't include an external link in the navbar, but in the future one may be added for the code-monkeys-blogContent not supported repository using the default values for external links mentioned above.

+
+ +

The links in the navbar can also be dropdown menus if an items property which expects an array of navbar link objects is used instead of just a link property.

+

For example, the Posts link we made earlier can be turned into a dropdown menu containing links to pages for All Posts and for posts By Topic.

+

Here's what the config.js file looks like after turning the Posts link into a dropdown menu:

+ + +













 
 
 
 
 
 
 















module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          { 
+            text: 'By Topic',
+            link: '/topics/',
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
+
+

Here's what the HTML looks like after adding a dropdown menu:

+ + +








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 








<header class="navbar">
+    <div class="sidebar-button">...</div>
+    <a href="/" aria-current="page" class="home-link router-link-exact-active router-link-active">...</a>
+    <div class="links" style="max-width: 1093px;">
+        <div class="search-box">...</div>
+        <nav class="nav-links can-hide">
+            <div class="nav-item">...</div>
+            <div class="nav-item">
+                <div class="dropdown-wrapper">
+                    <button type="button" aria-label="Posts" class="dropdown-title">
+                        <span class="title">Posts</span>
+                        <span class="arrow down"></span>
+                    </button>
+                    <button type="button" aria-label="Posts" class="mobile-dropdown-title">
+                        <span class="title">Posts</span>
+                        <span class="arrow right"></span>
+                    </button>
+                    <ul class="nav-dropdown" style="display: none;">
+                        <li class="dropdown-item">
+                            <!---->
+                            <a href="/posts/" class="nav-link"> All Posts </a>
+                        </li>
+                        <li class="dropdown-item">
+                            <!---->
+                            <a href="/topics/" class="nav-link"> By Topic </a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+            <div class="nav-item">...</div>
+            <div class="nav-item">...</div>
+            <!---->
+        </nav>
+    </div>
+</header>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+
+

Your navbar should now have a Posts dropdown menu containing All Posts and By Topic links.

+ +

It's also possible to make a dropdown menu with subgroups where a label is used to group a list of links. This is done by using the items property which expects an array of navbar link objects instead of using just a link property for a dropdown menu entry.

+

For example, the By Topic link we made earlier can be turned into a subgroup containing links to posts filtered by main topics. Currently, the blog consists of three main topics LeetCode, Node.js, and VuePress, so we'll add each of these as an entry to the By Topic subgroup in our dropdown menu.

+

Here's what the config.js file looks like after turning the By Topic link in the dropdown menu into a subgroup:

+ + +

















 
 
 
 
 
 
 
 














module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    logo: '/images/code-monkeys-logos/code-monkeys-head-and-shoulders-logo.png',
+    nav: [
+      {
+        text: 'Topics',
+        link: '/topics/',
+      },
+      {
+        text: 'Posts',
+        items: [
+          { text: 'All Posts', link: '/posts/' },
+          {
+            text: 'By Topic',
+            items: [
+              { text: 'LeetCode', link: '/topics/LeetCode/' },
+              { text: 'Node.js', link: '/topics/Node.js/' },
+              { text: 'VuePress', link: '/topics/VuePress/' },
+            ],
+          },
+        ],
+      },
+      {
+        text: 'Resources',
+        link: '/resources/',
+      },
+      {
+        text: 'Donate',
+        link: '/donate/',
+      },
+    ],
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
+
+

Final config.js File

+

This is how the config.js file should look at the end of this tutorial if you're following along with the building of the blog.

+
+

Here's what the HTML looks like after adding a subgroup to the dropdown menu:

+ + +















 
 
 
 
 
 
 
 
 
 
 
 




<div class="dropdown-wrapper">
+    <button type="button" aria-label="Posts" class="dropdown-title">
+        <span class="title">Posts</span>
+        <span class="arrow down"></span>
+    </button>
+    <button type="button" aria-label="Posts" class="mobile-dropdown-title">
+        <span class="title">Posts</span>
+        <span class="arrow right"></span>
+    </button>
+    <ul class="nav-dropdown" style="display: none;">
+        <li class="dropdown-item">
+            <!---->
+            <a href="/posts/" class="nav-link"> All Posts </a>
+        </li>
+        <li class="dropdown-item">
+            <h4> By Topic </h4>
+            <ul class="dropdown-subitem-wrapper">
+                <li class="dropdown-subitem">
+                    <a href="/topics/LeetCode/" class="nav-link"> LeetCode </a>
+                </li>
+                <li class="dropdown-subitem">
+                    <a href="/topics/Node.js/" class="nav-link"> Node.js </a>
+                </li>
+                <li class="dropdown-subitem">
+                    <a href="/topics/VuePress/" class="nav-link"> VuePress </a>
+                </li>
+            </ul>
+        </li>
+    </ul>
+</div>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
+
+

Your navbar should now have a By Topic subgroup in the dropdown menu containing these links LeetCode, Node.js, and VuePress.

+

To add more links to the By Topic subgroup all you need to do is add another element into its items array.

+

404 Reminder When Clicking the Links

+

Clicking the links will show the 404 layout because we haven't set up the pages for the navbar links except for the homepage. In future tutorials we'll create these pages which will fix these issues.

+
+

Disabling the Navbar

+

You can disable the navbar globally if you prefer to not have a navbar for your site. You also have the option to disable the navbar locally for specific pages. We'll demonstrate how to do each of these below.

+

Globally

+

To disable the navbar globally add the following to your config.js file:

+ + +







 



module.exports = {
+  title: 'Code Monkeys',
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    navbar: false,
+  },
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

The navbar property is a predefined variable provided by the default themeContent not supported. Check out Predefined Variables Powered By Default ThemeContent not supported for a list of the predefined variables.

+

Locally

+

To disable the navbar locally for a specific page you can add the following to the page's frontmatter:

+ + +
---
+navbar: false
+---
+
+
1
2
3
+
+

Next Steps

+

In the next tutorial we'll begin the development of the Footer component which will stick to the bottom of the page and consist of social media icons and a made by message.

+]]>
+
+ + VuePress Tutorial 8 - Custom Footer + https://codemonkeys.tech/vuepress-tutorial-8/ + https://codemonkeys.tech/vuepress-tutorial-8/ + VuePress Tutorial 8 - Custom Footer + Hey fellow Code Monkeys!!! 🐵 Want to learn how to create a custom footer for your VuePress site, then check out VuePress Tutorial 8 - Custom Footer! 🍌🐒 + Wed, 06 Apr 2022 16:58:30 GMT +

VuePress Tutorial 8 - Custom Footer

+ +

Now it's time to start building the custom footer component for the site. Before creating the footer component, we're going to first describe what a footer is then we'll mention some other options for footers provided by VuePressContent not supported and the @vuepress/theme-blogContent not supported.

+

A footer is located at the bottom of a page, and it typically contains:

+
    +
  • Authorship Information
  • +
  • Copyright Information
  • +
  • Contact Information
  • +
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)
  • +
+

For the Code Monkeys Blog we'll be building a footer that consists of links to various social media platforms. This gives the user an easy way to interact with various content and the community.

+

Take a look at the footer on this page to see what we'll be designing for the blog. To see another example you can check out the VuePressContent not supported site footer as well.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+ +

If you remember from the previous post VuePress Tutorial 6 - Homepage Layout, VuePressContent not supported provides a way to add a footer to the homepage by adding the following to the homepage layout which is located in docs/README.md:

+ + +










 


---
+home: true
+heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png
+tagline: Let's get down to Monkey Business
+actionText: Learn to Code like a Monkey →
+actionLink: /topics/
+features:
+  - title: Learn
+  - title: Code
+  - title: Crush
+footer: Your Site's License | Copyright © 2022-present Your Name
+---
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

+ + +












 
 
 








<html lang="en-US">
+  <head>...</head>
+  <body>
+    <div id="app">
+      <div class="theme-container no-sidebar">
+        <header class="navbar">...</header>
+        <div class="sidebar-mask"></div>
+        <aside class="sidebar">...</aside>
+        <main aria-labelledby="main-title" class="home">
+          <header class="hero">...</header>
+          <div class="features">...</div>
+          <div class="theme-default-content custom content__default"></div>
+          <div class="footer">
+            Your Site's License | Copyright © 2022-present Your Name
+          </div>
+        </main>
+      </div>
+      <div class="global-ui"></div>
+    </div>
+    ...
+  </body>
+</html>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+
+ +

VuePressContent not supported also provides a rich-text footerContent not supported which gives you the ability to easily add more functionality to your footer like links. To set this type of footer you need to use markdown slot syntaxContent not supported which we won't discuss in detail here.

+

Since the rich-text footerContent not supported uses markdown slot syntaxContent not supported, you can only add it to markdown files, and it needs to be manaully added to each markdown file to be displayed.

+

These limitations are why we'll be creating a custom footer component. If you only want to show the footer on one or a few markdown pages, then this option should work fine for you.

+ +

The Code Monkeys Blog uses the default themeContent not supported, but if you're interested in using @vuepress/theme-blogContent not supported be sure to take a look at the footer optionContent not supported.

+

Here are some examples of sites that use the @vuepress/theme-blogContent not supported footer:

+ +

Since we'll be using social media sites that are not currently supported by the footer.contactContent not supported option, we won't be using this footer. You can contribute social media contact types by making a pull request to the vuepress-theme-blogContent not supported repository though if you're interested.

+ +

Before designing the custom footer component, we need to have an understanding of the following topics:

+ +

We won't be describing every detail about each topic above since we only need to understand how to create our custom footer component. If you're interested in learning more now, then check out the links above.

+

Writing a Theme

+

In VuePressContent not supported you have the ability to make your site into a theme. This gives you the option to publish your site as an npmContent not supported package which allows other developers to easily install and use your theme.

+

To write your own theme you need to create a theme directory in the .vuepress directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ └── config.js +│ └── README.md

+

After creating the theme directory, all you need to do is create a Layout.vue file inside of it like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ └── Layout.vue +│ │ └── config.js +│ └── README.md

+

From here you can develop your site like any other VueContent not supported application by organizing your theme however you want. Being able to organize your theme however you want provides a lot of flexibility when creating your site, but it's recommended to use the directory structure below when designing your theme:

+

theme +├── components +│ └── xxx.vue +├── global-components +│ └── xxx.vue +├── layouts +│ ├── Layout.vue (Mandatory) +│ └── xxx.vue +├── styles +│ ├── index.styl +│ └── palette.styl +├── templates +│ ├── dev.html +│ └── ssr.html +├── enhanceApp.js +└── index.js

+

Here's a description for each directory and file in the theme directory:

+
    +
  • components: Local components used in your theme.
  • +
  • global-components: Components in this directory automatically get registered as global, so you don't need to explicitly import them in a file when using them.
  • +
  • layouts: Layout components used in your theme. +
      +
    • Layout.vue: A mandatory layout file for every theme.
    • +
    +
  • +
  • styles: Stores files related to styling your theme. +
      +
    • index.styl: Overrides any default styling and allows you to globally style your site.
    • +
    • palette.styl: Overrides any default styling variables and allows you to add any global styling variables.
    • +
    +
  • +
  • templates: Stores HTML template files. +
      +
    • dev.html: HTML template file for development environment.
    • +
    • ssr.html: HTML template file used in the build time.
    • +
    +
  • +
  • enhanceApp.js: Enhances the theme of your site by giving you the ability to install Vue plugins, add router hooks, etc.
  • +
  • index.js: Entry file for for theme configuration.
  • +
+

Reviewing the Recommended Directory Structure for Themes

+

You may have recognized this directory structure from the VuePress Tutorial 4 - Directory Structure post.

+
+

When creating the custom footer component we'll use the global-components directory, the index.js file, and the layouts directory. The global-components directory will be where we add the custom footer component since we want the footer to be available globally. The index.js file will be used to inherit the default themeContent not supported using theme inheritanceContent not supported. Finally, the layouts directory will be where we add the GlobalLayout.vue file which allows us to add our custom footer component to the global layout of the site.

+

Since we'll be using the vuepress-plugin-svg-iconsContent not supported to add social media icons to our footer, let's go over what pluginsContent not supported are, how to install them, and how to configure them.

+

Basics of Plugins

+

PluginsContent not supported allow you to add global-level functionality to VuePressContent not supported. You can configure them by passing in options. It's also possible to write your own and publish them as npmContent not supported packages.

+

To use a plugin you need to first install it by using either yarn or npm. We'll be using yarn to install all of the plugins for the blog, but the commands for installing the plugins with npm will also be provided. After installing a plugin, you can configure it by adding it to the config.js file.

+

VuePress Plugin - SVG Icons

+

Now that we know the basics, we're ready to install and configure vuepress-plugin-svg-iconsContent not supported.

+

Using the Tutorials Repo

+

If you're following along with the tutorials, then when you switch to the tutorial-8 branch you can run the following command to install the package instead of running the installation command:

+ + +
yarn
+
+
1
+ +
npm install
+
+
1
+
+

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

+

Using the Installation Command

+

To install the plugin in your own project you can run the following command:

+ + +
yarn add @goy/vuepress-plugin-svg-icons -D
+
+
1
+ +
npm install @goy/vuepress-plugin-svg-icons -D
+
+
1
+
+

Installing the Same Plugin Version

+

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @goy/vuepress-plugin-svg-icons@4.2.3.

+
+

After installing the plugin, the package.json file should look something like this:

+ + +



 




{
+  ...
+  "devDependencies": {
+    "@goy/vuepress-plugin-svg-icons": "^4.2.3",
+    "vuepress": "1.8.2"
+  }
+}
+
1
2
3
4
5
6
7
+
+

Next we need to configure the plugin by editing the config.js file:

+ + +








 


module.exports = {
+  ...
+  head: [
+    ...
+  ],
+  themeConfig: {
+    ...
+  },
+  plugins: ['@goy/svg-icons'],
+}
+
1
2
3
4
5
6
7
8
9
10
+
+

To add the social media icons to the site we need to create an icons directory in the docs directory. Here's what the docs directory should look like after adding the icons directory:

+

. +├── docs +│ ├── .vuepress +│ ├── icons +│ └── README.md

+

The plugin recommends using iconfontContent not supported to find Scalable Vector Graphics (SVGs)Content not supported for your site. After creating an account, you can search for icons and download them. When downloading the icons you have the option to specify a color and size for the icon. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

+

You can download the icons from the tutorial-8 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Using SVG Export

+

To easily download the icons used in the footer you can also install the browser extension SVG ExportContent not supported. After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

+
+

We'll be using icons for these social media sites as well as to an RSS feed for Code Monkeys in the footer:

+ +

After downloading the icons the icons directory should look something like this:

+

├── icons +│ ├── Gab.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

After adding the icons to icons directory, the plugin will automically load the icons and will provide a global component named vp-icon. To use the vp-icon component you need to pass a name attribute to it where the value is the name of the SVG file you want to use.

+

If you're interested in learning more about the plugin, then check out the vuepress-plugin-svg-iconsContent not supported documentation which contains more information about configuration options, component props, and command-line interface (CLI) commands.

+

We're now ready to create the custom footer component.

+ +

The custom footer component will be added to the global-components directory. Here's what the theme directory will look like after adding the Footer.vue file:

+

├── theme +│ ├── global-components +│ │ └── Footer.vue

+

Here we're creating a *.vue file which is known as a Single-File Component (SFC)Content not supported. This is a special file format that allows you to encapsulate the HTML in a template tag, the JavaScript in a script tag, and the CSS in a style tag for the component.

+

Here's what the Footer.vue file looks like after adding these three main sections:

+ + +
<template></template>
+
+<script></script>
+
+<style></style>
+
+
1
2
3
4
5
+
+

To start we'll add the HTML to the template tag. The contents of the footer will be wrapped in a footer tag containing two child tags a div tag and a p tag. The div tag will contain seven child a tags one for each of the social media icons. The p tag will contain authorship information for the blog.

+

Each a tag will have the following attributes: href, target, and rel. The href specifies the URL of the page the link goes to, the target specifies where to open the link, and the rel specifies the relationship between the current page and the link. Each a tag will also have a child vp-icon tag which will have the name attribute discussed earlier.

+

Here's what the Footer.vue file looks like after adding the HTML to the template tag:

+ + +

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 






<template>
+  <footer>
+    <div>
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p>Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script></script>
+
+<style></style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
+
+

Each href has a value of the related URL for the social media site. Each target has a value of _blank, and each rel has a value of noopener noreferrer.

+

As mentioned in the previous post these values for the target and rel attributes are used to prevent a vulnerability known as reverse tabnabbingContent not supported which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

+

Each name attribute has a value of the name of the related SVG file with the .svg extension omitted.

+

Next we'll export the JavaScript in the script tag and give the component a name. Here's what the Footer.vue file looks like after updating the script tag:

+ + +





 
 
 





<template>
+  ...
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style>
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
+
+

Finally, we'll style the component by adding the following CSS classes: "footer", "icons", and "made-by". We'll be adding the "footer" class to the footer tag, the "icons" class to the div tag, and the "made-by" class to the p tag. Then we'll add styling for each of the CSS classes in the style tag. Here's what the Footer.vue file looks like after styling:

+ + +

 
 


 







 
 
 
 
 
 
 
 
 
 
 
 
 
 


<template>
+  <footer class="footer">
+    <div class="icons">
+      ...
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+  ...
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+
+

The lang attribute used in the style tag is used to specify which pre-processor we want to use in the component. Here we're using StylusContent not supported which is the default pre-processor used by VuePressContent not supported. If you want to learn how to use a different pre-processor, then check out Using Pre-processorsContent not supported.

+

A scoped attribute is also used in the style tag which means all of the styling only applies to the current component. Take a look at Scoped CSSContent not supported to learn more about the scoped attribute.

+

The "footer" class is given display: flex which defines a flex container for all of the direct children of the tag where the "footer" class is used. In this case the "footer" class is used on the footer tag which means the div tag and p tag will be in a flex container. The "footer" class is also given flex-direction: column which means the flex items in the flex container, i.e., the div tag and the p tag will be stacked on top of each other in a column as opposed to the default row setting. The flex items are then given align-items: center which will horizontally center the flex items since the flex direction is set to column. The "footer" class is then given padding: 2.5rem 2.5rem 2rem which will set a padding of 2.5rem for the top, 2.5rem for the left and right, and 2rem for the bottom.

+

If you're unfamiliar with flexbox, then check out A Complete Guide to FlexboxContent not supported and Basic Concepts of FlexboxContent not supported. Also, if you're unfamiliar with CSS units like rem, then check out CSS UnitsContent not supported.

+

The "icons" class is also given display: flex which means each a tag will be in a flex container since they're all direct children of the div tag which has the "icons" class. The "icons" class is also given margin-bottom: 1.75rem and font-size: 2rem which increases the size of the icons. The CSS selector .icons > a:not(:last-child) is then used which selects all a tags where the parent tag has a class of "icons" except for the last a tag. Each a tag that is selected is given margin-right: 4.6875rem.

+

If you're unfamiliar with CSS selectors, then check out the CSS Selector ReferenceContent not supported.

+

Finally, the "made-by" class is given margin: 0 which removes the margin from the p tag.

+

If you didn't feel comfortable with the CSS discussed above, then here's a good resource to go through CSS TutorialContent not supported.

+

As we continue to develop the blog, we'll add more styling to the footer to make it look presentable in different scenarios like on smaller screen sizes, when a sidebar is present, etc.

+

Here's what the Footer.vue file should look like:

+ + +
<template>
+  <footer class="footer">
+    <div class="icons">
+      <a
+        href="https://github.com/codemonkeysio"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="GitHub"></vp-icon>
+      </a>
+      <a
+        href="https://www.youtube.com/@codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="YouTube"></vp-icon>
+      </a>
+      <a
+        href="https://gab.com/codemonkeys"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Gab"></vp-icon>
+      </a>
+      <a
+        href="https://t.me/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Telegram"></vp-icon>
+      </a>
+      <a
+        href="https://twitter.com/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Twitter"></vp-icon>
+      </a>
+      <a
+        href="https://codemonkeys.tech/rss.xml"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="RSS"></vp-icon>
+      </a>
+      <a
+        href="https://keybase.io/codemonkeystech"
+        target="_blank"
+        rel="noopener noreferrer"
+      >
+        <vp-icon name="Keybase"></vp-icon>
+      </a>
+    </div>
+    <p class="made-by">Made by & for Code Monkeys 🐵</p>
+  </footer>
+</template>
+
+<script>
+export default {
+  name: 'Footer',
+}
+</script>
+
+<style lang="stylus" scoped>
+.footer
+  display: flex
+  flex-direction: column
+  align-items: center
+  padding: 2.5rem 2.5rem 2rem
+  .icons
+    display: flex
+    margin-bottom: 1.75rem
+    font-size: 2rem
+  .icons > a:not(:last-child)
+    margin-right: 4.6875rem
+  .made-by
+    margin: 0
+</style>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
+
+

After adding the global-components directory to the theme directory, you may have noticed the site is rendering a blank page. This is because we created a directory in the theme directory, so VuePressContent not supported is now looking for a Layout.vue file in the theme directory.

+

We have the option of creating a layouts directory and placing our own Layout.vue file inside of it, but as previously mentioned we're going to use theme inheritanceContent not supported to inherit the default themeContent not supported.

+

Theme Inheritance

+

Theme inheritanceContent not supported allows you to pass all of the capabilities from a parent theme to a child theme. In our case the parent theme is the default themeContent not supported, and we'll be creating the child theme as we develop the blog.

+

To create the child theme from the default themeContent not supported, we need to configure the extendContent not supported option in the index.js file.

+

First, we need to create the index.js file in the theme directory which should now look like this:

+

├── theme +│ ├── global-components +│ └── index.js

+

We can now configure the extendContent not supported option:

+ + +
module.exports = {
+  extend: '@vuepress/theme-default',
+};
+
+
1
2
3
+
+

The inherited default themeContent not supported should now be rendering alongside the child theme instead of the blank page.

+

Missing Layout.vue File

+

You may have noticed that the Layout.vue file is listed as a mandatory file, but we didn't need to create one in the theme directory. This is because you don't need to explicitly create the Layout.vue file when you're inheriting it from the default themeContent not supported.

+
+

The child theme is also able to override files in the parent theme by creating a file with the same name in the same location. We'll go over how to override parent theme files in more detail in future tutorials. You can also override some parent theme files by just using the same name as the parent theme file in the child theme. For example, we're going to override the GlobalLayout.vue file by using the same name for the file in the child theme and the code provided by the documentation.

+

Now let's create the layouts directory in the theme directory. This is where we'll be adding the GlobalLayout.vue file which again allows us to add our custom footer component to the global layout of the site.

+

Using the Global Layout

+

Here's what the theme directory will look like after creating the GlobalLayout.vue file in the layouts directory:

+

├── theme +│ ├── global-components +│ ├── layouts +│ │ └── GlobalLayout.vue +│ └── index.js

+

The GlobalLayout.vue file is responsible for handling the global layout of the site. Here's the path to the default GlobalLayout.vue file provided by VuePressContent not supported node_modules/@vuepress/core/lib/client/components. You can also view the code for the default global layout hereContent not supported.

+

The default global layout gives you the ability to render different layouts depending on if $page.path is defined, i.e., the URL of the page is valid and if $page.frontmatter.layout is defined. If only the $page.path is defined, then the default layout will be used which is Layout. If $page.frontmatter.layout is defined, then the specific layout for that page will be used. If $page.path is not defined, then the NotFound layout is used which is the layout for the 404 page provided by VuePressContent not supported. In most scenarios you don't need to edit the default global layout, but if you want to add a global header or a global footer to your site, then this is a good place to add it.

+

To override and edit the GlobalLayout.vue file we're going to use the code provided by the globalLayoutContent not supported section from the documentation. The code provided by the documentation basically uses a computed propertyContent not supported to determine the layout for a page based on if the URL of the page is defined and if the page uses a specific layout provided by the frontmatter. This is similar to the logic previously described when discussing the default global layout.

+

Here's the code from the documentation:

+ + +
<template>
+  <div id="global-layout">
+    <header><h1>Header</h1></header>
+    <component :is="layout"/>
+    <footer><h1>Footer</h1></footer>
+  </div>
+</template>
+
+<script>
+export default {
+  computed: {
+    layout () {
+      if (this.$page.path) {
+        if (this.$frontmatter.layout) {
+          // You can also check whether layout exists first as the default global layout does.
+          return this.$frontmatter.layout
+        }
+        return 'Layout'
+      }
+      return 'NotFound'
+    }
+  }
+}
+</script>
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+
+

We're going to remove the example header tag and replace the example footer tag with our previously created footer component.

+

Here's what the GlobalLayout.vue file should look like after the changes:

+ + +



 




















<template>
+  <div id="global-layout">
+    <component :is="layout"/>
+    <Footer />
+  </div>
+</template>
+
+<script>
+export default {
+  computed: {
+    layout () {
+      if (this.$page.path) {
+        if (this.$frontmatter.layout) {
+          // You can also check whether layout exists first as the default global layout does.
+          return this.$frontmatter.layout
+        }
+        return 'Layout'
+      }
+      return 'NotFound'
+    },
+  },
+}
+</script>
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+

Importing the Footer Component

+

Notice that we don't need to explicitly import the footer component since we made it a global component by adding it to the global-components directory in the theme directory.

+
+

Next Steps

+

In the next tutorial we'll discuss how to override the index.styl and palette.styl files to add our own global styling to the site. The global styling will include background color, accent color, text color, etc.

+]]>
+
+ + VuePress Tutorial 5 - Configuration Basics + https://codemonkeys.tech/vuepress-tutorial-5/ + https://codemonkeys.tech/vuepress-tutorial-5/ + VuePress Tutorial 5 - Configuration Basics + Hey fellow Code Monkeys!!! 🐵 Want to learn about the configuration basics for VuePress, then check out VuePress Tutorial 5 - Configuration Basics! 🍌🐒 + Wed, 26 Jan 2022 17:54:00 GMT +

VuePress Tutorial 5 - Configuration Basics

+

Adding a Config File

+

Currently, the site consists of a homepage with a title saying "Hello VuePress" and a search box provided by the default themeContent not supported which builds an index from all h2 and h3 markdownContent not supported headers and from the title and tags included in the frontmatterContent not supported of pages.

+

We'll be discussing the default themeContent not supported, markdownContent not supported, and frontmatterContent not supported in more detail in future tutorials.

+

To see your site be sure to start the local development server which should be running at http://localhost:8080/Content not supported.

+

The site is working, but it doesn't have a lot of functionality or customization. To add more functionality and customization like site navigation with a navbar, a site title, a site description, favicons, etc. we need to add a config file.

+

Before adding the config file, let's first create a .vuepress directory in the docs directory. The .vuepress directory will be used to store all VuePressContent not supported specific directories and files.

+

The directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Now inside of the .vuepress directory, let's add a config.js file.

+

After adding the config.js file, the directory structure for your site should now look something like this:

+

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The config.js file should export a JavaScript object like the following:

+ + +
module.exports = {}
+
+
1
+
+

If you run into any issues when adding the directory and file above, then be sure to check out the ConfigurationContent not supported documentaion.

+

Alternative Config Formats

+

In this series we'll be using a JS config file format, i.e., .vuepress/config.js. However, VuePressContent not supported also supports the following config file formats: YAML - .vuepress/config.yml, TOML - .vuepress/config.toml, and TS - .vuepress/config.ts. If you want to use TS, then you need to have a VuePressContent not supported version of 1.9.0+ installed. See the TypeScript as ConfigContent not supported documentation for more details.

+
+

Config File Properties

+

Now that we have added a config.js file, we can begin to add more functionality and customization to the site by setting some of the basic config file properties.

+

The properties we'll be setting will be using the <head>, <meta>, and <title> tags. To learn more about these tags check out the following references: HTML <head> TagContent not supported, HTML <meta> TagContent not supported, and HTML <title> TagContent not supported.

+

As we develop the site we'll be adding more config file properties as needed. For a full list of the available config file properties check out the Config ReferenceContent not supported.

+

Title

+

The title property is used to define the title for the site. The provided value is used to prefix all page titles, and it gets shown in the navbar when using the default themeContent not supported as a link to the homepage.

+

The expected type is a string, and the default value is undefined.

+

Now let's set the title of the site:

+ + +
module.exports = {
+  title: 'Code Monkeys',
+}
+
+
1
2
3
+
+

After adding the title and saving the file, you should see Code Monkeys or whatever value you set as your site's title in the top left of the navbar as a link to the homepage.

+

You can also inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <title>Hello VuePress | Code Monkeys</title>
+  ...
+</head>
+
+
1
2
3
4
5
+
+

The value of the <title> tag will be whatever you set as the value for the title of your site.

+

Removing Hello VuePress

+

When we update the homepage in the next tutorial, we'll remove the Hello VuePress | from the <title> tag.

+
+

Description

+

The description property is used to define the description for the site. The provided value is used in a <meta> tag in the <head> tag of the site.

+

The expected type is a string, and the default value is undefined.

+

Now let's set the description of the site:

+ + +
module.exports = {
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+}
+
+
1
2
3
4
+
+

After adding the description and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <meta name="description" content="Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵">
+  ...
+</head>
+
+
1
2
3
4
5
+
+

The value of the content attribute will be whatever you set as the value for the description of your site.

+ +

The head property is used to inject extra tags into the <head> tag of the site.

+

The expected type is an array, and the default value is [].

+

You can specify a tag to inject into the <head> tag by using the following form: [tagName, { attr1Name: attr1Value, attr2Name: attr2Value, ... }].

+

Here are some examples of what can be injected into the <head> tag:

+
    +
  • Author of the Site
  • +
  • Favicons
  • +
  • Social Media Metadata
  • +
  • Links to External Style Sheets
  • +
  • Client-Side Scripts
  • +
+

To start we'll set an author by using a <meta> tag in the <head> tag:

+ + +
module.exports = {
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
+
+

After adding the author and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

+ + +
<head>
+  ...
+  <meta name="author" content="J the Code Monkey">
+  ...
+</head>
+
+
1
2
3
4
5
+
+

To change the author for your site you can use a different value for the content attribute.

+

We'll be injecting more tags into the <head> tag as we develop the site.

+

Updated Config File

+

Here's the content of the config.js file after adding the title, description, and author:

+ + +
module.exports = {
+  title: 'Code Monkeys',
+  description:
+    'Learn to Code like a Monkey by joining the Code Monkeys Community! Check out the blog for posts and videos about coding! Start Monkeying Around Today! 🐵',
+  head: [
+    [
+      'meta',
+      {
+        name: 'author',
+        content: 'J the Code Monkey',
+      },
+    ],
+  ],
+}
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+

Be sure to substitute the values with the preferred values for your site.

+

Next Steps

+

In the next tutorial we'll discuss the homepage layout provided by the default themeContent not supported.

+]]>
+
+ + VuePress Tutorial 9 - Styling the Homepage + https://codemonkeys.tech/vuepress-tutorial-9/ + https://codemonkeys.tech/vuepress-tutorial-9/ + VuePress Tutorial 9 - Styling the Homepage + Hey fellow Code Monkeys!!! 🐵 Want to learn how to style the homepage for your VuePress site, then check out VuePress Tutorial 9 - Styling the Homepage! 🍌🐒 + Wed, 31 Aug 2022 01:45:30 GMT +

VuePress Tutorial 9 - Styling the Homepage

+

Styling Files

+

The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files which will allow us to add our own global styling to the blog.

+

To do this we're going to first discuss what the index.styl and palette.styl files are used for. Then we'll take a look at the predefined styling files provided by the default themeContent not supported, and we'll discuss the overriding priority of the files. Finally, we'll implement what we leaned about by styling the homepage of the blog.

+

Make sure you start the local development server which should be running at http://localhost:8080/Content not supported to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

+

palette.styl

+

The palette.styl file is used to define global styling variables and override the predefined styling variables which in our case are being provided by the default themeContent not supported.

+

Here are some of the predefined styling variables available to use and override in your site:

+ + +
// colors
+$accentColor = #3eaf7c
+$textColor = #2c3e50
+$borderColor = #eaecef
+$codeBgColor = #282c34
+$arrowBgColor = #ccc
+$badgeTipColor = #42b983
+$badgeWarningColor = darken(#ffe564, 35%)
+$badgeErrorColor = #DA5961
+
+// layout
+$navbarHeight = 3.6rem
+$sidebarWidth = 20rem
+$contentWidth = 740px
+$homePageWidth = 960px
+
+// responsive breakpoints
+$MQNarrow = 959px
+$MQMobile = 719px
+$MQMobileNarrow = 419px
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+
+

We'll be using and overriding some of these predefined styling variables as well as defining our own styling variables as we develop the blog.

+

Here's a link to the full palette.styl fileContent not supported if you're interested. You can also view the full file by navigating to node_modules/@vuepress/core/lib/client/style/config.styl in your project.

+

Only Define Variables in palette.styl

+

You should ONLY define variables in the palette.styl file because it will be imported at the end of the root Stylus config file. This means several files will use it, so once you define your styling variables here they will be duplicated multiple times

+
+

Creating the palette.styl File

+

Now that we have a good understanding of the palette.styl file, we're going to create the file by first creating a styles directory in the theme directory. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

After creating the styles directory, we can now create the palette.styl file inside of it like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

+

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your palette.styl file in the following location .vuepress/styles/palette.styl.

+
+

We'll be updating the palette.styl file later on in this post, but first we're going to take a look at the index.styl file.

+

index.styl

+

The index.styl file is used to add global styles as well as override predefined styles which in our case are being provided by the default themeContent not supported.

+

Even though it's a StylusContent not supported file, you can also use normal CSS syntax if you prefer.

+

We won't discuss the predefined index.styl file in detail right now. It's just meant to be a reference in case you want to look for a specific style you want to override, or if you're interested in learning more about the predefined styling.

+

Here's the predefined index.styl which you can override and add your own styles to:

+ + +
@require './config'
+@require './code'
+@require './custom-blocks'
+@require './arrow'
+@require './wrapper'
+@require './toc'
+
+html, body
+  padding 0
+  margin 0
+  background-color #fff
+
+body
+  font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif
+  -webkit-font-smoothing antialiased
+  -moz-osx-font-smoothing grayscale
+  font-size 16px
+  color $textColor
+
+.page
+  padding-left $sidebarWidth
+
+.navbar
+  position fixed
+  z-index 20
+  top 0
+  left 0
+  right 0
+  height $navbarHeight
+  background-color #fff
+  box-sizing border-box
+  border-bottom 1px solid $borderColor
+
+.sidebar-mask
+  position fixed
+  z-index 9
+  top 0
+  left 0
+  width 100vw
+  height 100vh
+  display none
+
+.sidebar
+  font-size 16px
+  background-color #fff
+  width $sidebarWidth
+  position fixed
+  z-index 10
+  margin 0
+  top $navbarHeight
+  left 0
+  bottom 0
+  box-sizing border-box
+  border-right 1px solid $borderColor
+  overflow-y auto
+
+{$contentClass}:not(.custom)
+  @extend $wrapper
+  > *:first-child
+    margin-top $navbarHeight
+
+  a:hover
+    text-decoration underline
+
+  p.demo
+    padding 1rem 1.5rem
+    border 1px solid #ddd
+    border-radius 4px
+
+  img
+    max-width 100%
+
+{$contentClass}.custom
+  padding 0
+  margin 0
+
+  img
+    max-width 100%
+
+a
+  font-weight 500
+  color $accentColor
+  text-decoration none
+
+p a code
+  font-weight 400
+  color $accentColor
+
+kbd
+  background #eee
+  border solid 0.15rem #ddd
+  border-bottom solid 0.25rem #ddd
+  border-radius 0.15rem
+  padding 0 0.15em
+
+blockquote
+  font-size 1rem
+  color #999;
+  border-left .2rem solid #dfe2e5
+  margin 1rem 0
+  padding .25rem 0 .25rem 1rem
+
+  & > p
+    margin 0
+
+ul, ol
+  padding-left 1.2em
+
+strong
+  font-weight 600
+
+h1, h2, h3, h4, h5, h6
+  font-weight 600
+  line-height 1.25
+
+  {$contentClass}:not(.custom) > &
+    margin-top (0.5rem - $navbarHeight)
+    padding-top ($navbarHeight + 1rem)
+    margin-bottom 0
+
+    &:first-child
+      margin-top -1.5rem
+      margin-bottom 1rem
+
+      + p, + pre, + .custom-block
+        margin-top 2rem
+
+  &:focus .header-anchor,
+  &:hover .header-anchor
+    opacity: 1
+
+h1
+  font-size 2.2rem
+
+h2
+  font-size 1.65rem
+  padding-bottom .3rem
+  border-bottom 1px solid $borderColor
+
+h3
+  font-size 1.35rem
+
+a.header-anchor
+  font-size 0.85em
+  float left
+  margin-left -0.87em
+  padding-right 0.23em
+  margin-top 0.125em
+  opacity 0
+
+  &:focus,
+  &:hover
+    text-decoration none
+
+code, kbd, .line-number
+  font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace
+
+p, ul, ol
+  line-height 1.7
+
+hr
+  border 0
+  border-top 1px solid $borderColor
+
+table
+  border-collapse collapse
+  margin 1rem 0
+  display: block
+  overflow-x: auto
+
+tr
+  border-top 1px solid #dfe2e5
+
+  &:nth-child(2n)
+    background-color #f6f8fa
+
+th, td
+  border 1px solid #dfe2e5
+  padding .6em 1em
+
+.theme-container
+  &.sidebar-open
+    .sidebar-mask
+      display: block
+
+  &.no-navbar
+    {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6
+      margin-top 1.5rem
+      padding-top 0
+
+    .sidebar
+      top 0
+
+@media (min-width: ($MQMobile + 1px))
+  .theme-container.no-sidebar
+    .sidebar
+      display none
+
+    .page
+      padding-left 0
+
+@require 'mobile.styl'
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
+
+

Here's a link to the index.styl fileContent not supported as well and the path to the file in your project node_modules/@vuepress/theme-default/styles/index.styl.

+

As we develop the blog we'll be using and overriding some of these predefined styles as well as defining our own styles.

+

Importing and Requiring Stylus and CSS Files

+

You may have noticed in the index.styl file that we're requiring other files, e.g., @require './config'. We'll discuss how to import and require .styl and .css files in a future post.

+
+

Creating the index.styl File

+

Now that we have a good understanding of the index.styl file, we're going to create the file for the blog inside of the styles directory that we previously created. The docs directory for your site should now look something like this:

+

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

+

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your index.styl file in the following location .vuepress/styles/index.styl.

+
+

We'll be updating the index.styl file we just created later on in this post, but first we're going to take a look at the overriding priority.

+

Overriding

+

Both the palette.styl and index.styl files follow a certain overriding priority.

+

palette.styl

+

The user's palette.styl file which is located in .vuepress/styles/palette.styl has a higher priority than the theme's palette.styl file which is located in theme/styles/palette.styl. The theme's palette.styl file has a higher priority than any predefined palette.styl file which is located in node_modules/@vuepress/core/lib/client/style/config.styl in the case of the default themeContent not supported.

+

This means a theme can define it's own global styling variables and a user can override them as they see fit.

+

Here's an example of a global styling variable defined in each type of palette.styl file to make this concept clearer:

+ + +
// node_modules/@vuepress/core/lib/client/style/config.styl
+$accentColor = #0099ff
+
+
1
2
+
+ + +
// theme/styles/palette.styl
+$accentColor = #cc99ff
+
+
1
2
+
+ + +
// .vuepress/styles/palette.styl
+$accentColor = #ccff33
+
+
1
2
+
+

Here, the final value for $accentColor will be #ccff33.

+

Absence of User palette.styl File

+

As we develop the blog we won't be using the user's palette.styl file located in .vuepress/styles/palette.styl We'll just be using the theme's palette.styl file located in theme/styles/palette.styl which will allow us to override any predefined variables.

+
+

index.styl

+

The same overriding priority applies to the index.styl file as well. So, a user's index.styl file which is located in .vuepress/styles/index.styl has a higher priority than the theme's index.styl file which is located in theme/styles/index.styl. The theme's index.styl file has a higher priority than any predefined index.styl file which is located in node_modules/@vuepress/theme-default/styles/index.styl in the case of the default themeContent not supported.

+

This means a theme can define it's own global styles and a user can override them as they see fit.

+

Both the user's index.styl file and the theme's index.styl file will get generated into the final CSS file used in the site, but the user's style gets generated later which is what gives it a higher priority than the theme's style.

+

Here's an example of a style defined in a user's index.styl and a style defined in a theme's index.styl file to make this concept clearer:

+ + +
// theme/styles/index.styl
+.example-style
+  font-size: 1rem
+
+
1
2
3
+
+ + +
// .vuepress/styles/index.styl
+.example-style
+  font-size: 1.25rem
+
+
1
2
3
+
+

Here's the final CSS file generated for the site:

+ + +
/* theme/styles/index.styl */
+.example-style {
+  font-size: 1rem;
+}
+
+/* .vuepress/styles/index.styl */
+.example-style {
+  font-size: 1.25rem;
+}
+
+
1
2
3
4
5
6
7
8
9
+
+

Notice how the user's style comes after the theme's style in the final CSS file. This is what gives the user's style a higher priority than the theme's style.

+

Absence of User index.styl File

+

As we develop the blog we won't be using the user's index.styl file located in .vuepress/styles/index.styl. Instead we'll just be using the theme's index.styl file located in theme/styles/index.styl which will allow us to override any predefined styles.

+
+

Now that we have a good understanding of how overriding works for both the palette.styl and index.styl files, we're now ready to override some predefined styling and add our own styling to the homepage of the blog.

+

Homepage Styles

+

To start the homepage styling we'll be overriding and adding global styling variables to the palette.styl file. These global styling variables will then be used in the index.styl file as well as other files as we continue the development of the blog.

+

When overriding and adding styles to your site you can look at the predefined styling files to determine what properties you need to override. Along with looking at the predefined styling files you can also inspect your browser, go to the Elements tab, and then locate a tag or class that you want to override.

+

Be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

+

If you're developing your own site, then you can check out these useful resources for coming up with color schemes and palettes for your site:

+ +

If you don't feel comfortable with the CSS discussed below, then here's a good resource to go through CSS TutorialContent not supported.

+

You can also view the palette.styl and index.styl files in the tutorial-9 branch of the code-monkeys-blog-tutorialsContent not supported repository.

+

Now let's override and add some global styling variables to the palette.styl file.

+

palette.styl

+

Here's what the palette.styl file looks like after overriding some predefined global styling variables and adding our own global styling variables:

+ + +
$backgroundColor = #1f2229
+
+$accentColor = #eb7132
+
+$textColor = #e6e6e6
+
+$borderColor = #754d34
+$darkBorderColor = #16181d
+
+
1
2
3
4
5
6
7
8
+
+
    +
  • $backgroundColor is used as the background color of the homepage as well as the whole blog.
  • +
  • $accentColor is used to color the action button on the homepage and to add styling to internal and external links.
  • +
  • $textColor is used to color the text on the homepage as well as the navbar text and other text throughout the blog.
  • +
  • $borderColor is used to style the border in the features section as well as the border in the navbar and other borders throughout the blog.
  • +
  • $darkBorderColor will be used to style the border and box shadow around the main card on the homepage.
  • +
+

Now let's take a look at overriding and adding some styles to the index.styl file.

+

index.styl

+

We're going to start by overriding the background-color in the html tag:

+ + +
html
+  background-color: $backgroundColor
+
+
1
2
+
+
    +
  • Updates the background-color of the content below the Footer component to be the color specified by the $backgroundColor global styling variable we just added in the palette.styl file.
  • +
+

Next we'll override the background-color in the body tag:

+ + +


 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+
1
2
3
4
+
+
    +
  • Updates the background-color of the body of the site to be the color specified by the $backgroundColor global styling variable.
  • +
+

Now we're going to update the padding around the main tag which we'll select using the home class:

+ + +




 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+
1
2
3
4
5
6
+
+
    +
  • Updates the padding of the main tag with a class of home to be zero on all sides.
  • +
+

We're now going to update the styles for the hero class which is given to the header tag inside of the main tag and contains the logo, the title, the description, and the action button.

+ + +






 
 
 
 
 
 
 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+
+
    +
  • margin-left: 2rem adds a margin of 2rem to the left of the header tag.
  • +
  • margin-right: 2rem adds a margin of 2rem to the right of the header tag.
  • +
  • border: 0.125rem solid $darkBorderColor adds a border around the header tag with a thickness of 0.125rem, with a style of solid, and has a color of $darkBorderColor which was defined in the palette.styl file.
  • +
  • box-shadow: 0 0.5rem 1rem 0 $darkBorderColor adds a box shadow around the header tag.
  • +
  • border-radius: 5.625rem adds a border radius to the header tag border.
  • +
  • margin-bottom: 0.625rem adds a margin of 0.625rem to the bottom of the header tag.
  • +
  • padding: 2rem adds padding of 2rem around the header tag.
  • +
+

Here's a resource for the CSS box-shadow PropertyContent not supported if you are interested in learning more about how it works.

+

Finally, we're going to update the styles for the features class which is given to the div tag inside of the main tag and contains the Learn, Code, and Crush text.

+ + +














 
 
 
 
 
 
 
 
 

html
+  background-color: $backgroundColor
+  body
+    background-color: $backgroundColor
+    .home
+      padding: 0
+      .hero
+        margin-left: 2rem
+        margin-right: 2rem
+        border: 0.125rem solid $darkBorderColor
+        box-shadow: 0 0.5rem 1rem 0 $darkBorderColor
+        border-radius: 5.625rem
+        margin-bottom: 0.625rem
+        padding: 2rem
+      .features
+        margin-left: 2rem
+        margin-right: 2rem
+        border-top: 0.125rem solid $borderColor
+        border-bottom: 0.125rem solid $borderColor
+        .feature
+          text-align: center
+          h2
+            font-size: 1.4rem
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+
+
    +
  • margin-left: 2rem adds a margin of 2rem to the left of the div tag.
  • +
  • margin-right: 2rem adds a margin of 2rem to the right of the div tag.
  • +
  • border-top: 0.125rem solid $borderColor adds a border to the top of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • +
  • border-bottom: 0.125rem solid $borderColor adds a border to the bottom of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • +
  • text-align: center horizontally aligns the text in each div tag with a class of feature that are inside of the div tag with a class of features.
  • +
  • font-size: 1.4rem sets a font size of 1.4rem for the h2 tags that are inside of the div tag with a class of feature.
  • +
+

Next Steps

+

You may have noticed the main card on the homepage is being covered by the navbar. In the next tutorial we'll be fixing this issue as well as applying some hover effects to the logo and to the box shadow around the main card on the homepage.

+]]>
+
+ + Contact + https://codemonkeys.tech/contact/ + https://codemonkeys.tech/contact/ + Contact + Want to contact your fellow Code Monkeys? Then check out these contact methods which include free and open source software with an emphasis on private and secure communication! 📞🐒 +

Contact Your Fellow Code
Monkeys !!! 📞 🐒

+ +]]>
+
+ + Donate + https://codemonkeys.tech/donate/ + https://codemonkeys.tech/donate/ + Donate + If you've found our content helpful and would like to support us, then you can donate here! All donations will go towards maintaining an adequate 🍌 supply! +

Thanks for the
Bananas!!! 🍌

+
+

Crypto 🔗

+

⚠️ Sending Crypto to the Wrong Address will Result in Loss of Funds! ⚠️

+

✅ Always double check the address & amount before sending! ✅

+

🤖 Instead of using the static Bitcoin address below, improve your privacy by using a PayNym!Content not supported 🤖

+Content not supported +Content not supported +
+
+

Fiat 💵

+

Subscribe for more monkey business on SubscribeStar!Content not supported

+

Become a Code Monkeys Sponsor!Content not supported

+

Sponsor J the Code Monkey on GitHub!Content not supported

+
+]]>
+
+ + Free and Open Source Software (FOSS) + https://codemonkeys.tech/resources/foss/ + https://codemonkeys.tech/resources/foss/ + Free and Open Source Software (FOSS) + Ready to learn about free and open source software (FOSS)? These resources will explain what FOSS is, why it's important, and provide you with some useful applications! 💻🐒 +

Free and Open Source Software (FOSS)
💻 🐒

+

Here you'll find a list of resources related to free and open source software (FOSS) presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

+
+

Education

+

Free Software vs Open Source vs FreewareContent not supported - Clarifies the differences between free software, open source, and freeware which are often confusingly used interchangeably

+

Luke SmithContent not supported - A LandChad that emphasizes the importance of using FOSS as well as self-hosting your own websites and applications

+

What is Free Software?Content not supported - Description of the philosophy and principles behind free software from the Free Software Foundation (FSF)

+
+]]>
+
+ + Resources + https://codemonkeys.tech/resources/ + https://codemonkeys.tech/resources/ + Resources + Ready to take your Code Monkey skills to the next level? Then check out these useful resources which include free and open source software recommendations! 💻🐒 +

Giving Credit to the Great
Apes!!! 🦍 🍌 🐒

+

Here you'll find a list of topics I'm interested in presented in alphabetical order. The goal of providing resources for these topics is to help people learn more about programming as well as to provide people with free and open source software that also respects their privacy.

+

Moving over to using only free and open source software that also respects users' privacy is a process, so don't feel like you have to switch everything at once. I'm still using proprietary software that doesn't respect users' privacy, and I may continue to do so if I feel the pros outweigh the cons. However, over time if possible I would prefer to phase out all of the proprietary software I'm using.

+

While I believe these links are to resources that will help you gain a better conceptual and practical understanding of the topics, I haven't personally used and verified all of these resources. Be sure to do your own research and always double check the links are bringing you to the correct sites, especially when dealing with a site related to privacy or finances. Don't trust, verify.

+

I'll be updating these resources from time to time, so if you have any suggestions on how to improve them let me know.

+
+
+

Bitcoin

+
+

"The root problem with conventional currency is all the trust that’s required to make it work. The central bank must be trusted not to debase the currency, but the history of fiat currencies is full of breaches of that trust." - Satoshi Nakamoto

+

Bitcoin is a decentralized digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer (P2P) technology to operate with no central authority: transaction management and money issuance are carried out collectively by the network.

+
+
+
+

Free and Open Source Software (FOSS)

+
+

“Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change, and improve the software.

+

"Open source software" also gives the users the ability to run, copy, distribute, study, change, and improve the software; however, it does not share the same goal of making sure the software that is being developed is actually attempting to improve users' freedom.

+
+
+
+

Notes and Other Stuff Transmitted by Relays (Nostr)

+
+

The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all.

+

It doesn't rely on any trusted central server, hence it is resilient; it is based on cryptographic keys and signatures, so it is tamperproof; it does not rely on peer-to-peer (P2P) techniques, and therefore it works.

+
+
+
+

Privacy

+
+

“Privacy is the power to selectively reveal oneself to the world." - Eric Hughes

+

To learn more about why privacy is important especially in our digital age, then be sure to check out these resources which include tools that you can use to increase and maintain your privacy.

+
+
+
+

Web Development

+
+

To learn about the process of building, programming, and maintaining websites and web applications using HTML, CSS, JavaScript, TypeScript, etc., then be sure to check out these resources.

+
+]]>
+
+ + Bitcoin + https://codemonkeys.tech/resources/bitcoin/ + https://codemonkeys.tech/resources/bitcoin/ + Bitcoin + Ready to go down the Bitcoin rabbit hole? These resources include free and open source software recommendations that allow you to interact with Bitcoin in a sovereign and private way! ₿🐒 +

Bitcoin
₿ 🐒

+

Here you'll find a list of resources related to Bitcoin presented in alphabetical order. While I believe these links are to resources that will help you gain a better conceptual and practical understanding of Bitcoin, I haven't personally used and verified all of them. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Blockchain Explorers

+

Blockstream ExplorerContent not supported - Open source blockchain explorer that supports Bitcoin mainnet, Bitcoin testnet, Liquid mainnet, and Liquid testnet that can be used with Tor to conceal your IP address

+

Mempool.spaceContent not supported - Open source self-hostable mempool explorer and blockchain explorer for Bitcoin that can be used with Tor to conceal your IP address

+

Other eXploration Tool (OXT)Content not supported - Blockchain explorer, visualization tool, and analysis platform for the Bitcoin ledger. Be sure to check out the FAQContent not supported page to see how they handle your personal information when using the site

+
+
+

Books

+

21 LessonsContent not supported - Distillation of the lessons learned after falling down the Bitcoin rabbit hole written by Gigi

+

Bitcoin: A Work in ProgressContent not supported - Focused on guiding the reader through the latest developments in Bitcoin through the eyes of Sjors Provoost one of the many Bitcoin core developers

+

Mastering BitcoinContent not supported - Focused on providing developers with a technical understanding of Bitcoin written by Andreas M. Antonopoulos

+

Mastering the Lightning NetworkContent not supported - Focused on providing developers with a technical understanding of the Lightning Network written by Andreas M. Antonopoulos, Olaoluwa Osuntokun, and Rene Pickhardt

+

Programming BitcoinContent not supported - Learn how to program a Bitcoin library with this hands-on guide that goes over the math, blocks, network, transactions, proof-of-work, and more written by Jimmy Song a Bitcoin core developer and educator

+

Thank God for BitcoinContent not supported - Explores the creation of money, its corruption, and its potential redemption by examining the effects Bitcoin is having on transitioning the world to a sound monetary standard

+

The Bitcoin StandardContent not supported - Analyzes the historical context of the rise of Bitcoin, the economic properties that have allowed it to grow quickly, and its likely economic, political, and social implications written by Saifedean Ammous

+

The Fiat StandardContent not supported - Provides an examination of twentieth century monetary technology and explains its benefits, drawbacks, and its many modes of failure written by Saifedean Ammous

+

The Little Bitcoin BookContent not supported - Focused on describing in simple terms what Bitcoin is, how it works, why it's valuable, and how it affects individual freedom and opportunities of people everywhere written by the Bitcoin Collective

+
+
+

Collaborative Custody

+

Unchained CapitalContent not supported - Trusted multisig storage solution where you are making the decision to trust Unchained Capital with your privacy but not with your funds in exchange for better security, redundancy, and support when storing your Bitcoin

+
+
+

Dashboard

+

Clark Moody's DashboardContent not supported - A single page view into the metrics of the Bitcoin ecosystem which includes market data, network data, mining data, and more

+
+
+

Education

+

6102bitcoinContent not supported - Pseudonymous bitcoin user and educator with the goal of accelerating bitcoin understanding

+

Bitcoiner.GuideContent not supported - A collection of resources from BitcoinQnA focused on providing Bitcoin education with an emphasis on how to use Bitcoin in a sovereign and private way

+

Bitcoin OnlyContent not supported - A collection of high quality Bitcoin resources including meetups, books, wallets, hardware, podcasts, and more

+

Bitcoin OptechContent not supported - Helping Bitcoin users and businesses integrate scaling technologies by providing workshops, documentation, weekly newsletters, original research, case studies and announcements, analysis of Bitcoin software and services, and a podcast

+

Bitcoin ResourcesContent not supported - Provides numerous Bitcoin related resources including videos, books, articles, podcasts, and more

+

Bitcoin Stack ExchangeContent not supported - Question and answer site for Bitcoin cryptocurrency enthusiasts

+

Bitcoin UniversityContent not supported - Educational content devoted to Bitcoin, financial freedom, self-sovereignty, and relevant macro and financial news

+

Bitcoin WikiContent not supported - Wiki dedicated to providing all of your Bitcoin information needs including how to get started, software, mining, exchanges, technical content, economics, and more

+

BTC SessionsContent not supported - Bitcoin educator focused on helping people gain an understanding of Bitcoin by providing tutorials on wallets, hardware, security, exchanges, and more

+

DiverterContent not supported - Focused on Bitcoin, privacy, and censorship-resistance by learning how to use the related tools

+

EconoalchemistContent not supported - Blog focused on bringing you articles about interacting with Bitcoin in a self-custodial, censorship-resistant, and private way

+

k3tanContent not supported - Focused on providing educational content on how to transition to a Bitcoin standard by showing people how to hold their own keys, use their own node, and more

+

Keep it SimpleContent not supported - Focused on teaching people how to interact with Bitcoin

+

OdellContent not supported - A Bitcoin entrepreneur attempting to stay humble and stack sats with a focus on using Bitcoin and free and open source software as sovereignly and privately as possible

+

We Run BTCContent not supported - Focused on providing guides and resources about Bitcoin with an emphasis on how to interact with Bitcoin in a sovereign and private way

+
+
+

Entertainment

+

Bitcoin YodaContent not supported - An entertaining YouTube channel that makes funny videos about Bitcoin like The Bitcoin HODL Dance, Money Printer Goes Brrr! (Central Bank's Favorite Song), Michael Saylor's Investment Advice, and more

+
+
+

Hardware Wallets

+

Coldcard Mk4Content not supported - Viewable, editable, and verifiable source code, Bitcoin-only, and has numerous security features including dual secure elements to store your private key, air-gapped, i.e., can be used without ever connecting it directly to a computer, duress PIN, comes in a tamper-evident numbered bag with the bag number recorded into the device, and more

+

SeedSignerContent not supported - Build your own air-gapped and stateless hardware wallet using publicly available hardware components. The benefits of creating your own hardware wallet are you're not relying on centralized companies, and you can buy the pieces privately from multiple vendors spaced out over time. Note that there are no secure elements used to store your private key and you're relying on closed source hardware since it uses a Raspberry Pi

+

Trezor Model TContent not supported - Open source hardware and software that has numerous security features including PIN and passphrase entry directly into the device, shamir backup, FIDO2 and U2F authentication standards, transaction anonymization using CoinJoin, and more. Note that there are no secure elements used to store your private key

+
+
+

Jobs

+

Bitcoiner JobsContent not supported - Leading career site with the goal of helping to build the emerging Bitcoin industry and the careers of Bitcoiners within it

+

PlebLabContent not supported - Bitcoin hackerspace and community accelerator based in Austin, Texas focused on supporting early stage Bitcoin start-ups and developers building the future of Bitcoin

+
+
+

Media

+

Bitcoin MagazineContent not supported - Source of news, information and expert commentary on Bitcoin, its underlying blockchain technology and the industry that has been built up around it

+

BitcoinTVContent not supported - A repository of educational video content for the Bitcoin community, without distractions like advertising, altcoins, or third-party trackers

+

No BS BitcoinContent not supported - A news desk for Bitcoiners by Bitcoiners without ads, paywalls, or clickbait includes Bitcoin related news, updates, research, guides, weekly digest, and more

+

TFTCContent not supported - A media company focused on Bitcoin, Beauty, and Freedom in the Digital Age

+
+
+

Meetups

+

Bitcoin ParkContent not supported - Community supported campus in Nashville, Tennessee focused on grassroots Bitcoin adoption and a home for Bitcoiners to work, learn, collaborate, and build

+

Bitcoiner EventsContent not supported - Curated list of all the best Bitcoin-only events, meetups, and conferences around the world

+

Bitcoin Meetup GroupsContent not supported - Find a local Bitcoin meetup group by searching for upcoming meetups near you. Remember to do your own research to avoid any sketchy meetups, and don't share any personal information that you don't want others to know

+
+
+

Nodes

+

myNodeContent not supported - Open source prebuilt Bitcoin and Lightning node that comes with many features including Tor support, Bitcoin Explorer, Electrum Server, multisig tools, an easy-to-use web interface, and more

+

NodlContent not supported - Open source prebuilt Bitcoin and Lightning full node that comes with many features including BTCPay Server, Tor support, Electrum Rust Server (Electrs), Ride the Lightning (RTL), BTC RPC Explorer, and more

+

RaspiBoltContent not supported - Set up your own Bitcoin and Lightning node from scratch doing everything yourself. You'll learn about Linux, Bitcoin, and Lightning

+

RoninDojoContent not supported - Open source high performance plug and play full node with an emphasis on maintaining strong privacy while interacting with Bitcoin

+

Start9Content not supported - They develop the open source Linux-based Operating System (OS) embassyOS which is built specifically for self-hosting open source software like a Bitcoin full node, a Lightning full node, Mempool.space, and more. You have the option of buying a prebuilt server or you can build your own server and install embassyOS on it

+

UmbrelContent not supported - Open source Operating System (OS) for running a personal server in your home that allows you to self-host numerous apps like Nextcloud, a Bitcoin full node, a Lightning node, and more

+
+
+

Payment Processors

+

BTCPay ServerContent not supported - Open source self-hostable cryptocurrency payment processor focused on providing secure, private, and censorship-resistant payments

+
+
+

Peer-to-Peer (P2P) Exchanges

+

Reviews

+

KYCNOT.MEContent not supported - Open source privacy focused website with the goal of providing a list of Non KYC exchanges and ranking them based on how well you can use them in an anonymous way. The website may not always be up to date, so be sure to do your own research. Don't trust, verify!

+

Exchanges

+

AgoraDeskContent not supported - Closed source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin, Monero, and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a semi-custodial wallet, no JavaScript needed to use the service, the service has an API available, and Android and iOS apps are available

+

BisqContent not supported - Open source peer-to-peer (P2P) exchange that you run on your own hardware over Tor, accepts Bitcoin, Monero, and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and no JavaScript needed to use the service

+

Hodl HodlContent not supported - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, requires an account that doesn't need to use any personally identifiable information, uses a non-custodial wallet, JavaScript is needed to use the service, the service has an API available, and refunds may require KYC

+

PeachContent not supported - Closed source peer-to-peer (P2P) exchange without Tor support, accepts Bitcoin and cash, doesn't allow you to swap coins, doesn't require an account, uses a non-custodial wallet, no JavaScript needed to use the service, Android and iOS apps are available, and refunds are handled without the need of a KYC procedure

+

RobosatsContent not supported - Open source peer-to-peer (P2P) exchange with Tor support, accepts Bitcoin lightning payments and cash, allows you to swap coins, doesn't require an account, uses a non-custodial wallet, and the service has an API available

+
+
+

Podcasts

+

Bitcoin ExplainedContent not supported - If you're interested in learning more about the technical side of Bitcoin, then you should check out this podcast with Bitcoin Magazine's Technical editor Aaron van Wirdum and Bitcoin core contributor Sjors Provoost

+

Bitcoin Fixes ThisContent not supported - An exploration of the impact Bitcoin has had and continues to have on multiple aspects of society hosted by Jimmy Song

+

Bitcoin FundamentalsContent not supported - Show focused on discussing Bitcoin fundamentals, investing, and news hosted by Preston Pysh

+

Bitcoin Review PodcastContent not supported - Technical updates and commentary on Bitcoin and related projects hosted by Rodolfo Novak (NVK)

+

Citadel DispatchContent not supported - An interactive live show about Bitcoin and freedom tech with an emphasis on actionable steps one can take to become more sovereign and private when using Bitcoin hosted by Matt Odell

+

Rabbit Hole RecapContent not supported - Recap of the weeks events in the world of Bitcoin hosted by Matt Odell and Marty Bent

+

The Bitcoin Standard PodcastContent not supported - Discusses Bitcoin, Austrian economics, and various news and events hosted by Saifedean Ammous

+

What Bitcoin DidContent not supported - A tri-weekly Bitcoin podcast where host Peter McCormack interviews experts in the world of Bitcoin development, privacy, investment and adoption

+
+
+

Products

+

CoinkiteContent not supported - Company focused on designing and manufacturing bitcoin security and fun devices like the Coldcard, Opendime, Tapsigner, Satscard, Blockclock, and more

+

Crypto CloaksContent not supported - Company focused on designing and manufacturing 3D printed Bitcoin related products like node shells, hardware wallet mounts, home mining devices, and more

+
+
+

Website

+

BitcoinContent not supported - Bitcoin core website that has introductory resources for individuals, businesses, and developers, resources, ways to participate, FAQs, and more

+
+
+

Seed Storage

+

Reviews

+

Metal Bitcoin Seed Storage ReviewsContent not supported - Stress tests and reviews of seed storage devices by Jameson Lopp the grades are based on how well the devices resist heat, corrosion, and being crushed

+

Storage Devices

+

BitplatesContent not supported - Multiple plate sizes available, uses stainless steel (Marine Grade 316L), plates are laser cut for precision and engraved to ensure permanent marking, suitable for use with BIP39 and SLIP39 compatible Bitcoin wallets, up to 24 seed words per plate, and received an overall grade of A from Jameson Lopp

+

BlockplateContent not supported - Inventor of center punch style seed storage, 12 word, 24 word, and passphrase plates available, uses thick 12 gauge stainless steel, plates are laser cut for precision and engraved to ensure permanent marking, received an overall grade of A from Jameson Lopp, and made in the USA

+

CodlContent not supported - Multiple plate sizes and types of plates available including passphrase plates, uses 304 stainless steel, received an overall grade of A from Jameson Lopp, made in the USA, and they make a really cool stainless steel copy of the Bitcoin white paper

+

Quadrat RegisterContent not supported - Multiple plate sizes and types of plates available, uses AISI 316 Ti stainless steel, received an overall grade of A from Jameson Lopp, made in Germany

+

SeedplateContent not supported - Single plate design, 12 words per side, etch marks chemically colored in black for better legibility, designed to be small, compatible with Seed XOR, received an overall grade of A from Jameson Lopp, and made by Coinkite in Canada

+
+
+

Software Wallets

+

Lightning and On-Chain

+

Blue WalletContent not supported - Open source wallet for Android and iOS that supports numerous features including multiple wallets, watch-only wallets, multisig vault, fee and transaction control, plausible deniability, batch transactions, coin control, PayJoin, ability to use your own Bitcoin and Lightning nodes, and more

+

ElectrumContent not supported - Open source wallet for Linux, macOS, Windows, and Android that supports numerous features including multiple wallets, watch-only wallets, multisig, fee and transaction control, passphrases, coin control, ability to use your own Bitcoin node, and more

+

Fully NodedContent not supported - Open source wallet for iOS and macOS that automatically prompts you to connect your own Bitcoin full node and acts as an offline signer using your node as a watch-only wallet

+

MuunContent not supported - Open source wallet for Android and iOS that uses a unique 2 of 2 multisig setup that stores only one private key on your phone and both of the private keys in an emergency kit which allows for a balance between hot and cold storage

+

Lightning Only

+

AlbyContent not supported - Open source browser extension that allows you to connect one or multiple Lightning wallets and control them in your browser, generate and manage multiple Nostr keys, and interact with numerous Bitcoin applications seamlessly. Note connecting your own Lightning node is an experimental feature, so the extension uses a custodial Lightning node which means you're trusting a third-party with your funds and privacy

+

BreezContent not supported - Open source Android and iOS full-service, non-custodial Lightning client that offers many features like cloud backups, connecting to multiple nodes including your own, built-in next-generation podcast player, and more

+

PhoenixContent not supported - Open source Android and iOS non-custodial Lightning wallet and node that offers many features and is powered by Eclair

+

RTLContent not supported - Open source full function, device agnostic, web user interface Lightning wallet and node management tool available on Lightning Network Daemon (LND), Core Lightning, and Eclair implementations

+

ZapContent not supported - Open source non-custodial Lightning wallet available for Android, iOS, Linux, macOS, and Windows that offers many features including connecting to your own Lightning node

+

ZeusContent not supported - Open source Android and iOS non-custodial Lightning wallet that offers many features including connecting to your own Lightning node

+

On-Chain Only

+

NunchukContent not supported - Open source wallet available for Android, iOS, Linux, macOS, and Windows with an emphasis on combining security and ease of use. It supports numerous features including multisig, collaborative custody, inheritance planning, Tapsigner integration, connecting to your own Bitcoin full node, and more

+

SparrowContent not supported - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to use all Hierarchical Deterministic (HD) wallets, strong encryption, detailed wallet history, coin control, connecting to your own Bitcoin full node, using your own blockchain explorer, and more

+

SpecterContent not supported - Open source wallet for Linux, macOS, and Windows that supports numerous features including the ability to connect your own Bitcoin full node, support for numerous hardware wallets, multisig, coin control, and more

+
+
+

Statistics

+

Know Your Coin Privacy (KYCP)Content not supported - Open source online tool for users to visualize the degree of privacy in a Bitcon transaction. Their zero log policy states KYCP is a static client for OXT, no backend or third-party service involved other than OXT, queries are directly sent to OXT over HTTPS, and there is no way to see or log your searches

+

Mempool ObserverContent not supported - Interesting statistics about the Bitcoin mempool including current data, historical data, recent blocks, Segregated Witness (SegWit) data, a transaction monitor, and more

+
+
+

Support

+

Bitcoin Dev ListContent not supported - Open source Bitcoin donation portal that lists people working on Bitcoin and related projects with the goal of increasing visibility of contributors to the space that are accepting donations

+

OpenSatsContent not supported - Focused on helping to support and maintain a sustainable ecosystem of funding for free and open source projects and contributors related to Bitcoin

+

Ten31Content not supported - Venture capital fund focused exclusively on investing in the Bitcoin ecosystem

+
+]]>
+
+ + Notes and Other Stuff Transmitted by Relays (Nostr) + https://codemonkeys.tech/resources/nostr/ + https://codemonkeys.tech/resources/nostr/ + Notes and Other Stuff Transmitted by Relays (Nostr) + Ready to learn about Notes and Other Stuff Transmitted by Relays (Nostr)? These resources will explain what Nostr is, why it's important, and provide you with some useful applications! 🗒️🐒 +

Notes and Other Stuff Transmitted by Relays (Nostr)
🗒️ 🐒

+

Here you'll find a list of resources related to Notes and Other Stuff Transmitted by Relays (Nostr) presented in alphabetical order. The way the Nostr protocol works along with the fact that it is still in early development means you may come across inappropriate material on some of the sites.

+

While I believe these links are to resources that are attempting to remove unrelated and inappropriate content and will help you gain a better conceptual and practical understanding of Nostr, I cannot guarantee that will always be the case. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Clients

+

AstralContent not supported - A Twitter-like client with a global feed

+

BlogstackContent not supported - Decentralized blog posts

+

DamusContent not supported - A Twitter-like client for iPhone, iPad, and MacOS

+

HamstrContent not supported - A Twitter-like web client built with Vue.js

+

NotebinContent not supported - Decentralized notes

+
+
+

Documentation

+

NostrContent not supported - Documentation about what Nostr is, why we need it, and how to use it

+
+
+

Protocol

+

NostrContent not supported - The simplest open protocol that is able to create a censorship-resistant global "social" network once and for all

+

NIPsContent not supported - Nostr Implementation Possibilities

+
+]]>
+
+ + Privacy + https://codemonkeys.tech/resources/privacy/ + https://codemonkeys.tech/resources/privacy/ + Privacy + Ready to learn how to counter global mass surveillance? These resources will explain what privacy is, why it's important, and provide you with some useful tools! 🔒🐒 +

Privacy
🔒 🐒

+

Here you'll find a list of resources related to privacy presented in alphabetical order. While I believe these links are to resources that will help you gain better privacy, I haven't personally used and verified all of them. Also, using these recommended resources doesn't guarantee that you'll achieve perfect privacy. Be sure to do your own research and always double check the links are bringing you to the correct sites. Don't trust, verify.

+
+

Android Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

BromiteContent not supported - Open source Chromium based mobile browser with privacy and security focused enhancements including built-in ad blocking

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is limited on Android

+

Firefox FocusContent not supported - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

+

TorContent not supported - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

+
+
+

App Stores

+

F-DroidContent not supported - App store that contains free and open source software (FOSS) applications for Android

+
+
+

Card Aliasing

+

MySudoContent not supported - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

+

PrivacyContent not supported - A proprietary credit/debit card aliasing solution when making online purchases

+
+
+

Cloud Storage

+

NextcloudContent not supported - Open source, self-hostable, and scalable suite for storing photos, documents, files, contacts, and more. It's similar in functionality to Dropbox, Office 365, and Google Drive

+
+
+

Desktop Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons. You can use Firefox ProfilemakerContent not supported to adjust the settings for your needs or use the Arkenfox user.jsContent not supported file instead of the default settings. It's also recommended to download the browser releases from the Mozilla FTPContent not supported to avoid telemetry tracking on your download

+

LibreWolfContent not supported - Open source Firefox based browser with a focus on improving privacy and security by handling the majority of Firefox hardening for you and does a good job of maintaining security updates

+

TorContent not supported - Open source browser that prioritizes privacy, anonymity, and censorship resistance and it comes pre-installed with all the privacy add-ons you should need, encryption, and an advanced proxy

+

UnGoogled ChromiumContent not supported - Open source Chromium based browser with a focus on removing the remaining Google privacy concerns from the open source Chromium browser. Be aware that security updated tend to be a bit slower

+
+
+

Electronic SIM (eSIM)

+

Silent LinkContent not supported - A proprietary anonymous electronic SIM (eSIM) that supports global mobile 4G/5G internet as well as inbound texting and calling for US and UK phone numbers that can be used with any modern eSIM compatible smartphone

+
+
+

Email

+

ProtonMailContent not supported - Open source email based in Switzerland with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), zero-access encryption, anti-phishing, anti-spam, two-factor authentication (2FA), and accessibility via Tor

+

TutanotaContent not supported - Open source email based in Germany with an emphasis on privacy and security by providing users with end-to-end encryption (E2EE), two-factor authentication (2FA), session handling, phishing protection, and more features

+
+
+

Email Aliasing

+

SimpleLoginContent not supported - Open source and self-hostable email aliasing solution built with privacy and security in mind

+
+
+

Encryption

+

GNU Privacy Guard (GnuPG)Content not supported - Open source, complete, and free implementation of the OpenPGP standard. Allows you to encrypt and sign your data and communications

+

VeraCryptContent not supported - Open source encryption software that allows you to create virtual encrypted disks within files and to encrypt entire partitions or storage devices

+
+
+

File Sharing

+

KeybaseContent not supported - Open source end-to-end encryption (E2EE) for messaging and file sharing

+

OnionShareContent not supported - Open source tool that lets you securely and anonymously share files, host websites, and chat using the Tor network

+

SyncthingContent not supported - Open source continuous file synchronization tool that encrypts all communication and allows users to sync files between authenticated devices

+
+
+

Guides

+

A Cypherpunk's ManifestoContent not supported - A summary of the importance of privacy in the digital age written by Eric Hughes

+

Prism BreakContent not supported - Website dedicated to providing information about privacy services, tools, and protocols

+

Privacy TestsContent not supported - Open source tests of web browser privacy

+

Privacy GuidesContent not supported - Website that provides information for protecting your data security and privacy, and their mission is to inform the public about the value of digital privacy and global government initiatives which aim to monitor your online activity

+

Privacy ToolsContent not supported - Website dedicated to providing privacy services, tools, and guides. A lot of the services and tools listed here were initially found through this website, so it's a great site to learn more about them as well as privacy in general

+

Seth for PrivacyContent not supported - An individual interested in educating and learning more about privacy and technology. Check out the Opt OutContent not supported podcast where he sits down with passionate people within the privacy community to discuss why privacy matters, the tools and techniques they've found and use, and to encourage others towards achieving personal privacy and data sovereignty

+

TechloreContent not supported - A team dedicated to spreading privacy and security to the masses by producing projects, communities, and content to help individuals achieve personal privacy. A lot of the services and tools listed here were initially found through their website and content, so it's a great site to learn more about them as well as privacy in general

+

The Hitchhiker’s Guide to Online AnonymityContent not supported - Open source and non-profit guide dedicated to providing an introduction to various online tracking techniques, online ID verification techniques, and detailed guidance to creating and maintaining anonymous online identities

+

The New OilContent not supported - Aimed at people who are new to privacy and/or do not consider themselves “tech savvy”, and goes over the basics of various ideas, subjects, and concepts to help you feel educated and capable of making decisions that are right for you without going too in depth to the point that you feel overwhelmed

+
+
+

iOS Web Browsers

+

BraveContent not supported - Open source Chromium based browser with good privacy and security defaults, and the cryptocurrency features within the browser can also be disabled if desired

+

FirefoxContent not supported - Open source browser that doesn't have the best privacy and security defaults, so it's recommended to harden the browser by adjusting the settings and installing additional browser add-ons which is significantly limited on iOS

+

Firefox FocusContent not supported - Open source privacy-focused mobile browser based on Firefox that comes with automatic tracking protection and ad blocking

+

Onion BrowserContent not supported - Open source unofficial Tor browser that prioritizes privacy, anonymity, and censorship resistance, but be aware that iOS limitations means it should not be considered as safe as Tor

+
+
+

Messengers

+

BriarContent not supported - Open source, Tor routed, peer-to-peer (P2P), end-to-end encrypted (E2EE) messaging. The messages are stored securely on your device not in the cloud, and it can be used without internet access by connecting directly with nearby contacts using bluetooth or WiFi

+

KeybaseContent not supported - Open source end-to-end encryption (E2EE) for messaging and file sharing

+

MatrixContent not supported - Open standard for interoperable, secure, decentralized, and real-time communication over IP with end-to-end encryption (E2EE) enabled by default for direct messaging and invite-only rooms. You have the option to self host your own server or to use a public server. One of the more popular clients to use when connecting to the Matrix protocol is ElementContent not supported

+

SessionContent not supported - Open source messenger that uses end-to-end encryption (E2EE), doesn't collect user data, accounts are completely anonymous, i.e., no phone number is required, messages can be sent through an onion routing network, and is more censorship resistant than other messengers

+

SignalContent not supported - Open source messenger that uses end-to-end encryption (E2EE) with a simple interface that requires a phone number to create an account

+

ThreemaContent not supported - Open source messenger that uses end-to-end encryption (E2EE) and can be used without disclosing your phone number or email. Payment is required to use the application which can be paid with Bitcoin

+
+
+

Mobile Phone

+

CalyxContent not supported - Open source Android mobile operating system that focuses on improving privacy and security

+

GrapheneOSContent not supported - Non-profit open source mobile operating system project with Android app compatibility that focuses on improving privacy and security

+

Librem 5Content not supported - Uses PureOS which is a Linux distribution with a focus on privacy and security and it incorporates open hardware specifications when possible

+

PinePhone ProContent not supported - Uses an open source Linux based mobile operating system that incorporates open hardware specifications when possible

+
+
+

Notes

+

Standard NotesContent not supported - Open source self-hostable note-taking application that uses end-to-end encryption (E2EE)

+
+
+

Operating Systems

+

ArchContent not supported - Independently developed open source GNU/Linux distribution that provides the latest stable versions of most software by following a rolling-release model. The default installation is a minimal base system configured by the user to only add what they require and offers the flexibility to harden the OS as the user sees fit

+

DebianContent not supported - Open source GNU/Linux distribution that offers users security, stability, and reliability

+

FedoraContent not supported - Open source GNU/Linux distribution that that focuses on providing users with strong privacy and security by default

+

Pop!_OSContent not supported - Open source GNU/Linux distribution developed and maintained by System76 with a focus on providing users with privacy, security, and reliability while maintaining ease of use

+

Qubes OSContent not supported - Open source security focused operating system for single user desktop computing that leverages Xen based virtualization to allow for the creation and management of isolated compartments called qubes which are implemented as virtual machines (VMs). Basically it allows you to separate operating systems and the installed programs on those operating systems into multiple and secure environments

+
+
+

Operating Systems (Live)

+

TailsContent not supported - Open source live operating system that routes all traffic through Tor for privacy and anonymity when online and deletes all of your data when you shutdown your computer

+

WhonixContent not supported - Open source live and virtual operating system that runs inside your current operating system. All traffic is routed through Tor for privacy and anonymity when online

+
+
+

Password Managers

+

BitwardenContent not supported - Open source, self-hostable, and cloud-based option password manager that uses zero knowledge end-to-end encryption (E2EE)

+

KeePassContent not supported - Open source password manager that uses industry standard encryption and stores all password databases locally on your device

+
+
+

Phone Number Aliasing

+

HushedContent not supported - A proprietary Voice over IP (VoIP) temporary and secondary US and Canadian phone number aliasing app for data calling and texting that can be used over WiFi

+

JMP.chatContent not supported - An open source XMPP based solution that turns your XMPP account into a fully functional US or Canadian phone number that can make and receive calls, texts, and picture messages to standard phone numbers

+

MySudoContent not supported - A proprietary Voice over IP (VoIP) US, Canadian, and UK phone number, handle, email, browser, and credit/debit card aliasing solution

+

TextverifiedContent not supported - A proprietary fully functional US phone number aliasing solution that you can use for phone and SMS verification

+

ViberContent not supported - A proprietary Voice over IP (VoIP) phone number aliasing solution that supports worldwide numbers

+
+
+

Prebuilt Computers

+

PurismContent not supported - Engineer and manufacture personal computing devices with a focus on privacy and security by producing devices that rely on open hardware and open firmware when possible and open source software

+

System76Content not supported - Engineer and manufacture premium Linux computers and keyboards that use open hardware and open firmware when possible and open source software with a focus on allowing users to freely upgrade and repair their computers, the freedom to use and alter the software on their computer, and to provide the ability for users to learn how their system works

+
+
+

Search Engines

+

Brave SearchContent not supported - Proprietary privacy-focused search engine that uses its own independent search index for search results

+

SearxContent not supported - Open source configurable and self-hostable metasearch engine which aggregates results from numerous search engines and can be used over Tor for online anonymity

+

StartpageContent not supported - Proprietary privacy-focused search engine that consists of privately proxied Google search results without the unwanted tracking, third-party cookies, and targeted ads

+
+
+

Two-Factor Authentication (2FA)

+

Software

+

AegisContent not supported - Open source time-based one-time passwords (TOTP) service for Android that gives you the ability to encrypt your tokens at rest as well as to export your tokens

+

TofuContent not supported - Open source counter-based and time-based one-time passwords (TOTP) service for iOS that requires no network or cellular connection and account details are stored in the iOS keychain

+

Hardware

+

YubicoContent not supported - Proprietary phishing-resistant multi-factor authentication (MFA)

+

SoloKeysContent not supported - First open source fast identity online 2 (FIDO2) security key

+

NitrokeyContent not supported - Open source device that enables secure login, email encryption, encrypted mobile storage, disk and file encryption, key and certificate management, and server administration using secure shell (SSH). The company also provides other devices including phones, personal computers, laptops, and more

+
+
+

VPNs

+

IVPNContent not supported - Open source, transparent, and secure VPN provider based in Gibraltar

+

MullvadContent not supported - Open source, transparent, and secure VPN provider based in Sweden

+

ProtonVPNContent not supported - Open source, transparent, and secure VPN provider based in Switzerland

+
+]]>
+
+ + Web Development + https://codemonkeys.tech/resources/webdev/ + https://codemonkeys.tech/resources/webdev/ + Web Development + Ready to learn about web development? These resources will explain what web development is, why it's important, and provide you with some useful tools for learning! 🕸️🐒 +

Web Development
🕸️ 🐒

+

Here you'll find a list of resources related to web development presented in alphabetical order that should help you gain a better conceptual and practical understanding of the topic.

+
+

Tutorials

+

Net NinjaContent not supported - Black belt your coding skills

+

Traversy MediaContent not supported - Practical project-based courses that are easy to understand and +straight to the point with no fluff

+
+]]>
+
+
+
\ No newline at end of file diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg new file mode 100644 index 00000000..c15e28e9 --- /dev/null +++ b/safari-pinned-tab.svg @@ -0,0 +1,261 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + + + diff --git a/single-number/index.html b/single-number/index.html new file mode 100644 index 00000000..386ccf6b --- /dev/null +++ b/single-number/index.html @@ -0,0 +1,144 @@ + + + + + + Single Number | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Single Number

By: J the Code Monkey
Posted: Jun 29, 2021 Updated: Jul 3, 2024

Single Number

Get the code & notes on

# Problem Description

Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single one.

You must implement a solution with a linear runtime complexity and use only constant extra space.

# Examples

Ex 1) Input: nums = [2, 2, 1] Output: 1 since 1 appears once.

Ex 2) Input: nums = [4, 1, 2, 1, 2] Output: 4 since 4 appears once.

Ex 3) Input: nums = [1] Output: 1 since 1 appears once.

# Constraints

  • Each element in the array appears twice except for one element which appears only once.

# What does Linear Runtime Mean?

  • A linear runtime means our solution must have a time complexity of O(n).

  • So, it's ok to use a loop in our solution but not a nested loop.

# What does Using Constant Extra Space Mean?

  • Our given space complexity is O(n) since we're given nums which is an array of length n.

  • Since we want to use constant extra space, our solution must have at most O(n) space complexity.

# Thought Process

  • We need to iterate over nums since we need to find out which element appears only once.

  • The iteration can be done using a for loop.

  • Now, to keep track of how many times an element has appeared in nums we can use a hash table.

  • A hash table is an object that maps keys to values.

  • Here, the key will represent the element in nums, and the value can be set to true if it has appeared once.

  • If the key appears again we can remove it since we know every element other than the unique element appears twice.

  • After removing the keys that appear twice, we just need to return the key of our hash table that appeared once.

  • Here's a visualization of creating our hash table which we'll denote as myObj for nums = [2, 2, 1]:

    • 1st Iteration:

    • So, we'll store the value of nums[0] as a key in our hash table with a value of true.

    • 2nd Iteration:

    • So, we'll remove the 2 key from our hash table since it has now appeared twice.

    • 3rd Iteration:

    • So, we'll store the value of nums[2] as a key in our hash table with a value of true.

    • Now, we have reached the end of the loop, so we'll return the value of the only key left in our hash table which in this case is 1.

# Implementation

var singleNumber = function(nums) {
+  const myObj = {};
+  for (let i = 0; i < nums.length; i++) {
+    if (myObj[nums[i]]) {
+      delete myObj[nums[i]];
+    } else {
+      myObj[nums[i]] = true;
+    }
+  }
+
+  return Object.keys(myObj)[0];
+};
+
+nums = [2, 2, 1];
+console.log(singleNumber(nums));
+
+

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 00000000..17af98aa --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,55 @@ +{ + "name": "Code Monkeys", + "short_name": "Code Monkeys", + "icons": [ + { + "src": "/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image/png" + }, + { + "src": "/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "/android-chrome-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": "/", + "theme_color": "#1f2229", + "background_color": "#1f2229", + "display": "browser" +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..6399ad57 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://codemonkeys.tech/climbing-stairs-solution-1/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/contains-duplicate/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/climbing-stairs-solution-2/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/reverse-string/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/remove-duplicates-from-sorted-array/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/single-number/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/valid-anagram/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/installing-fnm/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/installing-nvm/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/installing-yarn-1/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/raspberry-pi-configuring-settings/2023-04-27T18:35:58.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-1/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-10/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-11/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-12/2024-07-17T04:04:50.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-14/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-13/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-15/2024-07-17T04:04:50.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-16/2024-07-10T00:50:35.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-17/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-18/2023-04-19T17:45:03.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-19/2023-04-19T17:45:03.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-2/2023-04-19T17:45:03.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-20/2024-07-03T15:26:36.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-3/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-6/2024-07-10T00:50:35.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-4/2024-07-17T04:04:50.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-7/2023-04-19T18:07:16.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-8/2024-07-17T04:04:50.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-5/2024-07-10T00:50:35.000Zdailyhttps://codemonkeys.tech/vuepress-tutorial-9/2023-04-18T21:45:45.000Zdailyhttps://codemonkeys.tech/contact/2024-07-15T23:52:01.000Zdailyhttps://codemonkeys.tech/donate/2024-07-10T00:50:35.000Zdailyhttps://codemonkeys.tech/2023-04-19T19:40:26.000Zdailyhttps://codemonkeys.tech/resources/foss/2023-04-25T02:58:44.000Zdailyhttps://codemonkeys.tech/resources/2023-04-25T02:58:44.000Zdailyhttps://codemonkeys.tech/resources/bitcoin/2024-05-09T19:25:02.000Zdailyhttps://codemonkeys.tech/resources/nostr/2023-04-25T02:58:44.000Zdailyhttps://codemonkeys.tech/resources/privacy/2023-05-04T22:20:58.000Zdailyhttps://codemonkeys.tech/resources/webdev/2023-04-25T02:58:44.000Zdailyhttps://codemonkeys.tech/posts/dailyhttps://codemonkeys.tech/topics/dailyhttps://codemonkeys.tech/topics/LeetCode/dailyhttps://codemonkeys.tech/topics/Node.js/dailyhttps://codemonkeys.tech/topics/Raspberry-Pi/dailyhttps://codemonkeys.tech/topics/VuePress/dailyhttps://codemonkeys.tech/posts/page/2/dailyhttps://codemonkeys.tech/posts/page/3/dailyhttps://codemonkeys.tech/posts/page/4/dailyhttps://codemonkeys.tech/posts/page/5/dailyhttps://codemonkeys.tech/posts/page/6/dailyhttps://codemonkeys.tech/posts/page/7/dailyhttps://codemonkeys.tech/topics/LeetCode/page/2/dailyhttps://codemonkeys.tech/topics/VuePress/page/2/dailyhttps://codemonkeys.tech/topics/VuePress/page/3/dailyhttps://codemonkeys.tech/topics/VuePress/page/4/daily \ No newline at end of file diff --git a/topics/LeetCode/index.html b/topics/LeetCode/index.html new file mode 100644 index 00000000..befbb9f8 --- /dev/null +++ b/topics/LeetCode/index.html @@ -0,0 +1,153 @@ + + + + + + LeetCode | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Solutions for LeetCode Problems +
+ Enjoy!!! 🍌🐒 +

+ Reverse String +

By: J the Code Monkey
Posted: Aug 11, 2021 Updated: Jul 3, 2024

+ Write a function that reverses a string. The input string is given as an array of characters. Ex) 1 Input... +

LeetCode - Reverse String Post Picture

+ Contains Duplicate +

By: J the Code Monkey
Posted: Aug 6, 2021 Updated: Jul 3, 2024

+ Given an integer array nums, return true if any value appears at least twice, and return false if every... +

LeetCode - Contains Duplicate Post Picture

+ Remove Duplicates from Sorted Array +

By: J the Code Monkey
Posted: Jul 3, 2021 Updated: Jul 3, 2024

+ Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each... +

LeetCode - Remove Duplicates from Sorted Array Post Picture

+ Valid Anagram +

By: J the Code Monkey
Posted: Jul 2, 2021 Updated: Jul 3, 2024

+ Given two strings s and t, return true if t is an anagram of s, and false otherwise. Ex 1) Input... +

LeetCode - Valid Anagram Post Picture

+ Climbing Stairs Solution 2 +

By: J the Code Monkey
Posted: Jul 1, 2021 Updated: Jul 3, 2024

+ You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps... +

LeetCode - Climbing Stairs Solution 2 Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/LeetCode/page/2/index.html b/topics/LeetCode/page/2/index.html new file mode 100644 index 00000000..a331a5cc --- /dev/null +++ b/topics/LeetCode/page/2/index.html @@ -0,0 +1,141 @@ + + + + + + Page 2 - LeetCode | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Solutions for LeetCode Problems +
+ Enjoy!!! 🍌🐒 +

+ Climbing Stairs Solution 1 +

By: J the Code Monkey
Posted: Jun 30, 2021 Updated: Jul 3, 2024

+ You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps... +

LeetCode - Climbing Stairs Solution 1 Post Picture

+ Single Number +

By: J the Code Monkey
Posted: Jun 29, 2021 Updated: Jul 3, 2024

+ Given a non-empty array of integers nums, every element appears twice excepet for one. Find that single... +

LeetCode - Single Number Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/Node.js/index.html b/topics/Node.js/index.html new file mode 100644 index 00000000..5858f53c --- /dev/null +++ b/topics/Node.js/index.html @@ -0,0 +1,144 @@ + + + + + + Node.js | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Node.js Tutorials +
+ Enjoy!!! 🍌🐒 +

+ Installing Yarn 1 +

By: J the Code Monkey
Posted: Dec 28, 2021 Updated: Apr 18, 2023

+ Before discussing Yarn in more detail, let's first define what a package manager is and what it handles for us. A pacakage... +

Node.js - Installing Yarn 1 Post Picture

+ Installing Fast Node Manager (fnm) +

By: J the Code Monkey
Posted: Dec 8, 2021 Updated: Apr 18, 2023

+ Fast Node Manager (fnm) is a fast and simple Node version manager built in Rust. For those of you who haven't read... +

Node.js - Installing Fast Node Manager (fnm) Post Picture

+ Installing Node Version Manager (nvm) +

By: J the Code Monkey
Posted: Dec 7, 2021 Updated: Apr 18, 2023

+ A Node version manager allows you to easily install and switch between numerous versions of Node.js. This is useful... +

Node.js - Installing Node Version Manager (nvm) Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/Raspberry-Pi/index.html b/topics/Raspberry-Pi/index.html new file mode 100644 index 00000000..9abff286 --- /dev/null +++ b/topics/Raspberry-Pi/index.html @@ -0,0 +1,136 @@ + + + + + + Raspberry-Pi | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Raspberry Pi Tutorials +
+ Enjoy!!! 🍌🐒 +

+ Configuring Settings +

By: J the Code Monkey
Posted: Dec 20, 2022 Updated: Apr 27, 2023

+ In this tutorial we're going to learn how to configure various settings for a Raspberry Pi using standard Debian commands... +

Raspberry Pi - Configuring Settings Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/VuePress/index.html b/topics/VuePress/index.html new file mode 100644 index 00000000..a83f2a26 --- /dev/null +++ b/topics/VuePress/index.html @@ -0,0 +1,153 @@ + + + + + + VuePress | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ VuePress Tutorials +
+ Enjoy!!! 🍌🐒 +

+ VuePress Tutorial 20 - Pagination Links Styling +

By: J the Code Monkey
Posted: Nov 23, 2022 Updated: Jul 3, 2024

+ We're going to begin the process of styling the Prev and Next pagination links that we added to each of the... +

VuePress Tutorial 20 - Pagination Links Styling Post Picture

+ VuePress Tutorial 19 - Pagination Links +

By: J the Code Monkey
Posted: Nov 19, 2022 Updated: Apr 19, 2023

+ Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually... +

VuePress Tutorial 19 - Pagination Links Post Picture

+ VuePress Tutorial 18 - IndexPost Images +

By: J the Code Monkey
Posted: Nov 9, 2022 Updated: Apr 19, 2023

+ In this tutorial we're going to continue the development of the IndexPost layout component by using the globally... +

VuePress Tutorial 18 - IndexPost Images Post Picture

+ VuePress Tutorial 17 - IndexPost Layout +

By: J the Code Monkey
Posted: Oct 17, 2022 Updated: Apr 18, 2023

+ We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped... +

VuePress Tutorial 17 - IndexPost Layout Post Picture

+ VuePress Tutorial 16 - Pagination +

By: J the Code Monkey
Posted: Sep 30, 2022 Updated: Jul 10, 2024

+ Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blog... +

VuePress Tutorial 16 - Pagination Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/VuePress/page/2/index.html b/topics/VuePress/page/2/index.html new file mode 100644 index 00000000..455a5915 --- /dev/null +++ b/topics/VuePress/page/2/index.html @@ -0,0 +1,154 @@ + + + + + + Page 2 - VuePress | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ VuePress Tutorials +
+ Enjoy!!! 🍌🐒 +

+ VuePress Tutorial 15 - Blog Plugin +

By: J the Code Monkey
Posted: Sep 21, 2022 Updated: Jul 17, 2024

+ It's now time to install and begin the process of configuring @vuepress/plugin-blog. We're going to start by describing... +

VuePress Tutorial 15 - Blog Plugin Post Picture

+ VuePress Tutorial 14 - Dropdown Menu Styling +

By: J the Code Monkey
Posted: Sep 15, 2022 Updated: Apr 18, 2023

+ If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling... +

VuePress Tutorial 14 - Dropdown Menu Styling Post Picture

+ VuePress Tutorial 13 - Navbar Styling +

By: J the Code Monkey
Posted: Sep 11, 2022 Updated: Apr 18, 2023

+ Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling... +

VuePress Tutorial 13 - Navbar Styling Post Picture

+ VuePress Tutorial 12 - Highlight SVGs on Hover +

By: J the Code Monkey
Posted: Sep 8, 2022 Updated: Jul 17, 2024

+ We're now ready to add a highlight effect when hovering over the SVG icons. The method we'll be using doesn't require a lot of... +

VuePress Tutorial 12 - Highlight SVGs on Hover Post Picture

+ VuePress Tutorial 11 - Sticky Footer +

By: J the Code Monkey
Posted: Sep 5, 2022 Updated: Apr 18, 2023

+ We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into... +

VuePress Tutorial 11 - Sticky Footer Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/VuePress/page/3/index.html b/topics/VuePress/page/3/index.html new file mode 100644 index 00000000..ad88af8f --- /dev/null +++ b/topics/VuePress/page/3/index.html @@ -0,0 +1,154 @@ + + + + + + Page 3 - VuePress | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ VuePress Tutorials +
+ Enjoy!!! 🍌🐒 +

+ VuePress Tutorial 10 - Homepage Styling Part 2 +

By: J the Code Monkey
Posted: Sep 2, 2022 Updated: Apr 18, 2023

+ In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global... +

VuePress Tutorial 10 - Homepage Styling Part 2 Post Picture

+ VuePress Tutorial 9 - Styling the Homepage +

By: J the Code Monkey
Posted: Aug 31, 2022 Updated: Apr 18, 2023

+ The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files... +

VuePress Tutorial 9 - Styling the Homepage Post Picture

+ VuePress Tutorial 8 - Custom Footer +

By: J the Code Monkey
Posted: Apr 6, 2022 Updated: Jul 17, 2024

+ Now it's time to start building the custom footer component for the site. Before creating the footer component, we're... +

VuePress Tutorial 8 - Custom Footer Post Picture

+ VuePress Tutorial 7 - Navbar Logo and Links +

By: J the Code Monkey
Posted: Mar 12, 2022 Updated: Apr 19, 2023

+ In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default theme... +

VuePress Tutorial 7 - Navbar Logo and Links Post Picture

+ VuePress Tutorial 6 - Homepage Layout +

By: J the Code Monkey
Posted: Feb 3, 2022 Updated: Jul 10, 2024

+ In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default theme... +

VuePress Tutorial 6 - Homepage Layout Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/VuePress/page/4/index.html b/topics/VuePress/page/4/index.html new file mode 100644 index 00000000..8341b633 --- /dev/null +++ b/topics/VuePress/page/4/index.html @@ -0,0 +1,153 @@ + + + + + + Page 4 - VuePress | Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ VuePress Tutorials +
+ Enjoy!!! 🍌🐒 +

+ VuePress Tutorial 5 - Configuration Basics +

By: J the Code Monkey
Posted: Jan 26, 2022 Updated: Jul 10, 2024

+ Currently, the site consists of a homepage with a title saying "Hello VuePress", and a search box which builds an index from... +

VuePress Tutorial 5 - Configuration Basics Post Picture

+ VuePress Tutorial 4 - Directory Structure +

By: J the Code Monkey
Posted: Jan 22, 2022 Updated: Jul 17, 2024

+ We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the... +

VuePress Tutorial 4 - Directory Structure Post Picture

+ VuePress Tutorial 3 - Set Up and Installation +

By: J the Code Monkey
Posted: Jan 16, 2022 Updated: Apr 18, 2023

+ First we'll be going over how to create a repository on GitHub. If you plan on using these tutorials as guides and want to... +

VuePress Tutorial 3 - Set Up and Installation Post Picture

+ VuePress Tutorial 2 - Why Use VuePress? +

By: J the Code Monkey
Posted: Nov 24, 2021 Updated: Apr 19, 2023

+ VuePress is a minimalistic static site generator (SSG) with a Vue-powered theming system and Plugin API. Originally... +

VuePress Tutorial 2 - Why Use VuePress? Post Picture

+ VuePress Tutorial 1 - Introduction +

By: J the Code Monkey
Posted: Sep 24, 2021 Updated: Apr 18, 2023

+ Welcome to our VuePress series! In this series we'll be developing the Code Monkeys Blog starting from the basics... +

VuePress Tutorial 1 - Introduction Post Picture

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/topics/index.html b/topics/index.html new file mode 100644 index 00000000..bf5a82e6 --- /dev/null +++ b/topics/index.html @@ -0,0 +1,136 @@ + + + + + + Topics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

👋 Hey Start Monkeying Around!!!

LeetCode

(7)

+ You'll find detailed LeetCode solutions here including code, notes, links, diagrams, animations, & anything else that may be helpful! +

Node.js

(3)

+ Learn about Node.js concepts like installation, versioning, and more! +

Raspberry Pi

(1)

+ Learn about Raspberry Pi concepts like installing an OS, configuring settings, and more! +

VuePress

(20)

+ Learn VuePress concepts & how to develop the Code Monkeys Blog by following along with these tutorials! +

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/valid-anagram/index.html b/valid-anagram/index.html new file mode 100644 index 00000000..733aab76 --- /dev/null +++ b/valid-anagram/index.html @@ -0,0 +1,155 @@ + + + + + + Valid Anagram | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Valid Anagram

By: J the Code Monkey
Posted: Jul 2, 2021 Updated: Jul 3, 2024

Valid Anagram

Get the code & notes on

# Problem Description

Given two strings s and t, return true +if t is an anagram of s, and false otherwise.

# Examples

Ex 1) Input: s = "anagram", t = "nagaram" Output: true

Ex 2) Input: s = "rat", t = "car" Output: false

# Constraints

  • s and t consist of lowercase English letters

# What is an Anagram?

  • A word or a phrase that is formed by rearranging the letters of a different word or phrase typically using all of the original letters exactly once.

# Assumptions

  • To clarify the provided constraints we're also assuming s and t contain no spaces, and we're only able to use each letter once.

# How to Check if t is an Anagram of s?

  • Since we're assuming we can only use each letter in s and t once, then for t to be an anagram of s they must be the same length.

  • We can first check that s and t are the same length, and if they aren't we can return false.

  • Now, if s and t are the same length, they must also contain the same letters.

# How to Check if s and t contain the same letters?

  • We're given s and t as strings, but we care about being able to examine each character in the strings. So, what we can do is create an array of characters for s and t.

    • Ex 1) s = "anagram" sArray = ["a", "n", "a", "g", "r", "a", "m"]
      t = "nagaram" tArray = ["n", "a", "g", "a", "r", "a", "m"]

    • Ex 2) s = "rat" sArray = ["r", "a", "t"]
      t = "car" tArray = ["c", "a", "r"]

  • We can use the split() method, and pass it a pattern of "".

  • This tells split() to split our strings into substrings where a "" pattern occurs which is between each character in our strings.

  • split() will then return an array of these substrings.

  • Now, we need a way to compare the letters of sArray with the letters of tArray.

  • We could take the first value of sArray and compare it with each value of tArray. Then break when the letters are the same, and keep track of which index the match occurred at. This will allow us to not use the value at the matched index again on the next comparison.

  • A simplier solution though is to realize that we can sort our arrays, and if t is an anagram of s, then our arrays will have all the same letters in the same order.

    • Ex 1) sArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]
      tArray.sort() = ["a", "a", "a", "g", "m", "n", "r"]

    • Ex 2) sArray.sort() = ["a", "r", "t"]
      tArray.sort() = ["a", "c", "r"]

  • Then we can check if the letters in the arrays are equal by comparing each value at index i of sArray with each value at index i of tArray.

  • To do this we can loop over the length of one of the arrays, and if the values of our arrays at index i are not equal, then we can break the loop by returning false.

  • If the arrays are equal, then we'll loop over the entire length of our array and return true.

# Implementation

var isAnagram = function(s, t) {
+  if (s.length === t.length) {
+    let sArray = s.split('');
+    let tArray = t.split('');
+
+    sArray.sort();
+    tArray.sort();
+
+    for (let i = 0; i < s.length; i++) {
+      if (sArray[i] !== tArray[i]) {
+        return false;
+      }
+    }
+
+    return true;
+
+  } else {
+    return false;
+  }
+};
+
+let s = 'rat';
+let t = 'car';
+
+console.log(isAnagram(s, t));
+
+

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-1/index.html b/vuepress-tutorial-1/index.html new file mode 100644 index 00000000..04c56864 --- /dev/null +++ b/vuepress-tutorial-1/index.html @@ -0,0 +1,129 @@ + + + + + + VuePress Tutorial 1 - Introduction | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 1 - Introduction

By: J the Code Monkey
Posted: Sep 24, 2021 Updated: Apr 18, 2023

# What We'll be Developing

Welcome to our VuePress (opens new window) series!

In this series we'll be developing the Code Monkeys Blog starting from the basics.

So, have a look around if you haven't already.

Now grab a 🍌 and let's get to it!

# Why Create a Blog?

  • Benefits of creating a blog:

    • Learn how to Create a Website
    • Improve your Web Development Skills & Writing Ability
    • Document your Thoughts & Ideas
    • Help Others Learn & Meet New People
    • Build your Online Brand
    • Source of Independent Income
    • Show it to Employers

# What We'll be Covering

# Nice to Know

Since VuePress (opens new window) uses HTML, CSS, JavaScript, Vue (opens new window), and Markdown, it's good to have a solid grasp of them before starting.

However, in these posts and the accompanying videos I'll try to explain everything in sufficient detail, and anything that may need more explanation I'll provide links to helpful resources.

# How to Use these Tutorials

  • If you want to recreate the Code Monkeys Blog or create a very similar blog then you can simply follow these tutorials in order.

  • Each tutorial will give you some general information about a VuePress (opens new window) topic and provide helpful resources.

  • Then we'll apply what we've learned to the blog as an example.

  • This way you don't have to necessarily follow the tutorials in a linear order.

  • You'll be able to just learn a VuePress (opens new window) topic if you don't want to recreate the entire blog or create a very similar blog.

# Updates

Note that the Code Monkeys Blog is not a finished product.

This means new features will be added, and the current code will be optimized and refactored as needed.

So, when something gets updated a new post will be made discussing the changes and/or an old post may be updated.

Also, this blog is currently using VuePress v1 (opens new window).

VuePress v2 (opens new window) is still in beta at the time of this writing.

Once VuePress v2 (opens new window) is out of beta and the plugins being used are updated, the plan is to migrate over.

# Resources

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-10/index.html b/vuepress-tutorial-10/index.html new file mode 100644 index 00000000..b6b81193 --- /dev/null +++ b/vuepress-tutorial-10/index.html @@ -0,0 +1,129 @@ + + + + + + VuePress Tutorial 10 - Homepage Styling Part 2 | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 10 - Homepage Styling Part 2

By: J the Code Monkey
Posted: Sep 2, 2022 Updated: Apr 18, 2023

# Homepage Styling Recap

In the previous tutorial we began the process of styling the homepage. By the end of the tutorial we overrode the global styling variables for the $accentColor, $textColor, and $borderColor in the palette.styl file. The colors of these variables then get applied instead of the colors originally set by the default theme (opens new window). These variables can also be used to style other elements of the blog as well.

We also added our own global styling variables to the palette.styl file which included the $backgroundColor and the $darkBorderColor. These variables were then used in the index.styl file.

In the index.styl file we used some of the global styling variables along with overriding and adding our own global styling to style the background-color of the blog, the main tag with a class of home, the header tag with a class of hero, and the div tag with a class of features.

After overriding and adding these styles to the blog, the main card on the homepage was being covered by the navbar, so in this tutorial we'll be fixing this issue. Then we'll be adding some hover effects to the main card logo and to the box shadow around the main card. Finally, we'll be adding a radial gradient background to the main card.

# Homepage Styling Updates

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-10 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Fixing the Main Card Placement

We'll start by fixing the issue of the main card being covered by the navbar. To fix this issue we just need to update the padding in the home class:

  • padding: 8rem 0 0 adds a padding of 8rem to the top and a padding of 0 to the left, right, and bottom of the main card. This pushes the main card down, so it is no longer being covered by the navbar.

Why not Start with this Padding?

In the previous tutorial we used padding: 0 to style the home class since that code was based off of a more complicated way of styling the Footer component which has now been simplified. We'll be going over this simplified Footer component styling in the next tutorial.

Now that we've fixed the placement of the main card, let's add the hover effects to the main card logo and to the box shadow around the main card.

# Adding Hover Effects

To implement the hover effects we'll be adding a CSS pseudo-class of hover to the header tag with a class of hero which we'll use along with the transition property to smoothly apply the hover effects to the main card logo and to the box shadow around the main card.

First, let's add the hover pseudo-class:

  • .hero:hover applies the hover pseudo-class to the .hero selector which will apply the styles defined inside of it when the user hovers their pointer over the header tag with a class of hero.
  • box-shadow: 0.125rem 0.5rem 1rem 0.125rem #0b0c0f changes the box shadow style defined in the hero class.
  • transform: scale(1.1) applies the scale() method to the transform property to increase the size of the img tag to be 1.1 times the original width and height.

If you have questions about the CSS discussed above, then check out these resources:

When you hover your pointer over the main card, you should see the logo increase in width and height and the box shadow around the main card should now be more prevalent.

The hover effects are working, but they aren't that smooth. To make them smoother we're going to use the transition property.

The transition property allows you to change CSS property values smoothly over a specified duration. To create a transition you need to specify two values:

  • The CSS property you want to add the transition to
  • The duration of the transition

Here's what the index.styl file looks like after adding our transition properties:

  • transition: box-shadow 0.2s adds the transition effect to the box-shadow property with a specified duration of 0.2s.
  • transition: transform 0.2s adds the transition effect to the transform property used by the img tag with a specified duration of 0.2s.

When you hover your pointer over the main card, the hover effects should look much smoother.

If you want to learn more about the transition property, then check out CSS Transitions (opens new window).

Now that we have added our hover effects, let's add the radial gradient background to the main card.

# Adding Gradient Background

CSS gradients allow you to display smooth transitions between two or more specified colors. +You can control numerous aspects of the transitions between the colors including the direction, shape, number of colors, etc.

We'll be adding a circular radial gradient background to the center of the header tag with a class of hero:

  • background-image: radial-gradient(circle at center center, #2c303a, $backgroundColor) adds a radial gradient with a circular shape to the center of the element starting with a color of #2c303a which transitions to the $backgroundColor variable that is defined in the palette.styl file.

If you want to learn more about CSS gradients, then check out these resources:

You can also check out Gradient Magic (opens new window) which is a gallery of CSS gradients that you can freely use in your own projects.

The background of the main card should now be a radial gradient that starts at the center of the card with a color of #2c303a that circularly transitions to the $backgroundColor.

# Next Steps

In the next tutorial we'll add styling to make the Footer component stick to the bottom of the page, and we'll add a highlight effect to the SVG icons.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-11/index.html b/vuepress-tutorial-11/index.html new file mode 100644 index 00000000..9bc75524 --- /dev/null +++ b/vuepress-tutorial-11/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 11 - Sticky Footer | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 11 - Sticky Footer

By: J the Code Monkey
Posted: Sep 5, 2022 Updated: Apr 18, 2023

# What We're Doing

We're going to continue styling the blog by making the Footer component we created in VuePress Tutorial 8 - Custom Footer into a sticky footer. We were going to be adding a highlight effect when hovering over the SVG (opens new window) icons in this tutorial as well, but the process is a little more involved than I remembered. So, we're going to be adding the highlight effect when hovering in the next tutorial.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

You can view all of the code in this tutorial by going to the tutorial-11 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Now let's get started by discussing what a sticky footer is.

A sticky footer adheres or sticks to the bottom of the browser window assuming there isn't enough content on the page to push the footer lower like on this blog post for example. If the content on the page is short like on the homepage, then the footer will still stick to the bottom of the page instead of appearing directly below the content above it.

There are multiple ways to add a sticky footer to your site, but we're only going to discuss how to use the CSS calc() function. If you're interested in learning about the other ways of adding a sticky footer, then check out Sticky Footer, Five Ways (opens new window).

Here's what the index.styl file looks like after adding the sticky footer styling:

Here we added min-height: calc(100vh - 10.3125rem) to a div tag with a class of theme-container.

If you inspect the browser and go to the Elements tab, you can see where the div tag with a class of theme-container is in the HTML of the blog.

The div tag with a class of theme-container contains all of the content of the blog except for the footer tag.

So, here we're using min-height: calc(100vh - 10.3125rem) to set the minimum height of the content inside of the div tag with a class of theme-container to be 100vh minus 10.3125rem which is the height of the Footer component including the top and bottom padding.

The unit of vh is relative to 1% of the height of the viewport which is the browser window size, so 100vh is 100% of the height of the viewport.

So, when we subtract 10.3125rem from 100vh, we're subtracting the height of the Footer component from 100% of the viewport height.

This means the minimum height of the content inside of the div tag with a class of theme-container will be the entire homepage height minus the height of the Footer component.

After setting this style, notice how the Footer component is now pushed to the bottom of the page. This is how we get the Footer component to stick to the bottom of the page.

Also, since we added this style to the index.styl file, this style will be applied globally to the blog which is fine since the Footer component will be used on every page in the blog.

Using a Fixed Footer Size

We're using a fixed size for the height of the Footer component which means if we change the height later on we'll have to update this value. In a future tutorial we'll be changing the height, so we'll have to update this value. If you prefer to not update this value whenever you update the height of the Footer component, then it may be worth looking into implementing the flexbox or grid methods for adding a sticky footer which you can find in the Sticky Footer, Five Ways (opens new window) post.

If you have questions about the CSS discussed above, then check out these resources:

# Next Steps

As mentioned in the beginning of this post, in the next tutorial we're going to be adding a highlight effect when hovering over the SVG (opens new window) icons.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-12/index.html b/vuepress-tutorial-12/index.html new file mode 100644 index 00000000..739ad13b --- /dev/null +++ b/vuepress-tutorial-12/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 12 - Highlight SVGs on Hover | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 12 - Highlight SVGs on Hover

By: J the Code Monkey
Posted: Sep 8, 2022 Updated: Jul 17, 2024

# What We're Doing

We're now ready to add a highlight effect when hovering over the SVG (opens new window) icons. The method we'll be using doesn't require a lot of styling, but it does require us to edit the fill attribute of the SVG (opens new window) icons.

We'll demonstrate how to edit the fill attribute by manually editing the files as well as using a Command-line Interface (CLI) command provided by vuepress-plugin-svg-icons (opens new window) which will automate the process and optimize the files.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-12 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Now let's begin by manually editing one of the icon files.

# Manual Editing

When we downloaded the icons from iconfont (opens new window) we downloaded them with a fill attribute which will override the color we set for the hover effect.

To fix this issue we can manually remove the fill attribute from each icon file.

# Icon Example

We'll use the GitHub.svg file as an example:

After removing fill="e6e6e6", the file will look like this:

SVG File Formatting

The files above have been formatted to make them easier to read for this post, but the contents in your file may all be on one line. If this is the case, just scroll until you find the fill attribute or search for fill in the file to be able to easily find and remove it.

# Icon Styles

Now that we have removed the fill attribute from the file, we can add the styling to highlight the icon when hovering over it.

Here's what the Footer.vue file looks like after adding the hover effect:

  • svg:hover applies the hover pseudo-class to the svg selector which will apply the styles defined inside of it when the user hovers their pointer over the svg tag.
  • fill: $accentColor changes the fill of the svg tag to be the accent color.

Notice the icon fill is now set to be the accent color even if you're not hovering over the icon.

This is because we haven't set a fill attribute value for when the user isn't hovering over the icon, so it falls back to the value set in svg:hover.

To fix this issue we'll add the following styling to the Footer.vue file:

  • svg is the selector used to target the icon.
  • fill: $textColor sets the fill of the svg to be the text color when the user isn't hovering over the icon.

The fill should now be the same as the text color when you're not hovering over the icon, and it should get set to be the accent color when you hover over the icon.

To set the hover effect for the other icons, you will need to remove the fill attribute from the other icon files.

If you have questions about the CSS discussed above, then check out these resources:

You can also check out this CSS-Tricks post (opens new window) if you're interested in learning about other ways to change the fill on hover.

Instead of manually editing each file, we can use the CLI command provided by vuepress-plugin-svg-icons (opens new window) to automate the process.

# Automated Editing

The CLI command provided by vuepress-plugin-svg-icons (opens new window) optimizes SVG (opens new window) files by removing a lot of redundant and useless information including the fill attribute. The plugin does this by integrating SVGO (opens new window) which stands for Scalable Vector Graphic Optimizer and is a Node.js (opens new window) based tool for optimizing SVG (opens new window) files.

# CLI Command

Here's the CLI command you need to run vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

You can add the CLI command to the scripts object in the package.json file:

Then you can run the script using:

After running the script, the SVG (opens new window) files will be optimized which includes removing the fill attribute from the files.

The hover effect should now be applied to each icon assuming you added the styling from the section above.

If you have any questions or want to learn more about the plugin, then check out the guide (opens new window).

You can also check out SVGO (opens new window) if you want to learn more about the optimization tool including CLI usage, configuration, API usage, etc.

# Optimized Icon Example

Here's the contents of the optimized GitHub.svg file:

SVG File Formatting

Just like the previous examples the file is formatted to make it easier to read for this post, but the contents in your file may all be on one line.

If you compare the optimized file with the original file above, you'll notice a lot of unnecessary information was removed including the fill attribute without affecting the rendering of the icons.

# Next Steps

In the next tutorial we'll be styling the navbar by updating the background color, height, border, etc.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-13/index.html b/vuepress-tutorial-13/index.html new file mode 100644 index 00000000..91b42ebf --- /dev/null +++ b/vuepress-tutorial-13/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 13 - Navbar Styling | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 13 - Navbar Styling

By: J the Code Monkey
Posted: Sep 11, 2022 Updated: Apr 18, 2023

# What We're Doing

Currently, the navbar is not looking too good, so in this tutorial we're going to begin fixing that by adding some styling. We're going to be targeting these CSS classes provided by the default theme (opens new window): navbar, site-name, links, search-box, nav-links, nav-item, and dropdown-title.

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-13 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Alright, now we're ready to begin styling the navbar.

# HTML Location

We're going to start by locating where the navbar class is in the HTML:

From the HTML above we can see that the navbar class is attached to a header tag and is a child of the div tag with a class of theme-container.

# Styling

This means in the index.styl file we can nest the navbar class inside of the theme-container class and apply the following styles:

  • display: flex defines a flex container for all of the direct children of the header tag with a class of navbar.
  • align-items: center vertically centers the flex items, i.e., the direct children of the header tag with a class of navbar.
  • height: 4.5rem sets the height of the navbar to be 4.5rem.
  • background-color: $backgroundColor sets the background color of the navbar to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • border-bottom-width: 0.125rem sets the border bottom width of the navbar to be 0.125rem.

# Site Name Class

After locating and styling the navbar class, we're ready to move on to the site-name class.

# HTML Location

Here's the location of the site-name class in the HTML:

From the HTML above we can see that the site-name class is attached to a span tag and is a child of the a tag with a class of home-link which is a child of the header tag with a class of navbar.

# Styling

This means in the index.styl file we can nest the site-name class inside of the navbar class and apply the following style:

  • font-size: 1.5rem sets the font size of the site name in the navbar, i.e., Code Monkeys to be 1.5rem.

We're now ready to style the links class.

# HTML Location

Here's the location of the links class in the HTML:

From the HTML above we can see that the links class is attached to a div tag and is a child of the header tag with a class of navbar.

# Styling

This means in the index.styl file we can nest the links class inside of the navbar class and apply the following styles:

  • background-color: transparent sets the background color behind the search box and of the links on the right side of the navbar to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the links class.
  • height: 3rem sets the height of the div tag which contains the search box and the links on the right side of the navbar to be 3rem.
  • align-items: center vertically centers the flex items, i.e., the direct children of the div tag with a class of links which was given a style of display: flex by the default theme (opens new window).

# Search Box Class

We've finished styling the links class, so let's begin the styling of the search-box class.

# HTML Location

Here's the location of the search-box class in the HTML:

From the HTML above we can see that the search-box class is attached to a div tag and is a child of the div tag with a class of links.

# Styling

This means in the index.styl file we can nest the search-box class inside of the links class and apply the following styles:

  • margin-right: 1.5rem adds a margin of 1.5rem to the right of the search box.
  • font-size: 1.125rem sets the font size of the text in the input tag to be 1.125rem.
  • background-color: transparent sets the background color of the input tag to be transparent. This has the effect of showing the background color set in the navbar class since it's no longer being covered by the background color set in the input tag.
  • border-width: 0.125rem sets the width of the border around the input tag to be 0.125rem.
  • color: $textColor sets the color of the text in the input tag to be $textColor which is a global styling variable we set in the palette.styl file.

Viewing the font-size and color Styles

To see the font-size and color styles in action try typing some text in the search box. Once you click in the search box, notice the border gets its color set to the $accentColor which is a global styling variable we set in the palette.styl file. This effect is provided by the default theme (opens new window) and uses the focus pseudo-class.

Now that we have styled the search-box class and its child input tag, we're ready to move on to the styling of the nav-links class.

# HTML Location

Here's the location of the nav-links class in the HTML:

From the HTML above we can see that the nav-links class is attached to a nav tag and is a child of the div tag with a class of links.

# Styling

This means in the index.styl file we can nest the nav-links class inside of the links class and apply the following style:

  • font-size: 1.25rem sets the font size of the nav links on the right side of the navbar to be 1.25rem.

We're now ready to style the nav-item class.

# HTML Location

Here's the location of the nav-item class in the HTML:

From the HTML above we can see that there are four nav-item classes. Each one is attached to a div tag and is a child of the nav tag with a class of nav-links.

# Styling

This means in the index.styl file we can nest the nav-item class inside of the nav-links class and apply the following styles:

  • .nav-item:first-child applies the first-child pseudo-class to the .nav-item selector. The first-child pseudo-class applies the styles defined inside of it to the first element among a group of sibling elements which in our case is the first div tag with a class of nav-item in the group of sibling div tags that have the class of nav-item.
  • margin-left: 0 adds a margin of 0 to the left of the first div tag with a class of nav-item within the group of sibling div tags that have a class of nav-item.
  • margin-left: 1.75rem adds a margin of 1.75rem to the left of all of the div tags that have a class of nav-item except for the first one since that is being styled by the first-child pseudo-class.

After finishing the styling for the nav-item class, we're now ready to move on to the styling of the dropdown-title class.

# HTML Location

Here's the location of the dropdown-title class in the HTML:

From the HTML above we can see that the dropdown-title class is attached to a button tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

# Styling

This means in the index.styl file we can nest the dropdown-title class inside of the nav-item class and apply the following style:

  • font-size: 1.25rem sets the font size of the dropdown title, i.e., Posts to be 1.25rem.

If you have questions about the CSS discussed above, then check out these resources:

# Next Steps

In the next tutorial we'll be styling the dropdown menu in the navbar by updating the background color, border, padding, etc.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-14/index.html b/vuepress-tutorial-14/index.html new file mode 100644 index 00000000..0711bd3d --- /dev/null +++ b/vuepress-tutorial-14/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 14 - Dropdown Menu Styling | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 14 - Dropdown Menu Styling

By: J the Code Monkey
Posted: Sep 15, 2022 Updated: Apr 18, 2023

# What We're Doing

If you hover over Posts in the navbar, the dropdown menu will appear. You'll notice the dropdown menu needs some styling to make it match the rest of the blog. To implement the styling we'll be targeting these CSS classes nav-dropdown and dropdown-item which are provided by the default theme (opens new window).

To locate these classes we're going to take a look at the HTML of the blog by inspecting the browser, going to the Elements tab, and then selecting an element on the page. After locating the classes, we'll be applying the styling to the index.styl file which will globally apply the styles. Finally, we'll be describing the styling in detail.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-14 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Force Dropdown Menu to Hover

Before we start styling the dropdown menu, we're going to force an element state of hover on the div tag with a class of dropdown-wrapper. This will ensure we can see the changes we're making to the dropdown menu even when we move the cursor away from the dropdown-wrapper class.

To do this we need to select the dropdown-wrapper class in the Elements tab.

Here's the location of the dropdown-wrapper class in the HTML:

After selecting the dropdown-wrapper class in the Elements tab, we need to go to the Styles tab, click on the :hov tab, then force the element state of hover by checking the :hover checkbox.

The dropdown menu should now be shown even when the cursor is moved away from the dropdown-wrapper class.

We're now ready to begin styling the dropdown menu.

# HTML Location

We're going to begin the styling by locating where the nav-dropdown class is in the HTML:

From the HTML above we can see that the nav-dropdown class is attached to a ul tag and is a child of the div tag with a class of dropdown-wrapper which is a child tag of the div tag with a class of nav-item.

# Styling

This means in the index.styl file we can nest the nav-dropdown class inside of the nav-item class and apply the following styles:

  • text-align: center horizontally aligns the text in the dropdown menu.
  • background-color: $backgroundColor sets the background color of the dropdown menu to be $backgroundColor which is a global styling variable we set in the palette.styl file.
  • border: 0.125rem solid $borderColor adds a border around the dropdown menu with a thickness of 0.125rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • padding: 0.8rem 0 adds a padding of 0.8rem to the top and bottom and 0 to the left and right of the dropdown menu.

We're now ready to style the dropdown-item class.

# HTML Location

Here's the location of the dropdown-item class in the HTML:

From the HTML above we can see that there are two dropdown-item classes. Each one is attached to an li tag and is a child of the ul tag with a class of nav-dropdown.

Also, notice the h4 tag which is a child of the li tag with a class of dropdown-item. We'll be styling this h4 tag as well.

# Styling

In the index.styl file we can nest the dropdown-item class inside of the nav-dropdown class as well as nest the h4 tag inside of the dropdown-item class and apply the following styles:

  • padding-bottom: 0.4rem adds a padding of 0.4rem to the bottom of each of the dropdown items.
  • border-top: 0.0625rem solid $borderColor adds a border to the top of the h4 tag, i.e., the By Topics text with a thickness of 0.0625rem, a style of solid, and a color of $borderColor which was defined in the palette.styl file.
  • cursor: text sets the cursor when pointing over the h4 tag, i.e., the By Topics text to be the text cursor which indicates the text can be selected and is typically in the shape of an I-beam.
  • margin: 0.45rem 0.375rem 0 adds a margin of 0.45rem to the top, 0.375rem to the left and right, and 0 to the bottom of the h4 tag, i.e., the By Topics text.

If you have questions about the CSS discussed above, then check out these resources:

# Next Steps

In the next tutorial we'll be installing and beginning the process of configuring the @vuepress/plugin-blog (opens new window).

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-15/index.html b/vuepress-tutorial-15/index.html new file mode 100644 index 00000000..3b7c04e1 --- /dev/null +++ b/vuepress-tutorial-15/index.html @@ -0,0 +1,148 @@ + + + + + + VuePress Tutorial 15 - Blog Plugin | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 15 - Blog Plugin

By: J the Code Monkey
Posted: Sep 21, 2022 Updated: Jul 17, 2024

# What We're Doing

It's now time to install and begin the process of configuring @vuepress/plugin-blog (opens new window). We're going to start by describing the main features provided by the plugin. Then we'll go over the installation and usage. After going over the installation and usage, we'll describe the concepts and implementation of document classification, permalinks, and directory classification.

If you're interested you can check out the blog plugin code here (opens new window). You can also check out the @vuepress/theme-blog (opens new window) if you're interested in learning more about it. We won't be discussing the blog theme in detail since we're using the default theme (opens new window).

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

You can view all of the code in this tutorial by going to the tutorial-15 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Features

The blog plugin provides the following main features:

We'll be discussing pagination and the Client API in more detail in future tutorials.

# Installation

We're now ready to discuss the installation of the plugin.

# Using the Tutorials Repo

If you're following along with the tutorials, then when you switch to the tutorial-15 branch you can run the following command to install the package instead of running the installation command:

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

# Using the Installation Command

To install the blog plugin in your own project you can run the following command:

Installing the Same Blog Plugin Version

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @vuepress/plugin-blog@1.9.4.

# Updated package.json File

After installing the plugin, the package.json file should look something like this:

# Automatically Installed Plugins

When installing the blog plugin you may have noticed the following plugins also get installed:

These plugins provide features that are common to blogs, so they're included in the installation of the blog plugin. Including these plugins in the installation of the blog plugin saves you the time of searching for plugins that provide these common features as well as from having to separately install each plugin.

The plugins will only be used though if you enable them in the config.js file.

They can also be installed as standalone plugins, so you don't need to use the blog plugin to use them for your site.

We'll be discussing these plugins in more detail in future tutorials.

# Usage

To use the blog plugin we need to add the following to the config.js file which should now look something like this:

# Document Classification

The blog plugin provides a document classifier which is a set of functions that handles the classifications of pages with the same characteristics.

These characteristics for pages in a blog may consist of:

  • Pages in the same directory, e.g., a _posts directory.
  • Pages containing the same frontmatter key, e.g., tag: js which signifies those pages contain content related to js, i.e., JavaScript.

Another common requirement is the ability to group all pages as well as pages with specific tags for pagination.

Before discussing directory classification, we're going to first define what a permalink is as well as discuss how they're built and configured. This will give us a better understanding of how the blog plugin uses permalinks to build customizable links for blog posts which is preferable to using the default way of creating links.

A permalink is a URL that is intended to remain unchanged for a long time. This leads to links that are less susceptible to link rot (opens new window) which is when a link ceases to point to its originally targeted web page due to the page being relocated to a new address or becoming permanently unavailable.

VuePress v1 (opens new window) provided support for creating customizable links by introducing the ability to build permalinks.

# Template Variables

We're able to build permalinks by using the following template variables:

Variable Description
:year Published year of post (4-digit)
:month Published month of post (2-digit)
:i_month Published month of post (without leading zeros)
:day Published day of post (2-digit)
:i_day Published day of post (without leading zeros)
:slug Slugified file path (without extension)
:regular Permalink generated by VuePress by default.

# Default Configuration

The default configuration for permalinks is /:regular.

The :regular template variable will first check if the Markdown files in the documents directory which in our case is the docs directory are index files, i.e., README.md or index.md.

  • If they're index files, they get converted to URLs without extensions that are based on the file hierarchy.
  • If they're not index files, they get converted to URLs with html extensions that are based on the file hierarchy.

Let's look at some examples to make this clearer where the file paths are relative to the documents directory which again in our case is the docs directory:

Relative Path Page Routing
/README.md /
/foo/README.md /foo/
/foo.md /foo.html
/foo/bar.md /foo/bar.html

Using Vue Files

Files with a vue extension follow the same conventions described for Markdown files above, e.g., /README.vue gets converted to /.

You can take a look at fileToPath.ts (opens new window) to see the code that handles converting files to paths.

# Global Configuration

To globally change the default configuration for permalinks for your site you can add the permalink property to the config.js file.

We can build a permalink to use in the config.js file by using the template variables.

For example we can use the template variables to build the following permalink: /:year/:month/:day/:slug.

We can then set this as the value for the permalink property in the config.js file:

Using the Default Configuration

We'll be leaving the permalink property with the default value of /:regular, and we'll use the configuration provided by the blog plugin to customize the permalinks for each blog post.

# Local Configuration

It's also possible to set a permalink locally for a single page which overrides any globally set configuration.

This is done be setting the permalink property in the frontmatter of the Markdown file:

This will set the permalink property to be /using-a-local-permalink instead of following the global configuration.

Now that we have an understanding of document classification and permalinks, let's move onto the directory classifier which handles classifying pages placed in the same directory.

# Directory Classification

First we need to create a directory that will contain all of the pages we want to classify. To do this we'll create a _posts directory inside of the docs directory. The docs directory for your site should now look something like this:

. +├── docs +│ ├── .vuepress +│ ├── _posts +│ ├── icons +│ └── README.md

+

Next, we'll create the following example pages in the _posts directory:

  • 2020-07-03-example-page-1.md
  • 2021-11-16-example-page-2.md
  • 2022-05-08-example-page-3.md

The _posts directory for your site should now look like this:

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ └── 2022-05-08-example-page-3.md

+

By default VuePress (opens new window) will create the following page URLs since it uses the /:regular template variable described above when building the links:

  • /_posts/2020-07-03-example-page-1.html
  • /_posts/2021-11-16-example-page-2.html
  • /_posts/2022-05-08-example-page-3.html

You should now be able to navigate to these pages in the browser:

The default behavior is fine for creating the main pages on the site, but having the ability to build customizable links for blog posts is preferable.

After using the configuration provided by the blog plugin to build customized permalinks, the page URLs will look like this:

  • /2020/07/03/example-page-1/
  • /2021/11/16/example-page-2/
  • /2022/05/08/example-page-3/

To build these customizable links we're going to start setting up the directory classifier configuration in the config.js file.

# directories

First, we'll add the directories property which is used to create the directory classifier.

The expected type is a DirectoryClassifier[], and the default value is [].

Here's the updated config.js file:

# id

Next, we'll add the id property which sets a unique id for the current classifier. We'll use a value of posts.

The expected type is a string, and the default value is undefined.

Here's the updated config.js file:

# dirname

Now, we'll add the dirname property which is used to identify the directory we want to classify. This is the _posts directory we created earlier.

The expected type is a string, and the default value is undefined.

Here's the updated config.js file:

After setting the dirname property, the page URLs get set to the customized permalinks mentioned above:

The customized permalinks are actually built using properties we haven't discussed yet. The blog plugin sets default values that don't need to be explicitly set in the config.js file. We'll be discussing these other properties and their default values below.

The previously provided links still work because they get converted to the customized permalinks when navigating to those pages.

Unknown Custom Element

When navigating to the links if you inspect the browser then go to the Console, you'll see the following error: Unknown custom element: <Post>.

This error is occurring because the plugin is looking for a Post layout component in the layouts directory which we haven't created yet.

Before creating a Post layout component to fix this error, we're going to first add the path property.

# path

The path property specifies the entry page, also known as the list page for the current classifier. This page will be used to display your posts as a paginated list.

The expected type is a string, and the default value is /${id}/ where ${id} is the value of the id property we previously set.

This means you don't need to explicitly set the path property if you're going to be using the same value as the id property. We'll be using a value of /posts/ for the path property, so we don't need to explicitly set the property. However, we're going to explicitly set the property because it allows us to have a quick reference to the property and its value.

Here's the updated config.js file:

You can navigate to the entry page by using the following link:

Notice this link has the value of the path property in it, i.e., /posts/. This is the same link we set in the navbar dropdown menu for All Posts, so you can click on that link to navigate to the entry page which will eventually be a paginated list of all of the posts.

Currently, when navigating to that link the Layout component provided by the default theme (opens new window) is displayed. The blog plugin will fallback to using the Layout component if it's unable to find an IndexPost layout component in the layouts directory.

This means we can create an IndexPost layout component that specifically handles the layout of the paginated list of all of the posts instead of using the Layout component.

# Creating the IndexPost Layout

To create the IndexPost layout component we're going to add an IndexPost.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

. +├── layouts +│ ├── GlobalLayout.vue +│ └── IndexPost.vue

+

We're going to begin the development of the IndexPost layout component by adding template, script, and style tags:

We'll continue developing the IndexPost layout component in a future tutorial.

# layout

We're now ready to add the layout property which is used to specify which layout to use for the entry page.

The expected type is a string, and the default value is 'IndexPost' || 'Layout'.

From the default value we can see why the entry page originally defaulted to using the Layout component before we created the IndexPost layout component. Since the blog plugin looks for the IndexPost layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

It's also possible to use a custom value for the layout property, e.g., you could use a value of MyIndexPost which you would have to explicitly set in the config.js file. Then you would have to create a MyIndexPost.vue file inside of the layouts directory.

Here's the updated config.js file:

We're now going to fix the Unknown Custom Element error we got after adding the dirname property. To fix this error we need to create the previously mentioned Post layout component.

# Creating the Post Layout

The Post layout component is used to handle the layout for individual post pages.

To create the Post layout component we're going to add a Post.vue file inside of the layouts directory. The layouts directory for your site should now look something like this:

. +├── layouts +│ ├── GlobalLayout.vue +│ ├── IndexPost.vue +│ └── Post.vue

+

We're going to begin the development of the Post layout component by adding template, script, and style tags:

We'll continue developing the Post layout component in a future tutorial.

# itemLayout

We're now ready to add the itemLayout property which is used to specify which layout to use for individual post pages.

The expected type is a string, and the default value is 'Post'.

From the default value we can see why the blog plugin looks for a Post layout component. Since the blog plugin looks for the Post layout component by default, we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

It's also possible to use a custom value for the itemLayout property, e.g., you could use a value of MyPost which you would have to explicitly set in the config.js file. Then you would have to create a MyPost.vue file inside of the layouts directory.

Here's the updated config.js file:

We're now ready to add the itemPermalink property which is used to build customized permalinks for each blog post.

The expected type is a string, and the default value is '/:year/:month/:day/:slug'.

From the default value we can see how the blog plugin built the customized permalinks after only setting the dirname property. Since the blog plugin uses the value we currently want, we don't need to explicitly set the property. However, just like the other properties we're going to explicitly set it because this gives us a quick reference to the property and its value.

Here's the updated config.js file:

# Summary of URLs and Layouts

Here's a table that summarizes the relationship between the page URLs the blog plugin builds using customized permalinks and the layout components.

URLs Layouts
/posts/ IndexPost (falls back to Layout)
/2020/07/03/example-page-1/ Post
/2021/11/16/example-page-2/ Post
/2022/05/08/example-page-3/ Post

# Next Steps

In the next tutorial we'll be discussing the configuration for the pagination property as well as how to access the pagination data in the layout components by using the Client API.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-16/index.html b/vuepress-tutorial-16/index.html new file mode 100644 index 00000000..3643c7d0 --- /dev/null +++ b/vuepress-tutorial-16/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 16 - Pagination | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 16 - Pagination

By: J the Code Monkey
Posted: Sep 30, 2022 Updated: Jul 10, 2024

# What We're Doing

Now it's time to learn more about the pagination feature and the Client API provided by @vuepress/plugin-blog (opens new window). In this tutorial we're going to begin the configuration of the pagination property as well as discuss the globally scoped $pagination variable provided by the Client API.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

You can view all of the code in this tutorial by going to the tutorial-16 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Pagination Configuration

As mentioned in the previous tutorial pagination allows you to break up the display of your posts into multiple pages. This provides easier navigation and a better user experience.

If you have any questions or want to learn more about the pagination configuration, then check out the pagination property (opens new window) and Pagination Config (opens new window) documentation.

# pagination

We're going to begin the configuration by adding the pagination property which allows you to customize the pagination of your posts.

The expected type is a Pagination object.

Here's the updated config.js file:

# lengthPerPage

Next, we'll add the lengthPerPage property which sets the maximum number of posts to display per page.

The expected type is a number, and the default value is 10.

When the number of posts is greater than the lengthPerPage value, the blog plugin will generate the necessary pages to display all of the posts.

The blog plugin does this by adding page/n/ onto the end of the entry page where n represents the number of the page.

So, the second page in the paginated list of pages would be page/2/.

If you remember from the previous tutorial VuePress Tutorial 15 - Blog Plugin, the entry page is set by the path property which was given a value of /posts/.

This means in our case the blog plugin will generate pages with the following format: /posts/page/n/ where n once again represents the number of the page.

We also created the following posts in the _posts directory in the previous tutorial:

  • 2020-07-03-example-page-1.md
  • 2021-11-16-example-page-2.md
  • 2022-05-08-example-page-3.md

Since we only have three posts and the default value for lengthPerPage is 10, the blog plugin won't generate any more pages. You can test this by attempting to navigate to the following page:

To demonstrate the generation of pages we can set the lengthPerPage to have a value of 2.

Here's the updated config.js file:

You should now be able to navigate to the following page:

Updating lengthPerPage

In a future tutorial we'll be updating the value of lengthPerPage to be 5 which is the current value being used in the blog.

# layout

Now we're going to add the layout property which is used to specify which layout component to use for the pagination pages except for the entry page. The entry page uses the IndexPost layout component which we set in the previous tutorial.

The expected type is a string, and the default value is 'DirectoryPagination' || 'Layout'.

Since we haven't created a DirectoryPagination layout component in the layouts directory, the layout property uses the other default value which is the Layout component. In our case the Layout component is provided by the default theme (opens new window).

To see the difference between the layout of the entry page and the layout of the second page you can navigate to the following pages:

If you want your pagination pages except for the entry page to use a layout specifically designed for them, then you can create a DirectoryPagination.vue file inside of the layouts directory. Since DirectoryPagination is the default value for the layout property you won't need to explicitly set it in the config.js file.

We'll be using the same layout for the entry page and for the other pagination pages, so we're going to provide a custom value of IndexPost to the layout property.

Here's the updated config.js file:

When navigating to the following page you should now see the IndexPost layout component being used instead of the Layout component:

Here's a table that summarizes the relationship between the pagination and post page URLs the blog plugin builds and the layout components:

URLs Layouts
/posts/ IndexPost (falls back to Layout)
/posts/page/2/ IndexPost (falls back to DirectoryPagination or Layout)
/2020/07/03/example-page-1/ Post
/2021/11/16/example-page-2/ Post
/2022/05/08/example-page-3/ Post

Post Pages Reminder

The post pages were given the URLs above by building customized permalinks using the format specified by the itemPermalink property, and the layout components used by the post pages were set by the itemLayout property. Both of these properties can be found in the config.js file, and you can refer to the previous tutorial VuePress Tutorial 15 - Blog Plugin if you have any questions about the post pages.

# prevText

Now we'll add the prevText property which is used to specify the text for the previous links. The previous links are used to navigate to the previous page in the list of pagination pages.

The expected type is a string, and the default value is 'Prev'.

We'll be using the default value of 'Prev' for the prevText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this gives us a quick reference to the property and its value.

It's also possible to use a custom value for the prevText property, e.g., you could use a value of Older which you would have to explicitly set in the config.js file.

Here's the updated config.js file:

# nextText

We're now ready to add the nextText property which is used to specify the text for the next links. The next links are used to navigate to the next page in the list of pagination pages.

The expected type is a string, and the default value is 'Next'.

We'll be using the default value of 'Next' for the nextText property, so we don't need to explicitly set the property. However, we're going to explicitly set it because this once again gives us a quick reference to the property and its value.

It's also possible to use a custom value for the nextText property, e.g., you could use a value of Newer which you would have to explicitly set in the config.js file.

Here's the updated config.js file:

# Client API

We're now going to take a look at how to use the Client API to access the pagination data in the layout components used by the blog plugin.

The Client API uses globally scoped variables which means you can access these variables from any component as well as in Markdown files when using Vue. You can check out the Using Vue in Markdown (opens new window) documentation if you're interested.

The Client API provides the following globally scoped variables: $pagination, $frontmatterKey, and $service. We'll be focusing on the $pagination variable in this tutorial.

If you have any questions or want to learn more about the Client API, then check out the Client API (opens new window) documentation.

# $pagination

We're going to discuss each property the $pagination variable exposes as well as demonstrate how to access the properties in the layout components.

To get a better understanding of the pagination data we're going to log each property to the console. The logging will be added to the created lifecycle hook in the script tag. To view the data in the console we're going to inspect the browser then go to the Console tab.

If you have questions about the created lifecycle hook, then check out this resources:

null $paginaton

If you access the $pagination variable at a route which doesn't match any classification, i.e., the route isn't a pagination page, then the value of $pagination will be null.

This means when developing layout components you should check if $pagination has a value of null before using the variable.

# pages

The $pagination.pages property is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

Since the $pagination.pages property contains data related to post pages that are accessible on the current pagination page, the data of $pagination.pages will be different depending on which pagination page is being viewed.

To see the differences between the data, we're going to look at the entry page and the second page which in our case is also the last page.

Here are the links to both the entry page and the second page:

Let's add the code to log the $pagination.pages property in the layout component which in our case is being used by both the entry page and the second page, i.e., the IndexPost.vue file:

Using Different Layout Components

If you're using different layout components for your entry page and the other pagination pages, then you'll need to add the logging of the $pagination.pages property to both of the files.

After adding the above code to the IndexPost.vue file and navigating to the entry page, the console should log an array of page objects with the following data:

Since the lengthPerPage property was given a value of 2 and we have three post pages, the $pagination.pages property for the entry page contains two page objects one for each post.

Formatting Differences

The log in the Console tab will be formatted differently than the $pagination.pages data shown here which was formatted using JSON (opens new window). The properties and values will be the same though.

After navigating to the second page, the console should log an array consisting of one page object with the following data:

Now let's describe what each property in the $pagination.pages data represents:

  • frontmatter: Contains the data present in the frontmatter (opens new window) of the post pages.
  • layout: Layout component used by the post pages which is set using the itemLayout property in the config.js file.
  • permalink: Permalink format used for the post pages which is set using the itemPermalink property in the config.js file.
  • id: Unique id for the current classifier which is set using the id property in the config.js file.
  • key: Unique key generated for each page in the site.
  • path: Path for the post page which uses a customized permalink built from the format specified by the itemPermalink property found in the config.js file.
  • pid: Represents the pid for the current classifier which is set using the id property in the config.js file.
  • regularPath: Default path for the post page which is built using the :regular template variable.
  • relativePath: Location of the post page Markdown file relative to the documents directory which in our case is the docs directory.

The $page Variable

The page objects in the $pagination.pages property are the same page objects found by logging the globally scoped $page variable in the Post layout component. After writing the code to log the $page variable, you can view the log by navigating to a post page, e.g., http://localhost:8080/2020/07/03/example-page-1/ (opens new window).

To learn more about the $page variable and other globally scoped variables you can take a look at the Global Computed (opens new window) documentation.

# length

The $pagination.length property is a number whose value is determined by the number of pagination pages.

Let's add the code to log the $pagination.length property in the IndexPost.vue file:

If we navigate to either the entry page or the second page, the console should log a value of 2 since in our case there are a total of two pagination pages.

# hasPrev

The $pagination.hasPrev property is a boolean which has a value of true when a previous pagination page exists and a value of false when a previous pagination page doesn't exist.

Let's add the code to log the $pagination.hasPrev property in the IndexPost.vue file:

If we navigate to the entry page, the console should log a value of false. This makes sense since the entry page is the first pagination page which means there is no previous pagination page.

If we navigate to the second page, the console should log a value of true which makes sense since the entry page is before the second page.

The $pagination.prevLink property is a string whose value is the previous pagination page path if a previous pagination page exists and a value of null when a previous pagination page doesn't exist.

Let's add the code to log the $pagination.prevLink property in the IndexPost.vue file:

If we navigate to the entry page, the console should log a value of null. This makes sense since the entry page is the first pagination page which means there is no link to a previous pagination page.

If we navigate to the second page, the console should log a value of /posts/ which makes sense since the previous link before the second page is the entry page which has a path of /posts/.

# hasNext

The $pagination.hasNext property is a boolean which has a value of true when a pagination page exists after the current pagination page and a value of false when a pagination page doesn't exist after the current pagination page.

Let's add the code to log the $pagination.hasNext property in the IndexPost.vue file:

If we navigate to the entry page, the console should log a value of true. This makes sense since there is a next page in the paginated list of pages, i.e., the second page.

If we navigate to the second page, the console should log a value of false which makes sense since in our case there is no pagination page after the second page.

The $pagination.nextLink property is a string whose value is the path of the next pagination page if it exists and a value of null when the next pagination page doesn't exist.

Let's add the code to log the $pagination.nextLink property in the IndexPost.vue file:

If we navigate to the entry page, the console should log a value of /posts/page/2/. This makes sense since the entry page is the first pagination page, and in our case there is a link to the next pagination page, i.e., the second page.

If we navigate to the second page, the console should log a value of null. This makes sense since in our case the second page is the last page in the list of pagination pages which means there is no link to the next pagination page.

The $pagination.getSpecificPageLink() is a method that accepts a page number and returns the path of a pagination page. The page numbers start at 0, so to get the entry page path you need to provide a value of 0. If an input is provided that is unable to return a path to a pagination page, then an error is thrown which can be found in the Console tab.

Let's add the code to log the output of the $pagination.getSpecificPageLink() method in the IndexPost.vue file:

Since we used a page number of 0 in the code above, the console should log a value of /posts/. This makes sense since a value of 0 refers to the entry page which has a path of /posts/.

If we want to get the path of the second page, then we can use a value of 1 as the page number, so the console should log a value of /posts/page/2/. This makes sense since a value of 1 refers to the second page which has a path of /posts/page/2/.

# Next Steps

In the next tutorial we'll begin the development of the IndexPost layout component which will involve using the $pagination variable provided by the Client API.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-17/index.html b/vuepress-tutorial-17/index.html new file mode 100644 index 00000000..0b2e0435 --- /dev/null +++ b/vuepress-tutorial-17/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 17 - IndexPost Layout | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 17 - IndexPost Layout

By: J the Code Monkey
Posted: Oct 17, 2022 Updated: Apr 18, 2023

# What We're Doing

We're now ready to begin the development of the IndexPost layout component. We'll be using the globally scoped $pagination variable provided by the blog plugin Client API (opens new window) to access the pagination data. In this tutorial we'll be focusing on the post title and preview pagination data. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-17 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Naming the Component

Before accessing and displaying the pagination data, we're going to first give the component a name and remove the created lifecycle hook which we were using in the previous tutorial to log the pagination data to the console.

Here's the updated IndexPost.vue file:

# Looping Over Pagination Pages

To display the pagination data we're going to loop over the $pagination.pages property which if you remember from the previous tutorial VuePress Tutorial 16 - Pagination is an array of objects where each object contains data related to post pages that are accessible on the current pagination page.

# Using the v-for Directive

Since $pagination.pages is an array that we want to loop over, we're going to use the v-for directive to render a list of post pages based on the data within the array. The v-for directive uses the following syntax v-for="item in items" where items is the array you want to loop over, and item is an alias for the array element being iterated on. Here, items corresponds to $pagination.pages, and we'll use post as the alias for the array element being iterated on. This means our v-for directive will be v-for="post in $pagination.pages".

# Using the key Attribute

When using the v-for directive the common best practice is to bind a key attribute where each value given to the key attribute should be unique. The key attribute uses the following syntax :key="item.id" where id is a property with a unique value for every item in the items array.

You really only need to use the key attribute when the rendered list relies on child component state or temporary Document Object Model (DOM) (opens new window) state, e.g., form input values . This means we don't actually need to include the key attribute since we're currently just rendering a static list.

However, we're going to bind the key attribute in case we ever need to use it in the future. To ensure the key attribute has a unique value for each item in the list, we're going to use the key property which is a unique value generated for each page object within the $pagination.pages array. Here's what the key attribute will look like in our case :key="post.key".

# Determining a Tag

Now we need to determine what tag we want to add our v-for directive and key attribute to. We're going to add them to a div tag which will allow us to wrap the pagination data for each post in the list of post pages. Here's what the div tag is going to look like after adding the v-for directive and key attribute <div v-for="post in $pagination.pages" :key="post.key"></div>.

# Using a Root Element

Since the div tag uses the v-for directive, it's going to render multiple elements. This means we cannot use it as the root element, i.e., the first element in the template tag because the template tag can only have one root element. To resolve this issue we're going to wrap the div tag that's using the v-for directive within another div tag which will serve as the root element.

# Adding the Loop

Here's what the IndexPost.vue file should now look like:

If you any questions or want to learn more about the v-for directive and the key attribute then check out these resources:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you won't notice any changes on the page. This is because we've rendered div tags without any of the pagination data inside of them.

If you navigate to the entry page, inspect the browser, and go to the Elements tab, the HTML for the body tag should now look something like this:

Notice how the entry page consists of two div tags wrapped inside of the div tag that's being used as the root element of the template tag. Each of those div tags inside of the parent div tag corresponds to a post page that is accessible on the entry page.

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you also won't notice any changes on the page. This is because we've rendered a div tag without any of the pagination data inside of it.

The HTML for the body tag for the second page should now look something like this:

Notice how the second page consists of one div tag wrapped inside of the div tag that's being used as the root element of the template tag. There is only one div tag since we have one post page accessible on the second page.

# Post Titles

Before we can access the post title data using the $pagination.pages property, we need to first add titles to the post files we created in the _posts directory:

  • 2020-07-03-example-page-1.md
  • 2021-11-16-example-page-2.md
  • 2022-05-08-example-page-3.md

# Adding Titles to Post Files

Since the post files are Markdown files, we can add titles to the files by adding a heading level one, e.g., # Heading Level 1 to each file which gets converted to the following HTML <h1>Heading Level 1</h1>.

Here's what the post files look like after adding the titles:

If you have any questions or want to learn more about Markdown headings, then check out the Basic Syntax (opens new window) guide.

# Adding Titles to $page Variables

When VuePress (opens new window) encounters a heading level one in a Markdown file it automatically adds a title property to the globally scoped $page variable.

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a title property that we can access in the IndexPost layout component.

You can take a look at the Global Computed (opens new window) documentation to learn more about the $page variable and other globally scoped variables.

# Displaying Post Titles

Now that we can access the post titles in the $pagination.pages property, we're ready to render the post titles on the pagination pages.

We're going to display the post titles as h2 tags which we'll be wrapping inside of two div tags. We'll be using the div tags to add styling to the list of post pages in a future tutorial.

To display the post titles we'll be using Text Interpolation (opens new window) which allows us to use variables inside of HTML tags by using the "Mustache" syntax. The "Mustache" syntax consists of wrapping a variable inside of double curly braces.

We can access the title property on each page object in our loop by using post.title. We can then display this by using the text interpolation described above.

The IndexPost.vue file should now look like this:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you should now see the post titles being displayed with some styling provided by the default theme (opens new window).

The HTML for the body tag for the entry page should now look something like this:

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you should now see one post title being displayed with some styling which again is being provided by the default theme (opens new window).

The HTML for the body tag for the second page should now look something like this:

# Post Previews

The post preview data is a snippet of text taken from the beginning of a post which is used as an introduction to the post in the list of post pages. Before we can access the post preview data using the $pagination.pages property, we need to first add previews to the post files we created in the _posts directory:

  • 2020-07-03-example-page-1.md
  • 2021-11-16-example-page-2.md
  • 2022-05-08-example-page-3.md

# Adding Previews to Post Files

Since the post files are Markdown files, we can use YAML (opens new window) frontmatter blocks in the files and define a custom variable preview.

Here's what the post files look like after adding the preview variables:

If you have any questions or want to learn more about YAML (opens new window) frontmatter blocks in VuePress (opens new window) then check these resources:

Number of Characters Used in Preview

The value for each post preview variable should be within a preferred minimum and maximum number of characters. This will ensure the post previews in the list of post pages looks consistent.

# Adding Previews to $page Variables

When VuePress (opens new window) encounters a YAML (opens new window) frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

The page objects in the $pagination.pages property are the same as the $page variables used by the post pages which means each page object will now have a frontmatter.preview property that we can access in the IndexPost layout component.

You can take a look at the Global Computed (opens new window) documentation to learn more about the $page variable and other globally scoped variables.

Content Excerpt

Instead of defining the custom variable preview in the YAML (opens new window) frontmatter blocks of Markdown files, VuePress (opens new window) provides the ability to use a Content Excerpt (opens new window) by adding a <!-- more --> comment to a Markdown file. Any content above the comment gets extracted and exposed as a globally scoped $page.excerpt variable. This variable can then be used to render the list of post pages with excerpts for each post just like our custom variable preview. I prefer to use the custom variable preview because the <!-- more --> comment takes all of the content above it which includes any HTML as opposed to using just the text of a post.

# Displaying Post Previews

Now that we can access the post previews in the $pagination.pages property, we're ready to render the post previews on the pagination pages.

We're going to display the post previews as p tags which we'll place underneath the parent div tag of the h2 tag.

To display the post previews we'll be using Text Interpolation (opens new window) just like we did when displaying the post titles.

We can access the preview property on each page object in our loop by using post.frontmatter.preview.

The IndexPost.vue file should now look like this:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you should now see the post previews being displayed with some styling provided by the default theme (opens new window).

The HTML for the body tag for the entry page should now look something like this:

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you should now see one post preview being displayed with some styling which again is being provided by the default theme (opens new window).

The HTML for the body tag for the second page should now look something like this:

# IndexPost Styling

When viewing the pagination pages you probably noticed the list of post pages stretches across the entire width of the page. This styling doesn't look too good, so we're going to update the styling by adding the following class theme-default-content to the outermost div tag.

# Adding theme-default-content

The IndexPost.vue file should now look like this:

# theme-default-content Styles

The theme-default-content class is provided by the default theme (opens new window) and provides the following styles:

  • .theme-default-content:not(.custom) is used to select tags that have a class of theme-default-content and that don't have a class of custom by using the :not() pseudo-class. This selector is defined by the default theme (opens new window) since other pages can use the theme-default-content class along with a class of custom to apply different styles than the ones shown here. The homepage is an example of a page that uses the theme-default-content class along with a class of custom to apply different styles.
  • max-width: 740px; sets the maximum width of the div tag to be 740px. If the content is greater than the max-width, then the height of the div tag will automatically be changed. If the content is smaller than the max-width, then the max-width property has no effect.
  • margin: 0 auto; sets the margins for the div tag by setting the top and bottom margins to be 0 and the left and right margins to a value of auto. The value of auto means the browser will automatically set the left and right margins to horizontally center the div tag.
  • padding: 2rem 2.5rem; sets the padding for the div tag by setting the top and bottom paddings to be 2rem and the left and right paddings to be 2.5rem.
  • @media (max-width: 959px) will apply the styles within it when the maximum width of the display area, e.g., the browser window is less than or equal to the provided value which in this case is 959px.
  • padding: 2rem; sets the padding for all of the sides of the div tag to be 2rem when the width of the display area is less than or equal to 959px.
  • @media (max-width: 419px) will apply the styles within it when the maximum width of the display area is less than or equal to the provided value which in this case is 419px.
  • padding: 1.5rem; sets the padding for all of the sides of the div tag to be 1.5rem when the width of the display area is less than or equal to 419px.

If you have any questions about the CSS discussed above, then check out these resources:

To view these styles in the browser you can navigate to the entry page http://localhost:8080/posts/ (opens new window) or to the second page http://localhost:8080/posts/page/2/ (opens new window), inspect the browser, go to the Elements tab, locate the div tag with a class of theme-default-content, and then go to the Styles tab.

Use in the Default Theme

The theme-default-content class is used on the global Content component within the Page and Home components provided by the default theme (opens new window). If you look at the HTML on the homepage, you'll see the theme-default-content class being used on a div tag within the main tag with a class of home. We'll be discussing the global Content component, the Page component, and the Home component in more detail in future tutorials.

# IndexPost Heading

We're now going to add a heading to the pagination pages. This heading will be displayed on each pagination page.

# Displaying the Heading

We're going to display the heading as an h1 tag which we'll be adding as the first child tag of the outermost div tag.

The IndexPost.vue file should now look like this:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you should now see the heading being displayed with some styling provided by the default theme (opens new window).

The HTML for the body tag for the entry page should now look something like this:

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you should now see the heading being displayed with some styling which again is being provided by the default theme (opens new window).

The HTML for the body tag for the second page should now look something like this:

# Next Steps

In the next tutorial we'll be continuing the development of the IndexPost layout component by using the $pagination variable to add images to each post in the list of post pages.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-18/index.html b/vuepress-tutorial-18/index.html new file mode 100644 index 00000000..9b8d4626 --- /dev/null +++ b/vuepress-tutorial-18/index.html @@ -0,0 +1,152 @@ + + + + + + VuePress Tutorial 18 - IndexPost Images | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 18 - IndexPost Images

By: J the Code Monkey
Posted: Nov 9, 2022 Updated: Apr 19, 2023

# What We're Doing

In this tutorial we're going to continue the development of the IndexPost layout component by using the globally scoped $pagination variable to access pagination data related to images. To display the data on the pagination pages we'll be updating the IndexPost layout component's template tag like we did in the previous tutorial.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

Be sure to add each block of code below one at a time to your project, then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-18 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Adding Post Images

Before we can access the pagination data related to images, we need to first add the images that we'll be displaying in the list of post pages. We're going to be adding three post images to the blog one for each post.

Each post image has a width of 155px and a height of 185px. Using the same width and height for the post images makes the list of post pages look consistent.

You can download all of the images below from your browser, and they're also available in the tutorial-18 branch of the code-monkeys-blog-tutorials (opens new window) repository.

The images were created using Canva (opens new window). The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMP (opens new window).

Here are some other useful online image tools:

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. Canva (opens new window) and GIMP (opens new window), and some of the other image tools mentioned above offer the ability to compress your images.

Here are some other useful online tools for image compression:

# Adding an Examples Directory

Let's start by creating an examples directory inside of the images directory. The examples directory will be used to store the post images for each example post.

The directory structure for your site should now look something like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ └── examples +│ │ ├── theme +│ │ └── config.js

+

# Example Post 1

After adding the examples directory, we're now ready to add the post images for each example post. We'll be creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories of each example post.

We're going to start with the first example post by adding an example-post-1 directory inside of the examples directory. Then we'll add the image for the first example post which is named example-post-1.png inside of the example-post-1 directory.

The directory structure for your site should now look something like this:

. +├── examples +│ ├── example-post-1 +│ │ └── example-post-1.png

+

Here's the example post 1 image:

Example Post 1 Image

# Example Post 2

For the second example post we'll be adding an example-post-2 directory inside of the examples directory. Then we'll add the image for the second example post which is named example-post-2.png inside of the example-post-2 directory.

The directory structure for your site should now look something like this:

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ │ └── example-post-2.png

+

Here's the example post 2 image:

Example Post 2 Image

# Example Post 3

For the third example post we'll be adding an example-post-3 directory inside of the examples directory. Then we'll add the image for the third example post which is named example-post-3.png inside of the example-post-3 directory.

The directory structure for your site should now look something like this:

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ │ └── example-post-3.png

+

Here's the example post 3 image:

Example Post 3 Image

# Post Images

After adding the post images to the blog, we now need to add a way to access each image in the IndexPost layout component which we'll accomplish by adding a custom variable img to the YAML (opens new window) frontmatter blocks of each post file. The value of the img custom variable will be the path to the image in the project.

We're also going to add another custom variable of alt to the YAML (opens new window) frontmatter blocks of each post file. The value of the alt custom variable will be a description of the image.

If you have any questions or want to learn more about YAML (opens new window) frontmatter blocks in VuePress (opens new window) then check these resources:

# Adding Img and Alt to Post Files

Here's what the post files look like after adding the img and alt custom variables:

# Adding Img and Alt to $page Variables

As mentioned in the previous tutorial when VuePress (opens new window) encounters a YAML (opens new window) frontmatter block in a Markdown file it automatically adds each variable as a property to the globally scoped $page.frontmatter variable.

Since the page objects in the $pagination.pages property are the same as the $page variables used by the post pages, we will now have a frontmatter.img property and a frontmatter.alt property that we can access in the IndexPost layout component.

# Displaying Images

Now that we can access the values of the img and alt custom variables in the $pagination.pages property, we're ready to render the images on the pagination pages.

We're going to display the images using the img tag which we'll place in a div tag underneath the parent div tag of the p tag.

The img tag allows us to embed an image into the page. We'll be using the src and alt attributes provided by the img tag.

The src attribute is required, and it contains the path to the image you want to display which in our case are the post images we created earlier.

The alt attribute is optional and consists of a text description of the image which is useful for accessibility (opens new window) because screen readers will be able to read the description to the users. This allows the users to gain an understanding of what the image is. The description is also displayed on the page if the image is unable to be loaded.

If you want to learn more about the img tag, then check out <img>: The Image Embed element (opens new window).

We can access the img and alt properties on each page object in our loop by using post.frontmatter.img and post.frontmatter.alt, respectively.

The IndexPost.vue file should now look like this:

Here we're binding the src and alt attributes by placing a : before them which is shorthand for v-bind. This allows us to bind the JavaScript expressions to the HTML attributes.

Also, notice /images/ was added to the beginning of the path to the post images which we need to add since they're all located in the images directory. We don't need to include .vuepress/public in the path to the post images though because whenever you reference assets stored in the public directory that gets added automatically.

We also added an alternative value for the post image alt attribute in case the alt custom variable isn't present in the frontmatter of a post. This is done by using a logical OR operator, i.e., ||. Here, we're using "post.frontmatter.alt || 'Post Picture'" which means if the alt property evaluates to a falsy (opens new window) value, then we'll display the Post Picture text instead.

If you have any questions or want to learn more about v-bind or the logical OR operator, then check these resources:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you should now see the images being displayed with some styling provided by the default theme (opens new window).

The HTML for the body tag for the entry page should now look something like this:

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you should now see the image being displayed with some styling which again is being provided by the default theme (opens new window).

The HTML for the body tag for the second page should now look something like this:

# Next Steps

In the next tutorial we'll be continuing the development of the IndexPost layout component by beginning the process of adding the pagination buttons to the pagination pages.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-19/index.html b/vuepress-tutorial-19/index.html new file mode 100644 index 00000000..f2792e0b --- /dev/null +++ b/vuepress-tutorial-19/index.html @@ -0,0 +1,150 @@ + + + + + + VuePress Tutorial 19 - Pagination Links | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 19 - Pagination Links

By: J the Code Monkey
Posted: Nov 19, 2022 Updated: Apr 19, 2023

# What We're Doing

Every time we navigate to the entry page or the second page in the list of pagination pages we have to manually input the URL into the search bar of the browser which isn't a great user experience. To resolve this issue we're going to be adding pagination links to each of the pagination pages.

To accomplish this we'll be using the following properties provided by the blog plugin Client API (opens new window):

  • $pagination.hasPrev
  • $pagintaion.prevLink
  • $pagination.hasNext
  • $pagintaion.nextLink

Before, we use the properties to add the pagination links, we're going to add two more example posts to the blog. This will allow us to view the pagination links in every scenario, i.e., when there isn't a previous page, when there isn't a next page, and when there is a previous page and a next page.

You can view all of the code in this tutorial by going to the tutorial-19 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Adding More Example Pages

We'll be adding the following example pages to the _posts directory:

  • 2022-07-14-example-page-4.md
  • 2022-11-10-example-page-5.md

The _posts directory for your site should now look like this:

. +├── _posts +│ ├── 2020-07-03-example-page-1.md +│ ├── 2021-11-16-example-page-2.md +│ ├── 2022-05-08-example-page-3.md +│ ├── 2022-07-14-example-page-4.md +│ └── 2022-11-10-example-page-5.md

+

# Adding Titles and Frontmatter

We're now going to add post titles and frontmatter to the example pages we just added like we did for the other example pages.

Here's what the 2022-07-14-example-page-4.md file and the 2022-11-10-example-page-5.md file look like after adding the titles and frontmatter:

# Adding Images

We also need to add the post images for the example pages we just added. We'll do this just like we did in the previous tutorial by creating a directory for each example post inside of the examples directory. Then we'll add the post images to the directories for each example post.

You can download all of the images below from your browser, and they're also available in the tutorial-19 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Example Post 4

For the fourth example post we'll be adding an example-post-4 directory inside of the examples directory. Then we'll add the image for the fourth example post which is named example-post-4.png inside of the example-post-4 directory.

The directory structure for your site should now look something like this:

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ │ └── example-post-4.png

+

Here's the example post 4 image:

Example Post 4 Image

# Example Post 5

For the fifth example post we'll be adding an example-post-5 directory inside of the examples directory. Then we'll add the image for the fifth example post which is named example-post-5.png inside of the example-post-5 directory.

The directory structure for your site should now look something like this:

. +├── examples +│ ├── example-post-1 +│ ├── example-post-2 +│ ├── example-post-3 +│ ├── example-post-4 +│ ├── example-post-5 +│ │ └── example-post-5.png

+

Here's the example post 5 image:

Example Post 5 Image

# Viewing the Pagination Pages

After adding the titles and frontmatter to the example pages and adding the post images, you should now have the following pagination pages:

Having these three pagination pages will allow us to view the pagination links in every scenario that we mentioned in the beginning of the post.

Order of Posts

The order of the posts may not be what you're expecting and may change each time you start the local development server. This is because the blog plugin uses a date property to sort the posts which it looks for on the frontmatter of each post page. Since we haven't added a date custom variable to the frontmatter blocks for the post pages, the blog plugin will not sort the posts in a predictable way. We'll fix this issue in a future tutorial by adding the date custom variable to the frontmatter blocks of the post pages.

If you have any questions about adding the example pages to the _posts directory, adding titles to the post pages, adding the frontmatter to the post pages, and/or adding the post images, then check out the relevant sections from the previous tutorials:

We're now ready to use the properties provided by the blog plugin Client API (opens new window) to add the pagination links to the pagination pages.

We're going to display the pagination links using two router-link components one for the previous page and one for the next page. We'll be wrapping each router-link component in a div tag.

We'll then wrap the div tags inside another div tag which we'll place underneath the div tag that is being used to loop over the pagination pages.

The router-link component is provided by Vue Router (opens new window) which gets installed when installing VuePress (opens new window). The router-link component is used for enabling user navigation for the site. The target location for the link is specified by using the to prop, and it renders as an a tag with the specified href by default.

If you want to learn more about the router-link component, then check out the <router-link> (opens new window) documentation.

To display the pagination link for the previous page we'll be using the $pagination.hasPrev property to check if the current pagination page has a previous page. We'll use the $pagination.prevLink property to provide the path of the previous pagination page to the router-link component to prop.

Similarly, to display the pagination link for the next page we'll be using the $pagination.hasNext property to check if the current pagination page has a next page. We'll use the $pagination.nextLink property to provide the path of the next pagination page to the router-link component to prop.

We discussed the properties above in detail in the VuePress Tutorial 16 - Pagination post, so if you need a refresher or if you have any questions read through the relevant sections in that post.

The IndexPost.vue file should now look like this:

Here we're using the v-if directive to conditionally render the pagination links by using the values of the $pagination.hasPrev and $pagination.hasNext properties. The block of code using the v-if directive will only be rendered if the expression provided to it returns a truthy (opens new window) value.

We're also binding the to prop by placing a : before it which is shorthand for v-bind. Using v-bind allows us to bind JavaScript expressions to the HTML attributes.

If you have any questions or want to learn more about conditional rendering or v-bind, then check these resources:

# Entry Page HTML

After updating the IndexPost.vue file with the code above, if you navigate to the entry page http://localhost:8080/posts/ (opens new window) you should now see the Next pagination link being displayed with some styling provided by the default theme (opens new window).

You should now be able to click on the Next pagination link, and it should take you to the next page in the list of pagination pages.

The HTML for the body tag for the entry page should now look something like this:

# Page 2 HTML

If you navigate to the second page http://localhost:8080/posts/page/2/ (opens new window) you should now see the Prev and Next pagination links being displayed with some styling provided by the default theme (opens new window).

You should be able to click on the Prev pagination link, and it should take you to the previous page. You should also be able to click on the Next pagination link, and it should take you to the next page.

The HTML for the body tag for the second page should now look something like this:

# Page 3 HTML

If you navigate to the third page http://localhost:8080/posts/page/3/ (opens new window) you should now see the Prev pagination link being displayed with some styling provided by the default theme (opens new window).

You should be able to click on the Prev pagination link, and it should take you to the previous page.

The HTML for the body tag for the third page should now look something like this:

# Next Steps

You may have noticed the styling of the Prev and Next pagination links doesn't look too good, so in the next tutorial we'll begin styling these links. We'll also be adding left and right arrow icons to the Prev and Next pagination links, respectively.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-2/index.html b/vuepress-tutorial-2/index.html new file mode 100644 index 00000000..02deb20b --- /dev/null +++ b/vuepress-tutorial-2/index.html @@ -0,0 +1,131 @@ + + + + + + VuePress Tutorial 2 - Why Use VuePress? | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 2 - Why Use VuePress?

By: J the Code Monkey
Posted: Nov 24, 2021 Updated: Apr 19, 2023

# What is VuePress?

VuePress (opens new window) is a minimalistic static site generator (SSG) with a Vue-powered theming system (opens new window) and Plugin API (opens new window).

Originally, it was created to serve the documentation needs of Vue's (opens new window) own sub projects, so it comes with a default theme (opens new window) optimized for writing technical documentation.

As well has being useful for writing technical documentation, it also has a blog plugin (opens new window) which we'll be looking at in more detail in future tutorials.

Now, to clear up any confusion we'll define what an SSG is, then we'll talk more about the theming system (opens new window) and the Plugin API (opens new window).

After that we'll provide a list of some of the features of VuePress (opens new window), and then we'll give some quick comparisons with similar technologies.

# Different Types of Websites

Before we define what an SSG is, let's first look at some different types of websites. This will allow us to get a better understanding of the pros and cons of using an SSG.

We'll mainly be looking at each type of website in terms of search engine optimization (SEO), speed, and ease of updating.

# Static Website

  • Uses static HTML pages with possible CSS and JavaScript
  • Pages are uploaded to a content delivery network (CDN) or a web host

Here's a simple diagram illustrating the process:

Static Website Diagram

# Pros

  • SEO-friendly since a search engine can crawl the site and fully rendered HTML pages with content are provided

# Cons

  • Need to do a request to the server for each page a user visits which slows down the site
  • Difficult to update since you need to rewrite the same code on multiple pages, e.g., the footer
  • Has limited functionality and generally doesn't contain dynamic data

# Single-Page Application (SPA)

  • Typical Vue (opens new window) and React (opens new window) application
  • A single request is made to the server which returns a simple HTML page with the styles and scripts linked
  • The SPA then handles rendering the page content in the browser, e.g., routing, data, etc.

Simple diagram illustrating the process:

Single Page Application Diagram

# Pros

  • Fast, no extra requests are made to the server when navigating to new pages since the SPA handles rendering the pages in the browser
  • Component driven which means easier updating, e.g., if you want to update the footer you only need to update it in one file

# Cons

  • More difficult for search engines to crawl and index the site for SEO since the page returned by the server is a simple HTML page

# Server-Side Rendered (SSR)

Simple diagram illustrating the process:

Server-Side Rendered Diagram

# Pros

  • SEO-friendly since each request returns a fully rendered HTML page, so a search engine can easily crawl and index the site
  • Easy to update since the server is using a templating system

# Cons

  • Since the server has to send back fully rendered HTML pages for each request, it can slow down the page rendering

# Static Site Generator (SSG)

  • An SSG creates pre-rendered static HTML pages using a combination of templates, components, and data
  • These static HTML pages are generated at build-time, i.e., before deployment
  • The static pages are then deployed to the web

Simple diagram illustrating the process:

Static Site Generator Diagram

# Pros

  • SEO-friendly since it returns fully rendered HTML which can then be crawled and indexed
  • Navigating to new pages is fast since after the initial request the site behaves like a normal SPA
  • Easy to update since the site is component driven

# Cons

  • Have to rebuild the static pages evey time a change is made to the site, and the build time will increase as more pages are added

# Use Cases for SSGs

Since SSGs create static HTML pages at build-time then behave like an SPA, they are suited for websites that don't have a lot of frequent content changes.

  • Here are some examples: +
    • Personal Website/Portfolio
    • Documentation
    • Blog

# How it Works in VuePress

Like other SSGs, the static HTML pages are rendered at build-time. Then the static HTML pages are deployed to the web.

Once the page is loaded, Vue (opens new window) takes control of the static content and the site behaves like an SPA. The SPA is powered by Vue (opens new window), Vue Router (opens new window), and webpack (opens new window).

Each Markdown file gets compiled into HTML with markdown-it (opens new window) which is then processed as the template of a Vue (opens new window) component. This is what enables you to use Vue (opens new window) directly in your Markdown files and also makes it possible to embed dynamic content.

# Theming

A theme in VuePress (opens new window) allows you to control how your project is structured. You can simply use the provided default theme (opens new window), use theme inheritance (opens new window) to create a child theme based on a parent theme, or write your own theme (opens new window).

Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configurations and app level enhancements. When writing your own theme the only file that is necessary is Layout.vue, everything else is up to. You can also publish your theme as an npm (opens new window) package which allows other people to easily install it.

The Code Monkeys Blog is currently a child theme inherited from the default theme. Eventually, I would like to look into publishing it as an npm (opens new window) package.

We'll go over the directory structure, what each directory in a theme is used for, theme configuration, app level enhancement, and theme inheritance (opens new window) in future tutorials.

# Plugin API

Plugins (opens new window) allow you to add global-level functionality to VuePress (opens new window). You can configure them by passing in options. It's also possible to write your own and publish them as npm (opens new window) packages.

We'll go over installing and configuring plugins (opens new window) in future tutorials.

# Features

Here are some of the features that come with VuePress (opens new window):

Built-in Markdown Extensions

Ability to Use Vue In Markdown Files

Vue-powered Custom Theme System

A Default Theme with

It also has a blog theme (opens new window), numerous community themes, official plugins, and community plugins.

You can find a list of these themes, plugins, and more resources at Awesome VuePress (opens new window).

# Comparisons

Here are some similar technologies and how they compare with VuePress (opens new window):

Nuxt (opens new window)

  • Designed for building applications whereas VuePress (opens new window) is focused on content-centric static sites with a focus on technical documentation

Docsify (opens new window) / Docute (opens new window)

  • Both are runtime-driven, so they're not SEO-friendly
  • Good if SEO isn't a concern and you don't want to deal with installing dependencies

Hexo (opens new window)

  • Static and string-based theming system, so we're unable to take advantage of Vue (opens new window) for layout and interactivity
  • Markdown rendering configuration is not that flexible

GitBook (opens new window)

  • Development reload performance is not ideal with a large amount of files
  • Limiting navigation structure for the default theme
  • Theming system is not Vue (opens new window) based

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-20/index.html b/vuepress-tutorial-20/index.html new file mode 100644 index 00000000..46d59e94 --- /dev/null +++ b/vuepress-tutorial-20/index.html @@ -0,0 +1,138 @@ + + + + + + VuePress Tutorial 20 - Pagination Links Styling | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 20 - Pagination Links Styling

By: J the Code Monkey
Posted: Nov 23, 2022 Updated: Jul 3, 2024

# What We're Doing

We're going to begin the process of styling the Prev and Next pagination links that we added to each of the pagination pages in the previous tutorial. To implement the styling we'll be adding the following CSS classes pagination, left-arrow, and right-arrow to the IndexPost layout component.

The pagination class will be used to properly space out the Prev and Next pagination links. The left-arrow and right-arrow classes will be used to add some styling to the left arrow and right arrow icons which we'll be adding using the global vp-icon component which is provided by vuepress-plugin-svg-icons (opens new window).

When adding the styling updates be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

You can view all of the code in this tutorial by going to the tutorial-20 branch of the code-monkeys-blog-tutorials (opens new window) repository.

# Pagination Class

We're going to start by adding the pagination class to the div tag that is wrapping both of the router-link components in the IndexPost.vue file.

Then we'll apply the following styles:

  • lang="stylus" is used to specify which pre-processor we want to use in the component which in our case is Stylus (opens new window) which is the default pre-processor used by VuePress (opens new window).
  • scoped is used to only apply the styles to the current component, i.e., the IndexPost layout component. We're scoping these styles since they currently only apply to the IndexPost layout component.
  • display: flex defines a flex container for all of the direct children of the div tag with a class of pagination.
  • justify-content: space-between evenly spaces out the flex items along the main-axis of the flex container where the first item is flush with the start of the flex container, and the last item is flush with the end of the flex container. Here, the main-axis of the flex container is the horizontal axis. The flex items are the direct children of the div tag with a class of pagination, i.e., the div tags that are wrapping the router-link components.
  • padding-top: 2rem adds a padding of 2rem to the top of the div tag with a class of pagination.

The pagination links should now be properly spaced out, and you can view the styling updates by navigating to the pagination pages:

If you have any questions about the lang attribute, the scoped attribute, flexbox, or CSS in general, then check out these resources:

# Left and Right Arrow Icons

We're now ready to add the left and right arrow icons to the pagination links.

# Downloading the Icons

To add the left and right arrow icons to the site we need to first download the icons. To find icons for your site vuepress-plugin-svg-icons (opens new window) recommends using iconfont (opens new window). After searching for the icons and downloading them, you'll be asked to specify a color and size for the icons. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

Instead of searching iconfont (opens new window) for the left and right arrow icons, you can download them from the tutorial-20 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Using SVG Export

To easily download the left and right arrow icons you can also install the browser extension SVG Export (opens new window). After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

# Updating the Icons Directory

After downloading the left and right arrow icons, we'll need to add them to the icons directory which should now look something like this:

├── icons +│ ├── Gab.svg +│ ├── leftArrow.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── rightArrow.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

# Displaying the Icons

After adding the left and right arrow icons to the icons directory, the plugin will automatically load the icons and provides the global vp-icon component. To use the vp-icon component we need to pass a name attribute to it where the value is the name of the SVG file we want to use.

Here, the value for the name attribute will be leftArrow for the Prev pagination link and rightArrow for the Next pagination link.

We're going to be adding the vp-icon components inside of the corresponding router-link components.

The IndexPost.vue file should now look like this:

To view the left and right arrow icons navigate to the pagination pages:

Notice how the left arrow icon is being displayed to the left of the Prev pagination text and how the right arrow icon is being displayed to the right of the Next pagination text. This ensures the arrows and the text look correct when being displayed.

# Styling the Icons

We're now going to add some styling to the left and right arrow icons. The IndexPost.vue file should now look like this:

  • padding-right: 0.25rem adds a padding of 0.25rem to the right of the vp-icon component with a class of left-arrow.

  • padding-left: 0.25rem adds a padding of 0.25rem to the left of the vp-icon component with a class of right-arrow.

To view the styling updates to the left and right arrow icons navigate to the pagination pages:

If you have any questions about the CSS discussed above, then check out this resource:

# Optimizing the Icons

When downloading the left and right arrow icons from iconfont (opens new window), the icons will have a lot of redundant and useless information. We can use a Command-line Interface (CLI) command provided by vuepress-plugin-svg-icons (opens new window) to optimize the icons.

Icons Already Optimized

If you downloaded the left and right arrow icons from the repository or by using the SVG Export (opens new window) browser extension, then the icons should already be optimized and you shouldn't have to run the CLI command.

Here's the CLI command you can run to optimize the icons vuepress svgo [docsDir] where [docsDir] is the docs directory for your project which in our case is docs.

We added this CLI command to the scripts object in the package.json file in the previous post VuePress Tutorial 12 - Highlight SVGs on Hover.

Here's how to run the script:

After running the script, the icons should be optimized.

If you have questions about how the plugin implements the CLI command or about the plugin in general, then checkout the guide (opens new window).

You can also check out SVGO (opens new window) which is the optimization tool being used by the plugin to optimize the icons.

# Next Steps

In the next tutorial we're going to continue styling the IndexPost layout component by making each post in the list of posts look like a card.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-3/index.html b/vuepress-tutorial-3/index.html new file mode 100644 index 00000000..30dd46b6 --- /dev/null +++ b/vuepress-tutorial-3/index.html @@ -0,0 +1,128 @@ + + + + + + VuePress Tutorial 3 - Set Up and Installation | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 3 - Set Up and Installation

By: J the Code Monkey
Posted: Jan 16, 2022 Updated: Apr 18, 2023

# Setting Up and Using GitHub

First we'll be going over how to create a repository on GitHub (opens new window). If you plan on using these tutorials as guides and want to start your own project from scratch, then you should create your own repository.

Each tutorial in this series involving code will also have a branch in the code-monkeys-blog-tutorials (opens new window) repository. If you want the code for a specific tutorial, then you can download a specific branch or clone the repository and switch to one of the remote-tracking branches. We'll go over how to download and clone the code in more detail in the sections below.

You can also download, clone, or fork the current version of the code-monkeys-blog (opens new window).

If you don't have git installed, then check out the Installing Git (opens new window) documentation. Also, if you don't have a GitHub account, then Join GitHub (opens new window) and Set up Git (opens new window).

# Creating a Repository

A repository is a directory where you store the code and other files used in a project. A repository can be a local directory on your computer and can be stored and accessed online from a website like GitHub (opens new window).

If you want to create your own repository for your own project, then you need to:

  1. Go to your profile page, click on the Repositories tab, then click the New button or on any page in the upper right corner, click the + drop-down menu, then select New repository
  2. Type a short and descriptive name in the Repository name field
  3. Type a description in the Description field (optional)
  4. Choose if you want the repository to be Public or Private
  5. Add a README.md file which you can use to describe your project in more detail and to document how to install and use your project
  6. Add a .gitignore file which is used to ignore specified files and directories when making a commit, I recommend selecting the Node template from the drop-down menu
  7. Add your preferred license which is used to tell others how they can use your code
  8. You can also choose a different default branch name, e.g., master instead of main by clicking on the settings link
  9. Click the Create repository button

If you run into any issues when creating the repository or want to learn more, then check out the Create a Repo (opens new window) documentation. If you need help determining which license you should use, then check out Choose a License (opens new window). You can also learn more about the .gitignore file from the gitignore (opens new window) documentation.

After successfully creating your repository, you can now clone it to make a local copy on your computer.

# Cloning a Repository

To clone your newly created repository, you need to:

  1. Go to the main page of your repository
  2. Click the Code button and select your preferred method to clone the repositroy, e.g., SSH
  3. Copy your preferred remote URL
  4. Replace the example URL below with your copied URL, then run one of the following commands in your preferred directory:

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a Repository (opens new window) and About Remote Repositories (opens new window).

The next sections will show you how to download and clone the code from the code-monkeys-blog-tutorials (opens new window) repository.

# Downloading Tutorials from GitHub

If you want to download the code for a specific tutorial, then you need to:

  1. Go to the code-monkeys-blog-tutorials (opens new window) repository
  2. Select which branch you want to download, e.g., tutorial-3
  3. Click the Code button and select Download ZIP
  4. Save the ZIP file to your preferred directory
  5. Unzip the file in your preferred directory

# Cloning and Using Tutorials from GitHub

If you want to clone the tutorials, then you need to run one of the following commands in your preferred directory depending on your preferred method:

If you run into any issues when cloning the repository or want to learn more, then check out Cloning a Repository (opens new window) and About Remote Repositories (opens new window).

After successfully cloning the repository, you can run the following command to list both the remote-tracking and local branches:

Before switching to one of the remote-tracking branches, run the following command to get all of the latest changes from the remote repository without modifying your working directory:

Now, to work on the code for a remote-tracking branch you need to make a local copy of it which you can do by running the following command:

If you get an error when running the above command and the provided branch name exists, then check your version of git by running git --version. You need to be using at least Git 2.23 (opens new window) to use the switch command.

If you have an older version of git or if you prefer to not use the switch command, you can alternatively run the following command to work on the code for a remote-tracking branch:

The recommended way to switch branches is with the switch command since the checkout command does more than just switching branches which can lead to confusion.

If a remote-tracking branch is updated and you want to integrate those changes into your local branch, then switch to the branch you want to update and run the following command:

If you edit the code for a branch and attempt to pull, you may run into merge conflicts. You can check out About Merge Conflicts (opens new window) to learn more about what they are and how to resolve them.

# Dependencies

Before installing VuePress (opens new window), you first need to have Node.js 10+ (opens new window) installed and optionally Yarn 1 (opens new window).

It's recommended to use Yarn 1 (opens new window) if either one of the following applies to you:

  • You're using webpack 3.x (opens new window) in which case you may notice installation issues with npm.
  • You're going to be closely following along with these turtorials in which case I recommend using v1.22.17 since it's the same version being used by the Code Monkeys Blog. This will allow you to avoid any potential issues with packages and with the GitHub Actions (opens new window) workflow which is used when deploying the site.

Using the Locally Set Version of Yarn in the Repositories

The code-monkeys-blog-tutorials (opens new window) and the code-monkeys-blog (opens new window) repositories both have a local version of yarn set to v1.22.17 in a .yarn/releases directory. This means if you use the code from the repositories, then you'll be able to use the locally set version of yarn instead of having to install the specific local version of yarn yourself.

The next sections will show you how to check your current versions of node and yarn.

If you don't have node or yarn installed or you want to change the versions, then check out the provided resources explaining how to install specific versions.

# Checking Node Version

To check if you have node installed run the following command:

If you see an output of v10.xx.xx or greater, then you can continue on with the VuePress (opens new window) installation.

Code Monkeys Blog Node Version

The Code Monkeys Blog is currently using Node.js v16.11.1 (opens new window). If you're going to be closely following along with these turtorials, then I recommend using the same version to avoid any potential issues.

If you don't see the proper output or want to use the same version in these tutorials, then you need to either install or upgrade node.

To install a system version of node you can go to Node.js (opens new window) and download a compatible version.

If you previously installed a system version of node from Node.js (opens new window), then you can go back to the site and download a newer version to upgrade your current version.

If you're a developer that needs to use multiple versions of node when working on different projects, then I recommend using a node version manager. Before installing a node version manager like nvm (opens new window) or fnm (opens new window), I recommend uninstalling your system version of node, npm, and any globally installed npm packages to avoid potential issues.

Check out these posts Installing Node Version Manager (nvm) and Installing Fast Node Manager (fnm) to learn how to install and use them.

Preferred Node Version Manager

My preferred way to manage my node versions is with fnm (opens new window) since it's much faster than nvm (opens new window).

After installing a compatible version of node, you will now have npm the default package manager for node. If you prefer you can use npm to install VuePress (opens new window). However, if you're going to be closely following along with these tutorials, then I recommend using yarn.

# Checking Yarn Version

To check if you have yarn installed run the following command:

If you don't see your preferred version of yarn, then it's recommended to install or upgrade a global version of Yarn 1 (opens new window) which can then be used to set a local version of yarn for the project.

To learn more about how to install a global version of Yarn 1 (opens new window), how to use the global version to set a local version of yarn for a project, and other commonly used commands check out the Installing Yarn 1 post.

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

Recommended Version and Repositories Reminder

Remember the recommended version of yarn to use with your project if you're closely following along with these tutorials is v1.22.17. Also, if you use the code from the repositories, then there will be a provided local version of yarn which you can use instead of installing the specific local version yourself.

# Installing Tutorial Packages

If you downloaded or cloned the code from the code-monkeys-blog-tutorials (opens new window), first check your version of yarn by running the following command in the project directory:

If the version of yarn is v1.22.17, then you can install all of the packages being used in the project by running the following command in the root project directory:

Make sure you're not using the master branch when checking the version since it doesn't have the .yarn directory and that you have a global version of yarn installed.

If you're using your own repository and want to install VuePress (opens new window) yourself, then use one of the installation methods described below.

# Installing VuePress

When installing VuePress (opens new window) you have the option to use the create-vuepress-site generator (opens new window) for a quick start installation or a manual installation. We'll go over both of the installation methods, but the future tutorials will be based off of the manual installation.

# Quick Start

Using the generator will help scaffold a basic site structure for you by creating common directories and files found in VuePress (opens new window) sites.

  1. To use the generator run the following command in your preferred directory using your preferred package manager:

After running the above command, you'll be asked to answer some questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named quick-start-project:

The scaffolded basic site is created in a docs directory in your current directory which in the example above was quick-start-project. All of the created directories and files are listed above.

If you're using npm you'll see a .npmignore file in the docs directory instead of a .gitignore file.

Using an Optional Directory Name

If you passed an optional directory name, then the scaffolded basic site is created in the given directory in a docs directory.

The answers given to the questions can be found in the docs directory in the package.json file which contains your site's metadata.

Here's the contents of the package.json file from the example above:

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guide (opens new window).

  1. To see your newly created site, navigate to the docs directory:
  1. Install your site's packages using your preferred package manager:

Installing the Same VuePress Version

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

  1. Start the hot reloading local development server:

Your site should now be running at http://localhost:8080/ (opens new window).

# Manual Installation

The manual installation method allows you to start building your site from scratch unlike the quick start method which scaffolds a basic site structure for you.

As mentioned above, the following tutorials will be based off of the manual installation method.

Using an Existing Project

If you already have an existing project and you would like to keep the documentation inside of it, then start from the third command.

  1. Navigate to your preferred directory which should be where you cloned your site's repository:
  1. Initialize your project with your preferred package manager:

After running the above command, you'll be asked to answer several questions. You can enter custom values for each question or press enter to accept any defaults. Here's an example of running the command in a directory named project-directory:

After answering all of the questions, a package.json file containing the answers is created. The package.json file is used to describe metadata about your site.

Here's the contents of the package.json file from the example above:

We'll be covering the contents of the package.json file in the next tutorial. If you're interested in learning more now, then check out the package.json guide (opens new window).

  1. Install VuePress (opens new window):

Installing the Same VuePress Version

The above command will install the latest version. If you want to install the same version being used in the tutorials and blog, then run yarn upgrade vuepress@1.8.2.

  1. Create a docs directory and your first document:
  1. Add the following scripts object to your package.json file:

Here's the contents of the package.json file from the example above after installing VuePress (opens new window) and adding the scripts object:

  1. Start the hot reloading local development server:

Your site should now be running at http://localhost:8080/ (opens new window).

# Next Steps

In the next tutorial we'll be summarizing our current directory structure as well as going over the recommended directory structure (opens new window) for a VuePress (opens new window) site.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-4/index.html b/vuepress-tutorial-4/index.html new file mode 100644 index 00000000..895b2942 --- /dev/null +++ b/vuepress-tutorial-4/index.html @@ -0,0 +1,190 @@ + + + + + + VuePress Tutorial 4 - Directory Structure | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 4 - Directory Structure

By: J the Code Monkey
Posted: Jan 22, 2022 Updated: Jul 17, 2024

# Current Directory Structure

We're going to start with an overview of the current directory structure from the previous tutorial. Then we'll describe the recommended directory structure for a VuePress (opens new window) site.

The current directory structure of the project is based off of creating a repository for your project on GitHub (opens new window), cloning the repository, setting a local version of yarn for your project, and doing a manual installation of VuePress (opens new window). This means if you're not using a local version of yarn and/or did a quick start installation your current directory structure will be a little different.

Here's the current directory structure of the project:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+
  • .yarn/releases: Stores a local version of yarn for the project which ensures everyone working on the project is using the same version. If you didn't set a local version of yarn for your project, you won't have this directory.
  • .yarn/releases/yarn-1.22.17.cjs: Specific local version of yarn used in the code-monkeys-blog-tutorials (opens new window) and the code-monkeys-blog (opens new window) repositories. The file name will be different if you're using a different version.
  • docs/README.md: The first document for the site which will be used as the homepage.
  • node_modules: Contains all of the code for the installed packages.
  • .gitattributes: Used to prevent git from showing large diffs when you add or update local versions of yarn. If you didn't set a local version of yarn for your project, you won't have this file.
  • .gitignore: Ignores specified files and directories when making a commit to your repository.
  • .yarnrc: Instructs your global version of yarn to use the specified local version in the project. If you didn't set a local version of yarn for your project, you won't have this file.
  • LICENSE: Tells others how they can use your code.
  • package.json: Describes metadata about your site.
  • README.md: Used to describe your project in more detail and to document how to install and use your project.
  • yarn.lock: Keeps track of the exact versions of packages installed in the project. If you're using npm you'll have a package-lock.json file instead.

Reminder to Update the .gitattributes and .gitignore Files

If you created your own repository and are using a locally set version of yarn, then be sure to update your .gitignore file and add a .gitattributes file as described in the Installing Yarn 1 post.

# Contents of the package.json File

Before moving on to the recommended directory structure, we're going to first go over the contents of the package.json file and add some simple updates.

The properties of your package.json file may be different depending on how you answered the questions when initializing your project and if you used the quick start installation method instead of the manual installation method. If you want to update any properties or values, you can edit your package.json file directly.

If you plan on publishing your project to the npm (opens new window) registry, then take a look at the npm package.json (opens new window) documentation to make sure you are following all of the specifications.

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorials (opens new window):

The package.json file contains metadata about your project. This metadata includes information used to identify and describe your project and the packages you install which follow semantic versioning (semver) (opens new window).

Let's describe each property in a little more detail:

  • name is the name given to your project
  • version indicates the current version of your project +
  • description is used to describe and provide more information about your project
  • main is a JavaScript file that starts the execution of your project
  • repository describes the location of the project repository containing the code +
    • You can explicitly set the URL and a version control type in the package.json file by adding, e.g., "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }
  • author describes the creator or owner of the project +
    • You can explicitly set the author name, email, and website in the package.json file by adding, e.g., "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }
  • license indicates the type of license being used by the project
  • scripts are command-line applications that are described as an object where the property is the name of the script and the value is a command that gets run
  • devDependencies are dependencies you need during development only, i.e., not during production

Installing the Same VuePress Version

If you see a different version of VuePress (opens new window) and want to install the same version being used in the tutorials and blog, then you can run yarn upgrade vuepress@1.8.2.

Now, let's make some simple updates to the package.json file.

To start we're going to be adding a version control type to the repository property by updating it to be "repository": { "type": "git", "url": "https://github.com/github-username/your-project" }.

Next we're going to be adding an optional email and url to the author property by updating it to be "author": { "name": "Your Name", "email": "youremail@example.com", "url": "https://your-website.com" }.

If you prefer you can also shorten the author property to be one string by defining it like this "author": "Your Name <youremail@example.com> (https://your-website.com)".

The email could be a personal or work email, and the url could be a link to a personal website or the website related to your project.

Here's what the contents of the package.json file looks like for the code-monkeys-blog-tutorials (opens new window) after adding the updates:

Now that we have a good understanding of our current directory structure and the package.json file, let's discuss the recommended directory structure.

Here's the recommended directory structure for a standard VuePress (opens new window) site:

. +├── docs +│ ├── .vuepress (Optional) +│ │ ├── components (Optional) +│ │ ├── public (Optional) +│ │ ├── styles (Optional) +│ │ │ ├── index.styl +│ │ │ └── palette.styl +│ │ ├── templates (Optional, Danger Zone) +│ │ │ ├── dev.html +│ │ │ └── ssr.html +│ │ ├── theme (Optional) +│ │ │ └── Layout.vue +│ │ ├── config.js (Optional) +│ │ └── enhanceApp.js (Optional) +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

  • docs/.vuepress: Stores the global configuration, components, static resources, etc.
  • docs/.vuepress/components: The Vue components in this directory automatically get registered as global components.
  • docs/.vuepress/public: Static resource directory.
  • docs/.vuepress/styles: Stores style related files.
  • docs/.vuepress/styles/index.styl: Used to add global styles that can override the default styles.
  • docs/.vuepress/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • docs/.vuepress/templates: Stores HTML template files.
  • docs/.vuepress/templates/dev.html: HTML template file for development environment.
  • docs/.vuepress/templates/ssr.html: HTML template file used in the build time.
  • docs/.vuepress/theme: Stores the local theme of the site.
  • docs/.vuepress/theme/Layout.vue: Layout component used by the theme.
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • docs/.vuepress/enhanceApp.js: App level enhancement.
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • package.json: Describes metadata about your site (same file described in the current directory structure section).

Using the Recommended Directory Structure for Themes

If you plan on writing your own theme for your site or you plan on closely following along with these tutorials, then be sure to use the recommended directory structure for themes instead of the recommended directory structure for a standard VuePress (opens new window) site.

Be sure to check out the Directory Structure (opens new window) documentation if you have any questions.

Here's the recommended directory structure if you plan on writing your own theme for your site. Since the Code Monkeys Blog is a child theme inherited from the default theme (opens new window), we'll be using the recommended directory structure for themes when developing the blog.

We'll be going over child themes and parent themes in more detail in future tutorials, but if you want to learn more now, you can read through the Theme Inheritance (opens new window) documentation.

If you're not using a theme when developing your site, you have the option of using the recommended directory structure for a standard VuePress (opens new window) site. There should only be minor differences when following along with these tutorials.

Only the Layout.vue file is mandatory when writing a theme, but we'll be using the other recommended directories as we continue to develop the blog.

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── components +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ │ └── Layout.vue (Mandatory) +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ ├── templates +│ │ │ │ ├── dev.html +│ │ │ │ └── ssr.html +│ │ │ ├── enhanceApp.js +│ │ │ └── index.js +│ │ └── config.js +│ │ +│ ├── README.md +│ └── example-page +│ └── README.md +│ +└── package.json

+

Capitalization

When creating these directories and files be sure to follow the capitalization to prevent any potential issues.

  • docs/.vuepress: Stores the global configuration, theme, static resources, etc.
  • docs/.vuepress/public: Static resource directory.
  • docs/.vuepress/theme: Stores the theme of the site.
  • theme/components: Stores the Vue components.
  • theme/global-components: The Vue components in this directory automatically get registered as global components.
  • theme/layouts: Stores the layout components used by the theme.
  • theme/layouts/Layout.vue: Mandatory layout component used by the theme.
  • theme/styles: Stores style related files.
  • theme/styles/index.styl: Used to add global styles that can override the default styles.
  • theme/styles/palette.styl: Used to define global styling variables and override the default styling variables.
  • theme/templates: Stores HTML template files.
  • theme/templates/dev.html: HTML template file for development environment.
  • theme/templates/ssr.html: HTML template file used in the build time.
  • theme/enhanceApp.js: Theme level enhancement.
  • theme/index.js: Entry file for theme configuration.
  • docs/.vuepress/config.js: Entry file for configuration, can also be yml or toml.
  • docs/README.md: The first document for the site which will be used as the homepage (same file described in the current directory structure section).
  • docs/example-page/README.md: An example document which is used as another page for the site. Here, the route for the page is the directory name, i.e., /example-page/.
  • package.json: Describes metadata about your site (same file described in the current directory structure section).

We'll be discussing themes in more detail as we continue to develop the blog. If you want to learn more now though or have any questions, then check out the Theme (opens new window) documentation.

# Default Page Routing

In the directory structure above we used the docs directory as the targetDir. If you want to learn more about how the targetDir is used, then take a look at the Command-line Interface (opens new window) documentation.

To see an example of the docs directory being used as the targetDir we can take a look at the scripts object we defined in the package.json file which is in the root directory of the project. Notice the targetDir gets set as the docs directory for the docs:dev and docs:build scripts:

All the relative paths are relative to the docs directory. Here are the relative paths and the default page routing paths for the directory structure described above:

Relative Path Page Routing
/README.md /
/example-page/README.md /example-page/

From the table we can see the relative path for the homepage is /README.md and the default page routing path for the homepage is /. We can also see the relative path for the example page is /example-page/README.md, and the default page routing path for the example page is /example-page/.

# Next Steps

In the next tutorial we'll discuss the basics of Configuration (opens new window).

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-5/index.html b/vuepress-tutorial-5/index.html new file mode 100644 index 00000000..00d58fb5 --- /dev/null +++ b/vuepress-tutorial-5/index.html @@ -0,0 +1,159 @@ + + + + + + VuePress Tutorial 5 - Configuration Basics | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 5 - Configuration Basics

By: J the Code Monkey
Posted: Jan 26, 2022 Updated: Jul 10, 2024

# Adding a Config File

Currently, the site consists of a homepage with a title saying "Hello VuePress" and a search box provided by the default theme (opens new window) which builds an index from all h2 and h3 markdown (opens new window) headers and from the title and tags included in the frontmatter (opens new window) of pages.

We'll be discussing the default theme (opens new window), markdown (opens new window), and frontmatter (opens new window) in more detail in future tutorials.

To see your site be sure to start the local development server which should be running at http://localhost:8080/ (opens new window).

The site is working, but it doesn't have a lot of functionality or customization. To add more functionality and customization like site navigation with a navbar, a site title, a site description, favicons, etc. we need to add a config file.

Before adding the config file, let's first create a .vuepress directory in the docs directory. The .vuepress directory will be used to store all VuePress (opens new window) specific directories and files.

The directory structure for your site should now look something like this:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Now inside of the .vuepress directory, let's add a config.js file.

After adding the config.js file, the directory structure for your site should now look something like this:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The config.js file should export a JavaScript object like the following:

If you run into any issues when adding the directory and file above, then be sure to check out the Configuration (opens new window) documentaion.

Alternative Config Formats

In this series we'll be using a JS config file format, i.e., .vuepress/config.js. However, VuePress (opens new window) also supports the following config file formats: YAML - .vuepress/config.yml, TOML - .vuepress/config.toml, and TS - .vuepress/config.ts. If you want to use TS, then you need to have a VuePress (opens new window) version of 1.9.0+ installed. See the TypeScript as Config (opens new window) documentation for more details.

# Config File Properties

Now that we have added a config.js file, we can begin to add more functionality and customization to the site by setting some of the basic config file properties.

The properties we'll be setting will be using the <head>, <meta>, and <title> tags. To learn more about these tags check out the following references: HTML <head> Tag (opens new window), HTML <meta> Tag (opens new window), and HTML <title> Tag (opens new window).

As we develop the site we'll be adding more config file properties as needed. For a full list of the available config file properties check out the Config Reference (opens new window).

# Title

The title property is used to define the title for the site. The provided value is used to prefix all page titles, and it gets shown in the navbar when using the default theme (opens new window) as a link to the homepage.

The expected type is a string, and the default value is undefined.

Now let's set the title of the site:

After adding the title and saving the file, you should see Code Monkeys or whatever value you set as your site's title in the top left of the navbar as a link to the homepage.

You can also inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

The value of the <title> tag will be whatever you set as the value for the title of your site.

Removing Hello VuePress

When we update the homepage in the next tutorial, we'll remove the Hello VuePress | from the <title> tag.

# Description

The description property is used to define the description for the site. The provided value is used in a <meta> tag in the <head> tag of the site.

The expected type is a string, and the default value is undefined.

Now let's set the description of the site:

After adding the description and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

The value of the content attribute will be whatever you set as the value for the description of your site.

The head property is used to inject extra tags into the <head> tag of the site.

The expected type is an array, and the default value is [].

You can specify a tag to inject into the <head> tag by using the following form: [tagName, { attr1Name: attr1Value, attr2Name: attr2Value, ... }].

Here are some examples of what can be injected into the <head> tag:

  • Author of the Site
  • Favicons
  • Social Media Metadata
  • Links to External Style Sheets
  • Client-Side Scripts

To start we'll set an author by using a <meta> tag in the <head> tag:

After adding the author and saving the file, you can inspect the page, go to the Elements tab, open the <head> tag, and you'll see the following:

To change the author for your site you can use a different value for the content attribute.

We'll be injecting more tags into the <head> tag as we develop the site.

# Updated Config File

Here's the content of the config.js file after adding the title, description, and author:

Be sure to substitute the values with the preferred values for your site.

# Next Steps

In the next tutorial we'll discuss the homepage layout provided by the default theme (opens new window).

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-6/index.html b/vuepress-tutorial-6/index.html new file mode 100644 index 00000000..d832f310 --- /dev/null +++ b/vuepress-tutorial-6/index.html @@ -0,0 +1,165 @@ + + + + + + VuePress Tutorial 6 - Homepage Layout | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 6 - Homepage Layout

By: J the Code Monkey
Posted: Feb 3, 2022 Updated: Jul 10, 2024

# What is a VuePress Theme?

In this tutorial we'll be discussing how to configure the homepage layout by using the options exposed by the default theme (opens new window) which comes with the installation of VuePress (opens new window) and is designed for technical documentation. Along with the homepage the default theme (opens new window) also allows customization for the navbar, sidebar, search box, etc. We'll discuss those customizations in more detail in future tutorials.

Before moving on to the homepage layout, we're going to first describe what a theme is. If you remember from the VuePress Tutorial 2 - Why Use VuePress? post, a VuePress (opens new window) theme allows you to control how your project is structured. Within a theme you are able to create directories that handle global components, components, layouts, styles, and templates. You can also create files for theme configuration and app level enhancements. So, a theme handles all of the layout and interactivity details for your site.

Now that we have a good understanding of what a theme is, let's move on to configuring the homepage layout.

# Homepage Layout

To see the homepage layout in action you can take a look at the homepages of the VuePress (opens new window) site and the Code Monkeys Blog.

Using a Custom Theme

Since the options being used for the homepage are provided by the default theme (opens new window), they may be different if you're using a custom theme (opens new window).

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes to your site. If the changes aren't appearing after you save them, then try restarting your local development server.

# Using the Homepage Layout

To use the homepage layout open the README.md file in the docs directory of your project then you need to add home: true to a YAML (opens new window) frontmatter block at the top of the page.

We're also going to remove the # Hello VuePress line from the file since we're going to start customizing the homepage.

The README.md file now looks like this:

Before discussing the changes to the site, let's first describe what YAML (opens new window) and frontmatter are.

# YAML Frontmatter Blocks

YAML (opens new window) is a recursive acroynym for "YAML Ain't Markup Language", and it's a human-readable data serialization language that can be used with a wide variety of programming languages. Frontmatter is structured metadata that allows you to add variables to your pages.

The YAML (opens new window) frontmatter block support comes with the installation of VuePress (opens new window) and is processed using the frontmatter parser gray-matter (opens new window).

When you add a YAML (opens new window) frontmatter block to a page you need to declare it at the top of a Markdown file, and the content must adhere to proper YAML (opens new window) formatting between a set of triple-dashed lines, i.e., --- like the example above.

Within the triple-dashed lines you are able to set predefined variables (opens new window), predefined variables powered by the default theme (opens new window), and you can define your own custom variables. These variables can then be accessed within the current page by using the $frontmatter (opens new window) variable. We'll be discussing and adding predefined and custom variables and using the $frontmatter (opens new window) variable as we continue to develop the site.

If you have any questions, then check out the Frontmatter (opens new window) documentation.

# Alternative Frontmatter Formats

VuePress (opens new window) also supports JSON (opens new window) and TOML (opens new window) frontmatter syntax.

We'll be using the YAML (opens new window) syntax throughout the tutorials, but if you're interested here's how to set the homepage layout using the other supported syntaxes.

For JSON (opens new window) the frontmatter needs to start and end with curly brackets:

For TOML (opens new window) the frontmatter needs to be explicitly marked as toml:

Now that we have a better understanding of YAML (opens new window) frontmatter blocks, let's discuss the changes to the site after specifying the homepage layout.

# Homepage Layout Changes

Before specifying the homepage layout, the HTML for the homepage consists of the following:

The highlighted lines refer to what gets changed after specifying the homepage layout.

After specifying the homepage layout, the HTML for the homepage consists of the following:

Here are the changes in the HTML after specifying the homepage layout:

  • Line 3: The initial title tag that was set to Hello VuePress | Code Monkeys is now set to Code Monkeys.
  • Line 15: The initial main tag had a class of "page", and it now has a class of "home" and an attribute of aria-labelledby="main-title".
  • Line 16: The initial child elements of the div tag are removed since the # Hello VuePress line was removed from the README.md file, and the div tag is moved to line 25 with an added class of "custom". Line 16 now consists of a header tag with a class of "hero", and the child tags of <h1 id="main-title">Code Monkeys</h1> and <p class="description">" Learn to Code like a Monkey... "</p>.
  • Line 22: The initial footer tag is removed from the page.

# Adding an Image

Before adding a homepage image, we're going to first create a public directory inside of the .vuepress directory.

The directory structure for your site should now look something like this:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

The public directory is a static resource directory which is useful in the following cases:

  • You need to provide static assests that aren't directly referenced in any of your Markdown or component files, e.g., favicons and PWA icons which we'll discuss in more detail in future tutorials.
  • You need to serve shared static assets that are referenced outside of your site, e.g., logo images.
  • You want to reference images using absolute URLs in your Markdown and component files.

In a future tutorial we'll discuss what absolute URLs are in more detail as well as relative URLs, the base URL, and how to use aliases. If you're interested in learning more now, then check out the Assest Handling (opens new window) documentation.

The image we're going to be adding to the homepage is the Code Monkeys full logo. We're going to create an images directory in the public directory. Then we're going to create a code-monkeys-logos directory inside of the images directory. These directories are optional, but will be helpful for organizational purposes when we add more images in the future. Now inside of the code-monkeys-logos directory, we're going to add the full Code Monkeys logo which is named code-monkeys-full-logo.png.

After adding those directories and the image, the directory structure for your site should now look something like this:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ └── code-monkeys-full-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

Here's the full Code Monkeys logo:

Code Monkeys Full Logo

You can download the logo right here from your browser, and it will also be in the tutorial-6 branch of the code-monkeys-blog-tutorials (opens new window) repository.

The logo was created using Canva (opens new window). The site offers a lot of features for free, but some features and images require payment after your free trial is expired. A good alternative to use is GIMP (opens new window).

Here are some other useful online image tools:

Here are some useful resources for coming up with color schemes and palettes for your site:

It's also important to reduce the file sizes of your images by using compression. This will help to optimize your site's bundle size, save bandwidth, and decrease the loading time for your images. Canva (opens new window) and GIMP (opens new window), and some of the other image tools mentioned above offer the ability to compress your images.

Here are some other useful online tools for image compression:

After adding the logo to the site, we can reference the logo in our homepage by adding heroImage: /images/code-monkeys-logos/code-monkeys-full-logo.png to the frontmatter.

Notice you don't need to include .vuepress/public in the path to the logo because whenever you reference assets stored in the public directory it's added automatically.

The README.md file now looks like this:

The homepage image is added as a child element of the <header> tag that has a class of "hero".

Here's what the HTML looks like after adding the homepage image:

# Adding a Title

Since we already added a site title property in the config.js file, we already have a title on the homepage which has the same value as the site title property.

If you prefer to have the site title property and the title on the homepage to be different, then you can add heroText: Homepage Title to the frontmatter.

The README.md file would look like this:

For the Code Monkeys Blog we'll be using the value of the site title property for the homepage title, so the README.md file will look the same as before:

Here's the HTML with the homepage title highlighted:

# Adding a Tagline

Since we already added a site description property in the config.js file, we already have a tagline on the homepage which has the same value as the site description property.

If you prefer to have the site description property and the tagline on the homepage to be different, then you can add tagline: Your tagline to the frontmatter.

We're going to update the tagline on the homepage from the value of the site description to be tagline: Let's get down to Monkey Business.

The README.md file now looks like this:

Here's the HTML with the homepage tagline highlighted:

# Adding an Action Button

An action button provides a link to a preferred page on your site, and it's placed directly below the tagline.

To add an action button you need to add actionText: Text on Action Button and actionLink: /preferred-page/ to the frontmatter.

We're going to add the actionText: Learn to Code like a Monkey → and the actionLink: /topics/ to the homepage of the site.

The README.md file now looks like this:

Here's the HTML with the action button highlighted:

404 When Clicking the Action Button

If you click the action button, it will show the 404 layout because we haven't set up the route to /topics/. In a future tutorial we'll create the Topics page which will fix this issue.

# Adding Features

Features are text that get displayed under the action button that are used to provide a summary of what your site is about.

You can add as many features as you like, but the recommended number is three. Using three features looks the best with the default styling, and it gives a user a quick introduction to your site.

Here's the format for adding features with titles and details to the frontmatter of your page:

We're going to be adding only the feature titles to the homepage of the site.

The README.md file now looks like this:

Here's the HTML with the features highlighted:

A footer typically contains:

  • Authorship Information
  • Copyright Information
  • Contact Information
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)

Here's how to add a footer to the frontmatter of your page:

We're not going to be adding a footer using the frontmatter in the homepage for the site. Instead we're going to be creating a Footer component in a future tutorial that sticks to the bottom of the page.

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

# Final Homepage Layout

Here's the contents of the README.md file for the homepage after adding all of the desired frontmatter:

The contents of your README.md file may be different depending on what metadata you decide to use in the frontmatter of your homepage.

# Homepage Layout Notes

Here are some general notes about the homepage layout:

  • You can disable any frontmatter by setting any of the options to null.
  • Any content after the frontmatter block gets parsed as normal Markdown and will be rendered after the features section.
  • You can also use a fully custom homepage layout. We'll discuss how to use a Custom Layout for Specific Pages (opens new window) in a future tutorial.

# Next Steps

In the next tutorial we'll discuss how to configure the navbar that comes with the default theme (opens new window).

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-7/index.html b/vuepress-tutorial-7/index.html new file mode 100644 index 00000000..210868ff --- /dev/null +++ b/vuepress-tutorial-7/index.html @@ -0,0 +1,149 @@ + + + + + + VuePress Tutorial 7 - Navbar Logo and Links | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 7 - Navbar Logo and Links

By: J the Code Monkey
Posted: Mar 12, 2022 Updated: Apr 19, 2023

# What is a Navbar?

In this tutorial we'll be discussing how to configure the navbar by using the options exposed by the default theme (opens new window). A navbar is used to provide users with a quick and easy way to navigate to the main pages of a site. Most sites display the navbar on most or all of the pages, so it's generally designed to be a global component which allows it to be easily shown on all pages.

The navbar for a site made with VuePress (opens new window) can consist of a logo, a site title, a search box, internal links, languages the site can be translated to, and external links. Depending on how you want to configure your navbar your site can have all or some of these options. We'll be discussing how to configure the logo, site title, internal links, and external links. We'll also discuss how to disable the navbar globally as well as locally for specific pages.

Take a look at the navbar on this page to see what we'll be designing for the Code Monkeys Blog. To see another example you can check out the VuePress (opens new window) site navbar as well.

Using a Custom Theme

Since the options being used for the navbar are provided by the default theme (opens new window), they may be different if you're using a custom theme (opens new window).

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

The navbar logo is used to brand your site, and it provides a link to the homepage. The image we're going to be using for the navbar is the Code Monkeys head and shoulders logo. We're going to be adding the image which is named code-monkeys-head-and-shoulders-logo.png to the code-monkeys-logos directory.

The site title in the navbar also provides a link to the homepage, and it's being set by the value of the title property in the config.js file which we set up in a previous tutorial.

After adding the image, the directory structure for your site should now look something like this:

. +├── .yarn (Optional) +│ ├── releases +│ │ └── yarn-1.22.17.cjs +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ │ ├── images +│ │ │ │ ├── code-monkeys-logos +│ │ │ │ │ ├── code-monkeys-full-logo.png +│ │ │ │ │ └── code-monkeys-head-and-shoulders-logo.png +│ │ └── config.js +│ └── README.md +├── node_modules +├── .gitattributes (Optional) +├── .gitignore +├── .yarnrc (Optional) +├── LICENSE +├── package.json +├── README.md +└── yarn.lock

+

If the directory structure is confusing you, then be sure to take a look at the Adding an Image section from the previous tutorial where it's described in more detail. That section also contains links to resources for creating, editing, and compressing images and for coming up with color schemes and palettes for your site.

Here's the Code Monkeys head and shoulders logo:

Code Monkeys Head and Shoulders Logo

You can download the logo right here from your browser, and it will also be in the tutorial-7 branch of the code-monkeys-blog-tutorials (opens new window) repository.

After adding the image to the site, we can reference it in the config.js file as follows:

Notice you don't need to include .vuepress/public in the path to the navbar logo because whenever you reference assets stored in the public directory it's added automatically.

Also, notice the value of the site title is being set here by using the title property.

Here's what the HTML looks like after adding the navbar logo:

You should now see the navbar logo in the upper left of the page.

To add links to the navbar other than to the homepage we need to add a nav property to the themeConfig object. The nav property expects an array of navbar link objects. We're going to start by adding internal links.

An internal link is a link that points to another section of the same page or to another page on the same site or domain.

To add an internal link you need to add { text: 'Link Name', link: '/path-to-page/' } to the nav property where the text defines the name of the link in the navbar and link defines the path to the preferred page.

For our site we're going to add the following internal links: Topics, Posts, Resources, and Donate.

Here's what the config.js file looks like after adding the internal links:

Here's what the HTML looks like after adding the internal links:

Your navbar should now have Topics, Posts, Resources, and Donate links to the right of the search box.

404 When Clicking the Links

If you click the links they will show the 404 layout because we haven't set up the pages for Topics, Posts, Resources, and Donate yet. In future tutorials we'll create these pages which will fix these issues.

An external link is a link that points to a page outside of the same site or domain.

Adding an external link is the same as adding an internal link except the value provided to the link property is a URL to an external site.

External links automatically get target="_blank" rel="noopener noreferrer" attributes added to the <a> tag. The target attribute specifies where to open the linked document, and the rel attribute specifies the relationship between the current document and the linked document.

These attributes are used to prevent a vulnerability known as reverse tabnabbing (opens new window) which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

You can also customize the values for the target and rel attributes by specifying them as properties in the external link. You can disable the rel attribute for a link by setting it like this rel: false.

For example, we could add an external link to the code-monkeys-blog (opens new window) repository on our site with custom values for target and rel.

Here's what the config.js file looks like after adding the external link:

Here's what the HTML looks like after adding the external link:

No External Link in Navbar

Currently, the Code Monkeys Blog doesn't include an external link in the navbar, but in the future one may be added for the code-monkeys-blog (opens new window) repository using the default values for external links mentioned above.

The links in the navbar can also be dropdown menus if an items property which expects an array of navbar link objects is used instead of just a link property.

For example, the Posts link we made earlier can be turned into a dropdown menu containing links to pages for All Posts and for posts By Topic.

Here's what the config.js file looks like after turning the Posts link into a dropdown menu:

Here's what the HTML looks like after adding a dropdown menu:

Your navbar should now have a Posts dropdown menu containing All Posts and By Topic links.

It's also possible to make a dropdown menu with subgroups where a label is used to group a list of links. This is done by using the items property which expects an array of navbar link objects instead of using just a link property for a dropdown menu entry.

For example, the By Topic link we made earlier can be turned into a subgroup containing links to posts filtered by main topics. Currently, the blog consists of three main topics LeetCode, Node.js, and VuePress, so we'll add each of these as an entry to the By Topic subgroup in our dropdown menu.

Here's what the config.js file looks like after turning the By Topic link in the dropdown menu into a subgroup:

Final config.js File

This is how the config.js file should look at the end of this tutorial if you're following along with the building of the blog.

Here's what the HTML looks like after adding a subgroup to the dropdown menu:

Your navbar should now have a By Topic subgroup in the dropdown menu containing these links LeetCode, Node.js, and VuePress.

To add more links to the By Topic subgroup all you need to do is add another element into its items array.

404 Reminder When Clicking the Links

Clicking the links will show the 404 layout because we haven't set up the pages for the navbar links except for the homepage. In future tutorials we'll create these pages which will fix these issues.

# Disabling the Navbar

You can disable the navbar globally if you prefer to not have a navbar for your site. You also have the option to disable the navbar locally for specific pages. We'll demonstrate how to do each of these below.

# Globally

To disable the navbar globally add the following to your config.js file:

The navbar property is a predefined variable provided by the default theme (opens new window). Check out Predefined Variables Powered By Default Theme (opens new window) for a list of the predefined variables.

# Locally

To disable the navbar locally for a specific page you can add the following to the page's frontmatter:

# Next Steps

In the next tutorial we'll begin the development of the Footer component which will stick to the bottom of the page and consist of social media icons and a made by message.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-8/index.html b/vuepress-tutorial-8/index.html new file mode 100644 index 00000000..776899bb --- /dev/null +++ b/vuepress-tutorial-8/index.html @@ -0,0 +1,186 @@ + + + + + + VuePress Tutorial 8 - Custom Footer | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 8 - Custom Footer

By: J the Code Monkey
Posted: Apr 6, 2022 Updated: Jul 17, 2024

Now it's time to start building the custom footer component for the site. Before creating the footer component, we're going to first describe what a footer is then we'll mention some other options for footers provided by VuePress (opens new window) and the @vuepress/theme-blog (opens new window).

A footer is located at the bottom of a page, and it typically contains:

  • Authorship Information
  • Copyright Information
  • Contact Information
  • Sitemap (Important Links Regardless of Current Page - Similar to Global Navbar)

For the Code Monkeys Blog we'll be building a footer that consists of links to various social media platforms. This gives the user an easy way to interact with various content and the community.

Take a look at the footer on this page to see what we'll be designing for the blog. To see another example you can check out the VuePress (opens new window) site footer as well.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

If you remember from the previous post VuePress Tutorial 6 - Homepage Layout, VuePress (opens new window) provides a way to add a footer to the homepage by adding the following to the homepage layout which is located in docs/README.md:

If you do decide to add a footer using the frontmatter in the homepage, then the HTML will look like this:

VuePress (opens new window) also provides a rich-text footer (opens new window) which gives you the ability to easily add more functionality to your footer like links. To set this type of footer you need to use markdown slot syntax (opens new window) which we won't discuss in detail here.

Since the rich-text footer (opens new window) uses markdown slot syntax (opens new window), you can only add it to markdown files, and it needs to be manaully added to each markdown file to be displayed.

These limitations are why we'll be creating a custom footer component. If you only want to show the footer on one or a few markdown pages, then this option should work fine for you.

The Code Monkeys Blog uses the default theme (opens new window), but if you're interested in using @vuepress/theme-blog (opens new window) be sure to take a look at the footer option (opens new window).

Here are some examples of sites that use the @vuepress/theme-blog (opens new window) footer:

Since we'll be using social media sites that are not currently supported by the footer.contact (opens new window) option, we won't be using this footer. You can contribute social media contact types by making a pull request to the vuepress-theme-blog (opens new window) repository though if you're interested.

Before designing the custom footer component, we need to have an understanding of the following topics:

We won't be describing every detail about each topic above since we only need to understand how to create our custom footer component. If you're interested in learning more now, then check out the links above.

# Writing a Theme

In VuePress (opens new window) you have the ability to make your site into a theme. This gives you the option to publish your site as an npm (opens new window) package which allows other developers to easily install and use your theme.

To write your own theme you need to create a theme directory in the .vuepress directory. The docs directory for your site should now look something like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ └── config.js +│ └── README.md

+

After creating the theme directory, all you need to do is create a Layout.vue file inside of it like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ └── Layout.vue +│ │ └── config.js +│ └── README.md

+

From here you can develop your site like any other Vue (opens new window) application by organizing your theme however you want. Being able to organize your theme however you want provides a lot of flexibility when creating your site, but it's recommended to use the directory structure below when designing your theme:

theme +├── components +│ └── xxx.vue +├── global-components +│ └── xxx.vue +├── layouts +│ ├── Layout.vue (Mandatory) +│ └── xxx.vue +├── styles +│ ├── index.styl +│ └── palette.styl +├── templates +│ ├── dev.html +│ └── ssr.html +├── enhanceApp.js +└── index.js

+

Here's a description for each directory and file in the theme directory:

  • components: Local components used in your theme.
  • global-components: Components in this directory automatically get registered as global, so you don't need to explicitly import them in a file when using them.
  • layouts: Layout components used in your theme. +
    • Layout.vue: A mandatory layout file for every theme.
  • styles: Stores files related to styling your theme. +
    • index.styl: Overrides any default styling and allows you to globally style your site.
    • palette.styl: Overrides any default styling variables and allows you to add any global styling variables.
  • templates: Stores HTML template files. +
    • dev.html: HTML template file for development environment.
    • ssr.html: HTML template file used in the build time.
  • enhanceApp.js: Enhances the theme of your site by giving you the ability to install Vue plugins, add router hooks, etc.
  • index.js: Entry file for for theme configuration.

Reviewing the Recommended Directory Structure for Themes

You may have recognized this directory structure from the VuePress Tutorial 4 - Directory Structure post.

When creating the custom footer component we'll use the global-components directory, the index.js file, and the layouts directory. The global-components directory will be where we add the custom footer component since we want the footer to be available globally. The index.js file will be used to inherit the default theme (opens new window) using theme inheritance (opens new window). Finally, the layouts directory will be where we add the GlobalLayout.vue file which allows us to add our custom footer component to the global layout of the site.

Since we'll be using the vuepress-plugin-svg-icons (opens new window) to add social media icons to our footer, let's go over what plugins (opens new window) are, how to install them, and how to configure them.

# Basics of Plugins

Plugins (opens new window) allow you to add global-level functionality to VuePress (opens new window). You can configure them by passing in options. It's also possible to write your own and publish them as npm (opens new window) packages.

To use a plugin you need to first install it by using either yarn or npm. We'll be using yarn to install all of the plugins for the blog, but the commands for installing the plugins with npm will also be provided. After installing a plugin, you can configure it by adding it to the config.js file.

# VuePress Plugin - SVG Icons

Now that we know the basics, we're ready to install and configure vuepress-plugin-svg-icons (opens new window).

# Using the Tutorials Repo

If you're following along with the tutorials, then when you switch to the tutorial-8 branch you can run the following command to install the package instead of running the installation command:

This will ensure you have the same version used in the blog since the command uses the version specified in the yarn.lock file during the installation.

# Using the Installation Command

To install the plugin in your own project you can run the following command:

Installing the Same Plugin Version

If you want to ensure you're installing the same version being used in the tutorials and blog, then run yarn upgrade @goy/vuepress-plugin-svg-icons@4.2.3.

After installing the plugin, the package.json file should look something like this:

Next we need to configure the plugin by editing the config.js file:

To add the social media icons to the site we need to create an icons directory in the docs directory. Here's what the docs directory should look like after adding the icons directory:

. +├── docs +│ ├── .vuepress +│ ├── icons +│ └── README.md

+

The plugin recommends using iconfont (opens new window) to find Scalable Vector Graphics (SVGs) (opens new window) for your site. After creating an account, you can search for icons and download them. When downloading the icons you have the option to specify a color and size for the icon. For the blog we'll be using a color of #e6e6e6 and a size of 200 which is the default size.

You can download the icons from the tutorial-8 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Using SVG Export

To easily download the icons used in the footer you can also install the browser extension SVG Export (opens new window). After installing the extension, all you need to do is click the extension icon which will extract all of the SVGs including their inline styles from the current page. A new tab will open containing all of the extracted SVGs which you can then download.

We'll be using icons for these social media sites as well as to an RSS feed for Code Monkeys in the footer:

After downloading the icons the icons directory should look something like this:

├── icons +│ ├── Gab.svg +│ ├── GitHub.svg +│ ├── RSS.svg +│ ├── Keybase.svg +│ ├── Telegram.svg +│ ├── Twitter.svg +│ └── YouTube.svg

+

After adding the icons to icons directory, the plugin will automically load the icons and will provide a global component named vp-icon. To use the vp-icon component you need to pass a name attribute to it where the value is the name of the SVG file you want to use.

If you're interested in learning more about the plugin, then check out the vuepress-plugin-svg-icons (opens new window) documentation which contains more information about configuration options, component props, and command-line interface (CLI) commands.

We're now ready to create the custom footer component.

The custom footer component will be added to the global-components directory. Here's what the theme directory will look like after adding the Footer.vue file:

├── theme +│ ├── global-components +│ │ └── Footer.vue

+

Here we're creating a *.vue file which is known as a Single-File Component (SFC) (opens new window). This is a special file format that allows you to encapsulate the HTML in a template tag, the JavaScript in a script tag, and the CSS in a style tag for the component.

Here's what the Footer.vue file looks like after adding these three main sections:

To start we'll add the HTML to the template tag. The contents of the footer will be wrapped in a footer tag containing two child tags a div tag and a p tag. The div tag will contain seven child a tags one for each of the social media icons. The p tag will contain authorship information for the blog.

Each a tag will have the following attributes: href, target, and rel. The href specifies the URL of the page the link goes to, the target specifies where to open the link, and the rel specifies the relationship between the current page and the link. Each a tag will also have a child vp-icon tag which will have the name attribute discussed earlier.

Here's what the Footer.vue file looks like after adding the HTML to the template tag:

Each href has a value of the related URL for the social media site. Each target has a value of _blank, and each rel has a value of noopener noreferrer.

As mentioned in the previous post these values for the target and rel attributes are used to prevent a vulnerability known as reverse tabnabbing (opens new window) which can happen when a user clicks on an external link. All major browsers have fixed this vulnerability, but you can still include these attributes in case a user is using a browser without this security update.

Each name attribute has a value of the name of the related SVG file with the .svg extension omitted.

Next we'll export the JavaScript in the script tag and give the component a name. Here's what the Footer.vue file looks like after updating the script tag:

Finally, we'll style the component by adding the following CSS classes: "footer", "icons", and "made-by". We'll be adding the "footer" class to the footer tag, the "icons" class to the div tag, and the "made-by" class to the p tag. Then we'll add styling for each of the CSS classes in the style tag. Here's what the Footer.vue file looks like after styling:

The lang attribute used in the style tag is used to specify which pre-processor we want to use in the component. Here we're using Stylus (opens new window) which is the default pre-processor used by VuePress (opens new window). If you want to learn how to use a different pre-processor, then check out Using Pre-processors (opens new window).

A scoped attribute is also used in the style tag which means all of the styling only applies to the current component. Take a look at Scoped CSS (opens new window) to learn more about the scoped attribute.

The "footer" class is given display: flex which defines a flex container for all of the direct children of the tag where the "footer" class is used. In this case the "footer" class is used on the footer tag which means the div tag and p tag will be in a flex container. The "footer" class is also given flex-direction: column which means the flex items in the flex container, i.e., the div tag and the p tag will be stacked on top of each other in a column as opposed to the default row setting. The flex items are then given align-items: center which will horizontally center the flex items since the flex direction is set to column. The "footer" class is then given padding: 2.5rem 2.5rem 2rem which will set a padding of 2.5rem for the top, 2.5rem for the left and right, and 2rem for the bottom.

If you're unfamiliar with flexbox, then check out A Complete Guide to Flexbox (opens new window) and Basic Concepts of Flexbox (opens new window). Also, if you're unfamiliar with CSS units like rem, then check out CSS Units (opens new window).

The "icons" class is also given display: flex which means each a tag will be in a flex container since they're all direct children of the div tag which has the "icons" class. The "icons" class is also given margin-bottom: 1.75rem and font-size: 2rem which increases the size of the icons. The CSS selector .icons > a:not(:last-child) is then used which selects all a tags where the parent tag has a class of "icons" except for the last a tag. Each a tag that is selected is given margin-right: 4.6875rem.

If you're unfamiliar with CSS selectors, then check out the CSS Selector Reference (opens new window).

Finally, the "made-by" class is given margin: 0 which removes the margin from the p tag.

If you didn't feel comfortable with the CSS discussed above, then here's a good resource to go through CSS Tutorial (opens new window).

As we continue to develop the blog, we'll add more styling to the footer to make it look presentable in different scenarios like on smaller screen sizes, when a sidebar is present, etc.

Here's what the Footer.vue file should look like:

After adding the global-components directory to the theme directory, you may have noticed the site is rendering a blank page. This is because we created a directory in the theme directory, so VuePress (opens new window) is now looking for a Layout.vue file in the theme directory.

We have the option of creating a layouts directory and placing our own Layout.vue file inside of it, but as previously mentioned we're going to use theme inheritance (opens new window) to inherit the default theme (opens new window).

# Theme Inheritance

Theme inheritance (opens new window) allows you to pass all of the capabilities from a parent theme to a child theme. In our case the parent theme is the default theme (opens new window), and we'll be creating the child theme as we develop the blog.

To create the child theme from the default theme (opens new window), we need to configure the extend (opens new window) option in the index.js file.

First, we need to create the index.js file in the theme directory which should now look like this:

├── theme +│ ├── global-components +│ └── index.js

+

We can now configure the extend (opens new window) option:

The inherited default theme (opens new window) should now be rendering alongside the child theme instead of the blank page.

Missing Layout.vue File

You may have noticed that the Layout.vue file is listed as a mandatory file, but we didn't need to create one in the theme directory. This is because you don't need to explicitly create the Layout.vue file when you're inheriting it from the default theme (opens new window).

The child theme is also able to override files in the parent theme by creating a file with the same name in the same location. We'll go over how to override parent theme files in more detail in future tutorials. You can also override some parent theme files by just using the same name as the parent theme file in the child theme. For example, we're going to override the GlobalLayout.vue file by using the same name for the file in the child theme and the code provided by the documentation.

Now let's create the layouts directory in the theme directory. This is where we'll be adding the GlobalLayout.vue file which again allows us to add our custom footer component to the global layout of the site.

# Using the Global Layout

Here's what the theme directory will look like after creating the GlobalLayout.vue file in the layouts directory:

├── theme +│ ├── global-components +│ ├── layouts +│ │ └── GlobalLayout.vue +│ └── index.js

+

The GlobalLayout.vue file is responsible for handling the global layout of the site. Here's the path to the default GlobalLayout.vue file provided by VuePress (opens new window) node_modules/@vuepress/core/lib/client/components. You can also view the code for the default global layout here (opens new window).

The default global layout gives you the ability to render different layouts depending on if $page.path is defined, i.e., the URL of the page is valid and if $page.frontmatter.layout is defined. If only the $page.path is defined, then the default layout will be used which is Layout. If $page.frontmatter.layout is defined, then the specific layout for that page will be used. If $page.path is not defined, then the NotFound layout is used which is the layout for the 404 page provided by VuePress (opens new window). In most scenarios you don't need to edit the default global layout, but if you want to add a global header or a global footer to your site, then this is a good place to add it.

To override and edit the GlobalLayout.vue file we're going to use the code provided by the globalLayout (opens new window) section from the documentation. The code provided by the documentation basically uses a computed property (opens new window) to determine the layout for a page based on if the URL of the page is defined and if the page uses a specific layout provided by the frontmatter. This is similar to the logic previously described when discussing the default global layout.

Here's the code from the documentation:

We're going to remove the example header tag and replace the example footer tag with our previously created footer component.

Here's what the GlobalLayout.vue file should look like after the changes:

Importing the Footer Component

Notice that we don't need to explicitly import the footer component since we made it a global component by adding it to the global-components directory in the theme directory.

# Next Steps

In the next tutorial we'll discuss how to override the index.styl and palette.styl files to add our own global styling to the site. The global styling will include background color, accent color, text color, etc.

+ Made by & for Code Monkeys 🐵

+ + + diff --git a/vuepress-tutorial-9/index.html b/vuepress-tutorial-9/index.html new file mode 100644 index 00000000..4ff6ec7e --- /dev/null +++ b/vuepress-tutorial-9/index.html @@ -0,0 +1,173 @@ + + + + + + VuePress Tutorial 9 - Styling the Homepage | Code Monkeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# VuePress Tutorial 9 - Styling the Homepage

By: J the Code Monkey
Posted: Aug 31, 2022 Updated: Apr 18, 2023

# Styling Files

The next step we'll be taking in developing the blog is learning how to override the palette.styl and index.styl files which will allow us to add our own global styling to the blog.

To do this we're going to first discuss what the index.styl and palette.styl files are used for. Then we'll take a look at the predefined styling files provided by the default theme (opens new window), and we'll discuss the overriding priority of the files. Finally, we'll implement what we leaned about by styling the homepage of the blog.

Make sure you start the local development server which should be running at http://localhost:8080/ (opens new window) to see the changes we'll be making to the site. If the changes aren't appearing after you save them, then try restarting your local development server.

# palette.styl

The palette.styl file is used to define global styling variables and override the predefined styling variables which in our case are being provided by the default theme (opens new window).

Here are some of the predefined styling variables available to use and override in your site:

We'll be using and overriding some of these predefined styling variables as well as defining our own styling variables as we develop the blog.

Here's a link to the full palette.styl file (opens new window) if you're interested. You can also view the full file by navigating to node_modules/@vuepress/core/lib/client/style/config.styl in your project.

Only Define Variables in palette.styl

You should ONLY define variables in the palette.styl file because it will be imported at the end of the root Stylus config file. This means several files will use it, so once you define your styling variables here they will be duplicated multiple times

# Creating the palette.styl File

Now that we have a good understanding of the palette.styl file, we're going to create the file by first creating a styles directory in the theme directory. The docs directory for your site should now look something like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

After creating the styles directory, we can now create the palette.styl file inside of it like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your palette.styl file in the following location .vuepress/styles/palette.styl.

We'll be updating the palette.styl file later on in this post, but first we're going to take a look at the index.styl file.

# index.styl

The index.styl file is used to add global styles as well as override predefined styles which in our case are being provided by the default theme (opens new window).

Even though it's a Stylus (opens new window) file, you can also use normal CSS syntax if you prefer.

We won't discuss the predefined index.styl file in detail right now. It's just meant to be a reference in case you want to look for a specific style you want to override, or if you're interested in learning more about the predefined styling.

Here's the predefined index.styl which you can override and add your own styles to:

Here's a link to the index.styl file (opens new window) as well and the path to the file in your project node_modules/@vuepress/theme-default/styles/index.styl.

As we develop the blog we'll be using and overriding some of these predefined styles as well as defining our own styles.

Importing and Requiring Stylus and CSS Files

You may have noticed in the index.styl file that we're requiring other files, e.g., @require './config'. We'll discuss how to import and require .styl and .css files in a future post.

# Creating the index.styl File

Now that we have a good understanding of the index.styl file, we're going to create the file for the blog inside of the styles directory that we previously created. The docs directory for your site should now look something like this:

. +├── docs +│ ├── .vuepress +│ │ ├── public +│ │ ├── theme +│ │ │ ├── global-components +│ │ │ ├── layouts +│ │ │ ├── styles +│ │ │ │ ├── index.styl +│ │ │ │ └── palette.styl +│ │ │ └── index.js +│ │ │ +│ │ └── config.js +│ │ +│ ├── icons +│ └── README.md

+

Alternative Directory Structure

If you recall from the VuePress Tutorial 4 - Directory Structure post, you also have the option of creating your index.styl file in the following location .vuepress/styles/index.styl.

We'll be updating the index.styl file we just created later on in this post, but first we're going to take a look at the overriding priority.

# Overriding

Both the palette.styl and index.styl files follow a certain overriding priority.

# palette.styl

The user's palette.styl file which is located in .vuepress/styles/palette.styl has a higher priority than the theme's palette.styl file which is located in theme/styles/palette.styl. The theme's palette.styl file has a higher priority than any predefined palette.styl file which is located in node_modules/@vuepress/core/lib/client/style/config.styl in the case of the default theme (opens new window).

This means a theme can define it's own global styling variables and a user can override them as they see fit.

Here's an example of a global styling variable defined in each type of palette.styl file to make this concept clearer:

Here, the final value for $accentColor will be #ccff33.

Absence of User palette.styl File

As we develop the blog we won't be using the user's palette.styl file located in .vuepress/styles/palette.styl We'll just be using the theme's palette.styl file located in theme/styles/palette.styl which will allow us to override any predefined variables.

# index.styl

The same overriding priority applies to the index.styl file as well. So, a user's index.styl file which is located in .vuepress/styles/index.styl has a higher priority than the theme's index.styl file which is located in theme/styles/index.styl. The theme's index.styl file has a higher priority than any predefined index.styl file which is located in node_modules/@vuepress/theme-default/styles/index.styl in the case of the default theme (opens new window).

This means a theme can define it's own global styles and a user can override them as they see fit.

Both the user's index.styl file and the theme's index.styl file will get generated into the final CSS file used in the site, but the user's style gets generated later which is what gives it a higher priority than the theme's style.

Here's an example of a style defined in a user's index.styl and a style defined in a theme's index.styl file to make this concept clearer:

Here's the final CSS file generated for the site:

Notice how the user's style comes after the theme's style in the final CSS file. This is what gives the user's style a higher priority than the theme's style.

Absence of User index.styl File

As we develop the blog we won't be using the user's index.styl file located in .vuepress/styles/index.styl. Instead we'll just be using the theme's index.styl file located in theme/styles/index.styl which will allow us to override any predefined styles.

Now that we have a good understanding of how overriding works for both the palette.styl and index.styl files, we're now ready to override some predefined styling and add our own styling to the homepage of the blog.

# Homepage Styles

To start the homepage styling we'll be overriding and adding global styling variables to the palette.styl file. These global styling variables will then be used in the index.styl file as well as other files as we continue the development of the blog.

When overriding and adding styles to your site you can look at the predefined styling files to determine what properties you need to override. Along with looking at the predefined styling files you can also inspect your browser, go to the Elements tab, and then locate a tag or class that you want to override.

Be sure to add each block of code below one at a time to your project then view the changes in the browser to get a better understanding of what each block is responsible for.

If you're developing your own site, then you can check out these useful resources for coming up with color schemes and palettes for your site:

If you don't feel comfortable with the CSS discussed below, then here's a good resource to go through CSS Tutorial (opens new window).

You can also view the palette.styl and index.styl files in the tutorial-9 branch of the code-monkeys-blog-tutorials (opens new window) repository.

Now let's override and add some global styling variables to the palette.styl file.

# palette.styl

Here's what the palette.styl file looks like after overriding some predefined global styling variables and adding our own global styling variables:

  • $backgroundColor is used as the background color of the homepage as well as the whole blog.
  • $accentColor is used to color the action button on the homepage and to add styling to internal and external links.
  • $textColor is used to color the text on the homepage as well as the navbar text and other text throughout the blog.
  • $borderColor is used to style the border in the features section as well as the border in the navbar and other borders throughout the blog.
  • $darkBorderColor will be used to style the border and box shadow around the main card on the homepage.

Now let's take a look at overriding and adding some styles to the index.styl file.

# index.styl

We're going to start by overriding the background-color in the html tag:

  • Updates the background-color of the content below the Footer component to be the color specified by the $backgroundColor global styling variable we just added in the palette.styl file.

Next we'll override the background-color in the body tag:

  • Updates the background-color of the body of the site to be the color specified by the $backgroundColor global styling variable.

Now we're going to update the padding around the main tag which we'll select using the home class:

  • Updates the padding of the main tag with a class of home to be zero on all sides.

We're now going to update the styles for the hero class which is given to the header tag inside of the main tag and contains the logo, the title, the description, and the action button.

  • margin-left: 2rem adds a margin of 2rem to the left of the header tag.
  • margin-right: 2rem adds a margin of 2rem to the right of the header tag.
  • border: 0.125rem solid $darkBorderColor adds a border around the header tag with a thickness of 0.125rem, with a style of solid, and has a color of $darkBorderColor which was defined in the palette.styl file.
  • box-shadow: 0 0.5rem 1rem 0 $darkBorderColor adds a box shadow around the header tag.
  • border-radius: 5.625rem adds a border radius to the header tag border.
  • margin-bottom: 0.625rem adds a margin of 0.625rem to the bottom of the header tag.
  • padding: 2rem adds padding of 2rem around the header tag.

Here's a resource for the CSS box-shadow Property (opens new window) if you are interested in learning more about how it works.

Finally, we're going to update the styles for the features class which is given to the div tag inside of the main tag and contains the Learn, Code, and Crush text.

  • margin-left: 2rem adds a margin of 2rem to the left of the div tag.
  • margin-right: 2rem adds a margin of 2rem to the right of the div tag.
  • border-top: 0.125rem solid $borderColor adds a border to the top of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • border-bottom: 0.125rem solid $borderColor adds a border to the bottom of the div tag with a thickness of 0.125rem, with a style of solid, and has a color of $borderColor which was defined in the palette.styl file.
  • text-align: center horizontally aligns the text in each div tag with a class of feature that are inside of the div tag with a class of features.
  • font-size: 1.4rem sets a font size of 1.4rem for the h2 tags that are inside of the div tag with a class of feature.

# Next Steps

You may have noticed the main card on the homepage is being covered by the navbar. In the next tutorial we'll be fixing this issue as well as applying some hover effects to the logo and to the box shadow around the main card on the homepage.

+ Made by & for Code Monkeys 🐵

+ + +