From 89b4a318261adc0a5d3ef314a28436031efaf1dd Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 14:33:41 -0700 Subject: [PATCH 1/6] npm update --- website/package-lock.json | 646 ++++++++++++++++++-------------------- 1 file changed, 302 insertions(+), 344 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 610d3a3f3..68b20bf09 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -27,9 +27,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true, "engines": { "node": ">=6.9.0" @@ -111,18 +111,6 @@ "node": ">=4" } }, - "node_modules/@fullhuman/postcss-purgecss": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz", - "integrity": "sha512-/EnQ9UDWGGqHkn1UKAwSgh+gJHPKmD+Z+5dQ4gWT4qq2NUyez3zqAfZNwFH3eSgmgO+wjTXfhlLchx2M9/K+7Q==", - "dev": true, - "dependencies": { - "purgecss": "^4.0.3" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -146,9 +134,9 @@ } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -159,9 +147,9 @@ } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "node_modules/@types/parse-json": { @@ -240,20 +228,20 @@ } }, "node_modules/arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", "dev": true }, "node_modules/autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.4.tgz", + "integrity": "sha512-EKjKDXOq7ug+jagLzmnoTRpTT0q1KVzEJqrJd0hCBa7FiG0WbFOBCcJCy2QkW1OckpO3qgttA1aWjVbeIPAecw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", - "colorette": "^1.2.2", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001252", + "colorette": "^1.3.0", "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", "postcss-value-parser": "^4.1.0" @@ -310,16 +298,16 @@ } }, "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.75" }, "bin": { "browserslist": "cli.js" @@ -360,9 +348,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001241", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz", - "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==", + "version": "1.0.30001255", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", + "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==", "dev": true, "funding": { "type": "opencollective", @@ -370,9 +358,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -418,6 +406,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -430,13 +430,13 @@ } }, "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", "dev": true, "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^2.0.1", + "color-string": "^1.6.0" } }, "node_modules/color-convert": { @@ -458,34 +458,19 @@ "dev": true }, "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "dev": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", "dev": true }, "node_modules/commander": { @@ -504,9 +489,9 @@ "dev": true }, "node_modules/concurrently": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz", - "integrity": "sha512-v9I4Y3wFoXCSY2L73yYgwA9ESrQMpRn80jMcqMgHx720Hecz2GZAvTI6bREVST6lkddNypDKRN22qhK0X8Y00g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", + "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -527,9 +512,9 @@ } }, "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -593,9 +578,9 @@ } }, "node_modules/date-fns": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.22.1.tgz", - "integrity": "sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", + "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", "dev": true, "engines": { "node": ">=0.11" @@ -641,9 +626,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.761", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.761.tgz", - "integrity": "sha512-7a/wV/plM/b95XjTdA2Q4zAxxExTDKkNQpTiaU/nVT8tGCQVtX9NsnTjhALBFICpOB58hU6xg5fFC3CT2Bybpg==", + "version": "1.3.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", + "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", "dev": true }, "node_modules/emoji-regex": { @@ -680,9 +665,9 @@ } }, "node_modules/fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -695,10 +680,22 @@ "node": ">=8" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -729,6 +726,20 @@ "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", @@ -785,21 +796,21 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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/has": { @@ -866,15 +877,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", @@ -887,6 +889,15 @@ "node": ">=8" } }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -922,9 +933,9 @@ } }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1023,12 +1034,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, "node_modules/lodash.topath": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", @@ -1088,9 +1093,9 @@ } }, "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -1100,18 +1105,18 @@ } }, "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "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.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", "dev": true }, "node_modules/normalize-package-data": { @@ -1238,9 +1243,9 @@ } }, "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "dependencies": { "colorette": "^1.2.2", @@ -1299,22 +1304,22 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", - "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^6.0.6" }, "engines": { - "node": ">=10.0" + "node": ">=12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.1.13" + "postcss": "^8.2.14" } }, "node_modules/postcss-selector-parser": { @@ -1458,12 +1463,12 @@ } }, "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/reusify": { @@ -1613,9 +1618,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "node_modules/string-width": { @@ -1660,38 +1665,38 @@ } }, "node_modules/tailwindcss": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.4.tgz", - "integrity": "sha512-OdBCPgazNNsknSP+JfrPzkay9aqKjhKtFhbhgxHgvEFdHy/GuRPo2SCJ4w1SFTN8H6FPI4m6qD/Jj20NWY1GkA==", + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.10.tgz", + "integrity": "sha512-OFm08RRy7elXhv57DRLzCVKrylIbnu6htJzcD/bGPOdokLQrqywSTYPs3SSqsxqXF+6Mzy/XJcS89gZDIF057A==", "dev": true, "dependencies": { - "@fullhuman/postcss-purgecss": "^4.0.3", - "arg": "^5.0.0", + "arg": "^5.0.1", "bytes": "^3.0.0", - "chalk": "^4.1.1", + "chalk": "^4.1.2", "chokidar": "^3.5.2", - "color": "^3.1.3", - "cosmiconfig": "^7.0.0", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", "detective": "^5.2.0", - "didyoumean": "^1.2.1", + "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.5", + "fast-glob": "^3.2.7", "fs-extra": "^10.0.0", - "glob-parent": "^6.0.0", + "glob-parent": "^6.0.1", "html-tags": "^3.1.0", "is-glob": "^4.0.1", "lodash": "^4.17.21", "lodash.topath": "^4.5.2", "modern-normalize": "^1.1.0", - "node-emoji": "^1.8.1", + "node-emoji": "^1.11.0", "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.5", + "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", "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0", @@ -1709,32 +1714,6 @@ "postcss": "^8.0.9" } }, - "node_modules/tailwindcss/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/tailwindcss/node_modules/glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -1912,9 +1891,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true }, "@babel/highlight": { @@ -1980,15 +1959,6 @@ } } }, - "@fullhuman/postcss-purgecss": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz", - "integrity": "sha512-/EnQ9UDWGGqHkn1UKAwSgh+gJHPKmD+Z+5dQ4gWT4qq2NUyez3zqAfZNwFH3eSgmgO+wjTXfhlLchx2M9/K+7Q==", - "dev": true, - "requires": { - "purgecss": "^4.0.3" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2006,9 +1976,9 @@ "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", @@ -2016,9 +1986,9 @@ } }, "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@types/parse-json": { @@ -2076,20 +2046,20 @@ } }, "arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", "dev": true }, "autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.4.tgz", + "integrity": "sha512-EKjKDXOq7ug+jagLzmnoTRpTT0q1KVzEJqrJd0hCBa7FiG0WbFOBCcJCy2QkW1OckpO3qgttA1aWjVbeIPAecw==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", - "colorette": "^1.2.2", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001252", + "colorette": "^1.3.0", "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", "postcss-value-parser": "^4.1.0" @@ -2127,16 +2097,16 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.75" } }, "bytes": { @@ -2158,15 +2128,15 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001241", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz", - "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==", + "version": "1.0.30001255", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", + "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==", "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2198,6 +2168,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "cliui": { @@ -2212,30 +2193,13 @@ } }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } + "color-convert": "^2.0.1", + "color-string": "^1.6.0" } }, "color-convert": { @@ -2254,9 +2218,9 @@ "dev": true }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -2264,9 +2228,9 @@ } }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", "dev": true }, "commander": { @@ -2282,9 +2246,9 @@ "dev": true }, "concurrently": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.0.tgz", - "integrity": "sha512-v9I4Y3wFoXCSY2L73yYgwA9ESrQMpRn80jMcqMgHx720Hecz2GZAvTI6bREVST6lkddNypDKRN22qhK0X8Y00g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", + "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -2299,9 +2263,9 @@ } }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -2344,9 +2308,9 @@ "dev": true }, "date-fns": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.22.1.tgz", - "integrity": "sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", + "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", "dev": true }, "defined": { @@ -2379,9 +2343,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.761", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.761.tgz", - "integrity": "sha512-7a/wV/plM/b95XjTdA2Q4zAxxExTDKkNQpTiaU/nVT8tGCQVtX9NsnTjhALBFICpOB58hU6xg5fFC3CT2Bybpg==", + "version": "1.3.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", + "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", "dev": true }, "emoji-regex": { @@ -2412,9 +2376,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -2422,12 +2386,23 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -2448,6 +2423,17 @@ "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", "dev": 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", @@ -2488,18 +2474,18 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has": { @@ -2546,14 +2532,6 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } } }, "import-from": { @@ -2563,6 +2541,14 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "inflight": { @@ -2597,9 +2583,9 @@ } }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -2678,12 +2664,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, "lodash.topath": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", @@ -2728,24 +2708,24 @@ "dev": true }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "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.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", "dev": true }, "normalize-package-data": { @@ -2839,9 +2819,9 @@ "dev": true }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -2871,12 +2851,12 @@ } }, "postcss-nested": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", - "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^6.0.6" } }, "postcss-selector-parser": { @@ -2981,9 +2961,9 @@ } }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "reusify": { @@ -3096,9 +3076,9 @@ } }, "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "string-width": { @@ -3131,64 +3111,42 @@ } }, "tailwindcss": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.4.tgz", - "integrity": "sha512-OdBCPgazNNsknSP+JfrPzkay9aqKjhKtFhbhgxHgvEFdHy/GuRPo2SCJ4w1SFTN8H6FPI4m6qD/Jj20NWY1GkA==", + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.10.tgz", + "integrity": "sha512-OFm08RRy7elXhv57DRLzCVKrylIbnu6htJzcD/bGPOdokLQrqywSTYPs3SSqsxqXF+6Mzy/XJcS89gZDIF057A==", "dev": true, "requires": { - "@fullhuman/postcss-purgecss": "^4.0.3", - "arg": "^5.0.0", + "arg": "^5.0.1", "bytes": "^3.0.0", - "chalk": "^4.1.1", + "chalk": "^4.1.2", "chokidar": "^3.5.2", - "color": "^3.1.3", - "cosmiconfig": "^7.0.0", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", "detective": "^5.2.0", - "didyoumean": "^1.2.1", + "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.5", + "fast-glob": "^3.2.7", "fs-extra": "^10.0.0", - "glob-parent": "^6.0.0", + "glob-parent": "^6.0.1", "html-tags": "^3.1.0", "is-glob": "^4.0.1", "lodash": "^4.17.21", "lodash.topath": "^4.5.2", "modern-normalize": "^1.1.0", - "node-emoji": "^1.8.1", + "node-emoji": "^1.11.0", "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.5", + "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", "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0", "tmp": "^0.2.1" - }, - "dependencies": { - "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" - } - }, - "glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "tmp": { From 939adbd5de18d31b99de38639aeb204434598cea Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 20:38:16 -0700 Subject: [PATCH 2/6] Dark mode --- docs/build.rs | 35 ++++++++-- website/index.css | 11 ++-- website/src/header.rs | 35 +++++----- website/src/index.rs | 129 +++++++++++++++++++------------------ website/src/main.rs | 48 ++++++++++---- website/src/sidebar.rs | 11 ++-- website/tailwind.config.js | 3 +- 7 files changed, 164 insertions(+), 108 deletions(-) diff --git a/docs/build.rs b/docs/build.rs index ccf002538..7e9be13b8 100644 --- a/docs/build.rs +++ b/docs/build.rs @@ -9,8 +9,9 @@ use pulldown_cmark::html::push_html; use pulldown_cmark::{CodeBlockKind, CowStr, Event, Options, Parser, Tag}; use serde::Serialize; use syntect::highlighting::ThemeSet; -use syntect::html::highlighted_html_for_string; +use syntect::html::{css_for_theme_with_class_style, ClassStyle, ClassedHTMLGenerator}; use syntect::parsing::SyntaxSet; +use syntect::util::LinesWithEndings; use walkdir::WalkDir; static HOSTNAME: &str = "https://sycamore-rs.netlify.app"; @@ -34,8 +35,6 @@ fn parse(path: &Path) -> Result> { let mut builder = SyntaxSet::load_defaults_newlines().into_builder(); builder.add_from_folder("./syntax", true)?; let ps = builder.build(); - let ts = ThemeSet::load_defaults(); - let theme = &ts.themes["InspiredGitHub"]; let md = fs::read_to_string(path)?; @@ -91,9 +90,21 @@ fn parse(path: &Path) -> Result> { let syntax = ps .find_syntax_by_token(&lang) .unwrap_or_else(|| panic!("{} is an invalid language", lang)); - let highlighted_html = highlighted_html_for_string(&code, &ps, syntax, theme); - Some(Event::Html(CowStr::from(highlighted_html))) + let mut html_generator = ClassedHTMLGenerator::new_with_class_style( + syntax, + &ps, + syntect::html::ClassStyle::SpacedPrefixed { prefix: "s-" }, + ); + for line in LinesWithEndings::from(&code) { + html_generator.parse_html_for_line_which_includes_newline(line); + } + let highlighted_html = html_generator.finalize(); + + Some(Event::Html(CowStr::from(format!( + "
{}
", + highlighted_html + )))) } Event::Text(ref text) | Event::Code(ref text) => { if inside_code_block { @@ -247,11 +258,25 @@ fn main() -> Result<(), Box> { println!("cargo:rerun-if-changed=versioned_docs"); println!("cargo:rerun-if-changed=posts"); + // Sitemap. generate_sitemap_xml()?; + // Markdown files. build_dir(Path::new("./next"), Path::new("docs"))?; build_dir(Path::new("./versioned_docs"), Path::new("docs"))?; build_dir(Path::new("./posts"), Path::new("posts"))?; + // Syntax highlighting CSS files. + let ts = ThemeSet::load_defaults(); + let dark_theme = &ts.themes["base16-ocean.dark"]; + let light_theme = &ts.themes["InspiredGitHub"]; + + let dark_css = + css_for_theme_with_class_style(dark_theme, ClassStyle::SpacedPrefixed { prefix: "s-" }); + let light_css = + css_for_theme_with_class_style(light_theme, ClassStyle::SpacedPrefixed { prefix: "s-" }); + fs::write("../website/static/dark.css", dark_css)?; + fs::write("../website/static/light.css", light_css)?; + Ok(()) } diff --git a/website/index.css b/website/index.css index 4544423d6..8cbc571fe 100644 --- a/website/index.css +++ b/website/index.css @@ -3,17 +3,18 @@ @tailwind utilities; .content blockquote { - @apply bg-gray-300 p-2 rounded; + @apply bg-gray-300 dark:bg-gray-700 p-2 rounded; } .content code { - @apply bg-gray-200 px-2 rounded; + @apply bg-gray-200 dark:bg-gray-600 px-2 rounded; } .content pre { - /* Important style */ - background-color: rgb(244, 244, 245) !important; - @apply rounded block p-2 whitespace-pre-wrap; + @apply bg-gray-100 rounded block p-2 whitespace-pre-wrap font-mono; +} +.dark .content pre { + background-color: rgb(50, 50, 60) !important; } .content table { diff --git a/website/src/header.rs b/website/src/header.rs index faa602359..3c0f66660 100644 --- a/website/src/header.rs +++ b/website/src/header.rs @@ -1,11 +1,18 @@ +use sycamore::context::use_context; use sycamore::prelude::*; +use crate::DarkMode; + #[component(Nav)] fn nav() -> Template { + static LINK_CLASS: &str = + "py-2 px-3 text-sm hover:text-gray-800 dark:hover:text-gray-100 hover:underline"; + + let dark_mode = use_context::(); + template! { - nav(class="fixed top-0 z-50 px-8 w-full \ - backdrop-filter backdrop-blur-sm backdrop-saturate-150 bg-opacity-80 \ - bg-gray-100 border-b border-gray-400") { + nav(class="px-8 backdrop-filter backdrop-blur-sm backdrop-saturate-150 bg-opacity-80 \ + bg-gray-100 dark:bg-gray-800 border-b border-gray-400 dark:border-gray-600") { div(class="flex flex-row justify-between items-center h-12") { // Brand section div(class="flex-initial") { @@ -17,32 +24,30 @@ fn nav() -> Template { } } // Links section - div(class="flex flex-row ml-2 space-x-4 text-gray-600") { - a(class="py-2 px-3 text-sm hover:text-gray-800 hover:underline", - href="/docs/getting_started/installation", + div(class="flex flex-row ml-2 space-x-4 text-gray-600 dark:text-gray-300") { + a(class=LINK_CLASS, href="/docs/getting_started/installation", ) { "Book" } - a(class="py-2 px-3 text-sm hover:text-gray-800 hover:underline", - href="https://docs.rs/sycamore", + a(class=LINK_CLASS, href="https://docs.rs/sycamore", ) { "API" } - a(class="py-2 px-3 text-sm hover:text-gray-800 hover:underline", - href="/news", + a(class=LINK_CLASS, href="/news", ) { "News" } - a(class="py-2 px-3 text-sm hover:text-gray-800 hover:underline", - href="https://github.com/sycamore-rs/sycamore", + a(class=LINK_CLASS, href="https://github.com/sycamore-rs/sycamore", ) { "GitHub" } - a(class="py-2 px-3 text-sm hover:text-gray-800 hover:underline", - href="https://discord.gg/vDwFUmm6mU", + a(class=LINK_CLASS, href="https://discord.gg/vDwFUmm6mU", ) { "Discord" } + button(on:click=move |_| dark_mode.0.set(!*dark_mode.0.get())) { + "Toggle dark mode" + } } } } @@ -52,7 +57,7 @@ fn nav() -> Template { #[component(Header)] pub fn header() -> Template { template! { - header { + header(class="fixed top-0 z-50 w-full") { Nav() } } diff --git a/website/src/index.rs b/website/src/index.rs index 91db285e2..d02aa6ee9 100644 --- a/website/src/index.rs +++ b/website/src/index.rs @@ -9,75 +9,76 @@ pub fn index() -> Template { .set_title("Sycamore"); template! { - div(class="flex flex-col items-center w-full mb-10") { - h1(class="text-5xl font-bold mt-20 mb-5") { - "Sycamore" - } - - p(class="mb-5 text-center") { - "A reactive library for creating web apps in Rust and WebAssembly" - } - - // region: badges - div(class="mb-7 flex flex-row flex-wrap justify-center gap-1") { - a( - href="https://github.com/sycamore-rs/sycamore", - target="_blank" - ) { img(src="https://img.shields.io/github/stars/sycamore-rs/sycamore?style=social", alt="GitHub Stars") } - a( - href="https://crates.io/crates/sycamore", - target="_blank" - ) { img(src="https://img.shields.io/crates/v/sycamore", alt="Crates.io") } - a( - href="https://docs.rs/sycamore", - target="_blank" - ) { img(src="https://img.shields.io/docsrs/sycamore?color=blue&label=docs.rs", alt="docs.rs") } - a( - href="https://github.com/sycamore-rs/sycamore/graphs/contributors", - target="_blank" - ) { img(src="https://img.shields.io/github/contributors/sycamore-rs/sycamore", alt="Github Contributors") } + div(class="pb-10") { + div(class="flex flex-col items-center w-full mb-10") { + h1(class="text-5xl font-bold mt-20 mb-5") { + "Sycamore" + } + + p(class="mb-5 text-center") { + "A reactive library for creating web apps in Rust and WebAssembly" + } + + // region: badges + div(class="mb-7 flex flex-row flex-wrap justify-center gap-1") { + a( + href="https://github.com/sycamore-rs/sycamore", + target="_blank" + ) { img(src="https://img.shields.io/github/stars/sycamore-rs/sycamore?style=social", alt="GitHub Stars") } + a( + href="https://crates.io/crates/sycamore", + target="_blank" + ) { img(src="https://img.shields.io/crates/v/sycamore", alt="Crates.io") } + a( + href="https://docs.rs/sycamore", + target="_blank" + ) { img(src="https://img.shields.io/docsrs/sycamore?color=blue&label=docs.rs", alt="docs.rs") } + a( + href="https://github.com/sycamore-rs/sycamore/graphs/contributors", + target="_blank" + ) { img(src="https://img.shields.io/github/contributors/sycamore-rs/sycamore", alt="Github Contributors") } + a( + href="https://discord.gg/vDwFUmm6mU", + target="_blank" + ) { img(src="https://img.shields.io/discord/820400041332179004?label=discord", alt="Discord") } + } + // endregion + a( - href="https://discord.gg/vDwFUmm6mU", - target="_blank" - ) { img(src="https://img.shields.io/discord/820400041332179004?label=discord", alt="Discord") } - } - // endregion - - a( - href="/docs/getting_started/installation", - class="py-2 px-3 bg-white hover:bg-yellow-500 border-2 border-yellow-500 \ - rounded font-medium transition", - ) { - "Read the Book" - } - } - div(class="text-white flex flex-col w-full md:flex-row space-y-4 md:space-y-0 md:space-x-4 mb-10") { - div(class="bg-red-500 md:flex-1 rounded-md p-6") { - h1(class="text-lg text-center font-semibold mb-3") { "Lightning speed" } - p { - "Sycamore harnesses the full power of " - a(href="https://www.rust-lang.org/", class="underline", target="_blank") { "Rust" } - " via " - a(href="https://webassembly.org/", class="underline", target="_blank") { "WebAssembly" } - ", giving you full \ - control over performance." + href="/docs/getting_started/installation", + class="py-2 px-3 text-white bg-yellow-500 rounded font-medium transition", + ) { + "Read the Book" } } - div(class="bg-amber-600 md:flex-1 rounded-md p-6") { - h1(class="text-lg text-center font-semibold mb-3") { "Ergonomic and intuitive" } - p { - "Write code that feels natural. Everything is built on " - a(href="/docs/basics/reactivity", class="underline") { "reactive primitives" } - " without a cumbersome virtual DOM." + div(class="text-white flex flex-col w-full md:flex-row space-y-4 md:space-y-0 md:space-x-4") { + div(class="bg-red-500 md:flex-1 rounded-md p-6") { + h1(class="text-lg text-center font-semibold mb-3") { "Lightning speed" } + p { + "Sycamore harnesses the full power of " + a(href="https://www.rust-lang.org/", class="underline", target="_blank") { "Rust" } + " via " + a(href="https://webassembly.org/", class="underline", target="_blank") { "WebAssembly" } + ", giving you full \ + control over performance." + } } - } - div(class="bg-yellow-600 md:flex-1 rounded-md p-6") { - h1(class="text-lg text-center font-semibold mb-3") { "No JavaScript" } - p(class="mb-2") { - "Had enough of JavaScript? So have we." + div(class="bg-amber-600 md:flex-1 rounded-md p-6") { + h1(class="text-lg text-center font-semibold mb-3") { "Ergonomic and intuitive" } + p { + "Write code that feels natural. Everything is built on " + a(href="/docs/basics/reactivity", class="underline") { "reactive primitives" } + " without a cumbersome virtual DOM." + } } - p { - "Create apps using Sycamore without touching a single line of JS." + div(class="bg-yellow-600 md:flex-1 rounded-md p-6") { + h1(class="text-lg text-center font-semibold mb-3") { "No JavaScript" } + p(class="mb-2") { + "Had enough of JavaScript? So have we." + } + p { + "Create apps using Sycamore without touching a single line of JS." + } } } } diff --git a/website/src/main.rs b/website/src/main.rs index 0d9e001b7..2c72a1a15 100644 --- a/website/src/main.rs +++ b/website/src/main.rs @@ -8,6 +8,7 @@ mod versions; use content::MarkdownPage; use reqwasm::http::Request; use serde_lite::Deserialize; +use sycamore::context::{use_context, ContextProvider, ContextProviderProps}; use sycamore::prelude::*; use sycamore_router::{HistoryIntegration, Route, Router, RouterProps}; use wasm_bindgen_futures::spawn_local; @@ -15,16 +16,6 @@ use wasm_bindgen_futures::spawn_local; const LATEST_MAJOR_VERSION: &str = "v0.5"; const NEXT_VERSION: &str = "next"; -async fn docs_preload(path: String) -> MarkdownPage { - let text = Request::get(&path).send().await.unwrap().text().await; - if let Ok(text) = text { - let intermediate = serde_json::from_str(&text).unwrap(); - MarkdownPage::deserialize(&intermediate).unwrap() - } else { - todo!("error handling"); - } -} - #[derive(Debug, Route)] enum Routes { #[to("/")] @@ -43,6 +34,19 @@ enum Routes { NotFound, } +#[derive(Clone)] +struct DarkMode(Signal); + +async fn docs_preload(path: String) -> MarkdownPage { + let text = Request::get(&path).send().await.unwrap().text().await; + if let Ok(text) = text { + let intermediate = serde_json::from_str(&text).unwrap(); + MarkdownPage::deserialize(&intermediate).unwrap() + } else { + todo!("error handling"); + } +} + fn switch(route: StateHandle) -> Template { let template = Signal::new(Template::empty()); create_effect(cloned!((template) => move || { @@ -96,7 +100,8 @@ fn switch(route: StateHandle) -> Template { })); template! { - div(class="mt-12") { + div(class="pt-12 text-black dark:text-gray-200 bg-white dark:bg-gray-800 \ + min-h-screen transition-colors") { header::Header() (template.get().as_ref().clone()) } @@ -105,8 +110,16 @@ fn switch(route: StateHandle) -> Template { #[component(App)] fn app() -> Template { + let DarkMode(dark_mode) = use_context::(); + let dark_mode2 = dark_mode.clone(); + template! { - main { + main(class=if *dark_mode2.get() { "dark" } else { "" }) { + (if *dark_mode.get() { + template! { link(rel="stylesheet", href="/static/dark.css") } + } else { + template! { link(rel="stylesheet", href="/static/light.css") } + }) Router(RouterProps::new(HistoryIntegration::new(), switch)) } } @@ -116,5 +129,14 @@ fn main() { console_error_panic_hook::set_once(); console_log::init_with_level(log::Level::Debug).unwrap(); - sycamore::render(|| template! { App() }); + sycamore::render(|| { + template! { + ContextProvider(ContextProviderProps { + value: DarkMode(Signal::new(true)), // TODO: read from local storage or media query + children: || template! { + App() + }, + }) + } + }); } diff --git a/website/src/sidebar.rs b/website/src/sidebar.rs index 755cc0d46..939d43949 100644 --- a/website/src/sidebar.rs +++ b/website/src/sidebar.rs @@ -61,7 +61,7 @@ pub fn sidebar(version: String) -> Template { li { a( href=format!("../{}", page.1), - class="pl-4 hover:bg-gray-300 w-full inline-block rounded transition", + class="pl-4 hover:bg-gray-300 dark:hover:bg-gray-700 w-full inline-block rounded transition", ) { (page.0) } @@ -76,7 +76,7 @@ pub fn sidebar(version: String) -> Template { h1(class="text-lg font-bold py-1 pl-2") { (section.0) } - ul(class="text-gray-700") { + ul(class="text-gray-700 dark:text-gray-300") { (pages) } } @@ -86,12 +86,13 @@ pub fn sidebar(version: String) -> Template { let sections = Template::new_fragment(sections); template! { - aside(class="p-3 bg-white w-44") { - ul(class="text-black") { + aside(class="p-3 w-44") { + ul { li { a( href="/versions", - class="pl-4 font-bold text-gray-700 hover:bg-gray-300 w-full inline-block rounded transition", + class="pl-4 font-bold text-gray-700 dark:text-gray-300 \ + hover:bg-gray-300 dark:hover:bg-gray-700 w-full inline-block rounded transition", ) { "Version: " (version) } diff --git a/website/tailwind.config.js b/website/tailwind.config.js index 0c1a020e7..d3576395d 100644 --- a/website/tailwind.config.js +++ b/website/tailwind.config.js @@ -7,12 +7,13 @@ module.exports = { "./src/**/*.rs" ], }, - darkMode: false, // or 'media' or 'class' + darkMode: "class", // or 'media' or 'class' theme: { extend: {}, colors: { transparent: 'transparent', current: 'currentColor', + black: colors.black, red: colors.red, gray: colors.gray, orange: colors.orange, From a01b6e67660680e7cfbf6ed7de9421edd6ac9573 Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:01:22 -0700 Subject: [PATCH 3/6] Dark mode toggle --- website/Cargo.toml | 2 +- website/src/header.rs | 25 ++++++++++++++++++++----- website/src/main.rs | 16 +++++++++++++++- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/website/Cargo.toml b/website/Cargo.toml index 80809780b..697b6b0e9 100644 --- a/website/Cargo.toml +++ b/website/Cargo.toml @@ -24,5 +24,5 @@ wasm-bindgen-futures = "0.4.26" docs = {path = "../docs"} [dependencies.web-sys] -features = ["Document", "Location"] +features = ["Storage", "Window"] version = "0.3.53" diff --git a/website/src/header.rs b/website/src/header.rs index 3c0f66660..6494b4d38 100644 --- a/website/src/header.rs +++ b/website/src/header.rs @@ -3,13 +3,30 @@ use sycamore::prelude::*; use crate::DarkMode; +#[component(DarkModeToggle)] +fn dark_mode_toggle() -> Template { + static LIGHT_BULB_SVG: &str = r#""#; + static CLOUD_MOON_SVG: &str = r#""#; + + let dark_mode = use_context::(); + let toggle = cloned!((dark_mode) => move |_| dark_mode.0.set(!*dark_mode.0.get())); + + template! { + button( + title="Toggle dark mode", + class="w-3", + on:click=toggle, + // Use dangerously_set_inner_html because SVG is not supported yet in template! macro. + dangerously_set_inner_html=if *dark_mode.0.get() { LIGHT_BULB_SVG } else { CLOUD_MOON_SVG }, + ) + } +} + #[component(Nav)] fn nav() -> Template { static LINK_CLASS: &str = "py-2 px-3 text-sm hover:text-gray-800 dark:hover:text-gray-100 hover:underline"; - let dark_mode = use_context::(); - template! { nav(class="px-8 backdrop-filter backdrop-blur-sm backdrop-saturate-150 bg-opacity-80 \ bg-gray-100 dark:bg-gray-800 border-b border-gray-400 dark:border-gray-600") { @@ -45,9 +62,7 @@ fn nav() -> Template { ) { "Discord" } - button(on:click=move |_| dark_mode.0.set(!*dark_mode.0.get())) { - "Toggle dark mode" - } + DarkModeToggle() } } } diff --git a/website/src/main.rs b/website/src/main.rs index 2c72a1a15..319f67120 100644 --- a/website/src/main.rs +++ b/website/src/main.rs @@ -129,10 +129,24 @@ fn main() { console_error_panic_hook::set_once(); console_log::init_with_level(log::Level::Debug).unwrap(); + let local_storage = web_sys::window().unwrap().local_storage().unwrap(); + let dark_mode = if let Some(local_storage) = &local_storage { + local_storage.get_item("dark_mode").unwrap().as_deref() == Some("true") + } else { + false + }; + let dark_mode = DarkMode(Signal::new(dark_mode)); + + create_effect(cloned!((dark_mode) => move || { + if let Some(local_storage) = &local_storage { + local_storage.set_item("dark_mode", &dark_mode.0.get().to_string()).unwrap(); + } + })); + sycamore::render(|| { template! { ContextProvider(ContextProviderProps { - value: DarkMode(Signal::new(true)), // TODO: read from local storage or media query + value: dark_mode, children: || template! { App() }, From 52e5e686b4f9cbeeab8b2b75a15cad63e913fbb1 Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:07:33 -0700 Subject: [PATCH 4/6] Get dark mode from media query --- website/Cargo.toml | 2 +- website/src/main.rs | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/website/Cargo.toml b/website/Cargo.toml index 697b6b0e9..f61c9bd78 100644 --- a/website/Cargo.toml +++ b/website/Cargo.toml @@ -24,5 +24,5 @@ wasm-bindgen-futures = "0.4.26" docs = {path = "../docs"} [dependencies.web-sys] -features = ["Storage", "Window"] +features = ["MediaQueryList", "Storage", "Window"] version = "0.3.53" diff --git a/website/src/main.rs b/website/src/main.rs index 319f67120..a088f9a42 100644 --- a/website/src/main.rs +++ b/website/src/main.rs @@ -130,10 +130,17 @@ fn main() { console_log::init_with_level(log::Level::Debug).unwrap(); let local_storage = web_sys::window().unwrap().local_storage().unwrap(); + // Get dark mode from media query. + let dark_mode_mq = web_sys::window() + .unwrap() + .match_media("(prefers-color-scheme: dark)") + .unwrap() + .unwrap() + .matches(); let dark_mode = if let Some(local_storage) = &local_storage { - local_storage.get_item("dark_mode").unwrap().as_deref() == Some("true") + local_storage.get_item("dark_mode").unwrap().as_deref() == Some("true") || dark_mode_mq } else { - false + dark_mode_mq }; let dark_mode = DarkMode(Signal::new(dark_mode)); From 345a92c3f6d759d08e8f0d8e01af479fa694b58e Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:13:54 -0700 Subject: [PATCH 5/6] Tweak dark mode styles --- website/src/index.rs | 2 +- website/src/news_index.rs | 2 +- website/src/versions.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/index.rs b/website/src/index.rs index d02aa6ee9..67b25e663 100644 --- a/website/src/index.rs +++ b/website/src/index.rs @@ -46,7 +46,7 @@ pub fn index() -> Template { a( href="/docs/getting_started/installation", - class="py-2 px-3 text-white bg-yellow-500 rounded font-medium transition", + class="py-2 px-3 text-white bg-yellow-600 rounded font-medium transition", ) { "Read the Book" } diff --git a/website/src/news_index.rs b/website/src/news_index.rs index aa82f52e4..c81dce7bf 100644 --- a/website/src/news_index.rs +++ b/website/src/news_index.rs @@ -21,7 +21,7 @@ pub fn news_index() -> Template { li(class="hover:text-yellow-500 transition-colors") { a(href=format!("/news/{}", url)) { h2(class="text-2xl font-light") { (title) } - p(class="text-gray-600") { (subtitle) } + p(class="text-gray-600 dark:text-gray-400") { (subtitle) } } } } diff --git a/website/src/versions.rs b/website/src/versions.rs index 5c3efb858..df177309c 100644 --- a/website/src/versions.rs +++ b/website/src/versions.rs @@ -67,7 +67,7 @@ pub fn versions() -> Template { template! { li { h2(class="text-2xl font-light") { (name) } - div(class="flex flex-col divide-y text-gray-600") { + div(class="flex flex-col divide-y dark:divide-gray-500 text-gray-600 dark:text-gray-300") { VersionedDocsLinkView((name, versioned_docs_link)) } } From f2dbf114bd0ee16ab48944e98021254eaebe25de Mon Sep 17 00:00:00 2001 From: Luke Chu <37006668+lukechu10@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:17:35 -0700 Subject: [PATCH 6/6] Minify TailwindCSS --- website/package.json | 4 ++-- website/postcss.config.js | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 website/postcss.config.js diff --git a/website/package.json b/website/package.json index d15e7eaa0..bfaa7a0c5 100644 --- a/website/package.json +++ b/website/package.json @@ -4,7 +4,7 @@ "description": "Source code for the docs website hosted at [sycamore-rs.netlify.app](https://sycamore-rs.netlify.app)", "scripts": { "dev": "concurrently \"cross-env TAILWIND_MODE=watch NODE_ENV=development tailwindcss -i index.css -o ./static/tailwind.css --watch --jit\" \"trunk serve\"", - "prod": "cross-env TAILWIND_MODE=build NODE_ENV=production tailwindcss -i index.css -o ./static/tailwind.css && cd ../docs && cargo build && cd ../website && trunk build --release" + "prod": "cross-env TAILWIND_MODE=build NODE_ENV=production tailwindcss -i index.css -o ./static/tailwind.css --minify && cd ../docs && cargo build && cd ../website && trunk build --release" }, "devDependencies": { "autoprefixer": "^10.2.6", @@ -13,4 +13,4 @@ "tailwindcss": "^2.1.4" }, "private": true -} \ No newline at end of file +} diff --git a/website/postcss.config.js b/website/postcss.config.js deleted file mode 100644 index b28b7e10d..000000000 --- a/website/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - } -}