From 86fc39f66718ce726b2e83d3828a20fe401bd6e2 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Sat, 25 Dec 2021 10:51:48 +1100 Subject: [PATCH 01/68] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20to=20Tailw?= =?UTF-8?q?ind=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 540 ++++------------------------------------------ package.json | 5 +- 2 files changed, 47 insertions(+), 498 deletions(-) diff --git a/package-lock.json b/package-lock.json index fdbc0af2a..7124c83b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,23 @@ { "name": "hugo-congo-theme", - "version": "1.5.3", + "version": "1.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "hugo-congo-theme", - "version": "1.5.3", + "version": "1.6.0", "hasInstallScript": true, "license": "MIT", "devDependencies": { - "@tailwindcss/typography": "^0.4.1", + "@tailwindcss/typography": "^0.5.0", "chart.js": "^3.6.0", "katex": "^0.15.1", "mermaid": "^8.13.3", "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwind-underline-utils": "^1.1.3", - "tailwindcss": "^2.2.19", + "tailwindcss": "^3.0.7", "vendor-copy": "^3.0.1" } }, @@ -161,9 +160,9 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", - "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz", + "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==", "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", @@ -172,7 +171,7 @@ "lodash.uniq": "^4.5.0" }, "peerDependencies": { - "tailwindcss": ">=2.0.0" + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders" } }, "node_modules/@types/parse-json": { @@ -336,15 +335,6 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -364,9 +354,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001287", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==", + "version": "1.0.30001292", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz", + "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==", "dev": true, "peer": true, "funding": { @@ -429,16 +419,6 @@ "node": ">= 6" } }, - "node_modules/color": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-4.1.0.tgz", - "integrity": "sha512-o2rkkxyLGgYoeUy1OodXpbPAQNmlNBrirQ8ODO8QutzDiDMNdezSOZLNnusQ6pUpCQJUsaJIo9DZJKqa2HgH7A==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -457,16 +437,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -498,21 +468,6 @@ "node": ">=10" } }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", - "dev": true - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1333,9 +1288,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.24", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz", - "integrity": "sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg==", + "version": "1.4.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.27.tgz", + "integrity": "sha512-uZ95szi3zUbzRDx1zx/xnsCG+2xgZyy57pDOeaeO4r8zx5Dqe8Jv1ti8cunvBwJHVI5LzPuw8umKwZb3WKYxSQ==", "dev": true, "peer": true }, @@ -1430,20 +1385,6 @@ "url": "https://www.patreon.com/infusion" } }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1502,12 +1443,6 @@ "node": ">=10.13.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, "node_modules/graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -1538,33 +1473,6 @@ "node": ">=8" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -1669,20 +1577,6 @@ "node": ">=8" } }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, "node_modules/is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", @@ -1737,18 +1631,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/katex": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.1.tgz", @@ -1810,12 +1692,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", - "dev": true - }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -1879,18 +1755,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "node_modules/modern-normalize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", - "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/moment-mini": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz", @@ -1918,15 +1782,6 @@ "ncp": "bin/ncp" } }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -2124,9 +1979,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz", - "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -2169,30 +2024,6 @@ "prettier": "^2.0.0" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", - "dev": true, - "dependencies": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" - }, - "bin": { - "purgecss": "bin/purgecss.js" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2237,22 +2068,6 @@ "node": ">=8.10.0" } }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dev": true, - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -2285,18 +2100,6 @@ "node": ">=0.10.0" } }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2353,21 +2156,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/source-map-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", @@ -2395,48 +2183,31 @@ "node": ">=8" } }, - "node_modules/tailwind-underline-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tailwind-underline-utils/-/tailwind-underline-utils-1.1.3.tgz", - "integrity": "sha512-8FSynb8KOBFj7Y1wurCzx0MBAQtdOuRWlCk5wXFImI5ZfJ2yiRLvNbybiJ6pjWz5Htr+lStnowcTXl/00s8xRw==", - "dev": true - }, "node_modules/tailwindcss": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.19.tgz", - "integrity": "sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.7.tgz", + "integrity": "sha512-rZdKNHtC64jcQncLoWOuCzj4lQDTAgLtgK3WmQS88tTdpHh9OwLqULTQxI3tw9AMJsqSpCKlmcjW/8CSnni6zQ==", "dev": true, "dependencies": { "arg": "^5.0.1", - "bytes": "^3.0.0", "chalk": "^4.1.2", "chokidar": "^3.5.2", - "color": "^4.0.1", + "color-name": "^1.1.4", "cosmiconfig": "^7.0.1", "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", "normalize-path": "^3.0.0", "object-hash": "^2.2.0", "postcss-js": "^3.0.3", "postcss-load-config": "^3.1.0", "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", + "postcss-selector-parser": "^6.0.7", + "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0", "tmp": "^0.2.1" }, @@ -2485,15 +2256,6 @@ "ulid": "bin/cli.js" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2652,9 +2414,9 @@ } }, "@tailwindcss/typography": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", - "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz", + "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==", "dev": true, "requires": { "lodash.castarray": "^4.4.0", @@ -2777,12 +2539,6 @@ "picocolors": "^1.0.0" } }, - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2796,9 +2552,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001287", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==", + "version": "1.0.30001292", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz", + "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==", "dev": true, "peer": true }, @@ -2845,16 +2601,6 @@ } } }, - "color": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-4.1.0.tgz", - "integrity": "sha512-o2rkkxyLGgYoeUy1OodXpbPAQNmlNBrirQ8ODO8QutzDiDMNdezSOZLNnusQ6pUpCQJUsaJIo9DZJKqa2HgH7A==", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2870,16 +2616,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -2905,18 +2641,6 @@ "yaml": "^1.10.0" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", - "dev": true - }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3605,9 +3329,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.24", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz", - "integrity": "sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg==", + "version": "1.4.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.27.tgz", + "integrity": "sha512-uZ95szi3zUbzRDx1zx/xnsCG+2xgZyy57pDOeaeO4r8zx5Dqe8Jv1ti8cunvBwJHVI5LzPuw8umKwZb3WKYxSQ==", "dev": true, "peer": true }, @@ -3682,17 +3406,6 @@ "dev": true, "peer": true }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3735,12 +3448,6 @@ "is-glob": "^4.0.3" } }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, "graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -3765,30 +3472,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -3871,20 +3554,6 @@ "binary-extensions": "^2.0.0" } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, "is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", @@ -3927,16 +3596,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, "katex": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.1.tgz", @@ -3988,12 +3647,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", - "dev": true - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -4048,12 +3701,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "modern-normalize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", - "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", - "dev": true - }, "moment-mini": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz", @@ -4072,15 +3719,6 @@ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -4209,9 +3847,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz", - "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -4239,24 +3877,6 @@ "ulid": "^2.3.0" } }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", - "dev": true, - "requires": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" - } - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4278,24 +3898,6 @@ "picomatch": "^2.2.1" } }, - "reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dev": true, - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -4318,18 +3920,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4366,23 +3956,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, "source-map-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", @@ -4404,48 +3977,31 @@ "has-flag": "^4.0.0" } }, - "tailwind-underline-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tailwind-underline-utils/-/tailwind-underline-utils-1.1.3.tgz", - "integrity": "sha512-8FSynb8KOBFj7Y1wurCzx0MBAQtdOuRWlCk5wXFImI5ZfJ2yiRLvNbybiJ6pjWz5Htr+lStnowcTXl/00s8xRw==", - "dev": true - }, "tailwindcss": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.19.tgz", - "integrity": "sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.7.tgz", + "integrity": "sha512-rZdKNHtC64jcQncLoWOuCzj4lQDTAgLtgK3WmQS88tTdpHh9OwLqULTQxI3tw9AMJsqSpCKlmcjW/8CSnni6zQ==", "dev": true, "requires": { "arg": "^5.0.1", - "bytes": "^3.0.0", "chalk": "^4.1.2", "chokidar": "^3.5.2", - "color": "^4.0.1", + "color-name": "^1.1.4", "cosmiconfig": "^7.0.1", "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", "normalize-path": "^3.0.0", "object-hash": "^2.2.0", "postcss-js": "^3.0.3", "postcss-load-config": "^3.1.0", "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", + "postcss-selector-parser": "^6.0.7", + "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0", "tmp": "^0.2.1" } @@ -4474,12 +4030,6 @@ "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", "dev": true }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 3b3db581b..998dc9e24 100644 --- a/package.json +++ b/package.json @@ -29,15 +29,14 @@ }, "homepage": "https://github.com/jpanther/congo#readme", "devDependencies": { - "@tailwindcss/typography": "^0.4.1", + "@tailwindcss/typography": "^0.5.0", "chart.js": "^3.6.0", "katex": "^0.15.1", "mermaid": "^8.13.3", "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwind-underline-utils": "^1.1.3", - "tailwindcss": "^2.2.19", + "tailwindcss": "^3.0.7", "vendor-copy": "^3.0.1" }, "vendorCopy": [], From 5662a11f2d620d283b8baf0a62f69e3b265090fd Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Sat, 25 Dec 2021 10:52:47 +1100 Subject: [PATCH 02/68] =?UTF-8?q?=E2=9A=B0=EF=B8=8F=20Remove=20redundant?= =?UTF-8?q?=20Tailwind=20v2=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tailwind.config.js | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/tailwind.config.js b/tailwind.config.js index d8e6bda65..207d01314 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,15 +1,12 @@ const colors = require("tailwindcss/colors"); module.exports = { - mode: "jit", - purge: { - content: [ - "./layouts/**/*.html", - "./content/**/*.{html,md}", - "./themes/congo/layouts/**/*.html", - "./themes/congo/content/**/*.{html,md}", - ], - }, + content: [ + "./layouts/**/*.html", + "./content/**/*.{html,md}", + "./themes/congo/layouts/**/*.html", + "./themes/congo/content/**/*.{html,md}", + ], darkMode: "class", theme: { colors: { @@ -52,12 +49,6 @@ module.exports = { 900: "var(--color-secondary-900)", }, }, - underlineOffset: { - small: "2px", - }, - underlineThickness: { - bold: "2px", - }, extend: { typography: (theme) => ({ DEFAULT: { @@ -70,10 +61,10 @@ module.exports = { textDecorationColor: theme("colors.primary.300"), fontWeight: "500", "&:hover": { - backgroundColor: theme("colors.primary.600"), - borderRadius: "0.09rem", color: theme("colors.neutral.DEFAULT"), textDecoration: "none", + backgroundColor: theme("colors.primary.600"), + borderRadius: "0.09rem", }, }, strong: { @@ -222,10 +213,5 @@ module.exports = { }), }, }, - variants: { - extend: { - typography: ["dark"], - }, - }, - plugins: [require("@tailwindcss/typography"), require("tailwind-underline-utils")], + plugins: [require("@tailwindcss/typography")], }; From a1006c4f7b32351de08f1d3deb062a49a7e3aaea Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Sat, 25 Dec 2021 10:53:46 +1100 Subject: [PATCH 03/68] =?UTF-8?q?=F0=9F=92=84=20Adopt=20new=20Tailwind=20v?= =?UTF-8?q?3=20classes=20and=20colour=20names?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/compiled/main.css | 817 ++++++++++++----------------- assets/css/main.css | 7 +- assets/css/schemes/avocado.css | 2 +- assets/css/schemes/fire.css | 2 +- assets/css/schemes/ocean.css | 2 +- assets/css/schemes/slate.css | 54 +- exampleSite/content/_index.md | 2 +- layouts/_default/baseof.html | 2 +- layouts/_default/taxonomy.html | 2 +- layouts/partials/article-link.html | 4 +- layouts/partials/breadcrumbs.html | 2 +- layouts/partials/footer.html | 6 +- layouts/partials/header.html | 4 +- layouts/shortcodes/alert.html | 2 +- 14 files changed, 383 insertions(+), 525 deletions(-) diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index a47d91440..c84661b85 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1,84 +1,67 @@ /*! Congo v1.6.0 | MIT License | https://github.com/jpanther/congo */ -/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */ - -/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ +/*! tailwindcss v3.0.7 | MIT License | https://tailwindcss.com */ /* -Document -======== -*/ - -/** -Use a better box model (opinionated). +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: currentColor; + /* 2 */ } -/** -Use a more readable tab size (opinionated). -*/ - -html { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; +::before, +::after { + --tw-content: ''; } -/** -1. Correct the line height in all browsers. +/* +1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. */ html { - line-height: 1.15; + line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ } /* -Sections -======== -*/ - -/** -Remove the margin in all browsers. +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; -} - -/** -Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) -*/ - -body { - font-family: - system-ui, - -apple-system, /* Firefox supports this but not yet `system-ui` */ - 'Segoe UI', - Roboto, - Helvetica, - Arial, - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji'; + /* 1 */ + line-height: inherit; + /* 2 */ } /* -Grouping content -================ -*/ - -/** 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. */ hr { @@ -86,14 +69,11 @@ hr { /* 1 */ color: inherit; /* 2 */ + border-top-width: 1px; + /* 3 */ } /* -Text-level semantics -==================== -*/ - -/** Add the correct text decoration in Chrome, Edge, and Safari. */ @@ -102,7 +82,30 @@ abbr[title] { text-decoration: underline dotted; } -/** +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* Add the correct font weight in Edge and Safari. */ @@ -111,28 +114,22 @@ strong { font-weight: bolder; } -/** -1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) -2. Correct the odd 'em' font sizing in all browsers. +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { - font-family: - ui-monospace, - SFMono-Regular, - Consolas, - 'Liberation Mono', - Menlo, - monospace; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-size: 1em; /* 2 */ } -/** +/* Add the correct font size in all browsers. */ @@ -140,8 +137,8 @@ small { font-size: 80%; } -/** -Prevent 'sub' and 'sup' elements from affecting the line height in all browsers. +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, @@ -161,13 +158,9 @@ sup { } /* -Tabular data -============ -*/ - -/** 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. */ table { @@ -175,16 +168,14 @@ table { /* 1 */ border-color: inherit; /* 2 */ + border-collapse: collapse; + /* 3 */ } /* -Forms -===== -*/ - -/** 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. */ button, @@ -196,25 +187,28 @@ textarea { /* 1 */ font-size: 100%; /* 1 */ - line-height: 1.15; + line-height: inherit; + /* 1 */ + color: inherit; /* 1 */ margin: 0; /* 2 */ + padding: 0; + /* 3 */ } -/** +/* Remove the inheritance of text transform in Edge and Firefox. -1. Remove the inheritance of text transform in Firefox. */ button, select { - /* 1 */ text-transform: none; } -/** -Correct the inability to style clickable types in iOS and Safari. +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. */ button, @@ -222,43 +216,30 @@ button, [type='reset'], [type='submit'] { -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ } -/** -Remove the inner border and padding in Firefox. -*/ - -::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** -Restore the focus styles unset by the previous rule. +/* +Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { - outline: 1px dotted ButtonText; + outline: auto; } -/** -Remove the additional ':invalid' styles in Firefox. -See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } -/** -Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. -*/ - -legend { - padding: 0; -} - -/** +/* Add the correct vertical alignment in Chrome and Firefox. */ @@ -266,7 +247,7 @@ progress { vertical-align: baseline; } -/** +/* Correct the cursor style of increment and decrement buttons in Safari. */ @@ -275,7 +256,7 @@ Correct the cursor style of increment and decrement buttons in Safari. height: auto; } -/** +/* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ @@ -287,7 +268,7 @@ Correct the cursor style of increment and decrement buttons in Safari. /* 2 */ } -/** +/* Remove the inner padding in Chrome and Safari on macOS. */ @@ -295,9 +276,9 @@ Remove the inner padding in Chrome and Safari on macOS. -webkit-appearance: none; } -/** +/* 1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to 'inherit' in Safari. +2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { @@ -307,11 +288,6 @@ Remove the inner padding in Chrome and Safari on macOS. /* 2 */ } -/* -Interactive -=========== -*/ - /* Add the correct display in Chrome and Safari. */ @@ -320,15 +296,9 @@ summary { display: list-item; } -/** - * Manually forked from SUIT CSS Base: https://github.com/suitcss/base - * A thin layer on top of normalize.css that provides a starting point more - * suitable for web applications. - */ - -/** - * Removes the default spacing and border for appropriate elements. - */ +/* +Removes the default spacing and border for appropriate elements. +*/ blockquote, dl, @@ -346,221 +316,80 @@ pre { margin: 0; } -button { - background-color: transparent; - background-image: none; -} - fieldset { margin: 0; padding: 0; } +legend { + padding: 0; +} + ol, -ul { +ul, +menu { list-style: none; margin: 0; padding: 0; } -/** - * Tailwind custom reset styles - */ - -/** - * 1. Use the user's configured `sans` font-family (with Tailwind's default - * sans-serif font stack as a fallback) as a sane default. - * 2. Use Tailwind's default "normal" line-height so the user isn't forced - * to override it to ensure consistency even when using the default theme. - */ - -html { - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 1 */ - line-height: 1.5; - /* 2 */ -} - -/** - * Inherit font-family and line-height from `html` so users can set them as - * a class directly on the `html` element. - */ - -body { - font-family: inherit; - line-height: inherit; -} - -/** - * 1. Prevent padding and border from affecting element width. - * - * We used to set this in the html element and inherit from - * the parent element for everything else. This caused issues - * in shadow-dom-enhanced elements like
where the content - * is wrapped by a div with box-sizing set to `content-box`. - * - * https://github.com/mozdevs/cssremedy/issues/4 - * - * - * 2. Allow adding a border to an element by just adding a border-width. - * - * By default, the way the browser specifies that an element should have no - * border is by setting it's border-style to `none` in the user-agent - * stylesheet. - * - * In order to easily add borders to elements by just setting the `border-width` - * property, we change the default border-style for all elements to `solid`, and - * use border-width to hide them instead. This way our `border` utilities only - * need to set the `border-width` property instead of the entire `border` - * shorthand, making our border utilities much more straightforward to compose. - * - * https://github.com/tailwindcss/tailwindcss/pull/116 - */ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: currentColor; - /* 2 */ -} - /* - * Ensure horizontal rules are visible by default - */ - -hr { - border-top-width: 1px; -} - -/** - * Undo the `border-style: none` reset that Normalize applies to images so that - * our `border-{width}` utilities have the expected effect. - * - * The Normalize reset is unnecessary for us since we default the border-width - * to 0 on all elements. - * - * https://github.com/tailwindcss/tailwindcss/issues/362 - */ - -img { - border-style: solid; -} +Prevent resizing textareas horizontally by default. +*/ textarea { resize: vertical; } +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; - color: #a1a1aa; + /* 1 */ + color: #9ca3af; + /* 2 */ } input:-ms-input-placeholder, textarea:-ms-input-placeholder { opacity: 1; - color: #a1a1aa; + /* 1 */ + color: #9ca3af; + /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; - color: #a1a1aa; + /* 1 */ + color: #9ca3af; + /* 2 */ } +/* +Set the default cursor for buttons. +*/ + button, [role="button"] { cursor: pointer; } -/** - * Override legacy focus reset from Normalize with modern Firefox focus styles. - * - * This is actually an improvement over the new defaults in Firefox in our testing, - * as it triggers the better focus styles even for links, which still use a dotted - * outline in Firefox by default. - */ - -:-moz-focusring { - outline: auto; -} - -table { - border-collapse: collapse; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/** - * Reset links to optimize for opt-in styling instead of - * opt-out. - */ - -a { - color: inherit; - text-decoration: inherit; -} - -/** - * Reset form element properties that are easy to forget to - * style explicitly so you don't inadvertently introduce - * styles that deviate from your design system. These styles - * supplement a partial reset that is already applied by - * normalize.css. - */ - -button, -input, -optgroup, -select, -textarea { - padding: 0; - line-height: inherit; - color: inherit; -} - -/** - * Use the configured 'mono' font family for elements that - * are expected to be rendered with a monospace font, falling - * back to the system monospace stack if there is no configured - * 'mono' font family. - */ +/* +Make sure disabled buttons don't get the pointer cursor. +*/ -pre, -code, -kbd, -samp { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +:disabled { + cursor: default; } -/** - * 1. Make replaced elements `display: block` by default as that's - * the behavior you want almost all of the time. Inspired by - * CSS Remedy, with `svg` added as well. - * - * https://github.com/mozdevs/cssremedy/issues/14 - * - * 2. Add `vertical-align: middle` to align replaced elements more - * sensibly by default when overriding `display` by adding a - * utility like `inline`. - * - * This can trigger a poorly considered linting error in some - * tools but is included by design. - * - * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210 - */ +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ img, svg, @@ -576,12 +405,9 @@ object { /* 2 */ } -/** - * Constrain images and videos to the parent width and preserve - * their intrinsic aspect ratio. - * - * https://github.com/mozdevs/cssremedy/issues/14 - */ +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ img, video { @@ -589,9 +415,9 @@ video { height: auto; } -/** - * Ensure the default browser behavior of the `hidden` attribute. - */ +/* +Ensure the default browser behavior of the `hidden` attribute. +*/ [hidden] { display: none; @@ -606,8 +432,8 @@ video { max-width: 65ch; } -.prose [class~="lead"] { - color: #4b5563; +.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)) { + color: var(--tw-prose-lead); font-size: 1.25em; line-height: 1.6; margin-top: 1.2em; @@ -622,91 +448,81 @@ video { text-decoration-color: var(--color-primary-300); } -.prose a:hover { - background-color: var(--color-primary-600); - border-radius: 0.09rem; +:where(.prose a:hover):not(:where([class~="not-prose"] *)) { color: var(--color-neutral); text-decoration: none; + background-color: var(--color-primary-600); + border-radius: 0.09rem; } -.prose strong { +.prose :where(strong):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-900); font-weight: 600; } -.prose ol[type="A"] { - --list-counter-style: upper-alpha; +.prose :where(ol):not(:where([class~="not-prose"] *)) { + list-style-type: decimal; + padding-left: 1.625em; } -.prose ol[type="a"] { - --list-counter-style: lower-alpha; +.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)) { + list-style-type: upper-alpha; } -.prose ol[type="A" s] { - --list-counter-style: upper-alpha; +.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)) { + list-style-type: lower-alpha; } -.prose ol[type="a" s] { - --list-counter-style: lower-alpha; +.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)) { + list-style-type: upper-alpha; } -.prose ol[type="I"] { - --list-counter-style: upper-roman; +.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)) { + list-style-type: lower-alpha; } -.prose ol[type="i"] { - --list-counter-style: lower-roman; +.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)) { + list-style-type: upper-roman; } -.prose ol[type="I" s] { - --list-counter-style: upper-roman; +.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)) { + list-style-type: lower-roman; } -.prose ol[type="i" s] { - --list-counter-style: lower-roman; +.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)) { + list-style-type: upper-roman; } -.prose ol[type="1"] { - --list-counter-style: decimal; +.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)) { + list-style-type: lower-roman; } -.prose ol > li { - position: relative; - padding-left: 1.75em; +.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)) { + list-style-type: decimal; } -.prose ol > li::before { - content: counter(list-item, var(--list-counter-style, decimal)) "."; - position: absolute; - font-weight: 400; - color: var(--color-neutral-800); - left: 0; +.prose :where(ul):not(:where([class~="not-prose"] *)) { + list-style-type: disc; + padding-left: 1.625em; } -.prose ul > li { - position: relative; - padding-left: 1.75em; +.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); } -.prose ul > li::before { - content: ""; - position: absolute; - background-color: var(--color-neutral-500); - border-radius: 50%; - width: 0.375em; - height: 0.375em; - top: calc(0.875em - 0.1875em); - left: 0.25em; +.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); } -.prose hr { +.prose :where(hr):not(:where([class~="not-prose"] *)) { border-color: var(--color-neutral-200); border-top-width: 1px; margin-top: 3em; margin-bottom: 3em; } -.prose blockquote { +.prose :where(blockquote):not(:where([class~="not-prose"] *)) { font-weight: 500; font-style: italic; color: var(--color-neutral-800); @@ -718,15 +534,15 @@ video { padding-left: 1em; } -.prose blockquote p:first-of-type::before { +.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"] *))::before { content: open-quote; } -.prose blockquote p:last-of-type::after { +.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"] *))::after { content: close-quote; } -.prose h1 { +.prose :where(h1):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-900); font-weight: 800; font-size: 2.25em; @@ -736,7 +552,11 @@ video { position: relative; } -.prose h2 { +.prose :where(h1 strong):not(:where([class~="not-prose"] *)) { + font-weight: 900; +} + +.prose :where(h2):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-800); font-weight: 700; font-size: 1.5em; @@ -746,7 +566,11 @@ video { position: relative; } -.prose h3 { +.prose :where(h2 strong):not(:where([class~="not-prose"] *)) { + font-weight: 800; +} + +.prose :where(h3):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-800); font-weight: 600; font-size: 1.25em; @@ -756,7 +580,11 @@ video { position: relative; } -.prose h4 { +.prose :where(h3 strong):not(:where([class~="not-prose"] *)) { + font-weight: 700; +} + +.prose :where(h4):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-800); font-weight: 600; margin-top: 1.5em; @@ -765,35 +593,45 @@ video { position: relative; } -.prose figure figcaption { - color: #6b7280; +.prose :where(h4 strong):not(:where([class~="not-prose"] *)) { + font-weight: 700; +} + +.prose :where(figure > *):not(:where([class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; +} + +.prose :where(figcaption):not(:where([class~="not-prose"] *)) { + color: var(--tw-prose-captions); font-size: 0.875em; line-height: 1.4285714; margin-top: 0.8571429em; } -.prose code { +.prose :where(code):not(:where([class~="not-prose"] *)) { color: var(--color-secondary-700); font-weight: 600; font-size: 0.875em; } -.prose code::before { +.prose :where(code):not(:where([class~="not-prose"] *))::before { content: "`"; } -.prose code::after { +.prose :where(code):not(:where([class~="not-prose"] *))::after { content: "`"; } -.prose a code { +.prose :where(a code):not(:where([class~="not-prose"] *)) { color: var(--color-secondary-700); } -.prose pre { +.prose :where(pre):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-700); background-color: var(--color-neutral-50); overflow-x: auto; + font-weight: 400; font-size: 0.875em; line-height: 1.7142857; margin-top: 1.7142857em; @@ -805,27 +643,27 @@ video { padding-left: 1.1428571em; } -.prose pre code { +.prose :where(pre code):not(:where([class~="not-prose"] *)) { background-color: transparent; border-width: 0; border-radius: 0; padding: 0; - font-weight: 400; + font-weight: inherit; color: var(--color-neutral-700); font-size: inherit; font-family: inherit; line-height: inherit; } -.prose pre code::before { +.prose :where(pre code):not(:where([class~="not-prose"] *))::before { content: none; } -.prose pre code::after { +.prose :where(pre code):not(:where([class~="not-prose"] *))::after { content: none; } -.prose table { +.prose :where(table):not(:where([class~="not-prose"] *)) { width: 100%; table-layout: auto; text-align: left; @@ -835,31 +673,32 @@ video { line-height: 1.7142857; } -.prose thead { - color: var(--color-neutral-800); - font-weight: 600; +.prose :where(thead):not(:where([class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--color-neutral-500); + color: var(--color-neutral-800); } -.prose thead th { +.prose :where(thead th):not(:where([class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; vertical-align: bottom; padding-right: 0.5714286em; padding-bottom: 0.5714286em; padding-left: 0.5714286em; } -.prose tbody tr { +.prose :where(tbody tr):not(:where([class~="not-prose"] *)) { border-bottom-width: 1px; border-bottom-color: var(--color-neutral-300); } -.prose tbody tr:last-child { +.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)) { border-bottom-width: 0; } -.prose tbody td { - vertical-align: top; +.prose :where(tbody td):not(:where([class~="not-prose"] *)) { + vertical-align: baseline; padding-top: 0.5714286em; padding-right: 0.5714286em; padding-bottom: 0.5714286em; @@ -867,125 +706,158 @@ video { } .prose { + --tw-prose-body: #374151; + --tw-prose-headings: #111827; + --tw-prose-lead: #4b5563; + --tw-prose-links: #111827; + --tw-prose-bold: #111827; + --tw-prose-counters: #6b7280; + --tw-prose-bullets: #d1d5db; + --tw-prose-hr: #e5e7eb; + --tw-prose-quotes: #111827; + --tw-prose-quote-borders: #e5e7eb; + --tw-prose-captions: #6b7280; + --tw-prose-code: #111827; + --tw-prose-pre-code: #e5e7eb; + --tw-prose-pre-bg: #1f2937; + --tw-prose-th-borders: #d1d5db; + --tw-prose-td-borders: #e5e7eb; + --tw-prose-invert-body: #d1d5db; + --tw-prose-invert-headings: #fff; + --tw-prose-invert-lead: #9ca3af; + --tw-prose-invert-links: #fff; + --tw-prose-invert-bold: #fff; + --tw-prose-invert-counters: #9ca3af; + --tw-prose-invert-bullets: #4b5563; + --tw-prose-invert-hr: #374151; + --tw-prose-invert-quotes: #f3f4f6; + --tw-prose-invert-quote-borders: #374151; + --tw-prose-invert-captions: #9ca3af; + --tw-prose-invert-code: #fff; + --tw-prose-invert-pre-code: #d1d5db; + --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); + --tw-prose-invert-th-borders: #4b5563; + --tw-prose-invert-td-borders: #374151; font-size: 1rem; line-height: 1.75; } -.prose p { +.prose :where(p):not(:where([class~="not-prose"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } -.prose img { +.prose :where(img):not(:where([class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose video { +.prose :where(video):not(:where([class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose figure { +.prose :where(figure):not(:where([class~="not-prose"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose figure > * { - margin-top: 0; - margin-bottom: 0; -} - -.prose h2 code { +.prose :where(h2 code):not(:where([class~="not-prose"] *)) { font-size: 0.875em; } -.prose h3 code { +.prose :where(h3 code):not(:where([class~="not-prose"] *)) { font-size: 0.9em; } -.prose ol { - margin-top: 1.25em; - margin-bottom: 1.25em; +.prose :where(li):not(:where([class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; } -.prose ul { - margin-top: 1.25em; - margin-bottom: 1.25em; +.prose :where(ol > li):not(:where([class~="not-prose"] *)) { + padding-left: 0.375em; } -.prose li { - margin-top: 0.5em; - margin-bottom: 0.5em; +.prose :where(ul > li):not(:where([class~="not-prose"] *)) { + padding-left: 0.375em; } -.prose > ul > li p { +.prose > :where(ul > li p):not(:where([class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } -.prose > ul > li > *:first-child { +.prose > :where(ul > li > *:first-child):not(:where([class~="not-prose"] *)) { margin-top: 1.25em; } -.prose > ul > li > *:last-child { +.prose > :where(ul > li > *:last-child):not(:where([class~="not-prose"] *)) { margin-bottom: 1.25em; } -.prose > ol > li > *:first-child { +.prose > :where(ol > li > *:first-child):not(:where([class~="not-prose"] *)) { margin-top: 1.25em; } -.prose > ol > li > *:last-child { +.prose > :where(ol > li > *:last-child):not(:where([class~="not-prose"] *)) { margin-bottom: 1.25em; } -.prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol { +.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } -.prose hr + * { +.prose :where(hr + *):not(:where([class~="not-prose"] *)) { margin-top: 0; } -.prose h2 + * { +.prose :where(h2 + *):not(:where([class~="not-prose"] *)) { margin-top: 0; } -.prose h3 + * { +.prose :where(h3 + *):not(:where([class~="not-prose"] *)) { margin-top: 0; } -.prose h4 + * { +.prose :where(h4 + *):not(:where([class~="not-prose"] *)) { margin-top: 0; } -.prose thead th:first-child { +.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)) { padding-left: 0; } -.prose thead th:last-child { +.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)) { padding-right: 0; } -.prose tbody td:first-child { +.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)) { padding-left: 0; } -.prose tbody td:last-child { +.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)) { padding-right: 0; } -.prose > :first-child { +.prose > :where(:first-child):not(:where([class~="not-prose"] *)) { margin-top: 0; } -.prose > :last-child { +.prose > :where(:last-child):not(:where([class~="not-prose"] *)) { margin-bottom: 0; } -.prose kbd { +.prose :where(ol > li):not(:where([class~="not-prose"] *))::before { + color: var(--color-neutral-800); +} + +.prose :where(ul > li):not(:where([class~="not-prose"] *))::before { + background-color: var(--color-neutral-500); +} + +.prose :where(kbd):not(:where([class~="not-prose"] *)) { background-color: var(--color-neutral-200); padding: 0.1rem 0.4rem; border-radius: 0.25rem; @@ -993,16 +865,16 @@ video { font-weight: 600; } -.prose mark { +.prose :where(mark):not(:where([class~="not-prose"] *)) { background-color: var(--color-secondary-200); padding: 0.1rem 0.2rem; border-radius: 0.12rem; } body a, body button { - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } @@ -1019,7 +891,8 @@ body a, body button { .prose .heading-anchor { position: absolute; top: 0px; - text-decoration: none; + -webkit-text-decoration-line: none; + text-decoration-line: none; opacity: 0; width: 1.1em; left: -1.1em; @@ -1028,27 +901,19 @@ body a, body button { .prose .heading-anchor:hover { background-color: transparent; color: var(--color-primary-600); - text-decoration: underline; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; } .prose .heading-anchor:hover, .prose .heading-anchor:focus, .prose h2:hover > .heading-anchor, .prose h3:hover > .heading-anchor, .prose h4:hover > .heading-anchor { opacity: 1; } -/* Prose escape hatch */ - -.no-prose > p { - margin-top: 0px; -} - -.no-prose > p:last-child { - margin-bottom: 0px; -} - /* Article pagination */ .article-pagination a:hover .article-pagination-title { - text-decoration: underline; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; -webkit-text-decoration-color: var(--color-primary-500); text-decoration-color: var(--color-primary-500); } @@ -1853,7 +1718,8 @@ body a, body button { /* GenericUnderline */ .chroma .gl { - text-decoration: underline; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; } /* TextWhitespace */ @@ -2048,7 +1914,7 @@ body a, body button { max-width: 100%; } -.flex-grow { +.grow { flex-grow: 1; } @@ -2381,7 +2247,8 @@ body a, body button { } .\!no-underline { - text-decoration: none !important; + -webkit-text-decoration-line: none !important; + text-decoration-line: none !important; } .first\:mt-8:first-child { @@ -2425,32 +2292,33 @@ body a, body button { } .hover\:underline:hover { - text-decoration: underline; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} + +.hover\:decoration-primary-500:hover { + -webkit-text-decoration-color: var(--color-primary-500); + text-decoration-color: var(--color-primary-500); } -.hover\:underline-neutral-300:hover { +.hover\:decoration-neutral-300:hover { -webkit-text-decoration-color: var(--color-neutral-300); text-decoration-color: var(--color-neutral-300); } -.hover\:underline-primary-400:hover { +.hover\:decoration-primary-400:hover { -webkit-text-decoration-color: var(--color-primary-400); text-decoration-color: var(--color-primary-400); } -.hover\:underline-primary-500:hover { - -webkit-text-decoration-color: var(--color-primary-500); - text-decoration-color: var(--color-primary-500); +.hover\:decoration-2:hover { + text-decoration-thickness: 2px; } -.hover\:underline-offset-small:hover { +.hover\:underline-offset-2:hover { text-underline-offset: 2px; } -.hover\:underline-thickness-bold:hover { - text-decoration-thickness: 2px; -} - .dark .dark\:prose-light { color: var(--color-neutral-300); } @@ -2461,84 +2329,84 @@ body a, body button { text-decoration-color: var(--color-neutral-500); } -.dark .dark\:prose-light a:hover { +:where(.dark .dark\:prose-light a:hover):not(:where([class~="not-prose"] *)) { color: var(--color-neutral); text-decoration: none; } -.dark .dark\:prose-light strong { +.dark .dark\:prose-light :where(strong):not(:where([class~="not-prose"] *)) { color: var(--color-neutral); } -.dark .dark\:prose-light ol > li::before { +.dark .dark\:prose-light :where(ol > li):not(:where([class~="not-prose"] *))::before { color: var(--color-neutral-400); } -.dark .dark\:prose-light ul > li::before { +.dark .dark\:prose-light :where(ul > li):not(:where([class~="not-prose"] *))::before { background-color: var(--color-neutral-600); } -.dark .dark\:prose-light hr { +.dark .dark\:prose-light :where(hr):not(:where([class~="not-prose"] *)) { border-color: var(--color-neutral-500); } -.dark .dark\:prose-light blockquote { +.dark .dark\:prose-light :where(blockquote):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-200); border-left-color: var(--color-primary-900); } -.dark .dark\:prose-light h1 { +.dark .dark\:prose-light :where(h1):not(:where([class~="not-prose"] *)) { color: var(--color-neutral); } -.dark .dark\:prose-light h2 { +.dark .dark\:prose-light :where(h2):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-50); } -.dark .dark\:prose-light h3 { +.dark .dark\:prose-light :where(h3):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-50); } -.dark .dark\:prose-light h4 { +.dark .dark\:prose-light :where(h4):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-50); } -.dark .dark\:prose-light figure figcaption { +.dark .dark\:prose-light :where(figure figcaption):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-400); } -.dark .dark\:prose-light code { +.dark .dark\:prose-light :where(code):not(:where([class~="not-prose"] *)) { color: var(--color-secondary-400); } -.dark .dark\:prose-light a code { +.dark .dark\:prose-light :where(a code):not(:where([class~="not-prose"] *)) { color: var(--color-secondary-400); } -.dark .dark\:prose-light pre { +.dark .dark\:prose-light :where(pre):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-200); background-color: var(--color-neutral-700); } -.dark .dark\:prose-light pre code { +.dark .dark\:prose-light :where(pre code):not(:where([class~="not-prose"] *)) { color: var(--color-neutral-200); } -.dark .dark\:prose-light thead { +.dark .dark\:prose-light :where(thead):not(:where([class~="not-prose"] *)) { color: var(--color-neutral); border-bottom-color: var(--color-neutral-500); } -.dark .dark\:prose-light tbody tr { +.dark .dark\:prose-light :where(tbody tr):not(:where([class~="not-prose"] *)) { border-bottom-color: var(--color-neutral-700); } -.dark .dark\:prose-light kbd { +.dark .dark\:prose-light :where(kbd):not(:where([class~="not-prose"] *)) { background-color: var(--color-neutral-700); color: var(--color-neutral-300); } -.dark .dark\:prose-light mark { +.dark .dark\:prose-light :where(mark):not(:where([class~="not-prose"] *)) { background-color: var(--color-secondary-400); } @@ -2606,11 +2474,6 @@ body a, body button { color: var(--color-neutral-800); } -.dark .dark\:underline-neutral-600 { - -webkit-text-decoration-color: var(--color-neutral-600); - text-decoration-color: var(--color-neutral-600); -} - .dark .dark\:hover\:bg-primary-400:hover { background-color: var(--color-primary-400); } diff --git a/assets/css/main.css b/assets/css/main.css index 3a07f5c6e..f9042e66d 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -31,14 +31,9 @@ body button { @apply opacity-100; } -/* Prose escape hatch */ -.no-prose > p { - @apply mt-0 last:mb-0; -} - /* Article pagination */ .article-pagination a:hover .article-pagination-title { - @apply underline underline-primary-500; + @apply underline decoration-primary-500; } .article-pagination a:hover .article-pagination-direction { diff --git a/assets/css/schemes/avocado.css b/assets/css/schemes/avocado.css index 6ee07b79d..c41c66997 100644 --- a/assets/css/schemes/avocado.css +++ b/assets/css/schemes/avocado.css @@ -1,7 +1,7 @@ /* Avocado scheme */ :root { --color-neutral: #fff; - /* Warm Gray */ + /* Stone */ --color-neutral-50: #fafaf9; --color-neutral-100: #f5f5f4; --color-neutral-200: #e7e5e4; diff --git a/assets/css/schemes/fire.css b/assets/css/schemes/fire.css index e91cddd23..60ae09c2f 100644 --- a/assets/css/schemes/fire.css +++ b/assets/css/schemes/fire.css @@ -1,7 +1,7 @@ /* Fire scheme */ :root { --color-neutral: #fff; - /* Warm Gray */ + /* Stone */ --color-neutral-50: #fafaf9; --color-neutral-100: #f5f5f4; --color-neutral-200: #e7e5e4; diff --git a/assets/css/schemes/ocean.css b/assets/css/schemes/ocean.css index c93e2a9c6..4dd80e1df 100644 --- a/assets/css/schemes/ocean.css +++ b/assets/css/schemes/ocean.css @@ -1,7 +1,7 @@ /* Ocean scheme */ :root { --color-neutral: #fff; - /* Cool Gray */ + /* Gray */ --color-neutral-50: #f8fafc; --color-neutral-100: #f1f5f9; --color-neutral-200: #e2e8f0; diff --git a/assets/css/schemes/slate.css b/assets/css/schemes/slate.css index 000ba0781..a89898a23 100644 --- a/assets/css/schemes/slate.css +++ b/assets/css/schemes/slate.css @@ -1,37 +1,37 @@ /* Slate scheme */ :root { --color-neutral: #fff; - /* Cool Gray */ - --color-neutral-50: #F9FAFB; - --color-neutral-100: #F3F4F6; - --color-neutral-200: #E5E7EB; - --color-neutral-300: #D1D5DB; - --color-neutral-400: #9CA3AF; - --color-neutral-500: #6B7280; - --color-neutral-600: #4B5563; + /* Gray */ + --color-neutral-50: #f9fafb; + --color-neutral-100: #f3f4f6; + --color-neutral-200: #e5e7eb; + --color-neutral-300: #d1d5db; + --color-neutral-400: #9ca3af; + --color-neutral-500: #6b7280; + --color-neutral-600: #4b5563; --color-neutral-700: #374151; - --color-neutral-800: #1F2937; + --color-neutral-800: #1f2937; --color-neutral-900: #111827; - /* Cool Gray */ - --color-primary-50: #F9FAFB; - --color-primary-100: #F3F4F6; - --color-primary-200: #E5E7EB; - --color-primary-300: #D1D5DB; - --color-primary-400: #9CA3AF; - --color-primary-500: #6B7280; - --color-primary-600: #4B5563; + /* Gray */ + --color-primary-50: #f9fafb; + --color-primary-100: #f3f4f6; + --color-primary-200: #e5e7eb; + --color-primary-300: #d1d5db; + --color-primary-400: #9ca3af; + --color-primary-500: #6b7280; + --color-primary-600: #4b5563; --color-primary-700: #374151; - --color-primary-800: #1F2937; + --color-primary-800: #1f2937; --color-primary-900: #111827; - /* Cool Gray */ - --color-secondary-50: #F9FAFB; - --color-secondary-100: #F3F4F6; - --color-secondary-200: #E5E7EB; - --color-secondary-300: #D1D5DB; - --color-secondary-400: #9CA3AF; - --color-secondary-500: #6B7280; - --color-secondary-600: #4B5563; + /* Gray */ + --color-secondary-50: #f9fafb; + --color-secondary-100: #f3f4f6; + --color-secondary-200: #e5e7eb; + --color-secondary-300: #d1d5db; + --color-secondary-400: #9ca3af; + --color-secondary-500: #6b7280; + --color-secondary-600: #4b5563; --color-secondary-700: #374151; - --color-secondary-800: #1F2937; + --color-secondary-800: #1f2937; --color-secondary-900: #111827; } diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md index 28a869cdf..65c26d04e 100755 --- a/exampleSite/content/_index.md +++ b/exampleSite/content/_index.md @@ -11,7 +11,7 @@ A simple, lightweight theme for Hugo built with Tailwind CSS. {{< icon "exclamation-triangle" >}} - + This is a demo of the page layout. + + {{ end }} {{ end }} diff --git a/layouts/partials/search.html b/layouts/partials/search.html new file mode 100644 index 000000000..14e278b92 --- /dev/null +++ b/layouts/partials/search.html @@ -0,0 +1,52 @@ +{{ $fuseLib := resources.Get "lib/fuse/fuse.min.js" }} +{{ $fuseConfig := resources.Get "js/search.js" }} +{{ $fuseConfig := $fuseConfig | resources.Minify }} +{{ $fuseJS := slice $fuseLib $fuseConfig | resources.Concat "js/fuse.bundle.js" | resources.Fingerprint "sha512" -}} + + + diff --git a/package-lock.json b/package-lock.json index d05ef76d4..879f4e1e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,12 +12,13 @@ "devDependencies": { "@tailwindcss/typography": "^0.5.0", "chart.js": "^3.7.0", + "fuse.js": "^6.5.3", "katex": "^0.15.1", "mermaid": "^8.13.8", "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwindcss": "^3.0.12", + "tailwindcss": "^3.0.13", "vendor-copy": "^3.0.1" } }, @@ -1411,6 +1412,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3400,6 +3410,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", diff --git a/package.json b/package.json index 48cfeae59..9fab32a0b 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "devDependencies": { "@tailwindcss/typography": "^0.5.0", "chart.js": "^3.7.0", + "fuse.js": "^6.5.3", "katex": "^0.15.1", "mermaid": "^8.13.8", "prettier": "^2.3.2", @@ -64,6 +65,10 @@ { "from": "node_modules/katex/dist/fonts/", "to": "assets/lib/katex/fonts/" + }, + { + "from": "node_modules/fuse.js/dist/fuse.min.js", + "to": "assets/lib/fuse/fuse.min.js" } ] } diff --git a/tailwind.config.js b/tailwind.config.js index f3e3a9eed..0742a6f3b 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,14 @@ const colors = require("tailwindcss/colors"); +function varWithOpacity(variable) { + return ({ opacityValue }) => { + if (opacityValue === undefined) { + return `rgb(var(${variable}))`; + } + return `rgba(var(${variable}), ${opacityValue})`; + }; +} + module.exports = { content: [ "./layouts/**/*.html", @@ -9,47 +18,47 @@ module.exports = { ], darkMode: "class", theme: { - colors: { - transparent: "transparent", - neutral: { - DEFAULT: "var(--color-neutral)", - 50: "var(--color-neutral-50)", - 100: "var(--color-neutral-100)", - 200: "var(--color-neutral-200)", - 300: "var(--color-neutral-300)", - 400: "var(--color-neutral-400)", - 500: "var(--color-neutral-500)", - 600: "var(--color-neutral-600)", - 700: "var(--color-neutral-700)", - 800: "var(--color-neutral-800)", - 900: "var(--color-neutral-900)", - }, - primary: { - 50: "var(--color-primary-50)", - 100: "var(--color-primary-100)", - 200: "var(--color-primary-200)", - 300: "var(--color-primary-300)", - 400: "var(--color-primary-400)", - 500: "var(--color-primary-500)", - 600: "var(--color-primary-600)", - 700: "var(--color-primary-700)", - 800: "var(--color-primary-800)", - 900: "var(--color-primary-900)", - }, - secondary: { - 50: "var(--color-secondary-50)", - 100: "var(--color-secondary-100)", - 200: "var(--color-secondary-200)", - 300: "var(--color-secondary-300)", - 400: "var(--color-secondary-400)", - 500: "var(--color-secondary-500)", - 600: "var(--color-secondary-600)", - 700: "var(--color-secondary-700)", - 800: "var(--color-secondary-800)", - 900: "var(--color-secondary-900)", - }, - }, extend: { + colors: { + transparent: "transparent", + neutral: { + DEFAULT: varWithOpacity("--color-neutral"), + 50: varWithOpacity("--color-neutral-50"), + 100: varWithOpacity("--color-neutral-100"), + 200: varWithOpacity("--color-neutral-200"), + 300: varWithOpacity("--color-neutral-300"), + 400: varWithOpacity("--color-neutral-400"), + 500: varWithOpacity("--color-neutral-500"), + 600: varWithOpacity("--color-neutral-600"), + 700: varWithOpacity("--color-neutral-700"), + 800: varWithOpacity("--color-neutral-800"), + 900: varWithOpacity("--color-neutral-900"), + }, + primary: { + 50: varWithOpacity("--color-primary-50"), + 100: varWithOpacity("--color-primary-100"), + 200: varWithOpacity("--color-primary-200"), + 300: varWithOpacity("--color-primary-300"), + 400: varWithOpacity("--color-primary-400"), + 500: varWithOpacity("--color-primary-500"), + 600: varWithOpacity("--color-primary-600"), + 700: varWithOpacity("--color-primary-700"), + 800: varWithOpacity("--color-primary-800"), + 900: varWithOpacity("--color-primary-900"), + }, + secondary: { + 50: varWithOpacity("--color-secondary-50"), + 100: varWithOpacity("--color-secondary-100"), + 200: varWithOpacity("--color-secondary-200"), + 300: varWithOpacity("--color-secondary-300"), + 400: varWithOpacity("--color-secondary-400"), + 500: varWithOpacity("--color-secondary-500"), + 600: varWithOpacity("--color-secondary-600"), + 700: varWithOpacity("--color-secondary-700"), + 800: varWithOpacity("--color-secondary-800"), + 900: varWithOpacity("--color-secondary-900"), + }, + }, typography: (theme) => ({ DEFAULT: { css: [ From ac563d6b980734886ee98b85da6fea8cceef3ed8 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 13 Jan 2022 16:09:21 +1100 Subject: [PATCH 24/68] =?UTF-8?q?=F0=9F=92=84=20Tweak=20slate=20colour=20s?= =?UTF-8?q?cheme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/schemes/slate.css | 22 ++++++++++----------- exampleSite/content/docs/getting-started.md | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assets/css/schemes/slate.css b/assets/css/schemes/slate.css index 3422d284c..54831e86e 100644 --- a/assets/css/schemes/slate.css +++ b/assets/css/schemes/slate.css @@ -12,17 +12,17 @@ --color-neutral-700: 55, 65, 81; --color-neutral-800: 31, 41, 55; --color-neutral-900: 17, 24, 39; - /* Gray */ - --color-primary-50: 249, 250, 251; - --color-primary-100: 243, 244, 246; - --color-primary-200: 229, 231, 235; - --color-primary-300: 209, 213, 219; - --color-primary-400: 156, 163, 175; - --color-primary-500: 107, 114, 128; - --color-primary-600: 75, 85, 99; - --color-primary-700: 55, 65, 81; - --color-primary-800: 31, 41, 55; - --color-primary-900: 17, 24, 39; + /* Slate */ + --color-primary-50: 248, 250, 252; + --color-primary-100: 241, 245, 249; + --color-primary-200: 226, 232, 240; + --color-primary-300: 203, 213, 225; + --color-primary-400: 148, 163, 184; + --color-primary-500: 100, 116, 139; + --color-primary-600: 71, 85, 105; + --color-primary-700: 51, 65, 85; + --color-primary-800: 30, 41, 59; + --color-primary-900: 15, 23, 42; /* Gray */ --color-secondary-50: 249, 250, 251; --color-secondary-100: 243, 244, 246; diff --git a/exampleSite/content/docs/getting-started.md b/exampleSite/content/docs/getting-started.md index f68483d66..b54780a52 100644 --- a/exampleSite/content/docs/getting-started.md +++ b/exampleSite/content/docs/getting-started.md @@ -65,7 +65,7 @@ Congo defines a three-colour palette that is used throughout the theme. Each mai #### Slate -{{< swatches "#6B7280" "#6B7280" "#6B7280" >}} +{{< swatches "#6B7280" "#64748b" "#6B7280" >}} Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details. From 81ed75e8a285463a6d61d280f3d0cb9b074ab790 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 13 Jan 2022 16:12:07 +1100 Subject: [PATCH 25/68] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20icon=20alignment=20o?= =?UTF-8?q?n=20example=20site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exampleSite/content/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md index f29c11af7..8ab0c4be6 100755 --- a/exampleSite/content/_index.md +++ b/exampleSite/content/_index.md @@ -8,7 +8,7 @@ A simple, lightweight theme for Hugo built with Tailwind CSS. {{< /lead >}}
- + {{< icon "exclamation-triangle" >}} From 9cfdc65eaa2e8760cee3bf767fa99ef28be3d81e Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 13 Jan 2022 16:17:52 +1100 Subject: [PATCH 26/68] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20to=20Katex?= =?UTF-8?q?=20v0.15.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + assets/lib/katex/katex.min.css | 2 +- assets/lib/katex/katex.min.js | 2 +- package-lock.json | 50 +++++++++++++++++----------------- package.json | 2 +- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3abfcf4c..5ff1e3574 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - Upgrade to Tailwind v3.0.13 +- Upgrade to KaTeX v0.15.2 - Inline Javascript moved to external files - Author images are now Hugo assets - Required Hugo version is now 0.87.0 or later diff --git a/assets/lib/katex/katex.min.css b/assets/lib/katex/katex.min.css index b2dd9fc7d..aadf4476d 100644 --- a/assets/lib/katex/katex.min.css +++ b/assets/lib/katex/katex.min.css @@ -1 +1 @@ -@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.1"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} +@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.2"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/assets/lib/katex/katex.min.js b/assets/lib/katex/katex.min.js index c64a76888..dfd717d04 100644 --- a/assets/lib/katex/katex.min.js +++ b/assets/lib/katex/katex.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Zn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function m(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var c=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:m(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=N[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return N[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();H.BASESIZE=6;var E=H,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},F=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},V=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=V(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ve(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=V(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=V(m.height+m.depth),m.depth&&(c.style.verticalAlign=V(-m.depth))}return m}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",V(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},qt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),q(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},Nt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(Nt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ot(e,t,r,n,a){var i,o=Nt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),m=new Tt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return Ke.makeSpan([c],[m])}var Ht=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ht(r);if("mathml"===r.output)return Ot(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ot(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Pt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ft=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:V(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=V(o),i},Vt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new J(i),c=new K([m],{width:"100%",height:V(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Pt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=V(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+V(2*o)+")",marginLeft:V(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=V(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Vt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Vt(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Vt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Kt=function(e){return"textord"===e.type&&"@"===e.text};function Jt(e,t,r){var n=Zt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Qt=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},er=function(e,t){var r=Nt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(F(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(F(e.size,t)))),r}});var tr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},rr=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},nr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(tr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=tr[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===tr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return nr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return nr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var ar=function(e,t,r){var n=q(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},ir=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},or=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=V(a),e.height-=a,e.depth+=a},sr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=ir(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&or(s,n,x.TEXT),s},lr=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},hr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:V(n),height:V(t),style:"width:"+V(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=V(t),o.style.width=V(n),{type:"elem",elem:o}},mr={type:"kern",size:-.008},cr=["|","\\lvert","\\rvert","\\vert"],ur=["\\|","\\lVert","\\rVert","\\Vert"],pr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(cr,e)?h="\u2223":l.contains(ur,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=ar(o,c,a),p=u.height+u.depth,d=ar(h,c,a),f=d.height+d.depth,g=ar(m,c,a),v=g.height+g.depth,b=0,y=1;if(null!==s){var w=ar(s,c,a);b=w.height+w.depth,y=2}var k=p+v+b,S=k+Math.max(0,Math.ceil((t-k)/(y*f)))*y*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(lr(m,c,a)),A.push(mr),null===s){var T=S-p-v+.016;A.push(hr(h,T,n))}else{var B=(S-p-v-b)/2+.016;A.push(hr(h,B,n)),A.push(mr),A.push(lr(s,c,a)),A.push(mr),A.push(hr(h,B,n))}A.push(mr),A.push(lr(o,c,a));var C=n.havingBaseStyle(x.TEXT),q=Ke.makeVList({positionType:"bottom",positionData:z,children:A},C);return ir(Ke.makeSpan(["delimsizing","mult"],[q],C),x.TEXT,n,i)},dr=.08,fr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:V(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},gr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],vr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],br=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],yr=[0,1.2,1.8,2.4,3],xr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],wr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],kr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Sr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Mr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},zr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(br,e)?xr:l.contains(gr,e)?kr:wr;var s=Mr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=ir(o,t,n,i);return r&&or(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?sr(e,s.size,r,n,a,i):pr(e,t,r,n,a,i)},Ar={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Mr("\\surd",e*a.sizeMultiplier,kr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=fr("sqrtMain",l=(1+s+dr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*yr[i.size],h=(yr[i.size]+s)/o,l=(yr[i.size]+s+dr)/o,(r=fr("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+dr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=fr("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=V(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(gr,e)||l.contains(br,e))return sr(e,t,!1,r,a,i);if(l.contains(vr,e))return pr(e,yr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:yr,customSizedDelim:zr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return zr(e,h,!0,n,a,i)}},Tr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Br=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Cr(e,t){var r=Xt(e);if(r&&l.contains(Br,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function qr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Cr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Tr[e.funcName].size,mclass:Tr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Ar.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(Ar.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Cr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Cr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){qr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Rr={};function Or(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(y+=.25),m.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,q,N=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(P.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=V(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:h,shift:0}];m.length>0;){var ee=m.pop(),te=ee.pos-N;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===O.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:O},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},Xr={c:"center ",l:"left ",r:"right "},Wr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Gr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Vr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Or({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Gr(e.parser,a,Ur(e.envName))},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Gr(e.parser,a,Ur(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Gr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Ur(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Vr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Fr(e);var t={autoTag:Vr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,m=Ut(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Vt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=F(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=F(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=F(e.height,t),a=0;if(e.totalheight.number>0&&(a=F(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var mn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=mn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=mn(e,t);return It(r,t)}});var cn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=V(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=Ke.staticSvg(c+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Nt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=V(m);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=Nt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=wt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=V(.5/c.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof Z||k)&&(w=V(-m.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(m,"right")||"mord";return Ke.makeSpan([T],[m,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=qt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=qt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=qt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=qn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Hn=Hr;Er("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Er("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Er("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Er("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Er("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Er("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Er("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var En={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Er("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=En[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=En[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Er("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Er("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),Er("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),Er("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),Er("\\dotsb","\\cdots"),Er("\\dotsm","\\cdots"),Er("\\dotsi","\\!\\cdots"),Er("\\dotsx","\\ldots\\,"),Er("\\DOTSI","\\relax"),Er("\\DOTSB","\\relax"),Er("\\DOTSX","\\relax"),Er("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Er("\\,","\\tmspace+{3mu}{.1667em}"),Er("\\thinspace","\\,"),Er("\\>","\\mskip{4mu}"),Er("\\:","\\tmspace+{4mu}{.2222em}"),Er("\\medspace","\\:"),Er("\\;","\\tmspace+{5mu}{.2777em}"),Er("\\thickspace","\\;"),Er("\\!","\\tmspace-{3mu}{.1667em}"),Er("\\negthinspace","\\!"),Er("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Er("\\negthickspace","\\tmspace-{5mu}{.277em}"),Er("\\enspace","\\kern.5em "),Er("\\enskip","\\hskip.5em\\relax"),Er("\\quad","\\hskip1em\\relax"),Er("\\qquad","\\hskip2em\\relax"),Er("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Er("\\tag@paren","\\tag@literal{({#1})}"),Er("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Er("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Er("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Er("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Er("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Er("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),Er("\\newline","\\\\\\relax"),Er("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=V(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Er("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Er("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Er("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Er("\\@hspace","\\hskip #1\\relax"),Er("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Er("\\ordinarycolon",":"),Er("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Er("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Er("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Er("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Er("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Er("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Er("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Er("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Er("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Er("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Er("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Er("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Er("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Er("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Er("\u2237","\\dblcolon"),Er("\u2239","\\eqcolon"),Er("\u2254","\\coloneqq"),Er("\u2255","\\eqqcolon"),Er("\u2a74","\\Coloneqq"),Er("\\ratio","\\vcentcolon"),Er("\\coloncolon","\\dblcolon"),Er("\\colonequals","\\coloneqq"),Er("\\coloncolonequals","\\Coloneqq"),Er("\\equalscolon","\\eqqcolon"),Er("\\equalscoloncolon","\\Eqqcolon"),Er("\\colonminus","\\coloneq"),Er("\\coloncolonminus","\\Coloneq"),Er("\\minuscolon","\\eqcolon"),Er("\\minuscoloncolon","\\Eqcolon"),Er("\\coloncolonapprox","\\Colonapprox"),Er("\\coloncolonsim","\\Colonsim"),Er("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Er("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Er("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Er("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Er("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Er("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Er("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Er("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Er("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Er("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Er("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Er("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Er("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Er("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Er("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Er("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Er("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Er("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Er("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Er("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Er("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Er("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Er("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Er("\\imath","\\html@mathml{\\@imath}{\u0131}"),Er("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Er("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Er("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Er("\u27e6","\\llbracket"),Er("\u27e7","\\rrbracket"),Er("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Er("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Er("\u2983","\\lBrace"),Er("\u2984","\\rBrace"),Er("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Er("\u29b5","\\minuso"),Er("\\darr","\\downarrow"),Er("\\dArr","\\Downarrow"),Er("\\Darr","\\Downarrow"),Er("\\lang","\\langle"),Er("\\rang","\\rangle"),Er("\\uarr","\\uparrow"),Er("\\uArr","\\Uparrow"),Er("\\Uarr","\\Uparrow"),Er("\\N","\\mathbb{N}"),Er("\\R","\\mathbb{R}"),Er("\\Z","\\mathbb{Z}"),Er("\\alef","\\aleph"),Er("\\alefsym","\\aleph"),Er("\\Alpha","\\mathrm{A}"),Er("\\Beta","\\mathrm{B}"),Er("\\bull","\\bullet"),Er("\\Chi","\\mathrm{X}"),Er("\\clubs","\\clubsuit"),Er("\\cnums","\\mathbb{C}"),Er("\\Complex","\\mathbb{C}"),Er("\\Dagger","\\ddagger"),Er("\\diamonds","\\diamondsuit"),Er("\\empty","\\emptyset"),Er("\\Epsilon","\\mathrm{E}"),Er("\\Eta","\\mathrm{H}"),Er("\\exist","\\exists"),Er("\\harr","\\leftrightarrow"),Er("\\hArr","\\Leftrightarrow"),Er("\\Harr","\\Leftrightarrow"),Er("\\hearts","\\heartsuit"),Er("\\image","\\Im"),Er("\\infin","\\infty"),Er("\\Iota","\\mathrm{I}"),Er("\\isin","\\in"),Er("\\Kappa","\\mathrm{K}"),Er("\\larr","\\leftarrow"),Er("\\lArr","\\Leftarrow"),Er("\\Larr","\\Leftarrow"),Er("\\lrarr","\\leftrightarrow"),Er("\\lrArr","\\Leftrightarrow"),Er("\\Lrarr","\\Leftrightarrow"),Er("\\Mu","\\mathrm{M}"),Er("\\natnums","\\mathbb{N}"),Er("\\Nu","\\mathrm{N}"),Er("\\Omicron","\\mathrm{O}"),Er("\\plusmn","\\pm"),Er("\\rarr","\\rightarrow"),Er("\\rArr","\\Rightarrow"),Er("\\Rarr","\\Rightarrow"),Er("\\real","\\Re"),Er("\\reals","\\mathbb{R}"),Er("\\Reals","\\mathbb{R}"),Er("\\Rho","\\mathrm{P}"),Er("\\sdot","\\cdot"),Er("\\sect","\\S"),Er("\\spades","\\spadesuit"),Er("\\sub","\\subset"),Er("\\sube","\\subseteq"),Er("\\supe","\\supseteq"),Er("\\Tau","\\mathrm{T}"),Er("\\thetasym","\\vartheta"),Er("\\weierp","\\wp"),Er("\\Zeta","\\mathrm{Z}"),Er("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Er("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Er("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Er("\\bra","\\mathinner{\\langle{#1}|}"),Er("\\ket","\\mathinner{|{#1}\\rangle}"),Er("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Er("\\Bra","\\left\\langle#1\\right|"),Er("\\Ket","\\left|#1\\right\\rangle"),Er("\\angln","{\\angl n}"),Er("\\blue","\\textcolor{##6495ed}{#1}"),Er("\\orange","\\textcolor{##ffa500}{#1}"),Er("\\pink","\\textcolor{##ff00af}{#1}"),Er("\\red","\\textcolor{##df0030}{#1}"),Er("\\green","\\textcolor{##28ae7b}{#1}"),Er("\\gray","\\textcolor{gray}{#1}"),Er("\\purple","\\textcolor{##9d38bd}{#1}"),Er("\\blueA","\\textcolor{##ccfaff}{#1}"),Er("\\blueB","\\textcolor{##80f6ff}{#1}"),Er("\\blueC","\\textcolor{##63d9ea}{#1}"),Er("\\blueD","\\textcolor{##11accd}{#1}"),Er("\\blueE","\\textcolor{##0c7f99}{#1}"),Er("\\tealA","\\textcolor{##94fff5}{#1}"),Er("\\tealB","\\textcolor{##26edd5}{#1}"),Er("\\tealC","\\textcolor{##01d1c1}{#1}"),Er("\\tealD","\\textcolor{##01a995}{#1}"),Er("\\tealE","\\textcolor{##208170}{#1}"),Er("\\greenA","\\textcolor{##b6ffb0}{#1}"),Er("\\greenB","\\textcolor{##8af281}{#1}"),Er("\\greenC","\\textcolor{##74cf70}{#1}"),Er("\\greenD","\\textcolor{##1fab54}{#1}"),Er("\\greenE","\\textcolor{##0d923f}{#1}"),Er("\\goldA","\\textcolor{##ffd0a9}{#1}"),Er("\\goldB","\\textcolor{##ffbb71}{#1}"),Er("\\goldC","\\textcolor{##ff9c39}{#1}"),Er("\\goldD","\\textcolor{##e07d10}{#1}"),Er("\\goldE","\\textcolor{##a75a05}{#1}"),Er("\\redA","\\textcolor{##fca9a9}{#1}"),Er("\\redB","\\textcolor{##ff8482}{#1}"),Er("\\redC","\\textcolor{##f9685d}{#1}"),Er("\\redD","\\textcolor{##e84d39}{#1}"),Er("\\redE","\\textcolor{##bc2612}{#1}"),Er("\\maroonA","\\textcolor{##ffbde0}{#1}"),Er("\\maroonB","\\textcolor{##ff92c6}{#1}"),Er("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Er("\\maroonD","\\textcolor{##ca337c}{#1}"),Er("\\maroonE","\\textcolor{##9e034e}{#1}"),Er("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Er("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Er("\\purpleC","\\textcolor{##aa87ff}{#1}"),Er("\\purpleD","\\textcolor{##7854ab}{#1}"),Er("\\purpleE","\\textcolor{##543b78}{#1}"),Er("\\mintA","\\textcolor{##f5f9e8}{#1}"),Er("\\mintB","\\textcolor{##edf2df}{#1}"),Er("\\mintC","\\textcolor{##e0e5cc}{#1}"),Er("\\grayA","\\textcolor{##f6f7f7}{#1}"),Er("\\grayB","\\textcolor{##f0f1f2}{#1}"),Er("\\grayC","\\textcolor{##e3e5e6}{#1}"),Er("\\grayD","\\textcolor{##d6d8da}{#1}"),Er("\\grayE","\\textcolor{##babec2}{#1}"),Er("\\grayF","\\textcolor{##888d93}{#1}"),Er("\\grayG","\\textcolor{##626569}{#1}"),Er("\\grayH","\\textcolor{##3b3e40}{#1}"),Er("\\grayI","\\textcolor{##21242c}{#1}"),Er("\\kaBlue","\\textcolor{##314453}{#1}"),Er("\\kaGreen","\\textcolor{##71B307}{#1}");var Vn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Gn=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(Hn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Dr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Dr)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Dr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Dr&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Vn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Un={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Yn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Xn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Gn(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Dr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Lr.range(e);if(te.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Lr.range(e),text:t}}if(this.consume(),o)for(var c=0;c15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function m(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var c=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:m(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=N[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return N[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();H.BASESIZE=6;var E=H,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},F=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},V=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=V(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ve(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=V(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=V(m.height+m.depth),m.depth&&(c.style.verticalAlign=V(-m.depth))}return m}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",V(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},qt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),q(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},Nt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(Nt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ot(e,t,r,n,a){var i,o=Nt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),m=new Tt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return Ke.makeSpan([c],[m])}var Ht=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ht(r);if("mathml"===r.output)return Ot(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ot(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Pt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ft=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:V(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=V(o),i},Vt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new J(i),c=new K([m],{width:"100%",height:V(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Pt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=V(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+V(2*o)+")",marginLeft:V(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=V(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Vt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Vt(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Vt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Kt=function(e){return"textord"===e.type&&"@"===e.text};function Jt(e,t,r){var n=Zt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=V(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Qt=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},er=function(e,t){var r=Nt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=V(F(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",V(F(e.size,t)))),r}});var tr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},rr=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},nr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(tr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=tr[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===tr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return nr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=rr(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return nr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var ar=function(e,t,r){var n=q(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},ir=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},or=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=V(a),e.height-=a,e.depth+=a},sr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=ir(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&or(s,n,x.TEXT),s},lr=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},hr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:V(n),height:V(t),style:"width:"+V(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=V(t),o.style.width=V(n),{type:"elem",elem:o}},mr={type:"kern",size:-.008},cr=["|","\\lvert","\\rvert","\\vert"],ur=["\\|","\\lVert","\\rVert","\\Vert"],pr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(cr,e)?h="\u2223":l.contains(ur,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=ar(o,c,a),p=u.height+u.depth,d=ar(h,c,a),f=d.height+d.depth,g=ar(m,c,a),v=g.height+g.depth,b=0,y=1;if(null!==s){var w=ar(s,c,a);b=w.height+w.depth,y=2}var k=p+v+b,S=k+Math.max(0,Math.ceil((t-k)/(y*f)))*y*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(lr(m,c,a)),A.push(mr),null===s){var T=S-p-v+.016;A.push(hr(h,T,n))}else{var B=(S-p-v-b)/2+.016;A.push(hr(h,B,n)),A.push(mr),A.push(lr(s,c,a)),A.push(mr),A.push(hr(h,B,n))}A.push(mr),A.push(lr(o,c,a));var C=n.havingBaseStyle(x.TEXT),q=Ke.makeVList({positionType:"bottom",positionData:z,children:A},C);return ir(Ke.makeSpan(["delimsizing","mult"],[q],C),x.TEXT,n,i)},dr=.08,fr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:V(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},gr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],vr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],br=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],yr=[0,1.2,1.8,2.4,3],xr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],wr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],kr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Sr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Mr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},zr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(br,e)?xr:l.contains(gr,e)?kr:wr;var s=Mr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=ir(o,t,n,i);return r&&or(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?sr(e,s.size,r,n,a,i):pr(e,t,r,n,a,i)},Ar={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Mr("\\surd",e*a.sizeMultiplier,kr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=fr("sqrtMain",l=(1+s+dr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*yr[i.size],h=(yr[i.size]+s)/o,l=(yr[i.size]+s+dr)/o,(r=fr("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+dr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=fr("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=V(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(gr,e)||l.contains(br,e))return sr(e,t,!1,r,a,i);if(l.contains(vr,e))return pr(e,yr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:yr,customSizedDelim:zr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return zr(e,h,!0,n,a,i)}},Tr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Br=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Cr(e,t){var r=Xt(e);if(r&&l.contains(Br,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function qr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Cr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Tr[e.funcName].size,mclass:Tr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Ar.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=V(Ar.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Cr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Cr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){qr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Rr={};function Or(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(y+=.25),m.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,q,N=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(P.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=V(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:h,shift:0}];m.length>0;){var ee=m.pop(),te=ee.pos-N;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===O.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:O},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},Xr={c:"center ",l:"left ",r:"right "},Wr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Gr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Vr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Or({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Gr(e.parser,a,Ur(e.envName))},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Gr(e.parser,a,Ur(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Gr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Gr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Ur(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Vr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Fr(e);var t={autoTag:Vr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gr(e.parser,t,"display")},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,m=Ut(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Vt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=F(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=F(e.width,t));var i={height:V(r+n)};a>0&&(i.width=V(a)),n>0&&(i.verticalAlign=V(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=F(e.height,t),a=0;if(e.totalheight.number>0&&(a=F(e.totalheight,t)-n,r.setAttribute("valign",V(-a))),r.setAttribute("height",V(n+a)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",V(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=V(a.height+a.depth),a.depth&&(i.style.verticalAlign=V(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var mn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=mn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=mn(e,t);return It(r,t)}});var cn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:V(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:V(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=V(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=Ke.staticSvg(c+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",V(a)):(s.setAttribute("height",V(a)),s.setAttribute("depth",V(-a))),s.setAttribute("voffset",V(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Nt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",V(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=V(m);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=Nt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=wt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=V(.5/c.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof Z||k)&&(w=V(-m.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(m,"right")||"mord";return Ke.makeSpan([T],[m,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=qt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=qt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=qt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=qn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Hn=Hr;Er("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Er("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Er("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Er("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Er("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Er("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Er("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var En={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Er("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=En[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=En[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Er("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Er("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),Er("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),Er("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),Er("\\dotsb","\\cdots"),Er("\\dotsm","\\cdots"),Er("\\dotsi","\\!\\cdots"),Er("\\dotsx","\\ldots\\,"),Er("\\DOTSI","\\relax"),Er("\\DOTSB","\\relax"),Er("\\DOTSX","\\relax"),Er("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Er("\\,","\\tmspace+{3mu}{.1667em}"),Er("\\thinspace","\\,"),Er("\\>","\\mskip{4mu}"),Er("\\:","\\tmspace+{4mu}{.2222em}"),Er("\\medspace","\\:"),Er("\\;","\\tmspace+{5mu}{.2777em}"),Er("\\thickspace","\\;"),Er("\\!","\\tmspace-{3mu}{.1667em}"),Er("\\negthinspace","\\!"),Er("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Er("\\negthickspace","\\tmspace-{5mu}{.277em}"),Er("\\enspace","\\kern.5em "),Er("\\enskip","\\hskip.5em\\relax"),Er("\\quad","\\hskip1em\\relax"),Er("\\qquad","\\hskip2em\\relax"),Er("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Er("\\tag@paren","\\tag@literal{({#1})}"),Er("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Er("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Er("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Er("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Er("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Er("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),Er("\\newline","\\\\\\relax"),Er("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=V(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Er("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Er("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Er("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Er("\\@hspace","\\hskip #1\\relax"),Er("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Er("\\ordinarycolon",":"),Er("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Er("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Er("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Er("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Er("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Er("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Er("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Er("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Er("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Er("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Er("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Er("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Er("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Er("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Er("\u2237","\\dblcolon"),Er("\u2239","\\eqcolon"),Er("\u2254","\\coloneqq"),Er("\u2255","\\eqqcolon"),Er("\u2a74","\\Coloneqq"),Er("\\ratio","\\vcentcolon"),Er("\\coloncolon","\\dblcolon"),Er("\\colonequals","\\coloneqq"),Er("\\coloncolonequals","\\Coloneqq"),Er("\\equalscolon","\\eqqcolon"),Er("\\equalscoloncolon","\\Eqqcolon"),Er("\\colonminus","\\coloneq"),Er("\\coloncolonminus","\\Coloneq"),Er("\\minuscolon","\\eqcolon"),Er("\\minuscoloncolon","\\Eqcolon"),Er("\\coloncolonapprox","\\Colonapprox"),Er("\\coloncolonsim","\\Colonsim"),Er("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Er("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Er("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Er("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Er("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Er("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Er("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Er("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Er("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Er("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Er("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Er("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Er("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Er("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Er("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Er("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Er("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Er("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Er("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Er("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Er("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Er("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Er("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Er("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Er("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Er("\\imath","\\html@mathml{\\@imath}{\u0131}"),Er("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Er("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Er("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Er("\u27e6","\\llbracket"),Er("\u27e7","\\rrbracket"),Er("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Er("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Er("\u2983","\\lBrace"),Er("\u2984","\\rBrace"),Er("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Er("\u29b5","\\minuso"),Er("\\darr","\\downarrow"),Er("\\dArr","\\Downarrow"),Er("\\Darr","\\Downarrow"),Er("\\lang","\\langle"),Er("\\rang","\\rangle"),Er("\\uarr","\\uparrow"),Er("\\uArr","\\Uparrow"),Er("\\Uarr","\\Uparrow"),Er("\\N","\\mathbb{N}"),Er("\\R","\\mathbb{R}"),Er("\\Z","\\mathbb{Z}"),Er("\\alef","\\aleph"),Er("\\alefsym","\\aleph"),Er("\\Alpha","\\mathrm{A}"),Er("\\Beta","\\mathrm{B}"),Er("\\bull","\\bullet"),Er("\\Chi","\\mathrm{X}"),Er("\\clubs","\\clubsuit"),Er("\\cnums","\\mathbb{C}"),Er("\\Complex","\\mathbb{C}"),Er("\\Dagger","\\ddagger"),Er("\\diamonds","\\diamondsuit"),Er("\\empty","\\emptyset"),Er("\\Epsilon","\\mathrm{E}"),Er("\\Eta","\\mathrm{H}"),Er("\\exist","\\exists"),Er("\\harr","\\leftrightarrow"),Er("\\hArr","\\Leftrightarrow"),Er("\\Harr","\\Leftrightarrow"),Er("\\hearts","\\heartsuit"),Er("\\image","\\Im"),Er("\\infin","\\infty"),Er("\\Iota","\\mathrm{I}"),Er("\\isin","\\in"),Er("\\Kappa","\\mathrm{K}"),Er("\\larr","\\leftarrow"),Er("\\lArr","\\Leftarrow"),Er("\\Larr","\\Leftarrow"),Er("\\lrarr","\\leftrightarrow"),Er("\\lrArr","\\Leftrightarrow"),Er("\\Lrarr","\\Leftrightarrow"),Er("\\Mu","\\mathrm{M}"),Er("\\natnums","\\mathbb{N}"),Er("\\Nu","\\mathrm{N}"),Er("\\Omicron","\\mathrm{O}"),Er("\\plusmn","\\pm"),Er("\\rarr","\\rightarrow"),Er("\\rArr","\\Rightarrow"),Er("\\Rarr","\\Rightarrow"),Er("\\real","\\Re"),Er("\\reals","\\mathbb{R}"),Er("\\Reals","\\mathbb{R}"),Er("\\Rho","\\mathrm{P}"),Er("\\sdot","\\cdot"),Er("\\sect","\\S"),Er("\\spades","\\spadesuit"),Er("\\sub","\\subset"),Er("\\sube","\\subseteq"),Er("\\supe","\\supseteq"),Er("\\Tau","\\mathrm{T}"),Er("\\thetasym","\\vartheta"),Er("\\weierp","\\wp"),Er("\\Zeta","\\mathrm{Z}"),Er("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Er("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Er("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Er("\\bra","\\mathinner{\\langle{#1}|}"),Er("\\ket","\\mathinner{|{#1}\\rangle}"),Er("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Er("\\Bra","\\left\\langle#1\\right|"),Er("\\Ket","\\left|#1\\right\\rangle"),Er("\\angln","{\\angl n}"),Er("\\blue","\\textcolor{##6495ed}{#1}"),Er("\\orange","\\textcolor{##ffa500}{#1}"),Er("\\pink","\\textcolor{##ff00af}{#1}"),Er("\\red","\\textcolor{##df0030}{#1}"),Er("\\green","\\textcolor{##28ae7b}{#1}"),Er("\\gray","\\textcolor{gray}{#1}"),Er("\\purple","\\textcolor{##9d38bd}{#1}"),Er("\\blueA","\\textcolor{##ccfaff}{#1}"),Er("\\blueB","\\textcolor{##80f6ff}{#1}"),Er("\\blueC","\\textcolor{##63d9ea}{#1}"),Er("\\blueD","\\textcolor{##11accd}{#1}"),Er("\\blueE","\\textcolor{##0c7f99}{#1}"),Er("\\tealA","\\textcolor{##94fff5}{#1}"),Er("\\tealB","\\textcolor{##26edd5}{#1}"),Er("\\tealC","\\textcolor{##01d1c1}{#1}"),Er("\\tealD","\\textcolor{##01a995}{#1}"),Er("\\tealE","\\textcolor{##208170}{#1}"),Er("\\greenA","\\textcolor{##b6ffb0}{#1}"),Er("\\greenB","\\textcolor{##8af281}{#1}"),Er("\\greenC","\\textcolor{##74cf70}{#1}"),Er("\\greenD","\\textcolor{##1fab54}{#1}"),Er("\\greenE","\\textcolor{##0d923f}{#1}"),Er("\\goldA","\\textcolor{##ffd0a9}{#1}"),Er("\\goldB","\\textcolor{##ffbb71}{#1}"),Er("\\goldC","\\textcolor{##ff9c39}{#1}"),Er("\\goldD","\\textcolor{##e07d10}{#1}"),Er("\\goldE","\\textcolor{##a75a05}{#1}"),Er("\\redA","\\textcolor{##fca9a9}{#1}"),Er("\\redB","\\textcolor{##ff8482}{#1}"),Er("\\redC","\\textcolor{##f9685d}{#1}"),Er("\\redD","\\textcolor{##e84d39}{#1}"),Er("\\redE","\\textcolor{##bc2612}{#1}"),Er("\\maroonA","\\textcolor{##ffbde0}{#1}"),Er("\\maroonB","\\textcolor{##ff92c6}{#1}"),Er("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Er("\\maroonD","\\textcolor{##ca337c}{#1}"),Er("\\maroonE","\\textcolor{##9e034e}{#1}"),Er("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Er("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Er("\\purpleC","\\textcolor{##aa87ff}{#1}"),Er("\\purpleD","\\textcolor{##7854ab}{#1}"),Er("\\purpleE","\\textcolor{##543b78}{#1}"),Er("\\mintA","\\textcolor{##f5f9e8}{#1}"),Er("\\mintB","\\textcolor{##edf2df}{#1}"),Er("\\mintC","\\textcolor{##e0e5cc}{#1}"),Er("\\grayA","\\textcolor{##f6f7f7}{#1}"),Er("\\grayB","\\textcolor{##f0f1f2}{#1}"),Er("\\grayC","\\textcolor{##e3e5e6}{#1}"),Er("\\grayD","\\textcolor{##d6d8da}{#1}"),Er("\\grayE","\\textcolor{##babec2}{#1}"),Er("\\grayF","\\textcolor{##888d93}{#1}"),Er("\\grayG","\\textcolor{##626569}{#1}"),Er("\\grayH","\\textcolor{##3b3e40}{#1}"),Er("\\grayI","\\textcolor{##21242c}{#1}"),Er("\\kaBlue","\\textcolor{##314453}{#1}"),Er("\\kaGreen","\\textcolor{##71B307}{#1}");var Vn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Gn=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(Hn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Dr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Dr)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Dr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Dr&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Vn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Un={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Yn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Xn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Gn(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Dr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Lr.range(e);if(te.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Lr.range(e),text:t}}if(this.consume(),o)for(var c=0;c Date: Thu, 13 Jan 2022 16:22:25 +1100 Subject: [PATCH 27/68] =?UTF-8?q?=F0=9F=92=84=20Update=20Chart.js=20and=20?= =?UTF-8?q?Mermaid=20to=20use=20RGB=20css=20vars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/chart.js | 2 +- assets/js/mermaid.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/chart.js b/assets/js/chart.js index 4d76e7f62..ccf950d46 100644 --- a/assets/js/chart.js +++ b/assets/js/chart.js @@ -1,5 +1,5 @@ function css(name) { - return getComputedStyle(document.documentElement).getPropertyValue(name); + return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")"; } Chart.defaults.font.size = 14; diff --git a/assets/js/mermaid.js b/assets/js/mermaid.js index 59b3e1a18..94795fe44 100644 --- a/assets/js/mermaid.js +++ b/assets/js/mermaid.js @@ -1,5 +1,5 @@ function css(name) { - return getComputedStyle(document.documentElement).getPropertyValue(name); + return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")"; } mermaid.initialize({ From 68b47c8c227cc9843b8bc7cbabe2bf20bc51f613 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 13 Jan 2022 16:59:39 +1100 Subject: [PATCH 28/68] =?UTF-8?q?=F0=9F=8D=B1=20Add=20new=20doggy!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exampleSite/assets/author.jpg | Bin 28153 -> 54195 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/exampleSite/assets/author.jpg b/exampleSite/assets/author.jpg index 820e8822efa022784702403792e15574327b6fb6..bd53fd27863bfba057ea44367ccbbdcac812ae7f 100644 GIT binary patch literal 54195 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 O-R9<)mdDBSKmXZNNn_0b literal 28153 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 Date: Mon, 17 Jan 2022 10:16:57 +1100 Subject: [PATCH 29/68] =?UTF-8?q?=E2=9C=A8=20Add=20taxonomies=20on=20artic?= =?UTF-8?q?le=20and=20list=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + assets/css/compiled/main.css | 33 ++++++++++++++++++------- config/_default/params.toml | 1 + exampleSite/config/_default/params.toml | 1 + layouts/partials/article-meta.html | 17 +++++++++++++ 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff1e3574..c8a7669a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Site search powered by Fuse.js - Automatic Markdown image resizing and srcset generation - Performance and Accessibility improvements to achieve perfect Lighthouse scores +- Taxonomies on article and list pages - Author `headline` parameter - Skip to content links diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index d8747a575..613779e36 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1997,6 +1997,11 @@ body a, body button { margin-bottom: 0.75rem; } +.my-1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + .mx-1 { margin-left: 0.25rem; margin-right: 0.25rem; @@ -2279,14 +2284,14 @@ body a, body button { scroll-behavior: smooth; } -.rounded-full { - border-radius: 9999px; -} - .rounded-md { border-radius: 0.375rem; } +.rounded-full { + border-radius: 9999px; +} + .rounded { border-radius: 0.25rem; } @@ -2317,6 +2322,11 @@ body a, body button { border-color: rgba(var(--color-neutral-400), var(--tw-border-opacity)); } +.border-neutral-200 { + --tw-border-opacity: 1; + border-color: rgba(var(--color-neutral-200), var(--tw-border-opacity)); +} + .border-neutral-300 { --tw-border-opacity: 1; border-color: rgba(var(--color-neutral-300), var(--tw-border-opacity)); @@ -2327,11 +2337,6 @@ body a, body button { border-color: rgba(var(--color-primary-400), var(--tw-border-opacity)); } -.border-neutral-200 { - --tw-border-opacity: 1; - border-color: rgba(var(--color-neutral-200), var(--tw-border-opacity)); -} - .border-neutral-700 { --tw-border-opacity: 1; border-color: rgba(var(--color-neutral-700), var(--tw-border-opacity)); @@ -2640,6 +2645,11 @@ body a, body button { margin-top: 2rem; } +.hover\:border-primary-300:hover { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-300), var(--tw-border-opacity)); +} + .hover\:border-primary-400:hover { --tw-border-opacity: 1; border-color: rgba(var(--color-primary-400), var(--tw-border-opacity)); @@ -2999,6 +3009,11 @@ body a, body button { color: rgba(var(--color-neutral-800), var(--tw-text-opacity)); } +.dark .dark\:hover\:border-primary-600:hover { + --tw-border-opacity: 1; + border-color: rgba(var(--color-primary-600), var(--tw-border-opacity)); +} + .dark .dark\:hover\:bg-primary-900:hover { --tw-bg-opacity: 1; background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity)); diff --git a/config/_default/params.toml b/config/_default/params.toml index d075a0171..f9946871e 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -29,6 +29,7 @@ enableSearch = false showHeadingAnchors = true showPagination = true showReadingTime = true + showTaxonomies = false showWordCount = false # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index 1f462b70e..8d270d6f3 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -29,6 +29,7 @@ mainSections = ["samples"] showHeadingAnchors = true showPagination = true showReadingTime = true + showTaxonomies = false showWordCount = false # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] diff --git a/layouts/partials/article-meta.html b/layouts/partials/article-meta.html index ea87e653d..bec143e62 100644 --- a/layouts/partials/article-meta.html +++ b/layouts/partials/article-meta.html @@ -40,4 +40,21 @@ {{ partial "badge.html" (i18n "article.draft" | emojify) }} {{ end }}
+ + {{/* Output taxonomies */}} + {{ if .Params.showTaxonomies | default (.Site.Params.article.showTaxonomies | default false) }} + + {{ end }} {{ end }} From 8d91a79e56c49b9f70736023853deff967ce0074 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 17 Jan 2022 10:37:51 +1100 Subject: [PATCH 30/68] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20to=20Tailw?= =?UTF-8?q?ind=20v3.0.15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/compiled/main.css | 2 +- package-lock.json | 12 ++++++------ package.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 613779e36..1cd1eb0c9 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1,6 +1,6 @@ /*! Congo v1.6.2 | MIT License | https://github.com/jpanther/congo */ -/*! tailwindcss v3.0.13 | MIT License | https://tailwindcss.com */ +/*! tailwindcss v3.0.15 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) diff --git a/package-lock.json b/package-lock.json index f296c409e..312374806 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2182,9 +2182,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.13.tgz", - "integrity": "sha512-raRPGFwQSGXn/3h0ttHND9jyPYfqk/ur2NXtlQuK25+ZnrCjlH1s1j4/oPswHGMoZzGNykUVycZ/LcROanUE0A==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz", + "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==", "dev": true, "dependencies": { "arg": "^5.0.1", @@ -3952,9 +3952,9 @@ "dev": true }, "tailwindcss": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.13.tgz", - "integrity": "sha512-raRPGFwQSGXn/3h0ttHND9jyPYfqk/ur2NXtlQuK25+ZnrCjlH1s1j4/oPswHGMoZzGNykUVycZ/LcROanUE0A==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz", + "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==", "dev": true, "requires": { "arg": "^5.0.1", diff --git a/package.json b/package.json index b93bd1ca4..84f8c6f41 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwindcss": "^3.0.13", + "tailwindcss": "^3.0.15", "vendor-copy": "^3.0.1" }, "vendorCopy": [], From 30fad56aed8def3ca561a33588dafd9bb938ba96 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 17 Jan 2022 13:21:21 +1100 Subject: [PATCH 31/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Reduce=20repetition?= =?UTF-8?q?=20in=20main=20CSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/compiled/main.css | 867 ++++--------------- assets/css/main.css | 360 +++----- exampleSite/content/samples/markdown.md | 6 +- layouts/_default/_markup/render-heading.html | 2 +- 4 files changed, 284 insertions(+), 951 deletions(-) diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 1cd1eb0c9..f38ab7686 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -917,9 +917,9 @@ Ensure the default browser behavior of the `hidden` attribute. } body a, body button { - transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, fill, stroke, -webkit-text-decoration-color; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, -webkit-text-decoration-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } @@ -939,16 +939,6 @@ body a, body button { /* Heading anchors */ -.prose .heading-anchor { - position: absolute; - top: 0px; - -webkit-text-decoration-line: none; - text-decoration-line: none; - opacity: 0; - width: 1.1em; - left: -1.1em; -} - .prose .heading-anchor:hover { background-color: transparent !important; --tw-text-opacity: 1 !important; @@ -958,6 +948,10 @@ body a, body button { } .prose .heading-anchor:hover, .prose .heading-anchor:focus, .prose h2:hover > .heading-anchor, .prose h3:hover > .heading-anchor, .prose h4:hover > .heading-anchor { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-200), var(--tw-text-opacity)); + -webkit-text-decoration-line: none; + text-decoration-line: none; opacity: 1; } @@ -1026,16 +1020,6 @@ body a, body button { color: rgba(var(--color-neutral-200), var(--tw-text-opacity)); } -/* Other */ - -.chroma .x { -} - -/* Error */ - -.chroma .err { -} - /* LineTableTD */ .chroma .lntd, .chroma .lntd pre { @@ -1085,789 +1069,293 @@ body a, body button { /* LineNumbersTable */ -.chroma .lnt { - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-600), var(--tw-text-opacity)); -} - -.dark .chroma .lnt { - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-300), var(--tw-text-opacity)); -} - -.chroma .lnt { - margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; -} - /* LineNumbers */ -.chroma .ln { +.chroma .lnt, .chroma .ln { + margin-right: 0.4em; + padding-left: 0.4em; + padding-right: 0.4em; + padding-top: 0px; + padding-bottom: 0px; --tw-text-opacity: 1; color: rgba(var(--color-neutral-600), var(--tw-text-opacity)); } -.dark .chroma .ln { +.dark .chroma .lnt, .dark .chroma .ln { --tw-text-opacity: 1; color: rgba(var(--color-neutral-300), var(--tw-text-opacity)); } -.chroma .ln { - margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; -} - /* Keyword */ -.chroma .k { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .k { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* KeywordConstant */ - -.chroma .kc { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .kc { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - /* KeywordDeclaration */ -.chroma .kd { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .kd { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - /* KeywordNamespace */ -.chroma .kn { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .kn { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - /* KeywordPseudo */ -.chroma .kp { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .kp { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - /* KeywordReserved */ -.chroma .kr { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .kr { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* KeywordType */ - -.chroma .kt { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .kt { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} - -/* Name */ - -.chroma .n { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-900), var(--tw-text-opacity)); -} - -.dark .chroma .n { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-200), var(--tw-text-opacity)); -} - -/* NameAttribute */ - -.chroma .na { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); -} - -.dark .chroma .na { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); -} - -/* NameBuiltin */ - -.chroma .nb { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); -} - -.dark .chroma .nb { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); -} - -/* NameBuiltinPseudo */ - -.chroma .bp { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); -} - -.dark .chroma .bp { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); -} - /* NameClass */ -.chroma .nc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .nc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* NameConstant */ - -.chroma .no { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .no { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - -/* NameDecorator */ - -.chroma .nd { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-900), var(--tw-text-opacity)); -} - -.dark .chroma .nd { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-200), var(--tw-text-opacity)); -} - -/* NameEntity */ - -.chroma .ni { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-900), var(--tw-text-opacity)); -} - -.dark .chroma .ni { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-200), var(--tw-text-opacity)); -} - -/* NameException */ - -.chroma .ne { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .ne { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - -/* NameFunction */ - -.chroma .nf { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} - -.dark .chroma .nf { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - /* NameFunctionMagic */ -.chroma .fm { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .fm { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* NameLabel */ - -.chroma .nl { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-900), var(--tw-text-opacity)); -} - -.dark .chroma .nl { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-200), var(--tw-text-opacity)); -} - /* NameNamespace */ -.chroma .nn { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .nn { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* NameOther */ - -.chroma .nx { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); -} - -.dark .chroma .nx { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); -} - -/* NameProperty */ - -.chroma .py { - color: #cebc3a; -} - -/* NameTag */ - -.chroma .nt { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); -} - -.dark .chroma .nt { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); -} - -/* NameVariable */ - -.chroma .nv { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .nv { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} - /* NameVariableClass */ -.chroma .vc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .chroma .vc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-300), var(--tw-text-opacity)); -} - -/* NameVariableGlobal */ - -.chroma .vg { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .vg { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - -/* NameVariableInstance */ - -.chroma .vi { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .vi { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} - -/* NameVariableMagic */ - -.chroma .vm { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .vm { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} - -/* Literal */ - -.chroma .l { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .l { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralDate */ - -.chroma .ld { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .ld { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralString */ - -.chroma .s { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .s { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringAffix */ - -.chroma .sa { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sa { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringBacktick */ - -.chroma .sb { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sb { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringChar */ - -.chroma .sc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sc { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringDelimiter */ - -.chroma .dl { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .dl { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringDoc */ - -.chroma .sd { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sd { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringDouble */ - -.chroma .s2 { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .s2 { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringEscape */ - -.chroma .se { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} - -.dark .chroma .se { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); -} - -/* LiteralStringHeredoc */ - -.chroma .sh { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sh { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringInterpol */ - -.chroma .si { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .si { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringOther */ - -.chroma .sx { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .sx { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* LiteralStringRegex */ +/* Operator */ -.chroma .sr { - font-weight: 600; +.chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .nc, .chroma .fm, .chroma .nn, .chroma .vc, .chroma .o { --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); + color: rgba(var(--color-primary-600), var(--tw-text-opacity)); } -.dark .chroma .sr { +.dark .chroma .k, .dark .chroma .kd, .dark .chroma .kn, .dark .chroma .kp, .dark .chroma .kr, .dark .chroma .nc, .dark .chroma .fm, .dark .chroma .nn, .dark .chroma .vc, .dark .chroma .o { --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); + color: rgba(var(--color-primary-300), var(--tw-text-opacity)); } -/* LiteralStringSingle */ +/* KeywordConstant */ -.chroma .s1 { +.chroma .kc { + font-weight: 600; --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); } -.dark .chroma .s1 { +.dark .chroma .kc { --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); } -/* LiteralStringSymbol */ +/* KeywordType */ -.chroma .ss { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} +/* NameVariable */ -.dark .chroma .ss { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} +/* NameVariableInstance */ + +/* NameVariableMagic */ /* LiteralNumber */ -.chroma .m { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} +/* LiteralNumberBin */ -.dark .chroma .m { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} +/* LiteralNumberFloat */ -/* LiteralNumberBin */ +/* LiteralNumberHex */ -.chroma .mb { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); -} +/* LiteralNumberInteger */ -.dark .chroma .mb { - --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); -} +/* LiteralNumberIntegerLong */ -/* LiteralNumberFloat */ +/* LiteralNumberOct */ -.chroma .mf { +.chroma .kt, .chroma .nv, .chroma .vi, .chroma .vm, .chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo { --tw-text-opacity: 1; color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); } -.dark .chroma .mf { +.dark .chroma .kt, .dark .chroma .nv, .dark .chroma .vi, .dark .chroma .vm, .dark .chroma .m, .dark .chroma .mb, .dark .chroma .mf, .dark .chroma .mh, .dark .chroma .mi, .dark .chroma .il, .dark .chroma .mo { --tw-text-opacity: 1; color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); } -/* LiteralNumberHex */ +/* Name */ + +/* NameDecorator */ + +/* NameEntity */ + +/* NameLabel */ -.chroma .mh { +.chroma .n, .chroma .nd, .chroma .ni, .chroma .nl { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-900), var(--tw-text-opacity)); } -.dark .chroma .mh { +.dark .chroma .n, .dark .chroma .nd, .dark .chroma .ni, .dark .chroma .nl { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-200), var(--tw-text-opacity)); } -/* LiteralNumberInteger */ +/* NameAttribute */ + +/* NameBuiltin */ + +/* NameBuiltinPseudo */ + +/* NameOther */ + +/* NameProperty */ + +/* NameTag */ -.chroma .mi { +.chroma .na, .chroma .nb, .chroma .bp, .chroma .nx, .chroma .py, .chroma .nt { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-800), var(--tw-text-opacity)); } -.dark .chroma .mi { +.dark .chroma .na, .dark .chroma .nb, .dark .chroma .bp, .dark .chroma .nx, .dark .chroma .py, .dark .chroma .nt { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-300), var(--tw-text-opacity)); } -/* LiteralNumberIntegerLong */ +/* NameConstant */ + +/* NameException */ + +/* NameVariableGlobal */ -.chroma .il { +.chroma .no, .chroma .ne, .chroma .vg { + font-weight: 600; --tw-text-opacity: 1; color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); } -.dark .chroma .il { +.dark .chroma .no, .dark .chroma .ne, .dark .chroma .vg { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); } -/* LiteralNumberOct */ +/* NameFunction */ -.chroma .mo { +.chroma .nf { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); } -.dark .chroma .mo { +.dark .chroma .nf { --tw-text-opacity: 1; - color: rgba(var(--color-secondary-600), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); } -/* Operator */ +/* Literal */ -.chroma .o { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} +/* LiteralDate */ -/* OperatorWord */ +/* LiteralString */ -.chroma .ow { - font-weight: 600; - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} +/* LiteralStringAffix */ -.dark .chroma .ow { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} +/* LiteralStringBacktick */ -/* Punctuation */ +/* LiteralStringChar */ -.chroma .p { -} +/* LiteralStringDelimiter */ -/* Comment */ +/* LiteralStringDoc */ -.chroma .c { - font-style: italic; +/* LiteralStringDouble */ + +/* LiteralStringHeredoc */ + +/* LiteralStringInterpol */ + +/* LiteralStringOther */ + +/* LiteralStringSingle */ + +/* GenericInserted */ + +/* GenericOutput */ + +/* GenericPrompt */ + +.chroma .l, .chroma .ld, .chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .sd, .chroma .s2, .chroma .sh, .chroma .si, .chroma .sx, .chroma .s1, .chroma .gi, .chroma .go, .chroma .gp { --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); + color: rgba(var(--color-primary-800), var(--tw-text-opacity)); } -.dark .chroma .c { +.dark .chroma .l, .dark .chroma .ld, .dark .chroma .s, .dark .chroma .sa, .dark .chroma .sb, .dark .chroma .sc, .dark .chroma .dl, .dark .chroma .sd, .dark .chroma .s2, .dark .chroma .sh, .dark .chroma .si, .dark .chroma .sx, .dark .chroma .s1, .dark .chroma .gi, .dark .chroma .go, .dark .chroma .gp { --tw-text-opacity: 1; - color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); + color: rgba(var(--color-primary-400), var(--tw-text-opacity)); } -/* CommentHashbang */ +/* LiteralStringEscape */ -.chroma .ch { +.chroma .se { font-weight: 600; - font-style: italic; --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-400), var(--tw-text-opacity)); } -.dark .chroma .ch { +.dark .chroma .se { --tw-text-opacity: 1; - color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); + color: rgba(var(--color-secondary-500), var(--tw-text-opacity)); } -/* CommentMultiline */ +/* LiteralStringRegex */ -.chroma .cm { - font-style: italic; +/* LiteralStringSymbol */ + +.chroma .sr, .chroma .ss { + font-weight: 600; --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); + color: rgba(var(--color-primary-800), var(--tw-text-opacity)); } -.dark .chroma .cm { +.dark .chroma .sr, .dark .chroma .ss { --tw-text-opacity: 1; - color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); + color: rgba(var(--color-primary-400), var(--tw-text-opacity)); } -/* CommentSingle */ +/* OperatorWord */ -.chroma .c1 { - font-style: italic; +.chroma .ow { + font-weight: 600; --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); + color: rgba(var(--color-primary-400), var(--tw-text-opacity)); } -.dark .chroma .c1 { +.dark .chroma .ow { --tw-text-opacity: 1; - color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); + color: rgba(var(--color-primary-600), var(--tw-text-opacity)); } -/* CommentSpecial */ +/* Comment */ -.chroma .cs { - font-style: italic; - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); -} +/* CommentMultiline */ -.dark .chroma .cs { - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); -} +/* CommentSingle */ + +/* CommentSpecial */ /* CommentPreproc */ -.chroma .cp { +/* CommentPreprocFile */ + +.chroma .c, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .cp, .chroma .cpf { font-style: italic; --tw-text-opacity: 1; color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); } -.dark .chroma .cp { +.dark .chroma .c, .dark .chroma .cm, .dark .chroma .c1, .dark .chroma .cs, .dark .chroma .cp, .dark .chroma .cpf { --tw-text-opacity: 1; color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); } -/* CommentPreprocFile */ +/* CommentHashbang */ -.chroma .cpf { +.chroma .ch { + font-weight: 600; font-style: italic; --tw-text-opacity: 1; color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); } -.dark .chroma .cpf { +.dark .chroma .ch { --tw-text-opacity: 1; color: rgba(var(--color-neutral-400), var(--tw-text-opacity)); } -/* Generic */ - -.chroma .g { -} - -/* GenericDeleted */ - -.chroma .gd { -} - /* GenericEmph */ .chroma .ge { font-style: italic; } -/* GenericError */ - -.chroma .gr { -} - /* GenericHeading */ .chroma .gh { @@ -1876,42 +1364,6 @@ body a, body button { color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); } -/* GenericInserted */ - -.chroma .gi { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .gi { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* GenericOutput */ - -.chroma .go { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .go { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - -/* GenericPrompt */ - -.chroma .gp { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-800), var(--tw-text-opacity)); -} - -.dark .chroma .gp { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - /* GenericStrong */ .chroma .gs { @@ -1920,14 +1372,9 @@ body a, body button { /* GenericSubheading */ -.chroma .gu { - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); -} - /* GenericTraceback */ -.chroma .gt { +.chroma .gu, .chroma .gt { --tw-text-opacity: 1; color: rgba(var(--color-neutral-500), var(--tw-text-opacity)); } @@ -1939,11 +1386,6 @@ body a, body button { text-decoration-line: underline; } -/* TextWhitespace */ - -.chroma .w { -} - .invisible { visibility: hidden; } @@ -1971,6 +1413,10 @@ body a, body button { top: 5rem; } +.top-0 { + top: 0px; +} + .z-50 { z-index: 50; } @@ -2173,6 +1619,10 @@ body a, body button { width: 2rem; } +.w-5 { + width: 1.25rem; +} + .min-w-\[1\.8rem\] { min-width: 1.8rem; } @@ -2629,6 +2079,15 @@ body a, body button { text-decoration-line: none !important; } +.no-underline { + -webkit-text-decoration-line: none; + text-decoration-line: none; +} + +.opacity-0 { + opacity: 0; +} + .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); @@ -2641,6 +2100,12 @@ body a, body button { backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } +.transition-opacity { + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + .first\:mt-8:first-child { margin-top: 2rem; } @@ -2755,6 +2220,10 @@ body a, body button { outline-color: transparent; } +[dir="ltr"] .ltr\:-left-6 { + left: -1.5rem; +} + [dir="ltr"] .ltr\:ml-2 { margin-left: 0.5rem; } @@ -2791,6 +2260,10 @@ body a, body button { text-align: right; } +[dir="rtl"] .rtl\:-right-6 { + right: -1.5rem; +} + [dir="rtl"] .rtl\:mr-2 { margin-right: 0.5rem; } diff --git a/assets/css/main.css b/assets/css/main.css index 075e95cdd..5aadf8602 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -5,13 +5,12 @@ body a, body button { - @apply transition; + @apply transition-colors; } /* Scale SVG icons to text size */ .icon svg { - height: 1em; - width: 1em; + @apply h-[1em] w-[1em]; } /* Search */ @@ -23,11 +22,6 @@ body button { } /* Heading anchors */ -.prose .heading-anchor { - @apply absolute top-0 no-underline opacity-0; - width: 1.1em; - left: -1.1em; -} .prose .heading-anchor:hover { @apply underline bg-transparent text-primary-500 !important; } @@ -36,41 +30,36 @@ body button { .prose h2:hover > .heading-anchor, .prose h3:hover > .heading-anchor, .prose h4:hover > .heading-anchor { - @apply opacity-100; + @apply no-underline opacity-100 text-primary-200; } /* Article pagination */ .article-pagination a:hover .article-pagination-title { @apply underline decoration-primary-500; } - .article-pagination a:hover .article-pagination-direction { @apply text-primary-700 dark:text-primary-400; } /* RTL support */ -[dir="rtl"] .prose blockquote { - @apply pr-4 border-l-0 border-r-4; +.prose blockquote { + @apply rtl:pr-4 rtl:border-l-0 rtl:border-r-4; } - -[dir="rtl"] .prose ul > li, -[dir="rtl"] .prose ol > li { - @apply pl-0 pr-2 mr-7; +.prose ul > li, +.prose ol > li { + @apply rtl:pl-0 rtl:pr-2 rtl:mr-7; } - -[dir="rtl"] .prose ol > li:before, -[dir="rtl"] .prose ul > li:before { - @apply left-auto right-1; +.prose ol > li:before, +.prose ul > li:before { + @apply rtl:left-auto rtl:right-1; } - -[dir="rtl"] .prose thead td:first-child, -[dir="rtl"] .prose thead th:first-child { - @apply pr-0; +.prose thead td:first-child, +.prose thead th:first-child { + @apply rtl:pr-0; } - -[dir="rtl"] .prose thead td:last-child, -[dir="rtl"] .prose thead th:last-child { - @apply pl-0; +.prose thead td:last-child, +.prose thead th:last-child { + @apply rtl:pl-0; } /* -- Chroma Highlight -- */ @@ -78,12 +67,6 @@ body button { .prose .chroma { @apply rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200; } -/* Other */ -.chroma .x { -} -/* Error */ -.chroma .err { -} /* LineTableTD */ .chroma .lntd, .chroma .lntd pre { @@ -102,298 +85,178 @@ body button { @apply p-0 m-0; } /* LineNumbersTable */ -.chroma .lnt { - @apply text-neutral-600 dark:text-neutral-300; - margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; -} /* LineNumbers */ +.chroma .lnt, .chroma .ln { - @apply text-neutral-600 dark:text-neutral-300; - margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; + @apply text-neutral-600 dark:text-neutral-300 mr-[0.4em] px-[0.4em] py-0; } /* Keyword */ -.chroma .k { - @apply text-primary-600 dark:text-primary-300; -} -/* KeywordConstant */ -.chroma .kc { - @apply font-semibold text-secondary-400 dark:text-secondary-500; -} /* KeywordDeclaration */ -.chroma .kd { - @apply text-primary-600 dark:text-primary-300; -} /* KeywordNamespace */ -.chroma .kn { - @apply text-primary-600 dark:text-primary-300; -} /* KeywordPseudo */ -.chroma .kp { - @apply text-primary-600 dark:text-primary-300; -} /* KeywordReserved */ -.chroma .kr { +/* NameClass */ +/* NameFunctionMagic */ +/* NameNamespace */ +/* NameVariableClass */ +/* Operator */ +.chroma .k, +.chroma .kd, +.chroma .kn, +.chroma .kp, +.chroma .kr, +.chroma .nc, +.chroma .fm, +.chroma .nn, +.chroma .vc, +.chroma .o { @apply text-primary-600 dark:text-primary-300; } +/* KeywordConstant */ +.chroma .kc { + @apply font-semibold text-secondary-400 dark:text-secondary-500; +} /* KeywordType */ -.chroma .kt { +/* NameVariable */ +/* NameVariableInstance */ +/* NameVariableMagic */ +/* LiteralNumber */ +/* LiteralNumberBin */ +/* LiteralNumberFloat */ +/* LiteralNumberHex */ +/* LiteralNumberInteger */ +/* LiteralNumberIntegerLong */ +/* LiteralNumberOct */ +.chroma .kt, +.chroma .nv, +.chroma .vi, +.chroma .vm, +.chroma .m, +.chroma .mb, +.chroma .mf, +.chroma .mh, +.chroma .mi, +.chroma .il, +.chroma .mo { @apply text-secondary-400 dark:text-secondary-600; } /* Name */ -.chroma .n { - @apply text-secondary-900 dark:text-secondary-200; -} -/* NameAttribute */ -.chroma .na { - @apply text-secondary-800 dark:text-secondary-300; -} -/* NameBuiltin */ -.chroma .nb { - @apply text-secondary-800 dark:text-secondary-300; -} -/* NameBuiltinPseudo */ -.chroma .bp { - @apply text-secondary-800 dark:text-secondary-300; -} -/* NameClass */ -.chroma .nc { - @apply text-primary-600 dark:text-primary-300; -} -/* NameConstant */ -.chroma .no { - @apply font-semibold text-secondary-400 dark:text-secondary-500; -} /* NameDecorator */ -.chroma .nd { - @apply text-secondary-900 dark:text-secondary-200; -} /* NameEntity */ -.chroma .ni { - @apply text-secondary-900 dark:text-secondary-200; -} -/* NameException */ -.chroma .ne { - @apply font-semibold text-secondary-400 dark:text-secondary-500; -} -/* NameFunction */ -.chroma .nf { - @apply text-secondary-600 dark:text-secondary-500; -} -/* NameFunctionMagic */ -.chroma .fm { - @apply text-primary-600 dark:text-primary-300; -} /* NameLabel */ +.chroma .n, +.chroma .nd, +.chroma .ni, .chroma .nl { @apply text-secondary-900 dark:text-secondary-200; } -/* NameNamespace */ -.chroma .nn { - @apply text-primary-600 dark:text-primary-300; -} +/* NameAttribute */ +/* NameBuiltin */ +/* NameBuiltinPseudo */ /* NameOther */ -.chroma .nx { - @apply text-secondary-800 dark:text-secondary-300; -} /* NameProperty */ -.chroma .py { - color: #cebc3a; -} /* NameTag */ +.chroma .na, +.chroma .nb, +.chroma .bp, +.chroma .nx, +.chroma .py, .chroma .nt { @apply text-secondary-800 dark:text-secondary-300; } -/* NameVariable */ -.chroma .nv { - @apply text-secondary-400 dark:text-secondary-600; -} -/* NameVariableClass */ -.chroma .vc { - @apply text-primary-600 dark:text-primary-300; -} +/* NameConstant */ +/* NameException */ /* NameVariableGlobal */ +.chroma .no, +.chroma .ne, .chroma .vg { @apply font-semibold text-secondary-400 dark:text-secondary-500; } -/* NameVariableInstance */ -.chroma .vi { - @apply text-secondary-400 dark:text-secondary-600; -} -/* NameVariableMagic */ -.chroma .vm { - @apply text-secondary-400 dark:text-secondary-600; +/* NameFunction */ +.chroma .nf { + @apply text-secondary-600 dark:text-secondary-500; } /* Literal */ -.chroma .l { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralDate */ -.chroma .ld { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralString */ -.chroma .s { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringAffix */ -.chroma .sa { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringBacktick */ -.chroma .sb { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringChar */ -.chroma .sc { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringDelimiter */ -.chroma .dl { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringDoc */ -.chroma .sd { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringDouble */ -.chroma .s2 { +/* LiteralStringHeredoc */ +/* LiteralStringInterpol */ +/* LiteralStringOther */ +/* LiteralStringSingle */ +/* GenericInserted */ +/* GenericOutput */ +/* GenericPrompt */ +.chroma .l, +.chroma .ld, +.chroma .s, +.chroma .sa, +.chroma .sb, +.chroma .sc, +.chroma .dl, +.chroma .sd, +.chroma .s2, +.chroma .sh, +.chroma .si, +.chroma .sx, +.chroma .s1, +.chroma .gi, +.chroma .go, +.chroma .gp { @apply text-primary-800 dark:text-primary-400; } /* LiteralStringEscape */ .chroma .se { @apply font-semibold text-secondary-400 dark:text-secondary-500; } -/* LiteralStringHeredoc */ -.chroma .sh { - @apply text-primary-800 dark:text-primary-400; -} -/* LiteralStringInterpol */ -.chroma .si { - @apply text-primary-800 dark:text-primary-400; -} -/* LiteralStringOther */ -.chroma .sx { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringRegex */ -.chroma .sr { - @apply font-semibold text-primary-800 dark:text-primary-400; -} -/* LiteralStringSingle */ -.chroma .s1 { - @apply text-primary-800 dark:text-primary-400; -} /* LiteralStringSymbol */ +.chroma .sr, .chroma .ss { @apply font-semibold text-primary-800 dark:text-primary-400; } -/* LiteralNumber */ -.chroma .m { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberBin */ -.chroma .mb { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberFloat */ -.chroma .mf { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberHex */ -.chroma .mh { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberInteger */ -.chroma .mi { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberIntegerLong */ -.chroma .il { - @apply text-secondary-400 dark:text-secondary-600; -} -/* LiteralNumberOct */ -.chroma .mo { - @apply text-secondary-400 dark:text-secondary-600; -} -/* Operator */ -.chroma .o { - @apply text-primary-600; -} /* OperatorWord */ .chroma .ow { @apply font-semibold text-primary-400 dark:text-primary-600; } -/* Punctuation */ -.chroma .p { -} /* Comment */ -.chroma .c { - @apply italic text-neutral-500 dark:text-neutral-400; -} -/* CommentHashbang */ -.chroma .ch { - @apply italic font-semibold text-neutral-500 dark:text-neutral-400; -} /* CommentMultiline */ -.chroma .cm { - @apply italic text-neutral-500 dark:text-neutral-400; -} /* CommentSingle */ -.chroma .c1 { - @apply italic text-neutral-500 dark:text-neutral-400; -} /* CommentSpecial */ -.chroma .cs { - @apply italic text-neutral-500 dark:text-neutral-400; -} /* CommentPreproc */ -.chroma .cp { - @apply italic text-neutral-500 dark:text-neutral-400; -} /* CommentPreprocFile */ +.chroma .c, +.chroma .cm, +.chroma .c1, +.chroma .cs, +.chroma .cp, .chroma .cpf { @apply italic text-neutral-500 dark:text-neutral-400; } -/* Generic */ -.chroma .g { -} -/* GenericDeleted */ -.chroma .gd { +/* CommentHashbang */ +.chroma .ch { + @apply italic font-semibold text-neutral-500 dark:text-neutral-400; } /* GenericEmph */ .chroma .ge { @apply italic; } -/* GenericError */ -.chroma .gr { -} /* GenericHeading */ .chroma .gh { @apply font-semibold text-neutral-500; } -/* GenericInserted */ -.chroma .gi { - @apply text-primary-800 dark:text-primary-400; -} -/* GenericOutput */ -.chroma .go { - @apply text-primary-800 dark:text-primary-400; -} -/* GenericPrompt */ -.chroma .gp { - @apply text-primary-800 dark:text-primary-400; -} /* GenericStrong */ .chroma .gs { @apply font-semibold; } /* GenericSubheading */ -.chroma .gu { - @apply text-neutral-500; -} /* GenericTraceback */ +.chroma .gu, .chroma .gt { @apply text-neutral-500; } @@ -401,8 +264,5 @@ body button { .chroma .gl { @apply underline; } -/* TextWhitespace */ -.chroma .w { -} @tailwind utilities; diff --git a/exampleSite/content/samples/markdown.md b/exampleSite/content/samples/markdown.md index c870d2778..bcf0d0e0b 100755 --- a/exampleSite/content/samples/markdown.md +++ b/exampleSite/content/samples/markdown.md @@ -81,7 +81,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou ### Code block indented with four spaces - + @@ -94,9 +94,9 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou ### Code block with Hugo's internal highlight shortcode -{{< highlight html >}} +{{< highlight html "linenos=table,hl_lines=4 7-9" >}} - + diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html index 7415d6175..6ec0406a4 100644 --- a/layouts/_default/_markup/render-heading.html +++ b/layouts/_default/_markup/render-heading.html @@ -1 +1 @@ -{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} +{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} From ad495ca9ef711941d8dc8fa421b2fa6d26ec413f Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 17 Jan 2022 14:14:52 +1100 Subject: [PATCH 32/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Adopt=20new=20Tailwi?= =?UTF-8?q?nd=20typography=20theming?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/compiled/main.css | 393 ++++++++----------- assets/css/main.css | 34 +- exampleSite/content/_index.md | 2 +- exampleSite/content/samples/markdown.md | 2 +- layouts/404.html | 2 +- layouts/_default/_markup/render-heading.html | 2 +- layouts/_default/list.html | 2 +- layouts/_default/single.html | 2 +- layouts/partials/article-link.html | 2 +- layouts/partials/home/page.html | 2 +- layouts/partials/home/profile.html | 2 +- layouts/partials/section-header.html | 2 +- layouts/shortcodes/alert.html | 2 +- tailwind.config.js | 249 +++++------- 14 files changed, 278 insertions(+), 420 deletions(-) diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index f38ab7686..f2649d20b 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -468,12 +468,12 @@ Ensure the default browser behavior of the `hidden` attribute. --tw-backdrop-sepia: ; } -.prose { - color: rgb(var(--color-neutral-700)); +.markdown { + color: var(--tw-prose-body); max-width: 65ch; } -.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)) { +.markdown :where([class~="lead"]):not(:where([class~="not-markdown"] *)) { color: var(--tw-prose-lead); font-size: 1.25em; line-height: 1.6; @@ -481,111 +481,110 @@ Ensure the default browser behavior of the `hidden` attribute. margin-bottom: 1.2em; } -.prose a { - color: rgb(var(--color-primary-700)); +.markdown a { + color: var(--tw-prose-links); text-decoration: underline; font-weight: 500; -webkit-text-decoration-color: rgb(var(--color-primary-300)); text-decoration-color: rgb(var(--color-primary-300)); } -:where(.prose a:hover):not(:where([class~="not-prose"] *)) { +:where(.markdown a:hover):not(:where([class~="not-markdown"] *)) { color: rgb(var(--color-neutral)) !important; text-decoration: none !important; background-color: rgb(var(--color-primary-600)) !important; border-radius: 0.09rem; } -.prose :where(strong):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-900)); +.markdown :where(strong):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-bold); font-weight: 600; } -.prose :where(ol):not(:where([class~="not-prose"] *)) { +.markdown :where(ol):not(:where([class~="not-markdown"] *)) { list-style-type: decimal; padding-left: 1.625em; } -.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="A"]):not(:where([class~="not-markdown"] *)) { list-style-type: upper-alpha; } -.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="a"]):not(:where([class~="not-markdown"] *)) { list-style-type: lower-alpha; } -.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="A" s]):not(:where([class~="not-markdown"] *)) { list-style-type: upper-alpha; } -.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="a" s]):not(:where([class~="not-markdown"] *)) { list-style-type: lower-alpha; } -.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="I"]):not(:where([class~="not-markdown"] *)) { list-style-type: upper-roman; } -.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="i"]):not(:where([class~="not-markdown"] *)) { list-style-type: lower-roman; } -.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="I" s]):not(:where([class~="not-markdown"] *)) { list-style-type: upper-roman; } -.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="i" s]):not(:where([class~="not-markdown"] *)) { list-style-type: lower-roman; } -.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)) { +.markdown :where(ol[type="1"]):not(:where([class~="not-markdown"] *)) { list-style-type: decimal; } -.prose :where(ul):not(:where([class~="not-prose"] *)) { +.markdown :where(ul):not(:where([class~="not-markdown"] *)) { list-style-type: disc; padding-left: 1.625em; } -.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker { +.markdown :where(ol > li):not(:where([class~="not-markdown"] *))::marker { font-weight: 400; color: var(--tw-prose-counters); } -.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker { +.markdown :where(ul > li):not(:where([class~="not-markdown"] *))::marker { color: var(--tw-prose-bullets); } -.prose :where(hr):not(:where([class~="not-prose"] *)) { - border-color: rgb(var(--color-neutral-200)); +.markdown :where(hr):not(:where([class~="not-markdown"] *)) { + border-color: var(--tw-prose-hr); border-top-width: 1px; margin-top: 3em; margin-bottom: 3em; } -.prose :where(blockquote):not(:where([class~="not-prose"] *)) { +.markdown :where(blockquote):not(:where([class~="not-markdown"] *)) { font-weight: 500; font-style: italic; - color: rgb(var(--color-neutral-800)); + color: var(--tw-prose-quotes); border-left-width: 0.25rem; - border-left-color: rgb(var(--color-primary-200)); + border-left-color: var(--tw-prose-quote-borders); quotes: "\201C""\201D""\2018""\2019"; margin-top: 1.6em; margin-bottom: 1.6em; padding-left: 1em; - border-right-color: rgb(var(--color-primary-200)); } -.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"] *))::before { +.markdown :where(blockquote p:first-of-type):not(:where([class~="not-markdown"] *))::before { content: open-quote; } -.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"] *))::after { +.markdown :where(blockquote p:last-of-type):not(:where([class~="not-markdown"] *))::after { content: close-quote; } -.prose :where(h1):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-900)); +.markdown :where(h1):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-headings); font-weight: 800; font-size: 2.25em; margin-top: 0; @@ -594,12 +593,12 @@ Ensure the default browser behavior of the `hidden` attribute. position: relative; } -.prose :where(h1 strong):not(:where([class~="not-prose"] *)) { +.markdown :where(h1 strong):not(:where([class~="not-markdown"] *)) { font-weight: 900; } -.prose :where(h2):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-800)); +.markdown :where(h2):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-headings); font-weight: 700; font-size: 1.5em; margin-top: 2em; @@ -608,12 +607,12 @@ Ensure the default browser behavior of the `hidden` attribute. position: relative; } -.prose :where(h2 strong):not(:where([class~="not-prose"] *)) { +.markdown :where(h2 strong):not(:where([class~="not-markdown"] *)) { font-weight: 800; } -.prose :where(h3):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-800)); +.markdown :where(h3):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-headings); font-weight: 600; font-size: 1.25em; margin-top: 1.6em; @@ -622,12 +621,12 @@ Ensure the default browser behavior of the `hidden` attribute. position: relative; } -.prose :where(h3 strong):not(:where([class~="not-prose"] *)) { +.markdown :where(h3 strong):not(:where([class~="not-markdown"] *)) { font-weight: 700; } -.prose :where(h4):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-800)); +.markdown :where(h4):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-headings); font-weight: 600; margin-top: 1.5em; margin-bottom: 0.5em; @@ -635,43 +634,43 @@ Ensure the default browser behavior of the `hidden` attribute. position: relative; } -.prose :where(h4 strong):not(:where([class~="not-prose"] *)) { +.markdown :where(h4 strong):not(:where([class~="not-markdown"] *)) { font-weight: 700; } -.prose :where(figure > *):not(:where([class~="not-prose"] *)) { +.markdown :where(figure > *):not(:where([class~="not-markdown"] *)) { margin-top: 0; margin-bottom: 0; } -.prose :where(figcaption):not(:where([class~="not-prose"] *)) { +.markdown :where(figcaption):not(:where([class~="not-markdown"] *)) { color: var(--tw-prose-captions); font-size: 0.875em; line-height: 1.4285714; margin-top: 0.8571429em; } -.prose :where(code):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-secondary-700)); +.markdown :where(code):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-code); font-weight: 600; font-size: 0.875em; } -.prose :where(code):not(:where([class~="not-prose"] *))::before { +.markdown :where(code):not(:where([class~="not-markdown"] *))::before { content: "`"; } -.prose :where(code):not(:where([class~="not-prose"] *))::after { +.markdown :where(code):not(:where([class~="not-markdown"] *))::after { content: "`"; } -.prose :where(a code):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-secondary-700)); +.markdown :where(a code):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-code); } -.prose :where(pre):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-700)); - background-color: rgb(var(--color-neutral-50)); +.markdown :where(pre):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-pre-code); + background-color: var(--tw-prose-pre-bg); overflow-x: auto; font-weight: 400; font-size: 0.875em; @@ -685,27 +684,27 @@ Ensure the default browser behavior of the `hidden` attribute. padding-left: 1.1428571em; } -.prose :where(pre code):not(:where([class~="not-prose"] *)) { +.markdown :where(pre code):not(:where([class~="not-markdown"] *)) { background-color: transparent; border-width: 0; border-radius: 0; padding: 0; font-weight: inherit; - color: rgb(var(--color-neutral-700)); + color: inherit; font-size: inherit; font-family: inherit; line-height: inherit; } -.prose :where(pre code):not(:where([class~="not-prose"] *))::before { +.markdown :where(pre code):not(:where([class~="not-markdown"] *))::before { content: none; } -.prose :where(pre code):not(:where([class~="not-prose"] *))::after { +.markdown :where(pre code):not(:where([class~="not-markdown"] *))::after { content: none; } -.prose :where(table):not(:where([class~="not-prose"] *)) { +.markdown :where(table):not(:where([class~="not-markdown"] *)) { width: 100%; table-layout: auto; text-align: left; @@ -715,13 +714,13 @@ Ensure the default browser behavior of the `hidden` attribute. line-height: 1.7142857; } -.prose :where(thead):not(:where([class~="not-prose"] *)) { +.markdown :where(thead):not(:where([class~="not-markdown"] *)) { border-bottom-width: 1px; border-bottom-color: var(--tw-prose-th-borders); } -.prose :where(thead th):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-800)); +.markdown :where(thead th):not(:where([class~="not-markdown"] *)) { + color: var(--tw-prose-headings); font-weight: 600; vertical-align: bottom; padding-right: 0.5714286em; @@ -729,16 +728,16 @@ Ensure the default browser behavior of the `hidden` attribute. padding-left: 0.5714286em; } -.prose :where(tbody tr):not(:where([class~="not-prose"] *)) { +.markdown :where(tbody tr):not(:where([class~="not-markdown"] *)) { border-bottom-width: 1px; - border-bottom-color: rgb(var(--color-neutral-300)); + border-bottom-color: var(--tw-prose-td-borders); } -.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)) { +.markdown :where(tbody tr:last-child):not(:where([class~="not-markdown"] *)) { border-bottom-width: 0; } -.prose :where(tbody td):not(:where([class~="not-prose"] *)) { +.markdown :where(tbody td):not(:where([class~="not-markdown"] *)) { vertical-align: baseline; padding-top: 0.5714286em; padding-right: 0.5714286em; @@ -746,163 +745,151 @@ Ensure the default browser behavior of the `hidden` attribute. padding-left: 0.5714286em; } -.prose { - --tw-prose-body: #374151; - --tw-prose-headings: #111827; - --tw-prose-lead: #4b5563; - --tw-prose-links: #111827; - --tw-prose-bold: #111827; - --tw-prose-counters: #6b7280; - --tw-prose-bullets: #d1d5db; - --tw-prose-hr: #e5e7eb; - --tw-prose-quotes: #111827; - --tw-prose-quote-borders: #e5e7eb; - --tw-prose-captions: #6b7280; - --tw-prose-code: #111827; - --tw-prose-pre-code: #e5e7eb; - --tw-prose-pre-bg: #1f2937; - --tw-prose-th-borders: #d1d5db; - --tw-prose-td-borders: #e5e7eb; - --tw-prose-invert-body: #d1d5db; - --tw-prose-invert-headings: #fff; - --tw-prose-invert-lead: #9ca3af; - --tw-prose-invert-links: #fff; - --tw-prose-invert-bold: #fff; - --tw-prose-invert-counters: #9ca3af; - --tw-prose-invert-bullets: #4b5563; - --tw-prose-invert-hr: #374151; - --tw-prose-invert-quotes: #f3f4f6; - --tw-prose-invert-quote-borders: #374151; - --tw-prose-invert-captions: #9ca3af; - --tw-prose-invert-code: #fff; - --tw-prose-invert-pre-code: #d1d5db; - --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); - --tw-prose-invert-th-borders: #4b5563; - --tw-prose-invert-td-borders: #374151; +.markdown { + --tw-prose-body: rgb(var(--color-neutral-700)); + --tw-prose-headings: rgb(var(--color-neutral-800)); + --tw-prose-lead: rgb(var(--color-neutral-500)); + --tw-prose-links: rgb(var(--color-primary-700)); + --tw-prose-bold: rgb(var(--color-neutral-900)); + --tw-prose-counters: rgb(var(--color-neutral-800)); + --tw-prose-bullets: rgb(var(--color-neutral-500)); + --tw-prose-hr: rgb(var(--color-neutral-200)); + --tw-prose-quotes: rgb(var(--color-neutral-700)); + --tw-prose-quote-borders: rgb(var(--color-primary-200)); + --tw-prose-captions: rgb(var(--color-neutral-500)); + --tw-prose-code: rgb(var(--color-secondary-700)); + --tw-prose-pre-code: rgb(var(--color-neutral-700)); + --tw-prose-pre-bg: rgb(var(--color-neutral-50)); + --tw-prose-th-borders: rgb(var(--color-neutral-500)); + --tw-prose-td-borders: rgb(var(--color-neutral-300)); + --tw-prose-invert-body: rgb(var(--color-neutral-300)); + --tw-prose-invert-headings: rgb(var(--color-neutral-50)); + --tw-prose-invert-lead: rgb(var(--color-neutral-500)); + --tw-prose-invert-links: rgb(var(--color-primary-400)); + --tw-prose-invert-bold: rgb(var(--color-neutral)); + --tw-prose-invert-counters: rgb(var(--color-neutral-400)); + --tw-prose-invert-bullets: rgb(var(--color-neutral-600)); + --tw-prose-invert-hr: rgb(var(--color-neutral-500)); + --tw-prose-invert-quotes: rgb(var(--color-neutral-200)); + --tw-prose-invert-quote-borders: rgb(var(--color-primary-900)); + --tw-prose-invert-captions: rgb(var(--color-neutral-400)); + --tw-prose-invert-code: rgb(var(--color-secondary-400)); + --tw-prose-invert-pre-code: rgb(var(--color-neutral-200)); + --tw-prose-invert-pre-bg: rgb(var(--color-neutral-700)); + --tw-prose-invert-th-borders: rgb(var(--color-neutral-500)); + --tw-prose-invert-td-borders: rgb(var(--color-neutral-700)); font-size: 1rem; line-height: 1.75; } -.prose :where(p):not(:where([class~="not-prose"] *)) { +.markdown :where(p):not(:where([class~="not-markdown"] *)) { margin-top: 1.25em; margin-bottom: 1.25em; } -.prose :where(img):not(:where([class~="not-prose"] *)) { +.markdown :where(img):not(:where([class~="not-markdown"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose :where(video):not(:where([class~="not-prose"] *)) { +.markdown :where(video):not(:where([class~="not-markdown"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose :where(figure):not(:where([class~="not-prose"] *)) { +.markdown :where(figure):not(:where([class~="not-markdown"] *)) { margin-top: 2em; margin-bottom: 2em; } -.prose :where(h2 code):not(:where([class~="not-prose"] *)) { +.markdown :where(h2 code):not(:where([class~="not-markdown"] *)) { font-size: 0.875em; } -.prose :where(h3 code):not(:where([class~="not-prose"] *)) { +.markdown :where(h3 code):not(:where([class~="not-markdown"] *)) { font-size: 0.9em; } -.prose :where(li):not(:where([class~="not-prose"] *)) { +.markdown :where(li):not(:where([class~="not-markdown"] *)) { margin-top: 0.5em; margin-bottom: 0.5em; } -.prose :where(ol > li):not(:where([class~="not-prose"] *)) { +.markdown :where(ol > li):not(:where([class~="not-markdown"] *)) { padding-left: 0.375em; } -.prose :where(ul > li):not(:where([class~="not-prose"] *)) { +.markdown :where(ul > li):not(:where([class~="not-markdown"] *)) { padding-left: 0.375em; } -.prose > :where(ul > li p):not(:where([class~="not-prose"] *)) { +.markdown > :where(ul > li p):not(:where([class~="not-markdown"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } -.prose > :where(ul > li > *:first-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(ul > li > *:first-child):not(:where([class~="not-markdown"] *)) { margin-top: 1.25em; } -.prose > :where(ul > li > *:last-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(ul > li > *:last-child):not(:where([class~="not-markdown"] *)) { margin-bottom: 1.25em; } -.prose > :where(ol > li > *:first-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(ol > li > *:first-child):not(:where([class~="not-markdown"] *)) { margin-top: 1.25em; } -.prose > :where(ol > li > *:last-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(ol > li > *:last-child):not(:where([class~="not-markdown"] *)) { margin-bottom: 1.25em; } -.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)) { +.markdown :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-markdown"] *)) { margin-top: 0.75em; margin-bottom: 0.75em; } -.prose :where(hr + *):not(:where([class~="not-prose"] *)) { +.markdown :where(hr + *):not(:where([class~="not-markdown"] *)) { margin-top: 0; } -.prose :where(h2 + *):not(:where([class~="not-prose"] *)) { +.markdown :where(h2 + *):not(:where([class~="not-markdown"] *)) { margin-top: 0; } -.prose :where(h3 + *):not(:where([class~="not-prose"] *)) { +.markdown :where(h3 + *):not(:where([class~="not-markdown"] *)) { margin-top: 0; } -.prose :where(h4 + *):not(:where([class~="not-prose"] *)) { +.markdown :where(h4 + *):not(:where([class~="not-markdown"] *)) { margin-top: 0; } -.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)) { +.markdown :where(thead th:first-child):not(:where([class~="not-markdown"] *)) { padding-left: 0; } -.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)) { +.markdown :where(thead th:last-child):not(:where([class~="not-markdown"] *)) { padding-right: 0; } -.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)) { +.markdown :where(tbody td:first-child):not(:where([class~="not-markdown"] *)) { padding-left: 0; } -.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)) { +.markdown :where(tbody td:last-child):not(:where([class~="not-markdown"] *)) { padding-right: 0; } -.prose > :where(:first-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(:first-child):not(:where([class~="not-markdown"] *)) { margin-top: 0; } -.prose > :where(:last-child):not(:where([class~="not-prose"] *)) { +.markdown > :where(:last-child):not(:where([class~="not-markdown"] *)) { margin-bottom: 0; } -.prose :where(ol > li):not(:where([class~="not-prose"] *))::before { - color: rgb(var(--color-neutral-800)); -} - -.prose :where(ul > li):not(:where([class~="not-prose"] *))::before { - background-color: rgb(var(--color-neutral-500)); -} - -.prose :where(thead tr):not(:where([class~="not-prose"] *)) { - border-bottom-color: rgb(var(--color-neutral-500)); -} - -.prose :where(kbd):not(:where([class~="not-prose"] *)) { +.markdown :where(kbd):not(:where([class~="not-markdown"] *)) { background-color: rgb(var(--color-neutral-200)); padding: 0.1rem 0.4rem; border-radius: 0.25rem; @@ -910,7 +897,8 @@ Ensure the default browser behavior of the `hidden` attribute. font-weight: 600; } -.prose :where(mark):not(:where([class~="not-prose"] *)) { +.markdown :where(mark):not(:where([class~="not-markdown"] *)) { + color: rgb(var(--color-neutral-800)); background-color: rgb(var(--color-secondary-200)); padding: 0.1rem 0.2rem; border-radius: 0.12rem; @@ -939,7 +927,7 @@ body a, body button { /* Heading anchors */ -.prose .heading-anchor:hover { +.markdown .heading-anchor:hover { background-color: transparent !important; --tw-text-opacity: 1 !important; color: rgba(var(--color-primary-500), var(--tw-text-opacity)) !important; @@ -947,7 +935,7 @@ body a, body button { text-decoration-line: underline !important; } -.prose .heading-anchor:hover, .prose .heading-anchor:focus, .prose h2:hover > .heading-anchor, .prose h3:hover > .heading-anchor, .prose h4:hover > .heading-anchor { +.markdown .heading-anchor:hover, .markdown .heading-anchor:focus, .markdown h2:hover > .heading-anchor, .markdown h3:hover > .heading-anchor, .markdown h4:hover > .heading-anchor { --tw-text-opacity: 1; color: rgba(var(--color-primary-200), var(--tw-text-opacity)); -webkit-text-decoration-line: none; @@ -955,6 +943,11 @@ body a, body button { opacity: 1; } +.dark .markdown .heading-anchor:hover, .dark .markdown .heading-anchor:focus, .dark .markdown h2:hover > .heading-anchor, .dark .markdown h3:hover > .heading-anchor, .dark .markdown h4:hover > .heading-anchor { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity)); +} + /* Article pagination */ .article-pagination a:hover .article-pagination-title { @@ -976,28 +969,28 @@ body a, body button { /* RTL support */ -[dir="rtl"] .prose blockquote { +[dir="rtl"] .markdown blockquote { border-left-width: 0px; border-right-width: 4px; padding-right: 1rem; } -[dir="rtl"] .prose ul > li, [dir="rtl"] .prose ol > li { +[dir="rtl"] .markdown ul > li, [dir="rtl"] .markdown ol > li { margin-right: 1.75rem; padding-left: 0px; padding-right: 0.5rem; } -[dir="rtl"] .prose ol > li:before, [dir="rtl"] .prose ul > li:before { +[dir="rtl"] .markdown ol > li:before, [dir="rtl"] .markdown ul > li:before { left: auto; right: 0.25rem; } -[dir="rtl"] .prose thead td:first-child, [dir="rtl"] .prose thead th:first-child { +[dir="rtl"] .markdown thead td:first-child, [dir="rtl"] .markdown thead th:first-child { padding-right: 0px; } -[dir="rtl"] .prose thead td:last-child, [dir="rtl"] .prose thead th:last-child { +[dir="rtl"] .markdown thead td:last-child, [dir="rtl"] .markdown thead th:last-child { padding-left: 0px; } @@ -1005,7 +998,7 @@ body a, body button { /* Background */ -.prose .chroma { +.markdown .chroma { border-radius: 0.375rem; --tw-bg-opacity: 1; background-color: rgba(var(--color-neutral-50), var(--tw-bg-opacity)); @@ -1013,7 +1006,7 @@ body a, body button { color: rgba(var(--color-neutral-700), var(--tw-text-opacity)); } -.dark .prose .chroma { +.dark .markdown .chroma { --tw-bg-opacity: 1; background-color: rgba(var(--color-neutral-700), var(--tw-bg-opacity)); --tw-text-opacity: 1; @@ -1619,8 +1612,8 @@ body a, body button { width: 2rem; } -.w-5 { - width: 1.25rem; +.w-6 { + width: 1.5rem; } .min-w-\[1\.8rem\] { @@ -2300,98 +2293,36 @@ body a, body button { text-align: left; } -.dark .dark\:prose-light { - color: rgb(var(--color-neutral-300)); -} - -.dark .dark\:prose-light a { - color: rgb(var(--color-primary-400)); - -webkit-text-decoration-color: rgb(var(--color-neutral-500)); - text-decoration-color: rgb(var(--color-neutral-500)); -} - -:where(.dark .dark\:prose-light a:hover):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral)) !important; - text-decoration: none !important; -} - -.dark .dark\:prose-light :where(strong):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral)); -} - -.dark .dark\:prose-light :where(ol > li):not(:where([class~="not-prose"] *))::before { - color: rgb(var(--color-neutral-400)); -} - -.dark .dark\:prose-light :where(ul > li):not(:where([class~="not-prose"] *))::before { - background-color: rgb(var(--color-neutral-600)); +.dark .dark\:markdown-invert { + --tw-prose-body: var(--tw-prose-invert-body); + --tw-prose-headings: var(--tw-prose-invert-headings); + --tw-prose-lead: var(--tw-prose-invert-lead); + --tw-prose-links: var(--tw-prose-invert-links); + --tw-prose-bold: var(--tw-prose-invert-bold); + --tw-prose-counters: var(--tw-prose-invert-counters); + --tw-prose-bullets: var(--tw-prose-invert-bullets); + --tw-prose-hr: var(--tw-prose-invert-hr); + --tw-prose-quotes: var(--tw-prose-invert-quotes); + --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); + --tw-prose-captions: var(--tw-prose-invert-captions); + --tw-prose-code: var(--tw-prose-invert-code); + --tw-prose-pre-code: var(--tw-prose-invert-pre-code); + --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); + --tw-prose-th-borders: var(--tw-prose-invert-th-borders); + --tw-prose-td-borders: var(--tw-prose-invert-td-borders); } -.dark .dark\:prose-light :where(hr):not(:where([class~="not-prose"] *)) { - border-color: rgb(var(--color-neutral-500)); +.dark .dark\:markdown-invert :where(a):not(:where([class~="not-markdown"] *)) { + -webkit-text-decoration-color: rgb(var(--color-neutral-600)); + text-decoration-color: rgb(var(--color-neutral-600)); } -.dark .dark\:prose-light :where(blockquote):not(:where([class~="not-prose"] *)) { +.dark .dark\:markdown-invert :where(kbd):not(:where([class~="not-markdown"] *)) { color: rgb(var(--color-neutral-200)); - border-left-color: rgb(var(--color-primary-900)); - border-right-color: rgb(var(--color-primary-900)); -} - -.dark .dark\:prose-light :where(h1):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral)); -} - -.dark .dark\:prose-light :where(h2):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-50)); -} - -.dark .dark\:prose-light :where(h3):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-50)); -} - -.dark .dark\:prose-light :where(h4):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-50)); -} - -.dark .dark\:prose-light :where(figure figcaption):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-400)); -} - -.dark .dark\:prose-light :where(code):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-secondary-400)); -} - -.dark .dark\:prose-light :where(a code):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-secondary-400)); -} - -.dark .dark\:prose-light :where(pre):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-200)); - background-color: rgb(var(--color-neutral-700)); -} - -.dark .dark\:prose-light :where(pre code):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral-200)); -} - -.dark .dark\:prose-light :where(thead th):not(:where([class~="not-prose"] *)) { - color: rgb(var(--color-neutral)); -} - -.dark .dark\:prose-light :where(thead tr):not(:where([class~="not-prose"] *)) { - border-bottom-color: rgb(var(--color-neutral-500)); -} - -.dark .dark\:prose-light :where(tbody tr):not(:where([class~="not-prose"] *)) { - border-bottom-color: rgb(var(--color-neutral-700)); -} - -.dark .dark\:prose-light :where(kbd):not(:where([class~="not-prose"] *)) { background-color: rgb(var(--color-neutral-700)); - color: rgb(var(--color-neutral-300)); } -.dark .dark\:prose-light :where(mark):not(:where([class~="not-prose"] *)) { +.dark .dark\:markdown-invert :where(mark):not(:where([class~="not-markdown"] *)) { background-color: rgb(var(--color-secondary-400)); } diff --git a/assets/css/main.css b/assets/css/main.css index 5aadf8602..2e7cb22d8 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -22,15 +22,15 @@ body button { } /* Heading anchors */ -.prose .heading-anchor:hover { +.markdown .heading-anchor:hover { @apply underline bg-transparent text-primary-500 !important; } -.prose .heading-anchor:hover, -.prose .heading-anchor:focus, -.prose h2:hover > .heading-anchor, -.prose h3:hover > .heading-anchor, -.prose h4:hover > .heading-anchor { - @apply no-underline opacity-100 text-primary-200; +.markdown .heading-anchor:hover, +.markdown .heading-anchor:focus, +.markdown h2:hover > .heading-anchor, +.markdown h3:hover > .heading-anchor, +.markdown h4:hover > .heading-anchor { + @apply no-underline opacity-100 text-primary-200 dark:text-neutral-700; } /* Article pagination */ @@ -42,29 +42,29 @@ body button { } /* RTL support */ -.prose blockquote { +.markdown blockquote { @apply rtl:pr-4 rtl:border-l-0 rtl:border-r-4; } -.prose ul > li, -.prose ol > li { +.markdown ul > li, +.markdown ol > li { @apply rtl:pl-0 rtl:pr-2 rtl:mr-7; } -.prose ol > li:before, -.prose ul > li:before { +.markdown ol > li:before, +.markdown ul > li:before { @apply rtl:left-auto rtl:right-1; } -.prose thead td:first-child, -.prose thead th:first-child { +.markdown thead td:first-child, +.markdown thead th:first-child { @apply rtl:pr-0; } -.prose thead td:last-child, -.prose thead th:last-child { +.markdown thead td:last-child, +.markdown thead th:last-child { @apply rtl:pl-0; } /* -- Chroma Highlight -- */ /* Background */ -.prose .chroma { +.markdown .chroma { @apply rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200; } /* LineTableTD */ diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md index 8ab0c4be6..ddb0092f7 100755 --- a/exampleSite/content/_index.md +++ b/exampleSite/content/_index.md @@ -12,7 +12,7 @@ A simple, lightweight theme for Hugo built with Tailwind CSS. {{< icon "exclamation-triangle" >}}
- This is a demo of the page layout. + This is a demo of the page layout. + + + +
+ + +
+ + +
+
+
+
+
+
+
+ + +
+ + + + +
+
100
+ +
Performance
+
+ + + +
+ + + + +
+
100
+ +
Accessibility
+
+ + + +
+ + + + +
+
100
+ +
Best Practices
+
+ + + +
+ + + + +
+
100
+ +
SEO
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Progressive Web App
+
+
+
+ 0–49 + 50–89 + 90–100 +
+
+
+ +
+
+ +
Metrics
+ + +
+
+ First Contentful Paint +
1.4 s
+
First Contentful Paint marks the time at which the first text or image is painted. Learn more.
+
+
+
+ Speed Index +
1.4 s
+
Speed Index shows how quickly the contents of a page are visibly populated. Learn more.
+
+
+
+ Largest Contentful Paint +
1.5 s
+
Largest Contentful Paint marks the time at which the largest text or image is painted. Learn more
+
+
+
+ Time to Interactive +
1.4 s
+
Time to interactive is the amount of time it takes for the page to become fully interactive. Learn more.
+
+
+
+ Total Blocking Time +
10 ms
+
Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more.
+
+
+
+ Cumulative Layout Shift +
0
+
Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more.
+
+
Values are estimated and may vary. The performance score is calculated directly from these metrics.See calculator.
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Screenshot
Show audits relevant to:
OpportunitiesThese suggestions can help your page load faster. They don't directly affect the Performance score.
+
Opportunity
+
Estimated Savings
+
+
+ +
+
+
+ +
Reduce unused CSS
+
+
+
+
+
+
0.29 s
+
+ + + + +
+
+
+
+
+
Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
39.7 KiB
27.9 KiB
+
+
+ +
+
+
+ +
Reduce unused JavaScript
+
+
+
+
+
+
0.15 s
+
+ + + + +
+
+
+
+
+
Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. Learn more.LCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
27.2 KiB
21.4 KiB
+
DiagnosticsMore information about the performance of your application. These numbers don't directly affect the Performance score.
+
+ +
+ + + Avoid chaining critical requests + 1 chain found + +
+ + + + +
+
+
+
The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. Learn more.FCPLCP
+
+
+ +
+
+ Maximum critical path latency: 20 ms +
+
+
+
Initial Navigation
+ + + +
+ + + + + +
…samples/emoji
(localhost)
+
+ +
+ + + + + + - 0 ms, 39.71 KiB +
+
+
+
+
+ +
+ + + Keep request counts low and transfer sizes small + 4 requests • 92 KiB + +
+ + + + +
+
+
+
To set budgets for the quantity and size of page resources, add a budget.json file. Learn more.
+
+
Resource Type
Requests
Transfer Size
Total
4
91.7 KiB
Stylesheet
1
39.7 KiB
Script
1
27.2 KiB
Document
1
17.0 KiB
Image
1
7.7 KiB
Media
0
0.0 KiB
Font
0
0.0 KiB
Other
0
0.0 KiB
Third-party
0
0.0 KiB
+
+
+ +
+ + + Largest Contentful Paint element + 1 element found + +
+ + + + +
+
+
+
This is the largest contentful element painted within the viewport. Learn MoreLCP
+
+
Element
Note: The rendering of these glyphs depends on the browser and the platform. To…
<span class="dark:text-neutral-300">
+
+
+ +
+ + + Avoid long main-thread tasks + 2 long tasks found + +
+ + + + +
+
+
+
Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. Learn moreTBT
+
+ + +
+ +
+
URL
Start Time
Duration
…samples/emoji
(localhost)
785 ms
584 ms
…samples/emoji
(localhost)
1,369 ms
61 ms
+
+
+ +
+ + + Avoid non-composited animations + 18 animated elements found + +
+ + + + +
+
+
+
Animations which are not composited can be janky and increase CLS. Learn moreCLS
+
+
Element
Name
↓Skip to main content
<a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 dark:bg-neutr…" href="#main-content">
Unsupported CSS Property: background-color
background-color
Unsupported CSS Property: color
color
Congo
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" rel="me" href="/congo/">
Unsupported CSS Property: color
color
Docs
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/docs/">
Unsupported CSS Property: color
color
Samples
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/samples/">
Unsupported CSS Property: color
color
Users
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/users/">
Unsupported CSS Property: color
color
GitHub
<a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="https://github.com/jpanther/congo">
Unsupported CSS Property: color
color
button
<button id="search-button" class="text-base hover:text-primary-600 dark:hover:text-primary-400">
Unsupported CSS Property: color
color
Content Samples
<a class="hover:underline hover:decoration-neutral-300 dark:underline-neutral-600" href="/congo/samples/">
Unsupported CSS Property: color
color
site configuration
<a href="http://localhost:8008/congo/docs/configuration/#site-configuration">
Unsupported CSS Property: color
color
Unsupported CSS Property: text-decoration-color
text-decoration-color
Emoji cheat sheet
<a href="http://www.emoji-cheat-sheet.com/">
Unsupported CSS Property: color
color
Unsupported CSS Property: text-decoration-color
text-decoration-color
Twitter
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://twitter.com/" target="_blank" aria-label="Twitter" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Facebook
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://facebook.com/" target="_blank" aria-label="Facebook" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Linkedin
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://linkedin.com/" target="_blank" aria-label="Linkedin" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
Youtube
<a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://youtube.com/" target="_blank" aria-label="Youtube" rel="me noopener noreferrer">
Unsupported CSS Property: color
color
← +Diagrams and Flowcharts +6 March 2019
<a class="flex" href="/congo/samples/diagrams-flowcharts/">
Unsupported CSS Property: color
color
button
<button id="close-search-button" class="flex items-center justify-center w-8 h-8 text-neutral-700 dark:text-neutra…">
Unsupported CSS Property: color
color
Hugo
<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">
Unsupported CSS Property: color
color
Congo
<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://git.io/hugo-congo" target="_blank" rel="noopener noreferrer">
Unsupported CSS Property: color
color
+
+ +
+
+ Passed audits + (28) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Eliminate render-blocking resources + Potential savings of 0 ms + +
+ + + + +
+
+
+
Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Transfer Size
Potential Savings
39.7 KiB
480 ms
+
+
+ +
+ + + Properly size images + + +
+ + + + +
+
+
+
Serve images that are appropriately-sized to save cellular data and improve load time. Learn more.
+
+
+
+
+ +
+ + + Defer offscreen images + + +
+ + + + +
+
+
+
Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. Learn more.
+
+
+
+
+ +
+ + + Minify CSS + + +
+ + + + +
+
+
+
Minifying CSS files can reduce network payload sizes. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Minify JavaScript + + +
+ + + + +
+
+
+
Minifying JavaScript files can reduce payload sizes and script parse time. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Efficiently encode images + + +
+ + + + +
+
+
+
Optimized images load faster and consume less cellular data. Learn more.
+
+
+
+
+ +
+ + + Serve images in next-gen formats + + +
+ + + + +
+
+
+
Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. Learn more.
+
+
+
+
+ +
+ + + Preconnect to required origins + + +
+ + + + +
+
+
+
Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Initial server response time was short + Root document took 0 ms + +
+ + + + +
+
+
+
Keep the server response time for the main document short because all other requests depend on it. Learn more.FCPLCP
+
+ + +
+ +
+
URL
Time Spent
…samples/emoji
(localhost)
0 ms
+
+
+ +
+ + + Avoid multiple page redirects + + +
+ + + + +
+
+
+
Redirects introduce additional delays before the page can be loaded. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Preload key requests + + +
+ + + + +
+
+
+
Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Use HTTP/2 + + +
+ + + + +
+
+
+
HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. Learn more.
+
+
+
+
+ +
+ + + Use video formats for animated content + + +
+ + + + +
+
+
+
Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. Learn moreLCP
+
+
+
+
+ +
+ + + Remove duplicate modules in JavaScript bundles + + +
+ + + + +
+
+
+
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. TBT
+
+
+
+
+ +
+ + + Avoid serving legacy JavaScript to modern browsers + Potential savings of 0 KiB + +
+ + + + +
+
+
+
Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. Learn MoreTBT
+
+ + +
+ +
+
URL
Potential Savings
0.2 KiB
@babel/plugin-transform-classes
+
+
+ +
+ + + Preload Largest Contentful Paint image + + +
+ + + + +
+
+
+
Preload the image used by the LCP element in order to improve your LCP time. Learn more.LCP
+
+
+
+
+ +
+ + + Avoids enormous network payloads + Total size was 92 KiB + +
+ + + + +
+
+
+
Large network payloads cost users real money and are highly correlated with long load times. Learn more.LCP
+
+ + +
+ +
+
URL
Transfer Size
39.7 KiB
27.2 KiB
…samples/emoji
(localhost)
17.0 KiB
7.7 KiB
+
+
+ +
+ + + Avoids an excessive DOM size + 120 elements + +
+ + + + +
+
+
+
A large DOM will increase memory usage, cause longer style calculations, and produce costly layout reflows. Learn more.TBT
+
+
Statistic
Element
Value
Total DOM Elements
120
Maximum DOM Depth
path
<path fill="currentcolor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-2…">
12
Maximum Child Elements
body
<body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 bg-neutral text-neutr…">
5
+
+
+ +
+ + + User Timing marks and measures + + +
+ + + + +
+
+
+
Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. Learn more.
+
+
+
+
+ +
+ + + JavaScript execution time + 0.0 s + +
+ + + + +
+
+
+
Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. Learn more.TBT
+
+ + +
+ +
+
URL
Total CPU Time
Script Evaluation
Script Parse
…samples/emoji
(localhost)
1,411 ms
4 ms
1 ms
+
+
+ +
+ + + Minimizes main-thread work + 1.5 s + +
+ + + + +
+
+
+
Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. Learn moreTBT
+
+
Category
Time Spent
Style & Layout
1,117 ms
Rendering
252 ms
Other
53 ms
Script Evaluation
20 ms
Parse HTML & CSS
8 ms
Script Parsing & Compilation
3 ms
+
+
+ +
+ + + All text remains visible during webfont loads + + +
+ + + + +
+
+
+
Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. Learn more.FCPLCP
+
+
+
+
+ +
+ + + Minimize third-party usage + + +
+ + + + +
+
+
+
Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. Learn more.TBT
+
+
+
+
+ +
+ + + Lazy load third-party resources with facades + + +
+ + + + +
+
+
+
Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. Learn more.TBT
+
+
+
+
+ +
+ + + Avoid large layout shifts + + +
+ + + + +
+
+
+
These DOM elements contribute most to the CLS of the page.CLS
+
+
+
+
+ +
+ + + Uses passive listeners to improve scrolling performance + + +
+ + + + +
+
+
+
Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. Learn more.
+
+
+
+
+ +
+ + + Avoids document.write() + + +
+ + + + +
+
+
+
For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. Learn more.
+
+
+
+
+ +
+ + + Image elements have explicit width and height + + +
+ + + + +
+
+
+
Set an explicit width and height on image elements to reduce layout shifts and improve CLS. Learn moreCLS
+
+
+
+
+ +
These checks highlight opportunities to improve the accessibility of your web app. Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.
+
+
+ +
+
+ Additional items to manually check + (10) + + + These items address areas which an automated testing tool cannot cover. Learn more in our guide on conducting an accessibility review.
+
+ + + + + +
+
+
+
+ +
+ + + The page has a logical tab order + + +
+ + + + +
+
+
+
Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. Learn more.
+
+
+
+
+ +
+ + + Interactive controls are keyboard focusable + + +
+ + + + +
+
+
+
Custom interactive controls are keyboard focusable and display a focus indicator. Learn more.
+
+
+
+
+ +
+ + + Interactive elements indicate their purpose and state + + +
+ + + + +
+
+
+
Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. Learn more.
+
+
+
+
+ +
+ + + The user's focus is directed to new content added to the page + + +
+ + + + +
+
+
+
If new content, such as a dialog, is added to the page, the user's focus is directed to it. Learn more.
+
+
+
+
+ +
+ + + User focus is not accidentally trapped in a region + + +
+ + + + +
+
+
+
A user can tab into and out of any control or region without accidentally trapping their focus. Learn more.
+
+
+
+
+ +
+ + + Custom controls have associated labels + + +
+ + + + +
+
+
+
Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. Learn more.
+
+
+
+
+ +
+ + + Custom controls have ARIA roles + + +
+ + + + +
+
+
+
Custom interactive controls have appropriate ARIA roles. Learn more.
+
+
+
+
+ +
+ + + Visual order on the page follows DOM order + + +
+ + + + +
+
+
+
DOM order matches the visual order, improving navigation for assistive technology. Learn more.
+
+
+
+
+ +
+ + + Offscreen content is hidden from assistive technology + + +
+ + + + +
+
+
+
Offscreen content is hidden with display: none or aria-hidden=true. Learn more.
+
+
+
+
+ +
+ + + HTML5 landmark elements are used to improve navigation + + +
+ + + + +
+
+
+
Landmark elements (<main>, <nav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. Learn more.
+
+
+
+ +
+
+ Passed audits + (18) + + +
+
+ + + + + +
+
+
+
+ +
+ + + [aria-*] attributes match their roles + + +
+ + + + +
+
+
+
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. Learn more.
+
+
+
+
+ +
+ + + [aria-hidden="true"] is not present on the document <body> + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. Learn more.
+
+
+
+
+ +
+ + + [aria-hidden="true"] elements do not contain focusable descendents + + +
+ + + + +
+
+
+
Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. Learn more.
+
+
+
+
+ +
+ + + [aria-*] attributes have valid values + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. Learn more.
+
+
+
+
+ +
+ + + [aria-*] attributes are valid and not misspelled + + +
+ + + + +
+
+
+
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. Learn more.
+
+
+
+
+ +
+ + + Buttons have an accessible name + + +
+ + + + +
+
+
+
When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + The page contains a heading, skip link, or landmark region + + +
+ + + + +
+
+
+
Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. Learn more.
+
+
+
+
+ +
+ + + Background and foreground colors have a sufficient contrast ratio + + +
+ + + + +
+
+
+
Low-contrast text is difficult or impossible for many users to read. Learn more.
+
+
+
+
+ +
+ + + Document has a <title> element + + +
+ + + + +
+
+
+
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more.
+
+
+
+
+ +
+ + + [id] attributes on active, focusable elements are unique + + +
+ + + + +
+
+
+
All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. Learn more.
+
+
+
+
+ +
+ + + Heading elements appear in a sequentially-descending order + + +
+ + + + +
+
+
+
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn more.
+
+
+
+
+ +
+ + + <html> element has a [lang] attribute + + +
+ + + + +
+
+
+
If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. Learn more.
+
+
+
+
+ +
+ + + <html> element has a valid value for its [lang] attribute + + +
+ + + + +
+
+
+
Specifying a valid BCP 47 language helps screen readers announce text properly. Learn more.
+
+
+
+
+ +
+ + + Image elements have [alt] attributes + + +
+ + + + +
+
+
+
Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more.
+
+
+
+
+ +
+ + + Lists contain only <li> elements and script supporting elements (<script> and <template>). + + +
+ + + + +
+
+
+
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. Learn more.
+
+
+
+
+ +
+ + + List items (<li>) are contained within <ul> or <ol> parent elements + + +
+ + + + +
+
+
+
Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. Learn more.
+
+
+
+
+ +
+ + + [user-scalable="no"] is not used in the <meta name="viewport"> element and the [maximum-scale] attribute is not less than 5. + + +
+ + + + +
+
+
+
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more.
+
+
+
+ +
+
+ Not applicable + (26) + + +
+
+ + + + + +
+
+
+
+ +
+ + + [accesskey] values are unique + + +
+ + + + +
+
+
+
Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. Learn more.
+
+
+
+
+ +
+ + + button, link, and menuitem elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA input fields have accessible names + + +
+ + + + +
+
+
+
When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA meter elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA progressbar elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + [role]s have all required [aria-*] attributes + + +
+ + + + +
+
+
+
Some ARIA roles have required attributes that describe the state of the element to screen readers. Learn more.
+
+
+
+
+ +
+ + + Elements with an ARIA [role] that require children to contain a specific [role] have all required children. + + +
+ + + + +
+
+
+
Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + [role]s are contained by their required parent element + + +
+ + + + +
+
+
+
Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + [role] values are valid + + +
+ + + + +
+
+
+
ARIA roles must have valid values in order to perform their intended accessibility functions. Learn more.
+
+
+
+
+ +
+ + + ARIA toggle fields have accessible names + + +
+ + + + +
+
+
+
When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA tooltip elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + ARIA treeitem elements have accessible names + + +
+ + + + +
+
+
+
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. Learn more.
+
+
+
+
+ +
+ + + <dl>'s contain only properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements. + + +
+ + + + +
+
+
+
When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. Learn more.
+
+
+
+
+ +
+ + + Definition list items are wrapped in <dl> elements + + +
+ + + + +
+
+
+
Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. Learn more.
+
+
+
+
+ +
+ + + ARIA IDs are unique + + +
+ + + + +
+
+
+
The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. Learn more.
+
+
+
+
+ +
+ + + No form fields have multiple labels + + +
+ + + + +
+
+
+
Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. Learn more.
+
+
+
+
+ +
+ + + <frame> or <iframe> elements have a title + + +
+ + + + +
+
+
+
Screen reader users rely on frame titles to describe the contents of frames. Learn more.
+
+
+
+
+ +
+ + + <input type="image"> elements have [alt] text + + +
+ + + + +
+
+
+
When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. Learn more.
+
+
+
+
+ +
+ + + Form elements have associated labels + + +
+ + + + +
+
+
+
Labels ensure that form controls are announced properly by assistive technologies, like screen readers. Learn more.
+
+
+
+
+ +
+ + + The document does not use <meta http-equiv="refresh"> + + +
+ + + + +
+
+
+
Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. Learn more.
+
+
+
+
+ +
+ + + <object> elements have [alt] text + + +
+ + + + +
+
+
+
Screen readers cannot translate non-text content. Adding alt text to `<object>` elements helps screen readers convey meaning to users. Learn more.
+
+
+
+
+ +
+ + + No element has a [tabindex] value greater than 0 + + +
+ + + + +
+
+
+
A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. Learn more.
+
+
+
+
+ +
+ + + Cells in a <table> element that use the [headers] attribute refer to table cells within the same table. + + +
+ + + + +
+
+
+
Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. Learn more.
+
+
+
+
+ +
+ + + <th> elements and elements with [role="columnheader"/"rowheader"] have data cells they describe. + + +
+ + + + +
+
+
+
Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. Learn more.
+
+
+
+
+ +
+ + + [lang] attributes have a valid value + + +
+ + + + +
+
+
+
Specifying a valid BCP 47 language on elements helps ensure that text is pronounced correctly by a screen reader. Learn more.
+
+
+
+
+ +
+ + + <video> elements contain a <track> element with [kind="captions"] + + +
+ + + + +
+
+
+
When a video provides a caption it is easier for deaf and hearing impaired users to access its information. Learn more.
+
+
+
+ +
Trust and Safety
+
+ +
+ + + Ensure CSP is effective against XSS attacks + + +
+ + + + +
+
+
+
A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. Learn more
+
+
Description
Directive
Severity
No CSP found in enforcement mode
High
+
+ +
+
+ Passed audits + (17) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Uses HTTPS + + +
+ + + + +
+
+
+
All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding mixed content, where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. Learn more.
+
+
+
+
+ +
+ + + Links to cross-origin destinations are safe + + +
+ + + + +
+
+
+
Add `rel="noopener"` or `rel="noreferrer"` to any external links to improve performance and prevent security vulnerabilities. Learn more.
+
+
+
+
+ +
+ + + Avoids requesting the geolocation permission on page load + + +
+ + + + +
+
+
+
Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. Learn more.
+
+
+
+
+ +
+ + + Avoids requesting the notification permission on page load + + +
+ + + + +
+
+
+
Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. Learn more.
+
+
+
+
+ +
+ + + Avoids front-end JavaScript libraries with known security vulnerabilities + + +
+ + + + +
+
+
+
Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. Learn more.
+
+
+
+
+ +
+ + + Allows users to paste into password fields + + +
+ + + + +
+
+
+
Preventing password pasting undermines good security policy. Learn more.
+
+
+
+
+ +
+ + + Displays images with correct aspect ratio + + +
+ + + + +
+
+
+
Image display dimensions should match natural aspect ratio. Learn more.
+
+
+
+
+ +
+ + + Serves images with appropriate resolution + + +
+ + + + +
+
+
+
Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. Learn more.
+
+
+
+
+ +
+ + + Page has the HTML doctype + + +
+ + + + +
+
+
+
Specifying a doctype prevents the browser from switching to quirks-mode. Learn more.
+
+
+
+
+ +
+ + + Properly defines charset + + +
+ + + + +
+
+
+
A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. Learn more.
+
+
+
+
+ +
+ + + Avoids unload event listeners + + +
+ + + + +
+
+
+
The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Consider using the `pagehide` or `visibilitychange` events instead. Learn more
+
+
+
+
+ +
+ + + Avoids Application Cache + + +
+ + + + +
+
+
+
Application Cache is deprecated. Learn more.
+
+
+
+
+ +
+ + + Detected JavaScript libraries + + +
+ + + + +
+
+
+
All front-end JavaScript libraries detected on the page. Learn more.
+
+
Name
Version
FuseJS
+
+
+ +
+ + + Avoids deprecated APIs + + +
+ + + + +
+
+
+
Deprecated APIs will eventually be removed from the browser. Learn more.
+
+
+
+
+ +
+ + + No browser errors logged to the console + + +
+ + + + +
+
+
+
Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. Learn more
+
+
+
+
+ +
+ + + Page has valid source maps + + +
+ + + + +
+
+
+
Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. Learn more.
+
+
+
+
+ +
+ + + No issues in the Issues panel in Chrome Devtools + + +
+ + + + +
+
+
+
Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.
+
+
+
+ +
+
+ Not applicable + (1) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Fonts with font-display: optional are preloaded + + +
+ + + + +
+
+
+
Preload `optional` fonts so first-time visitors may use them. Learn more
+
+
+
+
+ +
These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. Learn more.
+
+
+ +
+
+ Additional items to manually check + (1) + + + Run these additional validators on your site to check additional SEO best practices.
+
+ + + + + +
+
+
+
+ +
+ + + Structured data is valid + + +
+ + + + +
+
+
+
Run the Structured Data Testing Tool and the Structured Data Linter to validate structured data. Learn more.
+
+
+
+ +
+
+ Passed audits + (13) + + +
+
+ + + + + +
+
+
+
+ +
+ + + Has a <meta name="viewport"> tag with width or initial-scale + + +
+ + + + +
+
+
+
Add a `<meta name="viewport">` tag to optimize your app for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Document has a <title> element + + +
+ + + + +
+
+
+
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more.
+
+
+
+
+ +
+ + + Document has a meta description + + +
+ + + + +
+
+
+
Meta descriptions may be included in search results to concisely summarize page content. Learn more.
+
+
+
+
+ +
+ + + Page has successful HTTP status code + + +
+ + + + +
+
+
+
Pages with unsuccessful HTTP status codes may not be indexed properly. Learn more.
+
+
+
+
+ +
+ + + Links are crawlable + + +
+ + + + +
+
+
+
Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. Learn More
+
+
+
+
+ +
+ + + Page isn’t blocked from indexing + + +
+ + + + +
+
+
+
Search engines are unable to include your pages in search results if they don't have permission to crawl them. Learn more.
+
+
+
+
+ +
+ + + Image elements have [alt] attributes + + +
+ + + + +
+
+
+
Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more.
+
+
+
+
+ +
+ + + Document has a valid hreflang + + +
+ + + + +
+
+
+
hreflang links tell search engines what version of a page they should list in search results for a given language or region. Learn more.
+
+
+
+
+ +
+ + + Document has a valid rel=canonical + + +
+ + + + +
+
+
+
Canonical links suggest which URL to show in search results. Learn more.
+
+
+
+
+ +
+ + + Document uses legible font sizes + 99.75% legible text + +
+ + + + +
+
+
+
Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. Learn more.
+
+ + +
+ +
+
Source
Selector
% of Page Text
Font Size
.text-\[0\.6rem\]
0.25%
9.6px
Legible text
99.75%
≥ 12px
+
+
+ +
+ + + Document avoids plugins + + +
+ + + + +
+
+
+
Search engines can't index plugin content, and many devices restrict plugins or don't support them. Learn more.
+
+
+
+
+ +
+ + + Tap targets are sized appropriately + 100% appropriately sized tap targets + +
+ + + + +
+
+
+
Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. Learn more.
+
+
+
+ +
+
+ Not applicable + (1) + + +
+
+ + + + + +
+
+
+
+ +
+ + + robots.txt is valid + + +
+ + + + +
+
+
+
If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. Learn more.
+
+
+
+ +
Installable
+
+ +
+ + + Web app manifest and service worker meet the installability requirements + + +
+ + + + +
+
+
+
Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. Learn more.
+
+
+
PWA Optimized
+
+ +
+ + + Does not register a service worker that controls page and start_url + + +
+ + + + +
+
+
+
The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. Learn more.
+
+
+
+
+ +
+ + + Redirects HTTP traffic to HTTPS + + +
+ + + + +
+
+
+
If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. Learn more.
+
+
+
+
+ +
+ + + Configured for a custom splash screen + + +
+ + + + +
+
+
+
A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. Learn more.
+
+
+
+
+ +
+ + + Does not set a theme color for the address bar.
Failures: No `<meta name="theme-color">` tag found.
+ +
+
+ + + + +
+
+
+
The browser address bar can be themed to match your site. Learn more.
+
+
+
+
+ +
+ + + Content is sized correctly for the viewport + + +
+ + + + +
+
+
+
If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Has a <meta name="viewport"> tag with width or initial-scale + + +
+ + + + +
+
+
+
Add a `<meta name="viewport">` tag to optimize your app for mobile screens. Learn more.
+
+
+
+
+ +
+ + + Provides a valid apple-touch-icon + + +
+ + + + +
+
+
+
For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. Learn More.
+
+
+
+
+ +
+ + + Manifest has a maskable icon + + +
+ + + + +
+
+
+
A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. Learn more.
+
+
+
+ +
+
+ Additional items to manually check + (3) + + + These checks are required by the baseline PWA Checklist but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.
+
+ + + + + +
+
+
+
+ +
+ + + Site works cross-browser + + +
+ + + + +
+
+
+
To reach the most number of users, sites should work across every major browser. Learn more.
+
+
+
+
+ +
+ + + Page transitions don't feel like they block on the network + + +
+ + + + +
+
+
+
Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. Learn more.
+
+
+
+
+ +
+ + + Each page has a URL + + +
+ + + + +
+
+
+
Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. Learn more.
+
+
+
+ +
+ +
+
Runtime Settings
+
    + + +
  • + URL + http://localhost:8008/congo/samples/emoji/ +
  • + +
  • + Fetch Time + Jan 19, 2022, 7:17 PM GMT+11 +
  • + +
  • + Device + Emulated Moto G4 +
  • + +
  • + Network throttling + 150 ms TCP RTT, 1,638.4 Kbps throughput (Simulated) +
  • + +
  • + CPU throttling + 4x slowdown (Simulated) +
  • + +
  • + Channel + cli +
  • + +
  • + User agent (host) + Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/96.0.4664.110 Safari/537.36 +
  • + +
  • + User agent (network) + Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4420.0 Mobile Safari/537.36 Chrome-Lighthouse +
  • + +
  • + CPU/Memory Power + 1949 +
  • + +
  • + Axe version + 4.2.1 +
  • +
+
+ +
+ + Generated by Lighthouse 8.0.0 | + File an issue +
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git a/exampleSite/content/docs/version-2/lighthouse.jpg b/exampleSite/content/docs/version-2/lighthouse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22a895ca6afcf2216e4e4ef5d5911682b70d3fe1 GIT binary patch literal 64698 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%0DcYgSy_@$;xzN`A{g|AiJ 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 K_^}} +Congo 2.0 requires a minimum of **Hugo v0.87.0 or later** +{{< /alert >}} + +Congo is built to take advantage of some of the latest Hugo features. You should regularly keep your Hugo installation up to date to avoid any issues. + +You can check your current version using the command `hugo version`. Visit the [Hugo docs](https://gohugo.io/getting-started/installing/) for information on obtaining a newer release for your platform. + +## Step 2: Upgrade Congo + +The process for upgrading Congo will depend on how you include the theme in your project. Instructions for each method can be found below. + +- [Upgrade using Hugo](#upgrade-using-hugo) +- [Upgrade using git](#upgrade-using-git) +- [Upgrade manually](#upgrade-manually) + +### Upgrade using Hugo + +Hugo makes updating modules super easy. Simply change into your project directory and execute the following command: + +```shell +hugo mod get -u +``` + +Hugo will automatically upgrade any modules that are required for your project. It does this by inspecting your `module.toml` and `go.mod` files. If you have any issues with the upgrade, check to ensure these files are still configured correctly. + +Once the theme has been upgraded, continue to the [next section](#step-3-theme-configuration). + +### Upgrade using git + +Git submodules can be upgraded using the `git` command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository: + +```shell +git submodule upgrade --remote --merge +``` + +Once the submodule has been upgraded, continue to the [next section](#step-3-theme-configuration). + +### Upgrade manually + +Updating Congo manually requires you to download the latest copy of the theme and replace the old version in your project. + +{{< alert >}} +Note that any local customisations you have made to the theme files will be lost during this process. +{{< /alert >}} + +1. Download the latest release of the theme source code. + + {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}} + +2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder. You will need to overwrite the existing directory to replace all the theme files. + +3. Continue to the [next section](#step-3-theme-configuration). + +## Step 3: Theme configuration + +Congo 2.0 introduces a number of new theme configuration parameters. Although the theme will adapt to existing version 1 configurations, in order to take advantage of some of the newer theme features, you will need to adjust your existing configuration. + +The simplest way to do this is to take a copy of the theme's default configuration and compare it to your existing files. The process is outlined in greater detail below. + +### Languages.toml + +In order to provide multilingual support, language-specific theme parameters have been moved to a new config file `languages.[lang-code].toml`. The theme comes with a template `languages.en.toml` file which can be used as a guide. + +{{< alert >}} +This step is optional if you do not need multilingual support, although completing it now will make future theme upgrades easier. +{{< /alert >}} + +The languages config file follows this structure: + +```toml +# config/_default/languagues.en.toml + +languageCode = "en" +languageName = "English" +displayName = "EN" +htmlCode = "en" +weight = 1 +rtl = false + +# Language-specific parameters go here +``` + +Using your preferred language, simply create this new file in `config/_default/` and then move the language-specific parameters from any existing config files over to this new file. The table below outlines the parameters that need to be moved. + +| Parameter | Old location | +| ------------- | ------------- | +| `title` | `config.toml` | +| `description` | `params.toml` | +| `copyright` | `config.toml` | +| `dateFormat` | `params.toml` | +| `[author]` | `config.toml` | + +Once the values have been moved to the new location, these parameters should be deleted from their original locations. + +### Config.toml + +The `config.toml` file now only contains base Hugo configuration values. Other than removing the language-specific strings above, there are only two changes to consider. + +If you're using a language other than English, provide a `defaultContentLanguage` value that matches the language code in the config file you created for your language. Secondly, to take advange of the new site search in Congo 2.0, an `[outputs]` block needs to be provided. + +```toml +# config/_default/config.toml + +defaultContentLanguage = "en" +[outputs] + home = ["HTML", "RSS", "JSON"] +``` + +### Markup.toml + +Congo 2.0 adds support for tables of contents on article pages. Although Hugo ships with default settings for generating contents listings, you can adjust this behaviour by adding a new `[tableOfContents]` block to your `markup.toml` file. + +The recommended settings are as follows, which includes any headings in the Markdown content at levels 2, 3 and 4: + +```toml +# config/_default/markup.toml + +[tableOfContents] + startLevel = 2 + endLevel = 4 +``` + +### Params.toml + +A number of new theme parameters have been introduced in Congo 2.0. Some minor changes are requried to existing configurations. Remember, the theme will always revert to a sensible default if a parameter is not provided. + +The follow parameters have been **renamed**: + +`darkToggle` **→** `showDarkToggle` + +The following table outlines some key **new parameters** that control new features in version 2: + +| New parameter | Type | Default | +| ----------------------------- | ------- | ------- | +| `enableSearch` | Boolean | `false` | +| `showScrollToTop` | Boolean | `true` | +| `article.showTaxonomies` | Boolean | `false` | +| `article.showTableOfContents` | Boolean | `false` | +| `list.showTableOfContents` | Boolean | `false` | + +For the full list of supported parameters, refer to the [Configuration]({{< ref "docs/configuration" >}}) docs. + +## Step 4: Move assets + +All site assets now use Hugo Pipes to build an optimised version of your project. In order for the theme to locate your files, any previously static assets used in the theme need to be moved to the Hugo assets folder. + +`static/me.jpg` **→** `assets/me.jpg` +`static/logo.jpg` **→** `assets/logo.jpg` + +If you have provided an author image or site logo, simply move these assets from the `static/` folder to the `assets/` folder. If you use the same directory structure the theme will know where to find these files automatically. If you would like to provide a new path, update the `logo` and `author.image` config values accordingly. + +## Step 5: Check content + +The behavior of the `figure` shortcode is different in version 2. If you are using `figure` in your content, you may need to adjust the parameters you are providing. Consult the shortcode docs to learn more about supported parameters. + +## Step 6: Rebuild + +Now that all the configuration changes are complete, it's time to rebuild the site. Run `hugo`, or your build command, and check that everything works as expected. + +If you come across any errors, check the configuration is correct and refer to the [full documentation]({{< ref "docs" >}}) for further guidance. Remember, the example config files bundled with the theme contain all the default parameters and are a great starting point. + +🙋‍♀️ If you still need help, feel free to ask your question on [GitHub Discussions](https://github.com/jpanther/congo/discussions). From b59137e458dfd8e6db81a32a5f948df26dafe2a5 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 24 Jan 2022 13:58:19 +1100 Subject: [PATCH 48/68] =?UTF-8?q?=F0=9F=8C=90=20Add=20better=20i18n=20supp?= =?UTF-8?q?ort=20for=20article=20metadata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- i18n/de.yaml | 3 ++- i18n/en.yaml | 3 ++- i18n/es.yaml | 3 ++- i18n/fr.yaml | 3 ++- i18n/pt-BR.yaml | 3 ++- i18n/tr.yaml | 3 ++- i18n/zh.yaml | 3 ++- layouts/partials/functions/date.html | 1 + layouts/partials/meta/date-updated.html | 5 +++-- layouts/partials/meta/date.html | 2 +- layouts/partials/meta/reading-time.html | 2 +- layouts/partials/meta/word-count.html | 3 +-- 13 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 layouts/partials/functions/date.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 95df262b3..8ad843f65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - ⚠️ Required Hugo version is now 0.87.0 or later -- ⚠️ Author images are now Hugo assets +- ⚠️ Author and logo images are now Hugo assets - ⚠️ Overhauled `figure` shortcode which now resizes images - ⚠️ Renamed parameter: `darkToggle` -> `showDarkToggle` - Upgrade to Tailwind v3.0.15 diff --git a/i18n/de.yaml b/i18n/de.yaml index 694f96a84..5a2d23dbd 100644 --- a/i18n/de.yaml +++ b/i18n/de.yaml @@ -1,5 +1,7 @@ article: anchor_label: "Anker" + date: "{{ .Date }}" + # date_updated: "Updated: {{ .Date }}" draft: "Entwurf" edit_title: "Inhalt bearbeiten" reading_time: @@ -7,7 +9,6 @@ article: other: "{{ .Count }} min" reading_time_title: "Lesezeit" # table_of_contents: "Table of Contents" - # updated: "Updated" # word_count: # one: "{{ .Count }} word" # other: "{{ .Count }} words" diff --git a/i18n/en.yaml b/i18n/en.yaml index 7f2035c78..265b298d1 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -1,5 +1,7 @@ article: anchor_label: "Anchor" + date: "{{ .Date }}" + date_updated: "Updated: {{ .Date }}" draft: "Draft" edit_title: "Edit content" reading_time: @@ -7,7 +9,6 @@ article: other: "{{ .Count }} mins" reading_time_title: "Reading time" table_of_contents: "Table of Contents" - updated: "Updated" word_count: one: "{{ .Count }} word" other: "{{ .Count }} words" diff --git a/i18n/es.yaml b/i18n/es.yaml index 9fe236817..74afcf3bc 100644 --- a/i18n/es.yaml +++ b/i18n/es.yaml @@ -1,5 +1,7 @@ article: anchor_label: "Ancla" + date: "{{ .Date }}" + date_updated: "Actualizado: {{ .Date }}" draft: "Borrador" edit_title: "Editar contenido" reading_time: @@ -7,7 +9,6 @@ article: other: "{{ .Count }} mins" reading_time_title: "Tiempo de lectura" # table_of_contents: "Table of Contents" - updated: "Actualizado" word_count: one: "{{ .Count }} palabra" other: "{{ .Count }} palabras" diff --git a/i18n/fr.yaml b/i18n/fr.yaml index a8783bc78..f9c270ecf 100644 --- a/i18n/fr.yaml +++ b/i18n/fr.yaml @@ -1,5 +1,7 @@ article: anchor_label: "Ancre" + date: "{{ .Date }}" + # date_updated: "Updated: {{ .Date }}" draft: "Brouillon" edit_title: "Editer" reading_time: @@ -7,7 +9,6 @@ article: other: "{{ .Count }} mins" reading_time_title: "Temps de lecture" # table_of_contents: "Table of Contents" - # updated: "Updated" # word_count: # one: "{{ .Count }} word" # other: "{{ .Count }} words" diff --git a/i18n/pt-BR.yaml b/i18n/pt-BR.yaml index 01b12997d..bd06e2ea5 100644 --- a/i18n/pt-BR.yaml +++ b/i18n/pt-BR.yaml @@ -1,5 +1,7 @@ article: anchor_label: "Anchor" + date: "{{ .Date }}" + # date_updated: "Updated: {{ .Date }}" draft: "Draft" edit_title: "Editar Conteúdo" reading_time: @@ -7,7 +9,6 @@ article: other: "{{ .Count }} minutos" reading_time_title: "Tempo de leitura" # table_of_contents: "Table of Contents" - # updated: "Updated" # word_count: # one: "{{ .Count }} word" # other: "{{ .Count }} words" diff --git a/i18n/tr.yaml b/i18n/tr.yaml index e6c4f51d1..2b514296e 100644 --- a/i18n/tr.yaml +++ b/i18n/tr.yaml @@ -1,12 +1,13 @@ article: anchor_label: "Anchor" + date: "{{ .Date }}" + # date_updated: "Updated: {{ .Date }}" draft: "Taslak" edit_title: "İçeriği düzenle" reading_time: one: "{{ .Count }} dk" other: "{{ .Count }} dk" reading_time_title: "Okuma süresi" - # updated: "Updated" word_count: one: "{{ .Count }} kelime" other: "{{ .Count }} kelime" diff --git a/i18n/zh.yaml b/i18n/zh.yaml index 2f649e3e9..0d1d6fb14 100644 --- a/i18n/zh.yaml +++ b/i18n/zh.yaml @@ -1,12 +1,13 @@ article: anchor_label: "锚点" + date: "{{ .Date }}" + # date_updated: "Updated: {{ .Date }}" draft: "草稿" edit_title: "编辑内容" reading_time: other: "{{ .Count }} 分钟" reading_time_title: "预计阅读" # table_of_contents: "Table of Contents" - # updated: "Updated" word_count: one: "{{ .Count }} 字" other: "{{ .Count }} 字" diff --git a/layouts/partials/functions/date.html b/layouts/partials/functions/date.html new file mode 100644 index 000000000..d9ae5439b --- /dev/null +++ b/layouts/partials/functions/date.html @@ -0,0 +1 @@ +{{ return time.Format (site.Language.Params.dateFormat | default ":date_long") . }} diff --git a/layouts/partials/meta/date-updated.html b/layouts/partials/meta/date-updated.html index 367486f49..cc25c6930 100644 --- a/layouts/partials/meta/date-updated.html +++ b/layouts/partials/meta/date-updated.html @@ -1,3 +1,4 @@ -{{- i18n "article.updated" -}}:  -{{ partial "meta/date.html" . }} + {{- /* Trim EOF */ -}} diff --git a/layouts/partials/meta/date.html b/layouts/partials/meta/date.html index de62590ab..654a6c7a9 100644 --- a/layouts/partials/meta/date.html +++ b/layouts/partials/meta/date.html @@ -1,4 +1,4 @@ {{- /* Trim EOF */ -}} diff --git a/layouts/partials/meta/reading-time.html b/layouts/partials/meta/reading-time.html index d1539e286..71e706d4b 100644 --- a/layouts/partials/meta/reading-time.html +++ b/layouts/partials/meta/reading-time.html @@ -1,4 +1,4 @@ - {{- i18n "article.reading_time" .ReadingTime | emojify -}} + {{- i18n "article.reading_time" .ReadingTime | markdownify | emojify -}} {{- /* Trim EOF */ -}} diff --git a/layouts/partials/meta/word-count.html b/layouts/partials/meta/word-count.html index e68ec0d6d..517101a97 100644 --- a/layouts/partials/meta/word-count.html +++ b/layouts/partials/meta/word-count.html @@ -1,5 +1,4 @@ - {{- i18n "article.word_count" .WordCount | emojify -}} + {{- i18n "article.word_count" .WordCount | markdownify | emojify -}} {{- /* Trim EOF */ -}} - \ No newline at end of file From 3703a09ce3e92e1eaba2cb0a8f429325cae30c30 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 24 Jan 2022 16:51:28 +1100 Subject: [PATCH 49/68] =?UTF-8?q?=F0=9F=93=9D=20Update=20docs=20with=20v2?= =?UTF-8?q?=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/_default/params.toml | 9 +- exampleSite/config/_default/params.toml | 9 +- .../content/docs/advanced-customisation.md | 108 +++++++++++-- exampleSite/content/docs/configuration.md | 151 ++++++++++++------ exampleSite/content/docs/front-matter.md | 45 +++--- exampleSite/content/docs/getting-started.md | 54 ++++++- .../content/docs/homepage-layout/index.md | 2 +- .../content/docs/shortcodes/abstract.jpg | Bin 0 -> 40710 bytes .../{shortcodes.md => shortcodes/index.md} | 30 ++++ exampleSite/content/docs/version-2/_index.md | 4 +- 10 files changed, 304 insertions(+), 108 deletions(-) create mode 100644 exampleSite/content/docs/shortcodes/abstract.jpg rename exampleSite/content/docs/{shortcodes.md => shortcodes/index.md} (81%) diff --git a/config/_default/params.toml b/config/_default/params.toml index 3ddff265a..7826c1db9 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -20,6 +20,7 @@ showScrollToTop = true [article] showDate = true + showDateUpdated = false showAuthor = true showBreadcrumbs = false showDraftLabel = true @@ -29,8 +30,8 @@ showScrollToTop = true showHeadingAnchors = true showPagination = true showReadingTime = true - showTaxonomies = false showTableOfContents = false + showTaxonomies = false showWordCount = false # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] @@ -40,12 +41,12 @@ showScrollToTop = true showTableOfContents = false groupByYear = true -[taxonomy] - showTermCount = true - [sitemap] excludedKinds = ["taxonomy", "term"] +[taxonomy] + showTermCount = true + [fathomAnalytics] # site = "ABC12345" # domain = "llama.yoursite.com" diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index a8d2b4436..2c48352b0 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -20,6 +20,7 @@ showScrollToTop = true [article] showDate = true + showDateUpdated = false showAuthor = true showBreadcrumbs = true showDraftLabel = true @@ -29,8 +30,8 @@ showScrollToTop = true showHeadingAnchors = true showPagination = true showReadingTime = true - showTaxonomies = false showTableOfContents = true + showTaxonomies = false showWordCount = false # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] @@ -40,12 +41,12 @@ showScrollToTop = true showTableOfContents = true groupByYear = false -[taxonomy] - showTermCount = true - [sitemap] excludedKinds = ["taxonomy", "term"] +[taxonomy] + showTermCount = true + [fathomAnalytics] # site = "ABC12345" # domain = "llama.yoursite.com" diff --git a/exampleSite/content/docs/advanced-customisation.md b/exampleSite/content/docs/advanced-customisation.md index 76891e5f1..98ae3a793 100644 --- a/exampleSite/content/docs/advanced-customisation.md +++ b/exampleSite/content/docs/advanced-customisation.md @@ -60,36 +60,112 @@ html { Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`. -## Building from source +## Building the Tailwind CSS from source -If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. +If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet. {{< alert >}} **Note:** Building the theme manually is intended for advanced users. {{< /alert >}} -Change into the `themes/congo/` folder and install the project dependencies. +Let's step through how building the Tailwind CSS works. -```bash -npm install +### Tailwind configuration + +In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory: + +```js +// themes/congo/tailwind.config.js + +module.exports = { + content: [ + "./layouts/**/*.html", + "./content/**/*.{html,md}", + "./themes/congo/layouts/**/*.html", + "./themes/congo/content/**/*.{html,md}", + ], + + // and more... +}; ``` -Once installed, you can edit the `themes/congo/tailwind.config.js` to change the styles that are applied throughout the theme. You can also adjust specific styles in `themes/congo/assets/css/main.css`. +This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Congo in your project as a subdirectory at `themes/congo/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods. + +### Project structure + +In order to take advantage of the default configuration, your project should look something like this... + +```shell +. +├── assets +│ └── css +│ └── compiled +│ └── main.css # this is the file we will generate +├── config # site config +│ └── _default +├── content # site content +│ ├── _index.md +│ ├── projects +│ │ └── _index.md +│ └── blog +│ └── _index.md +├── layouts # custom layouts for your site +│ ├── partials +│ │ └── extend-article-link.html +│ ├── projects +│ │ └── list.html +│ └── shortcodes +│ └── disclaimer.html +└── themes + └── congo # git submodule or manual theme install +``` -To allow for easy theme colour changes, Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour. In order to change the colour across the entire theme, simply edit the `tailwind.config.js` file accordingly. +This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file. -For a full list of colours available, and their corresponding configuration values, see the official [Tailwind docs](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). +### Install dependencies -After editing the configuration, you need to rebuild the theme's stylesheets. This will run the Tailwind JIT compiler in watch mode which aids with testing style changes. +In order for this to work you'll need to change into the `themes/congo/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step. -```bash -npm run dev +```shell +cd themes/congo +npm install ``` -This will automatically output a CSS file to `/themes/congo/assets/css/compiled/main.css`. +### Run the Tailwind compiler -{{< alert >}} -**Note:** You should not make manual edits to the compiled CSS file. -{{< /alert >}} +With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command: + +```shell +cd ../.. +./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit +``` + +It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project). + +The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme. + +Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode. + +### Make a build script + +To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts... + +```js +// package.json + +{ + "name": "my-website", + "version": "1.0.0", + "description": "", + "scripts": { + "server": "hugo server -b http://localhost -p 8000", + "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w", + "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit" + }, + // and more... +} +``` + +Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build. -Now whenever you make a change, the CSS files will be rebuilt automatically. This mode is useful to run when using `hugo server` to preview your site during development. Asset files will be minified by Hugo at site build time. +🙋‍♀️ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/jpanther/congo/discussions). diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index dea6ef3fc..2eb2e0473 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -25,25 +25,67 @@ Standard Hugo configuration variables are respected throughout the theme, howeve The site configuration is managed through the `config/_default/config.toml` file. The table below outlines all the settings that the Congo takes advantage of. -Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `author.name` refers to `[author] name`). +Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`). -|Name|Type|Default|Description| -| --- | --- | --- | --- | -|`theme`|string|`"congo"`|When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `congo` for the theme to function.| -|`baseURL`|string|_Not set_|The URL to the root of the website.| -|`languageCode`|string|`"en"`|The language of the website for site metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`)."| -|`defaultContentLanguage`|string|`"en"`|This value determines the language of theme components."| -|`title`|string|`"Congo"`|The title of the website. This will be displayed in the site header and footer.| -|`copyright`|string|_Not set_|A Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site `title`. -|`enableRobotsTXT`|boolean|`true`|When enabled a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. Set to `false` if you wish to provide your own file.| -|`summaryLength`|integer|`0`|The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden.| -|`author.name`|string|_Not set_|The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used.| -|`author.image`|string|_Not set_|Path to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site's `static/` folder.| -|`author.bio`|string|_Not set_|A Markdown string containing the author's bio. It will be displayed in article footers.| -|`author.links`|array of objects|_Not set_|The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`.| -|`permalinks`||_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.| -|`taxonomies`||_Not set_|Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration.| +|Name|Default|Description| +|---|---|---| +|`theme`|`"congo"`|When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `congo` for the theme to function.| +|`baseURL`|_Not set_|The URL to the root of the website.| +|`defaultContentLanguage`|`"en"`|This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes.| +|`enableRobotsTXT`|`true`|When enabled a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. Set to `false` if you wish to provide your own file.| +|`summaryLength`|`0`|The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden.| +|`outputs.home`|`["HTML", "RSS", "JSON"]`|The output formats that are generated for the site. Congo requires HTML, RSS and JSON for all theme components to work correctly.| +|`permalinks`|_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.| +|`taxonomies`|_Not set_|Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration.| + + +## Language and i18n + +Congo is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language. + +The theme currently supports the following languages by default: + +| Language | Code | +| ---------------------------- | ------- | +| :gb: English | `en` | +| :cn: Chinese | `zh` | +| :fr: French | `fr` | +| :de: German | `de` | +| :brazil: Portuguese (Brazil) | `pt-br` | +| :es: Spanish (Spain) | `es` | +| :tr: Turkish | `tr` | + +The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/jpanther/congo/pulls). + +### Configuration + +In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Congo includes an English language configuration at `config/_default/languages.en.toml`. + +The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`. + +{{< alert >}} +**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename. +{{< /alert >}} + + +|Name|Default|Description| +|---|---|---| +|`languageCode`|`"en"`|The language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `htmlCode` parameter which is case-sensitive.| +|`languageName`|`"English"`|The name of the language.| +|`displayName`|`"EN"`|The name used when the language appears on the website.| +|`htmlCode`|`"en"`|The language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`).| +|`weight`|`1`|The weight determines the order of languages when building multilingual sites.| +|`rtl`|`false`|Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Congo fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.| +|`dateFormat`|`"2 January 2006"`|How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| +|`title`|`"Congo"`|The title of the website. This will be displayed in the site header and footer.| +|`description`|_Not set_|The website description. This will be used in the site metadata.| +|`copyright`|_Not set_|A Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site `title`.| +|`author.name`|_Not set_|The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used.| +|`author.image`|_Not set_|Path to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site's `assets/` folder.| +|`author.headline`|_Not set_|A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name.| +|`author.bio`|_Not set_|A Markdown string containing the author's bio. It will be displayed in article footers.| +|`author.links`|_Not set_|The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`.| ## Theme parameters @@ -53,40 +95,43 @@ Congo provides a large number of configuration parameters that control how the t Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details. -|Name|Type|Default|Description| -| --- | --- | --- | --- | -|`colorScheme`|string|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `ocean`, `fire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.| -|`darkMode`|boolean or string|`"auto"`|The preferred theme appearance for dark mode. Set to `true` to force dark appearance or `false` to force light appearance. Using `"auto"` will defer to the user's operating system preference.| -|`darkToggle`|boolean|`false`|When `darkMode` is set to `"auto"`, this parameter determines whether or not to show the appearance toggle in the site footer. The browser's local storage is used to persist the user's preference.| -|`logo`|string|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.| -|`description`|string|_Not set_|The description of the website for metadata purposes.| -|`mainSections`|array of strings|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.| -|`robots`|string|_Not set_|String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| -|`homepage.layout`|string|`"page"`|The layout of the homepage. Valid values are `page`, `profile` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details.| -|`homepage.showRecent`|boolean|`false`|Whether or not to display the recent articles list on the homepage.| -|`article.showDate`|boolean|`true`|Whether or not article dates are displayed.| -|`article.showDateUpdated`|boolean|`false`|Whether or not the dates articles were updated are displayed.| -|`article.dateFormat`|string|`"2 January 2006"`|How article dates are formatted. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| -|`article.showAuthor`|boolean|`true`|Whether or not the author box is displayed in the article footer.| -|`article.showBreadcrumbs`|boolean|`false`|Whether or not breadcrumbs are displayed in the article header.| -|`article.showDraftLabel`|boolean|`true`|Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`.| -|`article.showEdit`|boolean|`false`|Whether or not the link to edit the article content should be displayed.| -|`article.editURL`|string|_Not set_|When `article.showEdit` is active, the URL for the edit link.| -|`article.editAppendPath`|boolean|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.| -|`article.showHeadingAnchors`|boolean|`true`|Whether or not heading anchor links are displayed alongside headings within articles.| -|`article.showPagination`|boolean|`true`|Whether or not the next/previous article links are displayed in the article footer.| -|`article.showReadingTime`|boolean|`true`|Whether or not article reading times are displayed.| -|`article.showWordCount`|boolean|`false`|Whether or not article word counts are displayed.| -|`article.sharingLinks`|array of strings|_Not set_|Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed.| -|`list.showBreadcrumbs`|boolean|`false`|Whether or not breadcrumbs are displayed in the header on list pages.| -|`list.showSummary`|boolean|`false`|Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration).| -|`list.groupByYear`|boolean|`true`|Whether or not articles are grouped by year on list pages.| -|`sitemap.excludedKinds`|array of strings|`["taxonomy", "term"]`|Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values.| -|`taxonomy.showTermCount`|boolean|`true`|Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.| -|`fathomAnalytics.site`|string|_Not set_|The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| -|`fathomAnalytics.domain`|string|_Not set_|If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain.| -|`verification.google`|string|_Not set_|The site verification string provided by Google to be included in the site metadata.| -|`verification.bing`|string|_Not set_|The site verification string provided by Bing to be included in the site metadata.| -|`verification.pinterest`|string|_Not set_|The site verification string provided by Pinterest to be included in the site metadata.| -|`verification.yandex`|string|_Not set_|The site verification string provided by Yandex to be included in the site metadata.| +|Name|Default|Description| +|---|---|---| +|`colorScheme`|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `ocean`, `fire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.| +|`enableSearch`|`false`|Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly.| +|`darkMode`|`"auto"`|The preferred theme appearance for dark mode. Set to `true` to force dark appearance or `false` to force light appearance. Using `"auto"` will defer to the user's operating system preference.| +|`logo`|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.| +|`mainSections`|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.| +|`robots`|_Not set_|String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| +|`showDarkToggle`|`false`|When `darkMode` is set to `"auto"`, this parameter determines whether or not to show the appearance toggle in the site footer. The browser's local storage is used to persist the user's preference.| +|`showScrollToTop`|`true`|When set to `true` the scroll to top arrow is displayed.| +|`homepage.layout`|`"page"`|The layout of the homepage. Valid values are `page`, `profile` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details.| +|`homepage.showRecent`|`false`|Whether or not to display the recent articles list on the homepage.| +|`article.showDate`|`true`|Whether or not article dates are displayed.| +|`article.showDateUpdated`|`false`|Whether or not the dates articles were updated are displayed.| +|`article.showAuthor`|`true`|Whether or not the author box is displayed in the article footer.| +|`article.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the article header.| +|`article.showDraftLabel`|`true`|Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`.| +|`article.showEdit`|`false`|Whether or not the link to edit the article content should be displayed.| +|`article.editURL`|_Not set_|When `article.showEdit` is active, the URL for the edit link.| +|`article.editAppendPath`|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.| +|`article.showHeadingAnchors`|`true`|Whether or not heading anchor links are displayed alongside headings within articles.| +|`article.showPagination`|`true`|Whether or not the next/previous article links are displayed in the article footer.| +|`article.showReadingTime`|`true`|Whether or not article reading times are displayed.| +|`article.showTableOfContents`|`false`|Whether or not the table of contents is displayed on articles.| +|`article.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed.| +|`article.showWordCount`|`false`|Whether or not article word counts are displayed.| +|`article.sharingLinks`|_Not set_|Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed.| +|`list.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the header on list pages.| +|`list.showTableOfContents`|`false`|Whether or not the table of contents is displayed on list pages.| +|`list.showSummary`|`false`|Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration).| +|`list.groupByYear`|`true`|Whether or not articles are grouped by year on list pages.| +|`sitemap.excludedKinds`|`["taxonomy", "term"]`|Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values.| +|`taxonomy.showTermCount`|`true`|Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.| +|`fathomAnalytics.site`|_Not set_|The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.| +|`fathomAnalytics.domain`|_Not set_|If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain.| +|`verification.google`|_Not set_|The site verification string provided by Google to be included in the site metadata.| +|`verification.bing`|_Not set_|The site verification string provided by Bing to be included in the site metadata.| +|`verification.pinterest`|_Not set_|The site verification string provided by Pinterest to be included in the site metadata.| +|`verification.yandex`|_Not set_|The site verification string provided by Yandex to be included in the site metadata.| diff --git a/exampleSite/content/docs/front-matter.md b/exampleSite/content/docs/front-matter.md index af35dcab8..f7efe9d51 100644 --- a/exampleSite/content/docs/front-matter.md +++ b/exampleSite/content/docs/front-matter.md @@ -12,25 +12,28 @@ In addition to the [default Hugo front matter parameters](https://gohugo.io/cont Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default. -|Name|Type|Default|Description| -| --- | --- | --- | --- | -|`description`|string|_Not set_|The text description for the article. It is used in the HTML metadata.| -|`externalUrl`|string|_Not set_|If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.| -|`editURL`|string|`article.editURL`|When `showEdit` is active, the URL for the edit link.| -|`editAppendPath`|boolean|`article.editAppendPath`|When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`.| -|`groupByYear`|boolean|`list.groupByYear`|Whether or not articles are grouped by year on list pages.| -|`menu`|string or array|_Not set_|When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`.| -|`robots`|string|_Not set_|String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| -|`sharingLinks`|array of strings|`article.sharingLinks`|Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed.| -|`showAuthor`|boolean|`article.showAuthor`|Whether or not the author box is displayed in the article footer.| -|`showDate`|boolean|`article.showDate`|Whether or not the article date is displayed. The date is set using the `date` parameter.| -|`showDateUpdated`|boolean|`article.showDateUpdated`|Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter.| -|`showEdit`|boolean|`article.showEdit`|Whether or not the link to edit the article content should be displayed.| -|`showHeadingAnchors`|boolean|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.| -|`showPagination`|boolean|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.| -|`showReadingTime`|boolean|`article.showReadingTime`|Whether or not the article reading time is displayed.| -|`showWordCount`|boolean|`article.showWordCount`|Whether or not the article word count is displayed.| -|`showSummary`|boolean|`list.showSummary`|Whether or not the article summary should be displayed on list pages.| -|`summary`|string|Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}}))|When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article.| -|`xml`|boolean|`true` unless excluded by `sitemap.excludedKinds`|Whether or not this article is included in the generated `/sitemap.xml` file.| +|Name|Default|Description| +|---|---|---| +|`title`|_Not set_|The name of the article.| +|`description`|_Not set_|The text description for the article. It is used in the HTML metadata.| +|`externalUrl`|_Not set_|If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.| +|`editURL`|`article.editURL`|When `showEdit` is active, the URL for the edit link.| +|`editAppendPath`|`article.editAppendPath`|When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`.| +|`groupByYear`|`list.groupByYear`|Whether or not articles are grouped by year on list pages.| +|`menu`|_Not set_|When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`.| +|`robots`|_Not set_|String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| +|`sharingLinks`|`article.sharingLinks`|Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed.| +|`showAuthor`|`article.showAuthor`|Whether or not the author box is displayed in the article footer.| +|`showDate`|`article.showDate`|Whether or not the article date is displayed. The date is set using the `date` parameter.| +|`showDateUpdated`|`article.showDateUpdated`|Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter.| +|`showEdit`|`article.showEdit`|Whether or not the link to edit the article content should be displayed.| +|`showHeadingAnchors`|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.| +|`showPagination`|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.| +|`showReadingTime`|`article.showReadingTime`|Whether or not the article reading time is displayed.| +|`showTaxonomies`|`article.showTaxonomies`|Whether or not the taxonomies that relate to this article are displayed.| +|`showTableOfContents`|`article.showTableOfContents`|Whether or not the table of contents is displayed on this article.| +|`showWordCount`|`article.showWordCount`|Whether or not the article word count is displayed.| +|`showSummary`|`list.showSummary`|Whether or not the article summary should be displayed on list pages.| +|`summary`|Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}}))|When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article.| +|`xml`|`true` unless excluded by `sitemap.excludedKinds`|Whether or not this article is included in the generated `/sitemap.xml` file.| diff --git a/exampleSite/content/docs/getting-started.md b/exampleSite/content/docs/getting-started.md index b54780a52..a7def8bce 100644 --- a/exampleSite/content/docs/getting-started.md +++ b/exampleSite/content/docs/getting-started.md @@ -13,27 +13,43 @@ This section assumes you have already [installed the Congo theme]({{< ref "docs/ The config files that ship with Congo contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature. -There are a few things you should set in `config.toml` for a new installation: +## Basic configuration + +Before creating any content, there are a few things you should set for a new installation. Starting in the `config.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content. ```toml # config/_default/config.toml baseURL = "https://your_domain.com" -languageCode = "en-AU" +languageCode = "en" +``` + +The next step is to configure the language settings. Although Congo supports multilingual setups, for now, just configure the main language. + +Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`. + +{{< alert >}} +Note that the language code in the language config filename should match the `languageCode` setting in `config.toml`. +{{< /alert >}} + +```toml +# config/_default/languages.en.toml + title = "My awesome website" [author] name = "My name" image = "img/author.jpg" +headline = "A generally awesome human" bio = "A little bit about me" links = [ { twitter = "https://twitter.com/username" } ] ``` -The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `static/` folder. Links will be displayed in the order they are listed. +The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed. -Further detail about these configuration options is covered in the [Configuration]({{< ref "configuration" >}}) section. +If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section. ## Colour schemes @@ -73,9 +89,33 @@ Although these are the default schemes, you can also create your own. Refer to t By default, Congo doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio. -The same logic applies to taxonomies. Some people prefer to use _tags_ and _categories_, others prefer to use _topics_. +Here's a quick overview of a basic Congo project. All content is placed within the `content` folder: + +```shell +. +├── assets +│ └── img +│ └── author.jpg +├── config +│ └── _default +├── content +│ ├── _index.md +│ ├── about.md +│ └── posts +│ ├── _index.md +│ ├── first-post.md +│ └── another-post +│ ├── aardvark.jpg +│ └── index.md +└── themes + └── congo +``` + +It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information. + +Congo is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_. -Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating the following files: +Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuation file: ```toml # config/_default/taxonomies.toml @@ -85,7 +125,7 @@ topic = "topics" This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies. -When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections. +When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below. ## Menus diff --git a/exampleSite/content/docs/homepage-layout/index.md b/exampleSite/content/docs/homepage-layout/index.md index 5108ea221..a1d09294e 100644 --- a/exampleSite/content/docs/homepage-layout/index.md +++ b/exampleSite/content/docs/homepage-layout/index.md @@ -25,7 +25,7 @@ The profile layout is great for personal websites and blogs. It puts the author' ![Screenshot of profile layout](home-profile.jpg) -The author information is provided in the `config.toml` configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Site Configuration]({{< ref "configuration#site-configuration" >}}) sections for parameter details. +The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details. Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes. diff --git a/exampleSite/content/docs/shortcodes/abstract.jpg b/exampleSite/content/docs/shortcodes/abstract.jpg new file mode 100644 index 0000000000000000000000000000000000000000..134ced3fd9fc3e586eb4eb39f17f8a85bc61f9d4 GIT binary patch literal 40710 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 page. +## Figure + +Congo includes a `figure` shortcode for adding images to content. The shortcode replaces the base Hugo functionality in order to provide additional performance benefits. + +Images included using `figure` will be optimised using Hugo Pipes and scaled in order to provide images appropriate to different device resolutions. + +The `figure` shortcode accepts five parameters: + + +|Parameter|Description| +|---|---| +|`src`|**Required.** The filename of the image. This image must be a [page resource](https://gohugo.io/content-management/page-resources/) bundled with the page.| +|`alt`|The alternate text for the image.| +|`caption`|The image caption to be displayed below the image.| +|`class`|Additional CSS classes to add to the image.| + `href`|The URL that the image should be linked to.| + + +**Example:** + +```md +{{}} +``` + +{{< figure src="abstract.jpg" alt="Abstract purple artwork" caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)" >}} + ## Icon `icon` outputs an SVG icon and takes the icon name as its only parameter. The icon is scaled to match the current text size. diff --git a/exampleSite/content/docs/version-2/_index.md b/exampleSite/content/docs/version-2/_index.md index 03763c665..254b0cc51 100644 --- a/exampleSite/content/docs/version-2/_index.md +++ b/exampleSite/content/docs/version-2/_index.md @@ -26,9 +26,9 @@ Implementing this new version has also removed some Tailwind plugin dependencies A highly requested feature, Congo is now multilingual! If you publish your content in multiple languages, the site will be built with all the translations available. -
:flag-au: :de: :fr: :es: :brazil: :cn:
+
:flag-au: :de: :fr: :es: :cn: :brazil: :tr:
-Thanks to submissions from the community, Congo has already been translated into [six languages](https://github.com/jpanther/tree/dev/i18n) with more to be added over time. By the way, pull requests for new languages are always welcome! +Thanks to submissions from the community, Congo has already been translated into [seven languages](https://github.com/jpanther/congo/tree/dev/i18n) with more to be added over time. By the way, pull requests for new languages are always welcome! ## RTL language support From 1d4816f90afc2871aac39c518daa3e315207117d Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 24 Jan 2022 17:05:50 +1100 Subject: [PATCH 50/68] =?UTF-8?q?=E2=9C=A8=20Add=20option=20to=20invert=20?= =?UTF-8?q?article=20pagination?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + config/_default/params.toml | 1 + exampleSite/config/_default/params.toml | 1 + exampleSite/content/docs/_index.md | 1 + exampleSite/content/docs/configuration.md | 1 + exampleSite/content/docs/front-matter.md | 1 + layouts/partials/article-pagination.html | 22 ++++++++++++++-------- package-lock.json | 4 ++-- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ad843f65..eb9304ecc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Tables of Contents on article pages - Taxonomy and term listings now support Markdown content - Taxonomies on article and list pages +- Article pagination direction can be inverted - Author `headline` parameter - Skip to content and Scroll to top links diff --git a/config/_default/params.toml b/config/_default/params.toml index 7826c1db9..da9dd8e07 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -29,6 +29,7 @@ showScrollToTop = true editAppendPath = true showHeadingAnchors = true showPagination = true + invertPagination = false showReadingTime = true showTableOfContents = false showTaxonomies = false diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index 2c48352b0..b6c9040a0 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -29,6 +29,7 @@ showScrollToTop = true editAppendPath = true showHeadingAnchors = true showPagination = true + invertPagination = false showReadingTime = true showTableOfContents = true showTaxonomies = false diff --git a/exampleSite/content/docs/_index.md b/exampleSite/content/docs/_index.md index 263f6e868..a6a2c4b1a 100755 --- a/exampleSite/content/docs/_index.md +++ b/exampleSite/content/docs/_index.md @@ -5,6 +5,7 @@ description: "Learn how to use Congo and its features." cascade: showDate: false showAuthor: false + invertPagination: true --- {{< lead >}} diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 2eb2e0473..865d7b253 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -117,6 +117,7 @@ Many of the article defaults here can be overridden on a per article basis by sp |`article.editAppendPath`|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.| |`article.showHeadingAnchors`|`true`|Whether or not heading anchor links are displayed alongside headings within articles.| |`article.showPagination`|`true`|Whether or not the next/previous article links are displayed in the article footer.| +|`article.invertPagination`|`false`|Whether or not to flip the direction of the next/previous article links.| |`article.showReadingTime`|`true`|Whether or not article reading times are displayed.| |`article.showTableOfContents`|`false`|Whether or not the table of contents is displayed on articles.| |`article.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed.| diff --git a/exampleSite/content/docs/front-matter.md b/exampleSite/content/docs/front-matter.md index f7efe9d51..45571833f 100644 --- a/exampleSite/content/docs/front-matter.md +++ b/exampleSite/content/docs/front-matter.md @@ -29,6 +29,7 @@ Front matter parameter default values are inherited from the theme's [base confi |`showEdit`|`article.showEdit`|Whether or not the link to edit the article content should be displayed.| |`showHeadingAnchors`|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.| |`showPagination`|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.| +|`invertPagination`|`article.invertPagination`|Whether or not to flip the direction of the next/previous article links.| |`showReadingTime`|`article.showReadingTime`|Whether or not the article reading time is displayed.| |`showTaxonomies`|`article.showTaxonomies`|Whether or not the taxonomies that relate to this article are displayed.| |`showTableOfContents`|`article.showTableOfContents`|Whether or not the table of contents is displayed on this article.| diff --git a/layouts/partials/article-pagination.html b/layouts/partials/article-pagination.html index 647a7136c..85b4d22dc 100644 --- a/layouts/partials/article-pagination.html +++ b/layouts/partials/article-pagination.html @@ -1,11 +1,17 @@ {{ if .Params.showPagination | default (.Site.Params.article.showPagination | default true) }} {{ if or .NextInSection .PrevInSection }} + {{ $next := .NextInSection }} + {{ $prev := .PrevInSection }} + {{ if .Params.invertPagination | default (.Site.Params.article.invertPagination | default false) }} + {{ $next = .PrevInSection }} + {{ $prev = .NextInSection }} + {{ end }}

- {{ if .NextInSection }} - + {{ if $prev }} + {{ .NextInSection.Title | emojify }}{{ $prev.Title | emojify }} {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} - {{ partial "meta/date.html" .NextInSection.Date }} + {{ partial "meta/date.html" $prev.Date }} {{ end }} @@ -28,15 +34,15 @@ {{ end }} - {{ if .PrevInSection }} - + {{ if $next }} + {{ .PrevInSection.Title | emojify }}{{ $next.Title | emojify }} {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} - {{ partial "meta/date.html" .PrevInSection.Date }} + {{ partial "meta/date.html" $next.Date }} {{ end }} diff --git a/package-lock.json b/package-lock.json index 6a7bc41e5..e6c1f5ffd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "hugo-congo-theme", - "version": "1.6.3", + "version": "1.6.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "hugo-congo-theme", - "version": "1.6.3", + "version": "1.6.4", "hasInstallScript": true, "license": "MIT", "devDependencies": { From e9eb51e86b35fbde491a80aad37e3d5f8a4aa41b Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:12:14 +1100 Subject: [PATCH 51/68] =?UTF-8?q?=F0=9F=9A=B8=20Add=20archetype=20for=20ex?= =?UTF-8?q?ternal=20articles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + archetypes/external.md | 10 ++++++++++ exampleSite/content/samples/external.md | 14 ++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 archetypes/external.md create mode 100755 exampleSite/content/samples/external.md diff --git a/CHANGELOG.md b/CHANGELOG.md index eb9304ecc..aef8e7400 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Article pagination direction can be inverted - Author `headline` parameter - Skip to content and Scroll to top links +- Archetype for generating links to external articles ### Changed diff --git a/archetypes/external.md b/archetypes/external.md new file mode 100644 index 000000000..80f16dc82 --- /dev/null +++ b/archetypes/external.md @@ -0,0 +1,10 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +externalUrl: "" +summary: "" +showReadingTime: false +_build: + render: "false" + list: "local" +--- diff --git a/exampleSite/content/samples/external.md b/exampleSite/content/samples/external.md new file mode 100755 index 000000000..1d5de6a37 --- /dev/null +++ b/exampleSite/content/samples/external.md @@ -0,0 +1,14 @@ +--- +title: "An External Article" +date: 2019-01-24 +externalUrl: "https://jamespanther.com/writings/i-switched-from-google-analytics-to-fathom-analytics/" +summary: "The `externalUrl` front matter parameter can link to any URL." +showReadingTime: false +_build: + render: "false" + list: "local" +--- + +This page uses the `externalUrl` front matter parameter to link to an article outside of this Hugo website. + +It's great for things like linking to posts on Medium or to research papers you may have hosted on third party websites. From 47632533e04dacba3f659c252a34c26fdbbc1c6c Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:14:01 +1100 Subject: [PATCH 52/68] =?UTF-8?q?=F0=9F=93=9D=20Add=20new=20content=20exam?= =?UTF-8?q?ples=20section=20to=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/_default/config.toml | 1 + exampleSite/config/_default/config.toml | 3 +- .../content/docs/advanced-customisation.md | 2 +- exampleSite/content/docs/configuration.md | 1 + exampleSite/content/docs/content-examples.md | 294 ++++++++++++++++++ .../content/docs/hosting-deployment/index.md | 2 +- 6 files changed, 299 insertions(+), 4 deletions(-) create mode 100644 exampleSite/content/docs/content-examples.md diff --git a/config/_default/config.toml b/config/_default/config.toml index 21ec9eca3..812d611b6 100644 --- a/config/_default/config.toml +++ b/config/_default/config.toml @@ -6,6 +6,7 @@ defaultContentLanguage = "en" enableRobotsTXT = true +paginate = 10 summaryLength = 0 [outputs] diff --git a/exampleSite/config/_default/config.toml b/exampleSite/config/_default/config.toml index ad59abfac..6c8e9a84e 100644 --- a/exampleSite/config/_default/config.toml +++ b/exampleSite/config/_default/config.toml @@ -5,9 +5,8 @@ theme = "congo" defaultContentLanguage = "en" -enableEmoji = true enableRobotsTXT = true - +paginate = 15 summaryLength = 0 [outputs] diff --git a/exampleSite/content/docs/advanced-customisation.md b/exampleSite/content/docs/advanced-customisation.md index 98ae3a793..568a5b6e2 100644 --- a/exampleSite/content/docs/advanced-customisation.md +++ b/exampleSite/content/docs/advanced-customisation.md @@ -1,6 +1,6 @@ --- title: "Advanced Customisation" -date: 2020-08-09 +date: 2020-08-08 draft: false description: "Learn how to build Congo manually." slug: "advanced-customisation" diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 865d7b253..7a994ed4a 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -34,6 +34,7 @@ Note that the variable names provided in this table use dot notation to simplify |`baseURL`|_Not set_|The URL to the root of the website.| |`defaultContentLanguage`|`"en"`|This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes.| |`enableRobotsTXT`|`true`|When enabled a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. Set to `false` if you wish to provide your own file.| +|`paginate`|`10`|The number of articles listed on each page of the article listing.| |`summaryLength`|`0`|The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden.| |`outputs.home`|`["HTML", "RSS", "JSON"]`|The output formats that are generated for the site. Congo requires HTML, RSS and JSON for all theme components to work correctly.| |`permalinks`|_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.| diff --git a/exampleSite/content/docs/content-examples.md b/exampleSite/content/docs/content-examples.md new file mode 100644 index 000000000..a81836ea9 --- /dev/null +++ b/exampleSite/content/docs/content-examples.md @@ -0,0 +1,294 @@ +--- +title: "Content Examples" +date: 2020-08-09 +draft: false +description: "All the partials available in Congo." +slug: "content-examples" +tags: ["content", "example"] +--- + +If you've been reading the documentation in order, you should now know about all the features and configurations available in Congo. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project. + +{{< alert >}} +**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources. +{{< /alert >}} + +The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project. + +## Branch pages + +Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**. + +Congo will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title. + +### Homepage + +| | | +| ------------ | -------------------- | +| **Layout:** | `layouts/index.html` | +| **Content:** | `content/_index.md` | + +The homepage in Congo is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section. + +If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage. + +**Example:** + +```yaml +--- +title: "Welcome to Congo!" +description: "This is a demo of adding content to the homepage." +--- +Welcome to my website! I'm really happy you stopped by. +``` + +_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._ + +### List pages + +| | | +| ------------ | ---------------------------- | +| **Layout:** | `layouts/_default/list.html` | +| **Content:** | `content/../_index.md` | + +List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects. + +Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects. + +A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory. + +```shell +. +└── content + └── projects + ├── _index.md # /projects + ├── first-project.md # /projects/first-project + └── another-project + ├── index.md # /projects/another-project + └── project.jpg +``` + +Hugo will generate URLs for the pages in your projects folder accordingly. + +Just like the homepage, content in the `_index.md` file will be output into the generated list index. Congo will then list any pages in this section below the content. + +**Example:** + +```yaml +--- +title: "Projects" +description: "Learn about some of my projects." +cascade: + showReadingTime: false +--- +This section contains all my current projects. +``` + +_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._ + +The [samples section]({{< ref "samples" >}}) of this site is an example of a list page. + +### Taxonomy pages + +| | | +| ---------------- | -------------------------------- | +| **List layout:** | `layouts/_default/taxonomy.html` | +| **Term layout:** | `layouts/_default/term.html` | +| **Content:** | `content/../_index.md` | + +Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term. + +The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`. + +Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name. + +```toml +# config/_default/taxonomies.toml + +animal = "animals" +``` + +Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy. + +Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter: + +```yaml +--- +title: "Into the Lion's Den" +description: "This week we're learning about lions." +animals: ["lion", "cat"] +--- +``` + +This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`. + +Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`. + +The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages. + +The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way. + +In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name. + +```shell +. +└── content + └── animals + ├── _index.md # /animals + └── lion + └── _index.md # /animals/lion +``` + +Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion". + +To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site. + +## Leaf pages + +| | | +| ------------------------- | ------------------------------- | +| **Layout:** | `layouts/_default/single.html` | +| **Content (standalone):** | `content/../page-name.md` | +| **Content (bundled):** | `content/../page-name/index.md` | + +Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website. + +The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name. + +```shell +. +└── content + └── blog + ├── first-post.md # /blog/first-post + ├── second-post.md # /blog/second-post + └── third-post + ├── index.md # /blog/third-post + └── image.jpg +``` + +When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages. + +**Example:** + +```yaml +--- +title: "My First Blog Post" +date: 2022-01-25 +description: "Welcome to my blog!" +summary: "Learn more about me and why I am starting this blog." +tags: ["welcome", "new", "about", "first"] +--- +_This_ is the content of my blog post. +``` + +Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed. + +### External links + +Congo has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site. + +In order to create an external link article, some special front matter needs to be set: + +```yaml +--- +title: "My Medium post" +date: 2022-01-25 +externalUrl: "https://medium.com/" +summary: "I wrote a post on Medium." +showReadingTime: false +_build: + render: "false" + list: "local" +--- +``` + +Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Congo that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article. + +Additionally, we use a special Hugo front matter parameter `_build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL! + +The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content. + +```shell +hugo new -k external posts/my-post.md +``` + +## Custom layouts + +One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages. + +Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/). + +### Overriding default layouts + +Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website. + +For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised. + +### Custom section layouts + +It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style. + +Let's step through an example that creates a custom "Projects" page that lists projects using a special layout. + +In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file. + +```shell +. +└── content +│ └── projects +│ ├── _index.md +│ ├── first-project.md +│ └── second-project.md +└── layouts + └── projects + └── list.html +``` + +This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files. + +```yaml +--- +title: "Congo" +date: 2021-08-11 +icon: "github" +description: "A theme for Hugo built with Tailwind CSS." +topics: ["Hugo", "Web", "Tailwind"] +externalUrl: "https://github.com/jpanther/congo/" +--- +``` + +_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_ + +With the projects defined, now we can create a list template that outputs the details of each project. + +```go +{{ define "main" }} +
+ {{ range .Pages }} + + {{ end }} +
+{{ end }} +``` + +Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed. + +Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section. + +When making custom templates like this one, it's always easiest to take a look at how the default Congo template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too. diff --git a/exampleSite/content/docs/hosting-deployment/index.md b/exampleSite/content/docs/hosting-deployment/index.md index d69e6d8f0..13cc0a3ec 100644 --- a/exampleSite/content/docs/hosting-deployment/index.md +++ b/exampleSite/content/docs/hosting-deployment/index.md @@ -1,6 +1,6 @@ --- title: "Hosting & Deployment" -date: 2020-08-08 +date: 2020-08-07 draft: false description: "Learn how to deploy a Congo site." slug: "hosting-deployment" From add3f764f7a98a320bd15e50b829dd2db899f6f1 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:49:30 +1100 Subject: [PATCH 53/68] =?UTF-8?q?=E2=9C=A8=20Add=20code=20copy=20buttons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + README.md | 2 +- assets/css/compiled/main.css | 62 +++++++++++++++++++++ assets/css/main.css | 25 ++++++++- assets/js/code.js | 65 +++++++++++++++++++++++ config/_default/params.toml | 1 + exampleSite/config/_default/params.toml | 1 + exampleSite/content/docs/configuration.md | 1 + i18n/de.yaml | 4 ++ i18n/en.yaml | 4 ++ i18n/es.yaml | 4 ++ i18n/fr.yaml | 4 ++ i18n/pt-BR.yaml | 4 ++ i18n/tr.yaml | 4 ++ i18n/zh.yaml | 4 ++ layouts/partials/head.html | 8 ++- 16 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 assets/js/code.js diff --git a/CHANGELOG.md b/CHANGELOG.md index aef8e7400..0ac12ad2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Automatic Markdown image resizing and srcset generation - Performance and Accessibility improvements to achieve perfect Lighthouse scores - Tables of Contents on article pages +- Code copy buttons in article content - Taxonomy and term listings now support Markdown content - Taxonomies on article and list pages - Article pagination direction can be inverted diff --git a/README.md b/README.md index 27440aede..5f817a494 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Congo is designed to be a powerful, lightweight theme for [Hugo](https://gohugo. - Mathematical notation using KaTeX - SVG icons from FontAwesome 5 - Automatic image resizing using Hugo Pipes -- Heading anchors, Tables of Contents, Buttons, Badges and more +- Heading anchors, Tables of Contents, Code copy, Buttons, Badges and more - HTML and Emoji support in articles 🎉 - SEO friendly with links for sharing to social media - Fathom Analytics and Google Analytics support diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 652edda5b..62d638977 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1022,11 +1022,73 @@ body a, body button { margin-right: 0px; } +/* Code Copy */ + +.highlight-wrapper { + display: block; +} + +.highlight { + position: relative; + z-index: 0; +} + +.highlight:hover > .copy-button { + visibility: visible; +} + +.copy-button { + visibility: hidden; + position: absolute; + top: 0px; + right: 0px; + z-index: 10; + width: 5rem; + cursor: pointer; + white-space: nowrap; + border-bottom-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-200), var(--tw-bg-opacity)); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity)); + opacity: 0.9; +} + +.dark .copy-button { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-neutral-600), var(--tw-bg-opacity)); + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-200), var(--tw-text-opacity)); +} + +.copy-button:hover, .copy-button:focus, .copy-button:active, .copy-button:active:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity)); +} + +.dark .copy-button:hover, .dark .copy-button:focus, .dark .copy-button:active, .dark .copy-button:active:hover { + --tw-bg-opacity: 1; + background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity)); +} + +.copy-textarea { + position: absolute; + z-index: -10; + opacity: 0.05; +} + /* -- Chroma Highlight -- */ /* Background */ .prose .chroma { + position: static; border-radius: 0.375rem; --tw-bg-opacity: 1; background-color: rgba(var(--color-neutral-50), var(--tw-bg-opacity)); diff --git a/assets/css/main.css b/assets/css/main.css index 2cc0b9d64..0c4e93141 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -77,10 +77,33 @@ body button { @apply rtl:mr-0; } +/* Code Copy */ +.highlight-wrapper { + @apply block; +} +.highlight { + @apply relative z-0; +} +.highlight:hover > .copy-button { + @apply visible; +} +.copy-button { + @apply absolute top-0 right-0 z-10 invisible w-20 py-1 font-mono text-sm cursor-pointer opacity-90 bg-neutral-200 whitespace-nowrap rounded-bl-md rounded-tr-md text-neutral-700 dark:bg-neutral-600 dark:text-neutral-200; +} +.copy-button:hover, +.copy-button:focus, +.copy-button:active, +.copy-button:active:hover { + @apply bg-primary-100 dark:bg-primary-600; +} +.copy-textarea { + @apply absolute opacity-5 -z-10; +} + /* -- Chroma Highlight -- */ /* Background */ .prose .chroma { - @apply rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200; + @apply static rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200; } /* LineTableTD */ .chroma .lntd, diff --git a/assets/js/code.js b/assets/js/code.js new file mode 100644 index 000000000..5e88694e6 --- /dev/null +++ b/assets/js/code.js @@ -0,0 +1,65 @@ +var codeLang = document.getElementById("code-lang"); +var copyText = codeLang ? codeLang.getAttribute("data-copy") : "Copy"; +var copiedText = codeLang ? codeLang.getAttribute("data-copied") : "Copied"; + +function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.className = "copy-button"; + button.type = "button"; + button.innerText = copyText; + button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv)); + addCopyButtonToDom(button, highlightDiv); +} + +async function copyCodeToClipboard(button, highlightDiv) { + const codeToCopy = highlightDiv.querySelector(":last-child > .chroma > code").innerText; + try { + result = await navigator.permissions.query({ name: "clipboard-write" }); + if (result.state == "granted" || result.state == "prompt") { + await navigator.clipboard.writeText(codeToCopy); + } else { + copyCodeBlockExecCommand(codeToCopy, highlightDiv); + } + } catch (_) { + copyCodeBlockExecCommand(codeToCopy, highlightDiv); + } finally { + codeWasCopied(button); + } +} + +function copyCodeBlockExecCommand(codeToCopy, highlightDiv) { + const textArea = document.createElement("textArea"); + textArea.contentEditable = "true"; + textArea.readOnly = "false"; + textArea.className = "copy-textarea"; + textArea.value = codeToCopy; + highlightDiv.insertBefore(textArea, highlightDiv.firstChild); + const range = document.createRange(); + range.selectNodeContents(textArea); + const sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + textArea.setSelectionRange(0, 999999); + document.execCommand("copy"); + highlightDiv.removeChild(textArea); +} + +function codeWasCopied(button) { + button.blur(); + button.innerText = copiedText; + setTimeout(function () { + button.innerText = copyText; + }, 2000); +} + +function addCopyButtonToDom(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + wrapper.className = "highlight-wrapper"; + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); +} + +window.addEventListener("DOMContentLoaded", (event) => { + document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv)); +}); diff --git a/config/_default/params.toml b/config/_default/params.toml index da9dd8e07..c01c0bb50 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -7,6 +7,7 @@ colorScheme = "congo" enableSearch = false +enableCodeCopy = false darkMode = "auto" # logo = "img/logo.jpg" # mainSections = ["section1", "section2"] diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index b6c9040a0..14666e8f8 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -7,6 +7,7 @@ colorScheme = "congo" enableSearch = true +enableCodeCopy = true darkMode = "auto" # logo = "img/logo.jpg" mainSections = ["samples"] diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 7a994ed4a..499b9c884 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -100,6 +100,7 @@ Many of the article defaults here can be overridden on a per article basis by sp |---|---|---| |`colorScheme`|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `ocean`, `fire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.| |`enableSearch`|`false`|Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly.| +|`enableCodeCopy`|`false`|Whether copy buttons are enabled for `` blocks.| |`darkMode`|`"auto"`|The preferred theme appearance for dark mode. Set to `true` to force dark appearance or `false` to force light appearance. Using `"auto"` will defer to the user's operating system preference.| |`logo`|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.| |`mainSections`|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.| diff --git a/i18n/de.yaml b/i18n/de.yaml index 5a2d23dbd..e9a2dd533 100644 --- a/i18n/de.yaml +++ b/i18n/de.yaml @@ -16,6 +16,10 @@ article: author: byline_title: "Autor" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "Seite nicht gefunden :confused:" 404_error: "Fehler 404" diff --git a/i18n/en.yaml b/i18n/en.yaml index 265b298d1..a2ec67a1f 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -16,6 +16,10 @@ article: author: byline_title: "Author" +code: + copy: "Copy" + copied: "Copied" + error: 404_title: "Page Not Found :confused:" 404_error: "Error 404" diff --git a/i18n/es.yaml b/i18n/es.yaml index 74afcf3bc..8ff303970 100644 --- a/i18n/es.yaml +++ b/i18n/es.yaml @@ -16,6 +16,10 @@ article: author: byline_title: "Autor" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "Página no encontrada :confused:" 404_error: "Error 404" diff --git a/i18n/fr.yaml b/i18n/fr.yaml index f9c270ecf..4c1e73e82 100644 --- a/i18n/fr.yaml +++ b/i18n/fr.yaml @@ -16,6 +16,10 @@ article: author: byline_title: "Auteur" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "Cette page n'existe pas :confused:" 404_error: "Erreur 404" diff --git a/i18n/pt-BR.yaml b/i18n/pt-BR.yaml index bd06e2ea5..f9cc48b4f 100644 --- a/i18n/pt-BR.yaml +++ b/i18n/pt-BR.yaml @@ -16,6 +16,10 @@ article: author: byline_title: "Autor" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "Página não econtrada :confused:" 404_error: "Erro 404" diff --git a/i18n/tr.yaml b/i18n/tr.yaml index 2b514296e..7fa4941f0 100644 --- a/i18n/tr.yaml +++ b/i18n/tr.yaml @@ -15,6 +15,10 @@ article: author: byline_title: "Yazar" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "Sayfa Bulunamadı :confused:" 404_error: "Hata 404" diff --git a/i18n/zh.yaml b/i18n/zh.yaml index 0d1d6fb14..f72e3690f 100644 --- a/i18n/zh.yaml +++ b/i18n/zh.yaml @@ -15,6 +15,10 @@ article: author: byline_title: "作者" +# code: +# copy: "Copy" +# copied: "Copied" + error: 404_title: "找不到网页 :confused:" 404_error: "404 错误" diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 88faad10b..8cecb5911 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -59,8 +59,14 @@ {{ $jsSearch := resources.Get "js/search.js" }} {{ $assets.Add "js" (slice $jsFuse $jsSearch) }} {{ end }} + {{ if .Site.Params.enableCodeCopy | default false }} + {{ $jsCode := resources.Get "js/code.js" }} + {{ $assets.Add "js" (slice $jsCode) }} + + {{ end }} {{ if $assets.Get "js" }} - {{ $bundleJS := $assets.Get "js" | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint "sha512" }} + {{ $bundleJS := $assets.Get "js" | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint "sha512" }} + {{ end }} {{/* Icons */}} {{ if templates.Exists "partials/favicons.html" }} From 734fa6e827c17aff90875f278aec168c2aa40ca8 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 11:39:36 +1100 Subject: [PATCH 54/68] =?UTF-8?q?=F0=9F=9A=B8=20Add=20breadcrumbs=20sectio?= =?UTF-8?q?n=20name=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + layouts/partials/breadcrumbs.html | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac12ad2b..8b63b6808 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Upgrade to Tailwind v3.0.15 - Inline Javascript moved to external files - Improved JSON-LD structured data +- Breadcrumbs now fallback to section name when `title` is not provided - Minor style and layout improvements ## [1.6.4] - 2022-01-24 diff --git a/layouts/partials/breadcrumbs.html b/layouts/partials/breadcrumbs.html index 38beb2f7c..7c304e00b 100644 --- a/layouts/partials/breadcrumbs.html +++ b/layouts/partials/breadcrumbs.html @@ -11,7 +11,11 @@ {{ .p1.Title }}{{ if .p1.Title }} + {{- .p1.Title -}} + {{ else }} + {{- .p1.Section -}} + {{ end }}/ {{ end }} From cc3960cf2a29baf9e273039efe134576ef35bc77 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 11:39:59 +1100 Subject: [PATCH 55/68] =?UTF-8?q?=E2=99=BF=EF=B8=8F=20Add=20ARIA=20labels?= =?UTF-8?q?=20to=20code=20copy=20buttons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/code.js | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/js/code.js b/assets/js/code.js index 5e88694e6..2a2c270c2 100644 --- a/assets/js/code.js +++ b/assets/js/code.js @@ -6,6 +6,7 @@ function createCopyButton(highlightDiv) { const button = document.createElement("button"); button.className = "copy-button"; button.type = "button"; + button.ariaLabel = copyText; button.innerText = copyText; button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv)); addCopyButtonToDom(button, highlightDiv); From 15e67f5903d15319793d656e7327f1be6129d7cb Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 12:28:32 +1100 Subject: [PATCH 56/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Move=20home=20switch?= =?UTF-8?q?er=20JS=20to=20external=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exampleSite/assets/{ => img}/author.jpg | Bin exampleSite/assets/{ => img}/logo.jpg | Bin exampleSite/assets/js/home.js | 27 ++++++++++++++++++ exampleSite/config/_default/languages.en.toml | 2 +- exampleSite/content/_index.md | 2 +- exampleSite/layouts/partials/home/custom.html | 23 ++------------- 6 files changed, 31 insertions(+), 23 deletions(-) rename exampleSite/assets/{ => img}/author.jpg (100%) rename exampleSite/assets/{ => img}/logo.jpg (100%) create mode 100644 exampleSite/assets/js/home.js diff --git a/exampleSite/assets/author.jpg b/exampleSite/assets/img/author.jpg similarity index 100% rename from exampleSite/assets/author.jpg rename to exampleSite/assets/img/author.jpg diff --git a/exampleSite/assets/logo.jpg b/exampleSite/assets/img/logo.jpg similarity index 100% rename from exampleSite/assets/logo.jpg rename to exampleSite/assets/img/logo.jpg diff --git a/exampleSite/assets/js/home.js b/exampleSite/assets/js/home.js new file mode 100644 index 000000000..372103498 --- /dev/null +++ b/exampleSite/assets/js/home.js @@ -0,0 +1,27 @@ +function switchHomeLayout() { + const pageDiv = document.getElementById("page"); + const profileDiv = document.getElementById("profile"); + const layoutCode = document.querySelectorAll("code[id=layout]"); + if (pageDiv.style.display === "none") { + pageDiv.style.display = "block"; + profileDiv.style.display = "none"; + layoutCode.forEach(function (el) { + el.innerText = "page"; + }); + } else { + pageDiv.style.display = "none"; + profileDiv.style.display = "block"; + layoutCode.forEach(function (el) { + el.innerText = "profile"; + }); + } +} + +window.addEventListener("DOMContentLoaded", (event) => { + document.querySelectorAll("#switch-layout-button").forEach((button) => + button.addEventListener("click", function (e) { + e.preventDefault(); + switchHomeLayout(); + }) + ); +}); diff --git a/exampleSite/config/_default/languages.en.toml b/exampleSite/config/_default/languages.en.toml index e8f977a80..b7c45ab0d 100644 --- a/exampleSite/config/_default/languages.en.toml +++ b/exampleSite/config/_default/languages.en.toml @@ -13,7 +13,7 @@ dateFormat = "2 January 2006" [author] name = "Congo" - image = "author.jpg" + image = "img/author.jpg" # headline = "" bio = "This is an example author bio, and although there's a stock photo of a dog here, this article was actually created by a human. :dog:" links = [ diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md index 891597016..24b50cd22 100755 --- a/exampleSite/content/_index.md +++ b/exampleSite/content/_index.md @@ -16,8 +16,8 @@ This is a demo site built entirely using Congo. It also contains a complete set This is a demo of the page layout. diff --git a/exampleSite/layouts/partials/home/custom.html b/exampleSite/layouts/partials/home/custom.html index b301686ad..960ff02e7 100644 --- a/exampleSite/layouts/partials/home/custom.html +++ b/exampleSite/layouts/partials/home/custom.html @@ -1,27 +1,8 @@ +{{ $jsHome := resources.Get "js/home.js" | resources.Minify | resources.Fingerprint "sha512" }}
{{ partial "partials/home/page.html" . }}
- - + From 6a23863ff9b2d14c592518dcd683c02280722632 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:11:52 +1100 Subject: [PATCH 57/68] =?UTF-8?q?=F0=9F=93=9D=20Update=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/docs/advanced-customisation.md | 12 +++++++++++- exampleSite/content/docs/shortcodes/index.md | 16 +++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/exampleSite/content/docs/advanced-customisation.md b/exampleSite/content/docs/advanced-customisation.md index 568a5b6e2..b8d524238 100644 --- a/exampleSite/content/docs/advanced-customisation.md +++ b/exampleSite/content/docs/advanced-customisation.md @@ -37,6 +37,16 @@ In addition to the default schemes, you can also create your own and re-style th Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour. +Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values. + +```css +:root { + --color-primary-500: 139, 92, 246; +} +``` + +This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`. + Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). ## Overriding the stylesheet @@ -60,7 +70,7 @@ html { Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`. -## Building the Tailwind CSS from source +## Building the theme CSS from source If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet. diff --git a/exampleSite/content/docs/shortcodes/index.md b/exampleSite/content/docs/shortcodes/index.md index 1a32827c2..b06c9dae4 100644 --- a/exampleSite/content/docs/shortcodes/index.md +++ b/exampleSite/content/docs/shortcodes/index.md @@ -107,12 +107,18 @@ The `figure` shortcode accepts five parameters: |Parameter|Description| |---|---| |`src`|**Required.** The filename of the image. This image must be a [page resource](https://gohugo.io/content-management/page-resources/) bundled with the page.| -|`alt`|The alternate text for the image.| -|`caption`|The image caption to be displayed below the image.| +|`alt`|[Alternative text description](https://moz.com/learn/seo/alt-text) for the image.| +|`caption`|Markdown for the image caption which will be displayed below the image.| |`class`|Additional CSS classes to add to the image.| - `href`|The URL that the image should be linked to.| + `href`|URL that the image should be linked to.| +Congo also supports automatic conversion of images included using standard Markdown syntax. Simply use the following format and the theme will handle the rest: + +```md +![Alt text](image.jpg "Image caption") +``` + **Example:** ```md @@ -121,6 +127,10 @@ The `figure` shortcode accepts five parameters: alt="Abstract purple artwork" caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)" */>}} + + + +![Abstract purple artwork](abstract.jpg "Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)") ``` {{< figure src="abstract.jpg" alt="Abstract purple artwork" caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)" >}} From d86d1b82be15550544e2bd32254fc9a9ff752528 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:26:18 +1100 Subject: [PATCH 58/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Dark=20mode=20rewrit?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 +- assets/js/appearance.js | 36 +++++++++++++ assets/js/code.js | 6 +-- assets/js/dark.js | 54 ------------------- config/_default/languages.en.toml | 1 + config/_default/params.toml | 8 +-- exampleSite/config/_default/languages.en.toml | 1 + exampleSite/config/_default/params.toml | 8 +-- exampleSite/content/docs/configuration.md | 7 +-- exampleSite/content/docs/installation.md | 2 +- exampleSite/content/docs/version-2/_index.md | 6 ++- .../content/docs/version-2/upgrade/index.md | 17 ++++-- layouts/_default/baseof.html | 5 +- layouts/partials/footer.html | 19 +++---- layouts/partials/head.html | 9 ++-- 15 files changed, 92 insertions(+), 91 deletions(-) create mode 100644 assets/js/appearance.js delete mode 100644 assets/js/dark.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b63b6808..a8cb29017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,9 +25,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - ⚠️ Required Hugo version is now 0.87.0 or later -- ⚠️ Author and logo images are now Hugo assets +- ⚠️ Complete rewrite of dark mode to allow more flexibile configuration +- ⚠️ All theme images are now Hugo assets - ⚠️ Overhauled `figure` shortcode which now resizes images -- ⚠️ Renamed parameter: `darkToggle` -> `showDarkToggle` - Upgrade to Tailwind v3.0.15 - Inline Javascript moved to external files - Improved JSON-LD structured data diff --git a/assets/js/appearance.js b/assets/js/appearance.js new file mode 100644 index 000000000..fc4d60957 --- /dev/null +++ b/assets/js/appearance.js @@ -0,0 +1,36 @@ +const browserIsDark = + window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches; +const userPreference = localStorage.getItem("appearance"); +const switcher = document.getElementById("appearance-switcher"); + +if ( + (browserIsDark && userPreference === null) || + (browserIsDark && userPreference === "dark") || + userPreference === "dark" +) { + document.documentElement.classList.add("dark"); +} + +if (document.documentElement.getAttribute("data-auto-appearance") === "true") { + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => { + if (event.matches) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + }); +} + +window.addEventListener("DOMContentLoaded", (event) => { + switcher.addEventListener("click", () => { + document.documentElement.classList.toggle("dark"); + localStorage.setItem( + "appearance", + document.documentElement.classList.contains("dark") ? "dark" : "light" + ); + }); + switcher.addEventListener("contextmenu", (event) => { + event.preventDefault(); + localStorage.removeItem("appearance"); + }); +}); diff --git a/assets/js/code.js b/assets/js/code.js index 2a2c270c2..a41fb8b17 100644 --- a/assets/js/code.js +++ b/assets/js/code.js @@ -1,6 +1,6 @@ -var codeLang = document.getElementById("code-lang"); -var copyText = codeLang ? codeLang.getAttribute("data-copy") : "Copy"; -var copiedText = codeLang ? codeLang.getAttribute("data-copied") : "Copied"; +var scriptBundle = document.getElementById("script-bundle"); +var copyText = scriptBundle ? scriptBundle.getAttribute("data-copy") : "Copy"; +var copiedText = scriptBundle ? scriptBundle.getAttribute("data-copied") : "Copied"; function createCopyButton(highlightDiv) { const button = document.createElement("button"); diff --git a/assets/js/dark.js b/assets/js/dark.js deleted file mode 100644 index 8f07fd323..000000000 --- a/assets/js/dark.js +++ /dev/null @@ -1,54 +0,0 @@ -function loadPreferredAppearance() { - if ( - localStorage.preferredAppearance === "dark" || - (!("preferredAppearance" in localStorage) && - window.matchMedia("(prefers-color-scheme: dark)").matches) - ) { - document.documentElement.classList.add("dark"); - } else { - document.documentElement.classList.remove("dark"); - } -} - -function setPreferredAppearance(scheme) { - if (scheme == "default") { - localStorage.removeItem("preferredAppearance"); - } else { - localStorage.preferredAppearance = scheme; - } - loadPreferredAppearance(); -} - -window.addEventListener("DOMContentLoaded", (event) => { - // Hook up toggle events - darkToggle = document.getElementById("dark-toggle"); - if (darkToggle) { - darkToggle.addEventListener("click", function (e) { - e.preventDefault(); - setPreferredAppearance("dark"); - }); - darkToggle.addEventListener("contextmenu", function (e) { - e.preventDefault(); - setPreferredAppearance("default"); - }); - } - lightToggle = document.getElementById("light-toggle"); - if (lightToggle) { - lightToggle.addEventListener("click", function (e) { - e.preventDefault(); - setPreferredAppearance("light"); - }); - lightToggle.addEventListener("contextmenu", function (e) { - e.preventDefault(); - setPreferredAppearance("default"); - }); - } - - // Load user's preset preference (if any) - loadPreferredAppearance(); - - // Allow browser media overrides - window - .matchMedia("(prefers-color-scheme: dark)") - .addEventListener("change", loadPreferredAppearance); -}); diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml index f2dc0dbfd..f75f48f40 100644 --- a/config/_default/languages.en.toml +++ b/config/_default/languages.en.toml @@ -6,6 +6,7 @@ weight = 1 rtl = false title = "Congo" +# logo = "img/logo.jpg" # description = "My awesome website" # copyright = "Copy, _right?_ :thinking_face:" diff --git a/config/_default/params.toml b/config/_default/params.toml index c01c0bb50..d1a1f312d 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -6,13 +6,15 @@ # https://jpanther.github.io/congo/docs/configuration/#theme-parameters colorScheme = "congo" +defaultAppearance = "light" # valid options: light or dark +autoSwitchAppearance = true +showAppearanceSwitcher = false + enableSearch = false enableCodeCopy = false -darkMode = "auto" -# logo = "img/logo.jpg" + # mainSections = ["section1", "section2"] # robots = "" -showDarkToggle = false showScrollToTop = true [homepage] diff --git a/exampleSite/config/_default/languages.en.toml b/exampleSite/config/_default/languages.en.toml index b7c45ab0d..8ca945477 100644 --- a/exampleSite/config/_default/languages.en.toml +++ b/exampleSite/config/_default/languages.en.toml @@ -6,6 +6,7 @@ weight = 1 rtl = false title = "Congo" +# logo = "img/logo.jpg" # description = "My awesome website" # copyright = "Copy, _right?_ :thinking_face:" diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index 14666e8f8..bc880d35f 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -6,13 +6,15 @@ # https://jpanther.github.io/congo/docs/configuration/#theme-parameters colorScheme = "congo" +defaultAppearance = "light" # valid options: light or dark +autoSwitchAppearance = true +showAppearanceSwitcher = true + enableSearch = true enableCodeCopy = true -darkMode = "auto" -# logo = "img/logo.jpg" + mainSections = ["samples"] # robots = "" -showDarkToggle = false showScrollToTop = true [homepage] diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index 499b9c884..b1399b7f6 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -99,13 +99,14 @@ Many of the article defaults here can be overridden on a per article basis by sp |Name|Default|Description| |---|---|---| |`colorScheme`|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `ocean`, `fire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.| +|`defaultAppearance`|`"light"`|The default theme appearance, either `light` or `dark`.| +|`autoSwitchAppearance`|`true`|Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`.| +|`showAppearanceSwitcher`|`false`|Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference.| |`enableSearch`|`false`|Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly.| -|`enableCodeCopy`|`false`|Whether copy buttons are enabled for `` blocks.| -|`darkMode`|`"auto"`|The preferred theme appearance for dark mode. Set to `true` to force dark appearance or `false` to force light appearance. Using `"auto"` will defer to the user's operating system preference.| +|`enableCodeCopy`|`false`|Whether copy-to-clipboard buttons are enabled for `` blocks.| |`logo`|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.| |`mainSections`|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.| |`robots`|_Not set_|String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.| -|`showDarkToggle`|`false`|When `darkMode` is set to `"auto"`, this parameter determines whether or not to show the appearance toggle in the site footer. The browser's local storage is used to persist the user's preference.| |`showScrollToTop`|`true`|When set to `true` the scroll to top arrow is displayed.| |`homepage.layout`|`"page"`|The layout of the homepage. Valid values are `page`, `profile` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details.| |`homepage.showRecent`|`false`|Whether or not to display the recent articles list on the homepage.| diff --git a/exampleSite/content/docs/installation.md b/exampleSite/content/docs/installation.md index df7e99e1a..c35126b27 100644 --- a/exampleSite/content/docs/installation.md +++ b/exampleSite/content/docs/installation.md @@ -20,7 +20,7 @@ These instructions will get you up and running using Hugo and Congo from a compl If you haven't used Hugo before, you will need to [install it onto your local machine](https://gohugo.io/getting-started/installing). You can check if it's already installed by running the command `hugo version`. {{< alert >}} -Make sure you are using **Hugo version 0.86.1** or later as the theme takes advantage of some of the latest Hugo features. +Make sure you are using **Hugo version 0.87.0** or later as the theme takes advantage of some of the latest Hugo features. {{< /alert >}} You can find detailed installation instructions for your platform in the [Hugo docs](https://gohugo.io/getting-started/installing). diff --git a/exampleSite/content/docs/version-2/_index.md b/exampleSite/content/docs/version-2/_index.md index 254b0cc51..e901edd3f 100644 --- a/exampleSite/content/docs/version-2/_index.md +++ b/exampleSite/content/docs/version-2/_index.md @@ -28,7 +28,7 @@ A highly requested feature, Congo is now multilingual! If you publish your conte
:flag-au: :de: :fr: :es: :cn: :brazil: :tr:
-Thanks to submissions from the community, Congo has already been translated into [seven languages](https://github.com/jpanther/congo/tree/dev/i18n) with more to be added over time. By the way, pull requests for new languages are always welcome! +Thanks to submissions from the community, Congo has already been translated into [seven languages](https://github.com/jpanther/congo/tree/dev/i18n) with more to be added over time. By the way, [pull requests](https://github.com/jpanther/congo/pulls) for new languages are always welcome! ## RTL language support @@ -87,6 +87,10 @@ The new image resizing features also provide full control over `alt` and `title` There's countless other minor changes to explore. From being able to display taxonomies on articles and list pages, to using the new `headline` author parameter to customise your homepage. There's also improved JSON-LD strucured data which further optimises SEO performance. Plus the entire theme has had extra polish to ensure a consistent design language. +:rocket: Check out the [full changelog](https://github.com/jpanther/congo/blob/dev/CHANGELOG.md) to learn more. + +## Next steps + If you're ready to upgrade, read the [upgrading from version 1 guide]({{< ref "upgrade" >}}) to get started. If you're new to Congo, check out the [Installation guide]({{< ref "docs/installation" >}}) to begin a new project. --- diff --git a/exampleSite/content/docs/version-2/upgrade/index.md b/exampleSite/content/docs/version-2/upgrade/index.md index 4db563df3..78f6ae3ad 100644 --- a/exampleSite/content/docs/version-2/upgrade/index.md +++ b/exampleSite/content/docs/version-2/upgrade/index.md @@ -117,6 +117,11 @@ If you're using a language other than English, provide a `defaultContentLanguage # config/_default/config.toml defaultContentLanguage = "en" + +enableRobotsTXT = true +paginate = 10 +summaryLength = 0 + [outputs] home = ["HTML", "RSS", "JSON"] ``` @@ -139,11 +144,17 @@ The recommended settings are as follows, which includes any headings in the Mark A number of new theme parameters have been introduced in Congo 2.0. Some minor changes are requried to existing configurations. Remember, the theme will always revert to a sensible default if a parameter is not provided. -The follow parameters have been **renamed**: +The way that dark mode works in Congo has been changed to allow greater flexibility around configuration. The old `darkMode` and `darkToggle` parameters have been **removed and replaced** by three new parameters. These new options operate independently of each other, making it possible to force the appearance while still allowing the user to override. -`darkToggle` **→** `showDarkToggle` + +| New parameter | Type | Default | Description | +| --- | --- | --- | --- | +| `defaultAppearance` | String | `"light"` | Default theme appearance; either `light` or `dark`.
:warning: _Setting this to `light` replicates the old `darkMode = false` setting, while `dark` replicates `darkMode = true`._ | +| `autoSwitchAppearance` | Boolean | `true` | Whether the theme appearance automatically switches based upon the operating system preference. Set to `false` to force the site to always use the `defaultAppearance`.
:warning: _Setting this to `true` replicates the old `darkMode = "auto"` setting._ | +| `showAppearanceSwitcher` | Boolean | `false` | Whether the theme appearance switcher is dispalyed in the site footer.
:warning: _This parameter replaces `darkToggle`._ | + -The following table outlines some key **new parameters** that control new features in version 2: +The following table outlines some other key **new parameters** that control new features in version 2: | New parameter | Type | Default | | ----------------------------- | ------- | ------- | diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index e507636c4..f975e26a6 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -8,7 +8,10 @@ {{- else -}} ltr {{- end }}" - class="scroll-smooth {{ if .Site.Params.darkMode | default false }}dark{{ end }}" + class="scroll-smooth {{ if eq (.Site.Params.defaultAppearance | default "light") "dark" -}} + dark + {{- end }}" + data-auto-appearance="{{ .Site.Params.autoSwitchAppearance | default "true" }}" > {{- partial "head.html" . -}} {{ end }}
- {{/* Dark mode toggle */}} - {{ if and (.Site.Params.showDarkToggle | default false) (eq (.Site.Params.darkMode | default "auto") "auto") }} + {{/* Appearance switch */}} + {{ if .Site.Params.showAppearanceSwitcher | default false }}
-
{{ end }} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 8cecb5911..cf2130726 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -50,9 +50,9 @@ href="{{ $bundleCSS.RelPermalink }}" integrity="{{ $bundleCSS.Data.Integrity }}" /> - {{ if eq (.Site.Params.darkMode | default "auto") "auto" }} - {{ $jsDark := resources.Get "js/dark.js" }} - {{ $assets.Add "js" (slice $jsDark) }} + {{ if .Site.Params.enableAppearanceSwitching | default true }} + {{ $jsAppearance := resources.Get "js/appearance.js" }} + {{ $assets.Add "js" (slice $jsAppearance) }} {{ end }} {{ if .Site.Params.enableSearch | default false }} {{ $jsFuse := resources.Get "lib/fuse/fuse.min.js" }} @@ -62,11 +62,10 @@ {{ if .Site.Params.enableCodeCopy | default false }} {{ $jsCode := resources.Get "js/code.js" }} {{ $assets.Add "js" (slice $jsCode) }} - {{ end }} {{ if $assets.Get "js" }} {{ $bundleJS := $assets.Get "js" | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint "sha512" }} - + {{ end }} {{/* Icons */}} {{ if templates.Exists "partials/favicons.html" }} From 53eeda37700a17dacd70ace570ff849023ae8c07 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:42:05 +1100 Subject: [PATCH 59/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Change=20language=20?= =?UTF-8?q?`htmlCode`=20to=20`isoCode`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/_default/languages.en.toml | 2 +- exampleSite/config/_default/languages.en.toml | 8 ++++---- exampleSite/content/docs/configuration.md | 4 ++-- layouts/_default/baseof.html | 4 ++-- layouts/partials/footer.html | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml index f75f48f40..fc66548a0 100644 --- a/config/_default/languages.en.toml +++ b/config/_default/languages.en.toml @@ -1,7 +1,7 @@ languageCode = "en" languageName = "English" displayName = "EN" -htmlCode = "en" +isoCode = "en" weight = 1 rtl = false diff --git a/exampleSite/config/_default/languages.en.toml b/exampleSite/config/_default/languages.en.toml index 8ca945477..ac2ea022d 100644 --- a/exampleSite/config/_default/languages.en.toml +++ b/exampleSite/config/_default/languages.en.toml @@ -1,21 +1,21 @@ languageCode = "en-au" languageName = "English (Australia)" displayName = ":flag-au:" -htmlCode = "en-AU" +isoCode = "en-AU" weight = 1 rtl = false title = "Congo" # logo = "img/logo.jpg" -# description = "My awesome website" -# copyright = "Copy, _right?_ :thinking_face:" +description = "A powerful, lightweight theme for Hugo built with Tailwind CSS." +copyright = "© 2022 Congo contributors" dateFormat = "2 January 2006" [author] name = "Congo" image = "img/author.jpg" - # headline = "" + headline = "Not your ordinary theme!" bio = "This is an example author bio, and although there's a stock photo of a dog here, this article was actually created by a human. :dog:" links = [ { twitter = "https://twitter.com/" }, diff --git a/exampleSite/content/docs/configuration.md b/exampleSite/content/docs/configuration.md index b1399b7f6..2b932d5de 100644 --- a/exampleSite/content/docs/configuration.md +++ b/exampleSite/content/docs/configuration.md @@ -72,10 +72,10 @@ The default file can be used as a template to create additional languages, or re |Name|Default|Description| |---|---|---| -|`languageCode`|`"en"`|The language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `htmlCode` parameter which is case-sensitive.| +|`languageCode`|`"en"`|The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive.| |`languageName`|`"English"`|The name of the language.| |`displayName`|`"EN"`|The name used when the language appears on the website.| -|`htmlCode`|`"en"`|The language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`).| +|`isoCode`|`"en"`|The ISO language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`).| |`weight`|`1`|The weight determines the order of languages when building multilingual sites.| |`rtl`|`false`|Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Congo fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.| |`dateFormat`|`"2 January 2006"`|How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.| diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index f975e26a6..039044016 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,9 +1,9 @@ {{/* Copyright */}}

- {{- with .Site.Copyright }} + {{- with .Site.Params.copyright }} {{ . | emojify | markdownify }} {{- else }} © From 1de995a8e6f6cf887e8d655dc0e6fedb5b84b32c Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:44:19 +1100 Subject: [PATCH 60/68] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20to=20Tailw?= =?UTF-8?q?ind=20v3.0.17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- assets/css/compiled/main.css | 2 +- package-lock.json | 140 ++++++++++++++++++----------------- package.json | 2 +- 4 files changed, 76 insertions(+), 70 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8cb29017..74ed30cf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - ⚠️ Complete rewrite of dark mode to allow more flexibile configuration - ⚠️ All theme images are now Hugo assets - ⚠️ Overhauled `figure` shortcode which now resizes images -- Upgrade to Tailwind v3.0.15 +- Upgrade to Tailwind v3.0.17 - Inline Javascript moved to external files - Improved JSON-LD structured data - Breadcrumbs now fallback to section name when `title` is not provided diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 62d638977..0cf74b26d 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1,6 +1,6 @@ /*! Congo v1.6.4 | MIT License | https://github.com/jpanther/congo */ -/*! tailwindcss v3.0.15 | MIT License | https://tailwindcss.com */ +/*! tailwindcss v3.0.17 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) diff --git a/package-lock.json b/package-lock.json index e6c1f5ffd..3827f084f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwindcss": "^3.0.15", + "tailwindcss": "^3.0.17", "vendor-copy": "^3.0.1" } }, @@ -44,9 +44,9 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -355,9 +355,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001299", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", - "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "version": "1.0.30001302", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", + "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", "dev": true, "peer": true, "funding": { @@ -388,10 +388,16 @@ "dev": true }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1289,9 +1295,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.44", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", - "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", + "version": "1.4.54", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", + "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", "dev": true, "peer": true }, @@ -1324,9 +1330,9 @@ } }, "node_modules/fast-glob": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", - "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1739,9 +1745,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.32", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", - "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true, "peer": true, "bin": { @@ -1960,9 +1966,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -2050,12 +2056,12 @@ } }, "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2142,9 +2148,9 @@ "dev": true }, "node_modules/source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "peer": true, "engines": { @@ -2182,20 +2188,20 @@ } }, "node_modules/tailwindcss": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz", - "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", + "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", "dev": true, "dependencies": { "arg": "^5.0.1", "chalk": "^4.1.2", - "chokidar": "^3.5.2", + "chokidar": "^3.5.3", "color-name": "^1.1.4", "cosmiconfig": "^7.0.1", "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.7", + "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "normalize-path": "^3.0.0", @@ -2304,9 +2310,9 @@ "dev": true }, "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -2537,9 +2543,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001299", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", - "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "version": "1.0.30001302", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", + "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", "dev": true, "peer": true }, @@ -2560,9 +2566,9 @@ "dev": true }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -3314,9 +3320,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.44", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", - "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", + "version": "1.4.54", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", + "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", "dev": true, "peer": true }, @@ -3343,9 +3349,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", - "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -3673,9 +3679,9 @@ "dev": true }, "nanoid": { - "version": "3.1.32", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", - "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true, "peer": true }, @@ -3813,9 +3819,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -3865,12 +3871,12 @@ } }, "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -3924,9 +3930,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "peer": true }, @@ -3952,20 +3958,20 @@ "dev": true }, "tailwindcss": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz", - "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", + "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", "dev": true, "requires": { "arg": "^5.0.1", "chalk": "^4.1.2", - "chokidar": "^3.5.2", + "chokidar": "^3.5.3", "color-name": "^1.1.4", "cosmiconfig": "^7.0.1", "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.7", + "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "normalize-path": "^3.0.0", diff --git a/package.json b/package.json index dd333026a..e142da364 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "prettier": "^2.3.2", "prettier-plugin-go-template": "^0.0.11", "rimraf": "^3.0.2", - "tailwindcss": "^3.0.15", + "tailwindcss": "^3.0.17", "vendor-copy": "^3.0.1" }, "vendorCopy": [], From e465eaeb335b3600cc5494d3808c69748b0ba36e Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:58:01 +1100 Subject: [PATCH 61/68] =?UTF-8?q?=F0=9F=A9=B9=20Update=20robots.txt=20temp?= =?UTF-8?q?late?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layouts/robots.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/robots.txt b/layouts/robots.txt index da3e7e0d5..ad35c9dff 100644 --- a/layouts/robots.txt +++ b/layouts/robots.txt @@ -1,6 +1,6 @@ User-agent: * {{- if hugo.IsProduction | or (eq .Site.Params.env "production") }} -Disallow: +Allow: / {{- else }} Disallow: / {{- end }} From 053a03d42942a4c93d25ef72f49fe742e4f69549 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:14:30 +1100 Subject: [PATCH 62/68] =?UTF-8?q?=F0=9F=92=84=20Add=20rounded=20border=20t?= =?UTF-8?q?o=20images?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exampleSite/content/docs/version-2/upgrade/index.md | 4 +++- layouts/_default/_markup/render-image.html | 10 +++++----- layouts/shortcodes/figure.html | 10 +++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/exampleSite/content/docs/version-2/upgrade/index.md b/exampleSite/content/docs/version-2/upgrade/index.md index 78f6ae3ad..e9222b0ea 100644 --- a/exampleSite/content/docs/version-2/upgrade/index.md +++ b/exampleSite/content/docs/version-2/upgrade/index.md @@ -177,7 +177,9 @@ If you have provided an author image or site logo, simply move these assets from ## Step 5: Check content -The behavior of the `figure` shortcode is different in version 2. If you are using `figure` in your content, you may need to adjust the parameters you are providing. Consult the shortcode docs to learn more about supported parameters. +The behavior of the `figure` shortcode is different in version 2. If you are using `figure` in your content and have advanced use cases, you may need to adjust the parameters you are providing. + +Consult the [shortcode docs]({{< ref "docs/shortcodes#figure" >}}) to learn more about supported parameters. ## Step 6: Rebuild diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html index f51d7d8c1..6c01a4b44 100644 --- a/layouts/_default/_markup/render-image.html +++ b/layouts/_default/_markup/render-image.html @@ -3,13 +3,13 @@ {{ with $.Page.Resources.GetMatch (.Destination) }}

{{ $altText }}
{{ $caption | markdownify }}
diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html index 5a9bbc0bc..963ec3e45 100644 --- a/layouts/shortcodes/figure.html +++ b/layouts/shortcodes/figure.html @@ -6,13 +6,13 @@
{{ with $href }}{{ end }} {{ $altText }} {{ if $href }}{{ end }} From f61412689fa5708bfd372ee28b476d172d93eddb Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:17:43 +1100 Subject: [PATCH 63/68] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20to=20Tailw?= =?UTF-8?q?ind=20v3.0.18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- assets/css/compiled/main.css | 2 +- package-lock.json | 70 +++++++++++++++--------------------- 3 files changed, 30 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74ed30cf7..5ba808837 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - ⚠️ Complete rewrite of dark mode to allow more flexibile configuration - ⚠️ All theme images are now Hugo assets - ⚠️ Overhauled `figure` shortcode which now resizes images -- Upgrade to Tailwind v3.0.17 +- Upgrade to Tailwind v3.0.18 - Inline Javascript moved to external files - Improved JSON-LD structured data - Breadcrumbs now fallback to section name when `title` is not provided diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 0cf74b26d..8a7654aa0 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1,6 +1,6 @@ /*! Congo v1.6.4 | MIT License | https://github.com/jpanther/congo */ -/*! tailwindcss v3.0.17 | MIT License | https://tailwindcss.com */ +/*! tailwindcss v3.0.18 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) diff --git a/package-lock.json b/package-lock.json index 3827f084f..4773d6372 100644 --- a/package-lock.json +++ b/package-lock.json @@ -161,15 +161,14 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz", - "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.1.tgz", + "integrity": "sha512-AmSzZSgLhHKlILKduU+PKBTHL6c+al82syZlRid1xgmlWwXagLigO+O++B4C0scpMfzW//f/3YCRcwwEHWoU3w==", "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" + "lodash.merge": "^4.6.2" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders" @@ -355,9 +354,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", + "version": "1.0.30001304", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz", + "integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==", "dev": true, "peer": true, "funding": { @@ -1295,9 +1294,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.54", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", - "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", + "version": "1.4.57", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.57.tgz", + "integrity": "sha512-FNC+P5K1n6pF+M0zIK+gFCoXcJhhzDViL3DRIGy2Fv5PohuSES1JHR7T+GlwxSxlzx4yYbsuzCZvHxcBSRCIOw==", "dev": true, "peer": true }, @@ -1675,12 +1674,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2188,9 +2181,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", - "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", + "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", "dev": true, "dependencies": { "arg": "^5.0.1", @@ -2209,7 +2202,7 @@ "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.0", "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.8", + "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", "resolve": "^1.21.0" @@ -2405,15 +2398,14 @@ } }, "@tailwindcss/typography": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz", - "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.1.tgz", + "integrity": "sha512-AmSzZSgLhHKlILKduU+PKBTHL6c+al82syZlRid1xgmlWwXagLigO+O++B4C0scpMfzW//f/3YCRcwwEHWoU3w==", "dev": true, "requires": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" + "lodash.merge": "^4.6.2" } }, "@types/parse-json": { @@ -2543,9 +2535,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", + "version": "1.0.30001304", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz", + "integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==", "dev": true, "peer": true }, @@ -3320,9 +3312,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.54", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", - "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", + "version": "1.4.57", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.57.tgz", + "integrity": "sha512-FNC+P5K1n6pF+M0zIK+gFCoXcJhhzDViL3DRIGy2Fv5PohuSES1JHR7T+GlwxSxlzx4yYbsuzCZvHxcBSRCIOw==", "dev": true, "peer": true }, @@ -3618,12 +3610,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3958,9 +3944,9 @@ "dev": true }, "tailwindcss": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", - "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", + "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", "dev": true, "requires": { "arg": "^5.0.1", @@ -3979,7 +3965,7 @@ "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.0", "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.8", + "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", "resolve": "^1.21.0" From a55b85f714ece89ba05fc90936bc02ca44c12b2b Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:24:03 +1100 Subject: [PATCH 64/68] =?UTF-8?q?=F0=9F=8C=90=20Add=20i18n=20placeholders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/tr.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/i18n/tr.yaml b/i18n/tr.yaml index 7fa4941f0..cdbcf8448 100644 --- a/i18n/tr.yaml +++ b/i18n/tr.yaml @@ -33,6 +33,15 @@ list: externalurl_title: "Harici siteye bağlantı" no_articles: "Henüz burada listelenecek bir makale yok." +# nav: +# scroll_to_top_title: "Scroll to top" +# skip_to_main: "Skip to main content" + +# search: +# open_button_title: "Search (/)" +# close_button_title: "Close (Esc)" +# input_placeholder: "Search" + sharing: email: "Email ile gönder" facebook: "Facebook'ta paylaş" From 0602108f56f8dd1ce51aea37681b2ee531e83baf Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:07:12 +1100 Subject: [PATCH 65/68] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Adopt=20Tailwind=20h?= =?UTF-8?q?over-group=20classes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/compiled/main.css | 81 ++++++++------------ assets/css/main.css | 20 ----- layouts/_default/_markup/render-heading.html | 2 +- layouts/partials/article-pagination.html | 20 ++--- 4 files changed, 46 insertions(+), 77 deletions(-) diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 8a7654aa0..32b5689f4 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -921,48 +921,6 @@ body a, body button { display: none; } -/* Heading anchors */ - -.prose .heading-anchor:hover { - background-color: transparent !important; - --tw-text-opacity: 1 !important; - color: rgba(var(--color-primary-500), var(--tw-text-opacity)) !important; - -webkit-text-decoration-line: underline !important; - text-decoration-line: underline !important; -} - -.prose .heading-anchor:hover, .prose .heading-anchor:focus, .prose h2:hover > .heading-anchor, .prose h3:hover > .heading-anchor, .prose h4:hover > .heading-anchor { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-200), var(--tw-text-opacity)); - -webkit-text-decoration-line: none; - text-decoration-line: none; - opacity: 1; -} - -.dark .prose .heading-anchor:hover, .dark .prose .heading-anchor:focus, .dark .prose h2:hover > .heading-anchor, .dark .prose h3:hover > .heading-anchor, .dark .prose h4:hover > .heading-anchor { - --tw-text-opacity: 1; - color: rgba(var(--color-neutral-700), var(--tw-text-opacity)); -} - -/* Article pagination */ - -.article-pagination a:hover .article-pagination-title { - -webkit-text-decoration-line: underline; - text-decoration-line: underline; - -webkit-text-decoration-color: rgb(var(--color-primary-500)); - text-decoration-color: rgb(var(--color-primary-500)); -} - -.article-pagination a:hover .article-pagination-direction { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-600), var(--tw-text-opacity)); -} - -.dark .article-pagination a:hover .article-pagination-direction { - --tw-text-opacity: 1; - color: rgba(var(--color-primary-400), var(--tw-text-opacity)); -} - /* RTL support */ [dir="rtl"] .prose blockquote { @@ -2198,11 +2156,6 @@ body a, body button { text-decoration-line: none !important; } -.no-underline { - -webkit-text-decoration-line: none; - text-decoration-line: none; -} - .opacity-0 { opacity: 0; } @@ -2330,6 +2283,30 @@ body a, body button { outline-color: transparent; } +.group:hover .group-hover\:text-primary-600 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-600), var(--tw-text-opacity)); +} + +.group:hover .group-hover\:text-primary-300 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-300), var(--tw-text-opacity)); +} + +.group:hover .group-hover\:underline { + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} + +.group:hover .group-hover\:decoration-primary-500 { + -webkit-text-decoration-color: rgb(var(--color-primary-500)); + text-decoration-color: rgb(var(--color-primary-500)); +} + +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} + [dir="ltr"] .ltr\:right-0 { right: 0px; } @@ -2614,6 +2591,16 @@ body a, body button { background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity)); } +.dark .group:hover .dark\:group-hover\:text-primary-400 { + --tw-text-opacity: 1; + color: rgba(var(--color-primary-400), var(--tw-text-opacity)); +} + +.dark .group:hover .dark\:group-hover\:text-neutral-700 { + --tw-text-opacity: 1; + color: rgba(var(--color-neutral-700), var(--tw-text-opacity)); +} + @media (min-width: 640px) { .sm\:mb-0 { margin-bottom: 0px; diff --git a/assets/css/main.css b/assets/css/main.css index 0c4e93141..e9e617f7b 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -21,26 +21,6 @@ body button { @apply hidden; } -/* Heading anchors */ -.prose .heading-anchor:hover { - @apply underline bg-transparent text-primary-500 !important; -} -.prose .heading-anchor:hover, -.prose .heading-anchor:focus, -.prose h2:hover > .heading-anchor, -.prose h3:hover > .heading-anchor, -.prose h4:hover > .heading-anchor { - @apply no-underline opacity-100 text-primary-200 dark:text-neutral-700; -} - -/* Article pagination */ -.article-pagination a:hover .article-pagination-title { - @apply underline decoration-primary-500; -} -.article-pagination a:hover .article-pagination-direction { - @apply text-primary-600 dark:text-primary-400; -} - /* RTL support */ .prose blockquote { @apply rtl:pr-4 rtl:border-l-0 rtl:border-r-4; diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html index 6c788f730..7ebc04524 100644 --- a/layouts/_default/_markup/render-heading.html +++ b/layouts/_default/_markup/render-heading.html @@ -1 +1 @@ -{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} +{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}#{{ end }} diff --git a/layouts/partials/article-pagination.html b/layouts/partials/article-pagination.html index 85b4d22dc..f5eae2758 100644 --- a/layouts/partials/article-pagination.html +++ b/layouts/partials/article-pagination.html @@ -6,22 +6,23 @@ {{ $next = .PrevInSection }} {{ $prev = .NextInSection }} {{ end }} -
+

{{ if $prev }} - + - {{ $prev.Title | emojify }} @@ -35,9 +36,10 @@ {{ if $next }} - + - {{ $next.Title | emojify }} @@ -47,11 +49,11 @@ From 54d74316d3683d5f5827bda5b1ea7abf50b60a4b Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:37:09 +1100 Subject: [PATCH 66/68] =?UTF-8?q?=F0=9F=9A=B8=20Allow=20`figure`=20to=20re?= =?UTF-8?q?vert=20to=20default=20behaviour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exampleSite/content/docs/shortcodes/index.md | 9 ++-- layouts/shortcodes/figure.html | 48 +++++++++++--------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/exampleSite/content/docs/shortcodes/index.md b/exampleSite/content/docs/shortcodes/index.md index b06c9dae4..2df0149c5 100644 --- a/exampleSite/content/docs/shortcodes/index.md +++ b/exampleSite/content/docs/shortcodes/index.md @@ -101,16 +101,17 @@ Congo includes a `figure` shortcode for adding images to content. The shortcode Images included using `figure` will be optimised using Hugo Pipes and scaled in order to provide images appropriate to different device resolutions. -The `figure` shortcode accepts five parameters: +The `figure` shortcode accepts six parameters: |Parameter|Description| |---|---| |`src`|**Required.** The filename of the image. This image must be a [page resource](https://gohugo.io/content-management/page-resources/) bundled with the page.| |`alt`|[Alternative text description](https://moz.com/learn/seo/alt-text) for the image.| -|`caption`|Markdown for the image caption which will be displayed below the image.| -|`class`|Additional CSS classes to add to the image.| - `href`|URL that the image should be linked to.| +|`caption`|Markdown for the image caption, which will be displayed below the image.| +|`class`|Additional CSS classes to apply to the image.| +|`href`|URL that the image should be linked to.| +|`default`|Special parameter to revert to default Hugo `figure` behaviour. Simply provide `default=true` and then use normal [Hugo shortcode syntax](https://gohugo.io/content-management/shortcodes/#figure).| Congo also supports automatic conversion of images included using standard Markdown syntax. Simply use the following format and the theme will handle the rest: diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html index 963ec3e45..4bca0c155 100644 --- a/layouts/shortcodes/figure.html +++ b/layouts/shortcodes/figure.html @@ -1,23 +1,27 @@ -{{ $altText := .Get "alt" }} -{{ $caption := .Get "caption" }} -{{ $href := .Get "href" }} -{{ $class := .Get "class" }} -{{ with $.Page.Resources.GetMatch (.Get "src") }} -
- {{ with $href }}{{ end }} - {{ $altText }} - {{ if $href }}{{ end }} - {{ with $caption }}
{{ . | markdownify }}
{{ end }} -
+{{ if .Get "default" }} + {{ template "_internal/shortcodes/figure.html" . }} {{ else }} - {{ errorf `[CONGO] Shortcode "figure" error in "%s": Resource "%s" not found. Check the path is correct or remove the shortcode.` .Page.Path (.Get "src") }} -{{ end }} + {{ $altText := .Get "alt" }} + {{ $caption := .Get "caption" }} + {{ $href := .Get "href" }} + {{ $class := .Get "class" }} + {{ with $.Page.Resources.GetMatch (.Get "src") }} +
+ {{ with $href }}{{ end }} + {{ $altText }} + {{ if $href }}{{ end }} + {{ with $caption }}
{{ . | markdownify }}
{{ end }} +
+ {{ else }} + {{ errorf `[CONGO] Shortcode "figure" error in "%s": Resource "%s" not found. Check the path is correct or remove the shortcode.` .Page.Path (.Get "src") }} + {{ end }} +{{ end }} \ No newline at end of file From e9ce1e32147c7f890103fb9321db7bb89588cdce Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:46:21 +1100 Subject: [PATCH 67/68] =?UTF-8?q?=F0=9F=90=9B=20Fix=20JSON=20output=20dupl?= =?UTF-8?q?icated=20items?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layouts/_default/index.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/layouts/_default/index.json b/layouts/_default/index.json index 8d4ac99ac..789b95c54 100644 --- a/layouts/_default/index.json +++ b/layouts/_default/index.json @@ -1,6 +1,6 @@ -{{- $.Scratch.Add "index" slice -}} +{{- $index := slice -}} {{- range .Site.RegularPages -}} {{ $section := .Site.GetPage "section" .Section }} - {{- $.Scratch.Add "index" (dict "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long")) "title" .Title "section" $section.Title "summary" .Summary "content" (.Plain | safeJS) "permalink" .Permalink) -}} + {{- $index = $index | append (dict "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long")) "title" .Title "section" $section.Title "summary" .Summary "content" (.Plain | safeJS) "permalink" .RelPermalink) -}} {{- end -}} -{{- $.Scratch.Get "index" | jsonify -}} +{{- $index | jsonify -}} From 1bd584efda0fa23250b767f792688f12862a17c1 Mon Sep 17 00:00:00 2001 From: James Panther <4462786+jpanther@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:51:19 +1100 Subject: [PATCH 68/68] =?UTF-8?q?=F0=9F=94=A8=20Preparing=20release=20v2.0?= =?UTF-8?q?.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 ++++- assets/css/compiled/main.css | 2 +- assets/css/main.css | 2 +- package.json | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ba808837..aeb0d45c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [2.0.0] - 2022-02-03 + ### Added - Multilingual support @@ -279,7 +281,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Advanced customisation using simple Tailwind colour definitions and styles - Fully documented -[unreleased]: https://github.com/jpanther/congo/compare/v1.6.4...HEAD +[unreleased]: https://github.com/jpanther/congo/compare/v2.0.0...HEAD +[2.0.0]: https://github.com/jpanther/congo/compare/v1.6.4...v2.0.0 [1.6.4]: https://github.com/jpanther/congo/compare/v1.6.3...v1.6.4 [1.6.3]: https://github.com/jpanther/congo/compare/v1.6.2...v1.6.3 [1.6.2]: https://github.com/jpanther/congo/compare/v1.6.1...v1.6.2 diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 32b5689f4..43bd85a5a 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1,4 +1,4 @@ -/*! Congo v1.6.4 | MIT License | https://github.com/jpanther/congo */ +/*! Congo v2.0.0 | MIT License | https://github.com/jpanther/congo */ /*! tailwindcss v3.0.18 | MIT License | https://tailwindcss.com */ diff --git a/assets/css/main.css b/assets/css/main.css index e9e617f7b..ea936c1d0 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -1,4 +1,4 @@ -/*! Congo v1.6.4 | MIT License | https://github.com/jpanther/congo */ +/*! Congo v2.0.0 | MIT License | https://github.com/jpanther/congo */ @tailwind base; @tailwind components; diff --git a/package.json b/package.json index e142da364..c9f61c83e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hugo-congo-theme", - "version": "1.6.4", + "version": "2.0.0", "description": "Congo theme for Hugo", "main": "index.js", "scripts": {