diff --git a/docs/.eleventy.js b/docs/.eleventy.js index 8ae8f2d..2843a19 100644 --- a/docs/.eleventy.js +++ b/docs/.eleventy.js @@ -3,7 +3,8 @@ const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); const criticalCss = require("eleventy-critical-css"); const slugify = require("slugify"); const metagen = require("eleventy-plugin-metagen"); - +const i18n = require('eleventy-plugin-i18n'); +const translations = require('./src/_data/i18n'); const fs = require('fs'); const outdent = require('outdent'); const schema = require("@quasibit/eleventy-plugin-schema"); @@ -141,6 +142,10 @@ module.exports = function(eleventyConfig) { return JSON.stringify(text).replace(/(?:\\n\s*){2,}/g, "\\n"); }); + eleventyConfig.addFilter("baseUrl", (text) => { + return text.replace(/(?:ru)\//g, ""); + }); + eleventyConfig.addFilter("niceDate", (value) => { try{ const options = {year: 'numeric', month: 'short', day: 'numeric' }; @@ -188,9 +193,16 @@ module.exports = function(eleventyConfig) { fontawesomeSubset({ brands:['discord', 'github'], regular:['envelope', 'life-ring'], - solid: ['arrow-circle-right', 'pencil-alt', 'envelope', 'share', 'infinity', 'search', 'book', 'project-diagram', 'heart', 'address-card', 'server', 'database', 'ship', 'code', 'chart-bar', 'sitemap', 'tasks', 'lock', 'sliders-h', 'user', 'users', 'compass', 'download', 'sync-alt'] + solid: ['globe', 'arrow-circle-right', 'pencil-alt', 'envelope', 'share', 'infinity', 'search', 'book', 'project-diagram', 'heart', 'address-card', 'server', 'database', 'ship', 'code', 'chart-bar', 'sitemap', 'tasks', 'lock', 'sliders-h', 'user', 'users', 'compass', 'download', 'sync-alt'] }, '_site/static/font/fontawesome/webfonts'); + eleventyConfig.addPlugin(i18n, { + translations, + fallbackLocales: { + '*': 'en-US' + } + }); + return { dir: { input: "src", diff --git a/docs/package-lock.json b/docs/package-lock.json index 9dcda80..9a11be7 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -16,7 +16,9 @@ "@quasibit/eleventy-plugin-schema": "^1.6.0", "@sindresorhus/slugify": "^2.1.0", "animate-sass": "^0.8.2", + "animate.css": "github:animate-css/animate.css", "eleventy-critical-css": "^1.1.0", + "eleventy-plugin-i18n": "^0.1.3", "md5": "^2.3.0" }, "devDependencies": { @@ -31,9 +33,9 @@ "autoprefixer": "^10.4.2", "bulma": "^0.9.3", "bulma-pricingtable": "^0.2.0", - "cssnano": "^5.0.16", + "cssnano": "^5.0.17", "eleventy-plugin-metagen": "^1.5.2", - "esbuild": "^0.14.18", + "esbuild": "^0.14.21", "eslint": "^8.8.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.25.4", @@ -1055,6 +1057,11 @@ "resolved": "https://registry.npmjs.org/animate-sass/-/animate-sass-0.8.2.tgz", "integrity": "sha512-6sZ34dusqb1HdZLNpJUNaZc0CuuLgFI8SqlyaxbSSKE9zqfoNtOeO3IpVUCqvaSm/oMNH1VlEAsJlppjg+idKQ==" }, + "node_modules/animate.css": { + "version": "4.1.1", + "resolved": "git+ssh://git@github.com/animate-css/animate.css.git#b07baf2a0785c2a3c649e39ae962de65a2012951", + "license": "Hippocratic-2.1" + }, "node_modules/ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -2760,12 +2767,12 @@ } }, "node_modules/cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.1.11", + "cssnano-preset-default": "^5.1.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -2781,40 +2788,40 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -2824,9 +2831,9 @@ } }, "node_modules/cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -3311,6 +3318,16 @@ "critical": "^4.0.1" } }, + "node_modules/eleventy-plugin-i18n": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/eleventy-plugin-i18n/-/eleventy-plugin-i18n-0.1.3.tgz", + "integrity": "sha512-O4FtB4t7g0T3ujH3ciFGCyJ/r1CHzp33WYrDqgnX6s6KZ4R63CkN/RndRKU36ahWWUmF0BrLjQ+IDwj2ntsicw==", + "dependencies": { + "chalk": "^4.1.1", + "lodash.get": "^4.4.2", + "templite": "^1.1.0" + } + }, "node_modules/eleventy-plugin-metagen": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/eleventy-plugin-metagen/-/eleventy-plugin-metagen-1.5.2.tgz", @@ -3667,9 +3684,9 @@ } }, "node_modules/esbuild": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.18.tgz", - "integrity": "sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz", + "integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==", "dev": true, "hasInstallScript": true, "bin": { @@ -3679,30 +3696,31 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-arm64": "0.14.18", - "esbuild-darwin-64": "0.14.18", - "esbuild-darwin-arm64": "0.14.18", - "esbuild-freebsd-64": "0.14.18", - "esbuild-freebsd-arm64": "0.14.18", - "esbuild-linux-32": "0.14.18", - "esbuild-linux-64": "0.14.18", - "esbuild-linux-arm": "0.14.18", - "esbuild-linux-arm64": "0.14.18", - "esbuild-linux-mips64le": "0.14.18", - "esbuild-linux-ppc64le": "0.14.18", - "esbuild-linux-s390x": "0.14.18", - "esbuild-netbsd-64": "0.14.18", - "esbuild-openbsd-64": "0.14.18", - "esbuild-sunos-64": "0.14.18", - "esbuild-windows-32": "0.14.18", - "esbuild-windows-64": "0.14.18", - "esbuild-windows-arm64": "0.14.18" + "esbuild-android-arm64": "0.14.21", + "esbuild-darwin-64": "0.14.21", + "esbuild-darwin-arm64": "0.14.21", + "esbuild-freebsd-64": "0.14.21", + "esbuild-freebsd-arm64": "0.14.21", + "esbuild-linux-32": "0.14.21", + "esbuild-linux-64": "0.14.21", + "esbuild-linux-arm": "0.14.21", + "esbuild-linux-arm64": "0.14.21", + "esbuild-linux-mips64le": "0.14.21", + "esbuild-linux-ppc64le": "0.14.21", + "esbuild-linux-riscv64": "0.14.21", + "esbuild-linux-s390x": "0.14.21", + "esbuild-netbsd-64": "0.14.21", + "esbuild-openbsd-64": "0.14.21", + "esbuild-sunos-64": "0.14.21", + "esbuild-windows-32": "0.14.21", + "esbuild-windows-64": "0.14.21", + "esbuild-windows-arm64": "0.14.21" } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz", - "integrity": "sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz", + "integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==", "cpu": [ "arm64" ], @@ -3716,9 +3734,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz", - "integrity": "sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz", + "integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==", "cpu": [ "x64" ], @@ -3732,9 +3750,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz", - "integrity": "sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz", + "integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==", "cpu": [ "arm64" ], @@ -3748,9 +3766,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz", - "integrity": "sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz", + "integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==", "cpu": [ "x64" ], @@ -3764,9 +3782,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz", - "integrity": "sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz", + "integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==", "cpu": [ "arm64" ], @@ -3780,9 +3798,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz", - "integrity": "sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz", + "integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==", "cpu": [ "ia32" ], @@ -3796,9 +3814,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz", - "integrity": "sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz", + "integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==", "cpu": [ "x64" ], @@ -3812,9 +3830,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz", - "integrity": "sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz", + "integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==", "cpu": [ "arm" ], @@ -3828,9 +3846,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz", - "integrity": "sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz", + "integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==", "cpu": [ "arm64" ], @@ -3844,9 +3862,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz", - "integrity": "sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz", + "integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==", "cpu": [ "mips64el" ], @@ -3860,9 +3878,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz", - "integrity": "sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz", + "integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==", "cpu": [ "ppc64" ], @@ -3875,10 +3893,26 @@ "node": ">=12" } }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz", + "integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz", - "integrity": "sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz", + "integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==", "cpu": [ "s390x" ], @@ -3892,9 +3926,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz", - "integrity": "sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz", + "integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==", "cpu": [ "x64" ], @@ -3908,9 +3942,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz", - "integrity": "sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz", + "integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==", "cpu": [ "x64" ], @@ -3924,9 +3958,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz", - "integrity": "sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz", + "integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==", "cpu": [ "x64" ], @@ -3940,9 +3974,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz", - "integrity": "sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz", + "integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==", "cpu": [ "ia32" ], @@ -3956,9 +3990,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz", - "integrity": "sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz", + "integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==", "cpu": [ "x64" ], @@ -3972,9 +4006,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz", - "integrity": "sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz", + "integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==", "cpu": [ "arm64" ], @@ -6583,6 +6617,11 @@ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -8072,13 +8111,13 @@ } }, "node_modules/postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" @@ -8269,9 +8308,9 @@ } }, "node_modules/postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8287,9 +8326,9 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8316,9 +8355,9 @@ } }, "node_modules/postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8328,9 +8367,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8340,9 +8379,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8352,9 +8391,9 @@ } }, "node_modules/postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8418,13 +8457,13 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" + "stylehacks": "^5.0.3" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8434,14 +8473,14 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", "dev": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-selector-parser": "^6.0.5" }, "engines": { @@ -8452,9 +8491,9 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8467,13 +8506,13 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", "dev": true, "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8484,13 +8523,13 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8501,9 +8540,9 @@ } }, "node_modules/postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" @@ -8535,9 +8574,9 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8547,9 +8586,9 @@ } }, "node_modules/postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8562,9 +8601,9 @@ } }, "node_modules/postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8577,9 +8616,9 @@ } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8592,9 +8631,9 @@ } }, "node_modules/postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8607,9 +8646,9 @@ } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8622,9 +8661,9 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8638,9 +8677,9 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", "dev": true, "dependencies": { "normalize-url": "^6.0.1", @@ -8654,9 +8693,9 @@ } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8669,12 +8708,12 @@ } }, "node_modules/postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", "dev": true, "dependencies": { - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8685,9 +8724,9 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8701,9 +8740,9 @@ } }, "node_modules/postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8736,9 +8775,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", @@ -8749,12 +8788,12 @@ } }, "node_modules/postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0", + "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "engines": { @@ -8814,9 +8853,9 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" @@ -10387,9 +10426,9 @@ } }, "node_modules/stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -10702,6 +10741,11 @@ "node": ">=8" } }, + "node_modules/templite": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/templite/-/templite-1.2.0.tgz", + "integrity": "sha512-O9BpPXF44a9Pg84Be6mjzlrqOtbP2I/B5PNLWu5hb1n9UQ1GTLsjdMg1z5ROCkF6NFXsO5LQfRXEpgTGrZ7Q0Q==" + }, "node_modules/tempy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", @@ -12423,6 +12467,10 @@ "resolved": "https://registry.npmjs.org/animate-sass/-/animate-sass-0.8.2.tgz", "integrity": "sha512-6sZ34dusqb1HdZLNpJUNaZc0CuuLgFI8SqlyaxbSSKE9zqfoNtOeO3IpVUCqvaSm/oMNH1VlEAsJlppjg+idKQ==" }, + "animate.css": { + "version": "git+ssh://git@github.com/animate-css/animate.css.git#b07baf2a0785c2a3c649e39ae962de65a2012951", + "from": "animate.css@git+https://github.com/animate-css/animate.css.git" + }, "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -13753,57 +13801,57 @@ "dev": true }, "cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.1.11", + "cssnano-preset-default": "^5.1.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" } }, "cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", "dev": true, "requires": {} }, @@ -14161,6 +14209,16 @@ "critical": "^4.0.1" } }, + "eleventy-plugin-i18n": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/eleventy-plugin-i18n/-/eleventy-plugin-i18n-0.1.3.tgz", + "integrity": "sha512-O4FtB4t7g0T3ujH3ciFGCyJ/r1CHzp33WYrDqgnX6s6KZ4R63CkN/RndRKU36ahWWUmF0BrLjQ+IDwj2ntsicw==", + "requires": { + "chalk": "^4.1.1", + "lodash.get": "^4.4.2", + "templite": "^1.1.0" + } + }, "eleventy-plugin-metagen": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/eleventy-plugin-metagen/-/eleventy-plugin-metagen-1.5.2.tgz", @@ -14462,154 +14520,162 @@ } }, "esbuild": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.18.tgz", - "integrity": "sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz", + "integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==", "dev": true, "requires": { - "esbuild-android-arm64": "0.14.18", - "esbuild-darwin-64": "0.14.18", - "esbuild-darwin-arm64": "0.14.18", - "esbuild-freebsd-64": "0.14.18", - "esbuild-freebsd-arm64": "0.14.18", - "esbuild-linux-32": "0.14.18", - "esbuild-linux-64": "0.14.18", - "esbuild-linux-arm": "0.14.18", - "esbuild-linux-arm64": "0.14.18", - "esbuild-linux-mips64le": "0.14.18", - "esbuild-linux-ppc64le": "0.14.18", - "esbuild-linux-s390x": "0.14.18", - "esbuild-netbsd-64": "0.14.18", - "esbuild-openbsd-64": "0.14.18", - "esbuild-sunos-64": "0.14.18", - "esbuild-windows-32": "0.14.18", - "esbuild-windows-64": "0.14.18", - "esbuild-windows-arm64": "0.14.18" + "esbuild-android-arm64": "0.14.21", + "esbuild-darwin-64": "0.14.21", + "esbuild-darwin-arm64": "0.14.21", + "esbuild-freebsd-64": "0.14.21", + "esbuild-freebsd-arm64": "0.14.21", + "esbuild-linux-32": "0.14.21", + "esbuild-linux-64": "0.14.21", + "esbuild-linux-arm": "0.14.21", + "esbuild-linux-arm64": "0.14.21", + "esbuild-linux-mips64le": "0.14.21", + "esbuild-linux-ppc64le": "0.14.21", + "esbuild-linux-riscv64": "0.14.21", + "esbuild-linux-s390x": "0.14.21", + "esbuild-netbsd-64": "0.14.21", + "esbuild-openbsd-64": "0.14.21", + "esbuild-sunos-64": "0.14.21", + "esbuild-windows-32": "0.14.21", + "esbuild-windows-64": "0.14.21", + "esbuild-windows-arm64": "0.14.21" } }, "esbuild-android-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz", - "integrity": "sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz", + "integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz", - "integrity": "sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz", + "integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz", - "integrity": "sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz", + "integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz", - "integrity": "sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz", + "integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz", - "integrity": "sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz", + "integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz", - "integrity": "sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz", + "integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz", - "integrity": "sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz", + "integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz", - "integrity": "sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz", + "integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz", - "integrity": "sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz", + "integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz", - "integrity": "sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz", + "integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz", - "integrity": "sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz", + "integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz", + "integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz", - "integrity": "sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz", + "integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz", - "integrity": "sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz", + "integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz", - "integrity": "sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz", + "integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz", - "integrity": "sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz", + "integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz", - "integrity": "sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz", + "integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz", - "integrity": "sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz", + "integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz", - "integrity": "sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==", + "version": "0.14.21", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz", + "integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==", "dev": true, "optional": true }, @@ -16575,6 +16641,11 @@ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -17720,13 +17791,13 @@ } }, "postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, "postcss-cli": { @@ -17860,9 +17931,9 @@ } }, "postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -17872,9 +17943,9 @@ } }, "postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -17892,30 +17963,30 @@ } }, "postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", "dev": true, "requires": {} }, "postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", "dev": true, "requires": {} }, @@ -17949,62 +18020,62 @@ } }, "postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" + "stylehacks": "^5.0.3" } }, "postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-selector-parser": "^6.0.5" } }, "postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", "dev": true, "requires": { "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", "dev": true, "requires": { "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" @@ -18020,61 +18091,61 @@ } }, "postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -18082,9 +18153,9 @@ } }, "postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", "dev": true, "requires": { "normalize-url": "^6.0.1", @@ -18092,28 +18163,28 @@ } }, "postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", "dev": true, "requires": { - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -18121,9 +18192,9 @@ } }, "postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -18140,9 +18211,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", @@ -18150,12 +18221,12 @@ } }, "postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0", + "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "dependencies": { @@ -18199,9 +18270,9 @@ } }, "postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" @@ -19464,9 +19535,9 @@ "dev": true }, "stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -19725,6 +19796,11 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, + "templite": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/templite/-/templite-1.2.0.tgz", + "integrity": "sha512-O9BpPXF44a9Pg84Be6mjzlrqOtbP2I/B5PNLWu5hb1n9UQ1GTLsjdMg1z5ROCkF6NFXsO5LQfRXEpgTGrZ7Q0Q==" + }, "tempy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", diff --git a/docs/package.json b/docs/package.json index fb2eb18..958e03c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,7 +20,9 @@ "@quasibit/eleventy-plugin-schema": "^1.6.0", "@sindresorhus/slugify": "^2.1.0", "animate-sass": "^0.8.2", + "animate.css": "github:animate-css/animate.css", "eleventy-critical-css": "^1.1.0", + "eleventy-plugin-i18n": "^0.1.3", "md5": "^2.3.0" }, "devDependencies": { @@ -35,9 +37,9 @@ "autoprefixer": "^10.4.2", "bulma": "^0.9.3", "bulma-pricingtable": "^0.2.0", - "cssnano": "^5.0.16", + "cssnano": "^5.0.17", "eleventy-plugin-metagen": "^1.5.2", - "esbuild": "^0.14.18", + "esbuild": "^0.14.21", "eslint": "^8.8.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.25.4", diff --git a/docs/src/_data/i18n/index.js b/docs/src/_data/i18n/index.js new file mode 100644 index 0000000..61e0d3e --- /dev/null +++ b/docs/src/_data/i18n/index.js @@ -0,0 +1,98 @@ +module.exports = { + hello: { + 'en-US': 'Hello', + 'ru': 'Hola' + }, + title: { + 'en-US': "HTML Template Linter and Formatter", + ru: "Программа проверки и форматирования шаблонов HTML" + }, + lang_name: { + 'en-US': "English", + ru: "Русский" + }, + lang_code: { + 'en-US': "en", + ru: "ru" + }, + lang_code_url: { + 'en-US': "", + ru: "/ru" + }, + getting_started: { + 'en-US': "Getting Started", + ru: "Начало Работы" + }, + formatter: { + 'en-US': "Formatter", + ru: "Форматер" + }, + linter: { + 'en-US': "Linter", + ru: "Линтер" + }, + configuration: { + 'en-US': "configuration", + ru: "Конфигурация" + }, + integrations: { + 'en-US': "Integrations", + ru: "Интеграции" + }, + best_practices: { + 'en-US': "Best Practices", + ru: "Лучшие Практики" + }, + description: { + 'en-US': "Find common syntax errors, reformat to make your HTML templates shine! Supports django, jinja, nunjucks, twig, handlebars, mustache, golang, and more!", + ru: "Найдите распространенные синтаксические ошибки, переформатируйте, чтобы ваши HTML-шаблоны сияли! Поддерживает django, jinja, nunjucks, twig, handlebars, mustache, golang и многое другое!" + }, + updated: { + 'en-US': "Updated", + ru: "Обновлен" + }, + changelog: { + 'en-US': "Changelog", + ru: "Изменения" + }, + documentation: { + 'en-US': "Documentation", + ru: "Документация" + }, + index_title: { + 'en-US': "Lint & Format HTML Templates", + ru: "Проверка и форматирование html-шаблонов" + }, + index_description: { + 'en-US': "Once upon a time all the other programming languages had a formatter and linter. Css, javascript, python, the c suite, typescript, ruby, php, go, swift, and you know the others. The cool kids on the block.
HTML templates were left out there on their own, in the cold, unformatted and unlinted :( The dirty corner in your repository. Something had to change.
Welcome djLint, the free cleaning service for html templates!
And the html templates lived happily ever after.

", + ru: "Когда-то давно все другие языки программирования имели форматтер и линтер. Css, javascript, python, c suite, typescript, ruby, php, go, swift, и вы знаете другие. Крутые ребята в квартале.
HTML-шаблоны остались там сами по себе, на холоде, неформатированные и нелинкованные :( Грязный угол в вашем репозитории. Что-то должно было измениться.
Добро пожаловать djLint, бесплатный сервис очистки html-шаблонов!
И html-шаблоны жили долго и счастливо.

" + }, + index_fav_lang: { + 'en-US': "find your favorite template language!", + ru: "найдите свой любимый язык шаблонов!" + }, + index_show_format: { + 'en-US': "Show your format!", + ru: "Покажите свой формат!" + }, + index_watch: { + 'en-US': "Watch it run!", + ru: "Смотрите, как он идет!" + }, + index_add_badge: { + 'en-US': "Add a badge to your projects", + ru: "Добавьте значок к своим проектам" + }, + index_looks_like: { + 'en-US': "Looks like this:", + ru: "Выглядит вот так:" + }, + contributing:{ + 'en-US': "Contributing", + ru: "Вклад" + }, + contributing_message: { + 'en-US': 'Contributions are welcome. Send a pr with a new feature, or checkout the issue list and help where you can.', + ru: 'Вклад в работу сайта приветствуется. Пришлите письмо с новой функцией или ознакомьтесь со списком проблем и помогите, чем можете.' + } +}; \ No newline at end of file diff --git a/docs/src/_includes/docs_layout.njk b/docs/src/_includes/docs_layout.njk index 5d14703..4c698a3 100644 --- a/docs/src/_includes/docs_layout.njk +++ b/docs/src/_includes/docs_layout.njk @@ -7,36 +7,19 @@ layout: layout.njk
diff --git a/docs/src/_includes/foot.njk b/docs/src/_includes/foot.njk index 7f40f68..ea52ec3 100644 --- a/docs/src/_includes/foot.njk +++ b/docs/src/_includes/foot.njk @@ -6,13 +6,13 @@ {% image "./src/static/img/icon.png", "djlint icon", "(min-width:100px) 50vw, 100vw" %}

- {{ site.description }} + {{ "description" | i18n }}

diff --git a/docs/src/_includes/index.njk b/docs/src/_includes/index.njk new file mode 100644 index 0000000..4b53dfa --- /dev/null +++ b/docs/src/_includes/index.njk @@ -0,0 +1,169 @@ +--- +layout: layout.njk +date: Last Modified + +--- +{% block body %} +
+
+

dj Lint

+ +

+ {{ "index_title" |i18n }}

+ +

{{ "index_description" | i18n | safe }} + +

{{ "index_fav_lang" | i18n }}

+ +
+
+ +
+

{{ "index_watch" | i18n }}

+ +
+ +
+ +

{{ "index_show_format" | i18n }}

+
+
+ + +{{ "index_add_badge" | i18n }} readme.md: + +{% highlight "md" %} +[![Code style: djLint](https://img.shields.io/badge/html%20style-djLint-blue.svg)](https://github.com/Riverside-Healthcare/djlint) +{% endhighlight %} + +{{ "index_add_badge" | i18n }} readme.rst: + +{% highlight "md" %} + + .. image:: https://img.shields.io/badge/html%20style-djLint-blue.svg + :target: https://github.com/Riverside-Healthcare/djlint +{% endhighlight %} + +

{{ "index_looks_like" | i18n }}

+ +
https://github.com/Riverside-Healthcare/djlint
+ +
+
+

{{ "contributing" | i18n }}

+

+{{ "contributing_message" | i18n | safe }}

+
+ + + + +{% endblock body %} diff --git a/docs/src/_includes/layout.njk b/docs/src/_includes/layout.njk index c90e031..09257ca 100644 --- a/docs/src/_includes/layout.njk +++ b/docs/src/_includes/layout.njk @@ -1,10 +1,10 @@ - + {% block meta %} {% metagen - title=(title or site.title) + " | " + site.name, - desc=desc or description or site.description, + title=(title or "title" | i18n or site.title) + " | " + site.name, + desc=desc or description or "description" | i18n or site.description, url=site.url + page.url, img=image or site.url + site.image, img_alt=alt or "djlint logo", @@ -31,6 +31,11 @@ + + + + + - - - diff --git a/docs/src/_utils/scripts.11ty.js b/docs/src/_utils/scripts.11ty.js index bd14f79..809b014 100644 --- a/docs/src/_utils/scripts.11ty.js +++ b/docs/src/_utils/scripts.11ty.js @@ -13,9 +13,8 @@ module.exports = class { async render() { await esbuild.build({ - entryPoints: ['src/static/js/search.js'], + entryPoints: ['src/static/js/hamburger.js'], inject: [ - './src/static/js/hamburger.js', './src/static/js/animate.js', './src/static/js/modal.js', ], diff --git a/docs/src/docs/changelog.md b/docs/src/docs/changelog.md index 8ef792f..0a41c06 100644 --- a/docs/src/docs/changelog.md +++ b/docs/src/docs/changelog.md @@ -19,7 +19,7 @@ keywords: template linter, template formatter, djLint, HTML, templates, formatte ::: content -- Bug fixes [#173](https://github.com/Riverside-Healthcare/djLint/issues/173), #174(https://github.com/Riverside-Healthcare/djLint/issues/174) +- Bug fixes [#173](https://github.com/Riverside-Healthcare/djLint/issues/173), [#174](https://github.com/Riverside-Healthcare/djLint/issues/174) - Dropped Py3.6 from `pyproject.toml`. ::: @@ -197,7 +197,7 @@ keywords: template linter, template formatter, djLint, HTML, templates, formatte - Added formatting for template conditions inside attributes - Added srcset as possible url location in linter rules - Speed up formatting -- Special thanks to `jayvdb `\_ +- Special thanks to [jayvdb](https://github.com/jayvdb) ::: ## 0.5.3 @@ -243,14 +243,14 @@ keywords: template linter, template formatter, djLint, HTML, templates, formatte ::: content -- Fixed bug `#35 `\_ +- Fixed bug [#35](https://github.com/Riverside-Healthcare/djLint/issues/35) ::: ## 0.4.8 ::: content -- Fixed bug `#34 `\_ +- Fixed bug [#34](https://github.com/Riverside-Healthcare/djLint/issues/34) ::: ## 0.4.7 @@ -264,7 +264,7 @@ keywords: template linter, template formatter, djLint, HTML, templates, formatte ::: content -- Fixed bug `#31 `\_ +- Fixed bug [#31](https://github.com/Riverside-Healthcare/djLint/issues/31) ::: ## 0.4.5 diff --git a/docs/src/docs/formatter.md b/docs/src/docs/formatter.md index cfb75d1..cd53bf9 100644 --- a/docs/src/docs/formatter.md +++ b/docs/src/docs/formatter.md @@ -70,7 +70,7 @@ or as a javascript style comment - {{ /* djlint:off */ }} {{ /* djlint:on */ }} ``` -or as a golan style comment - +or as a golang style comment - ```html {{!-- djlint:off --}} {{!-- djlint:on --}} diff --git a/docs/src/docs/integrations.md b/docs/src/docs/integrations.md index 5f15426..a94c536 100644 --- a/docs/src/docs/integrations.md +++ b/docs/src/docs/integrations.md @@ -28,7 +28,7 @@ The repo provides multiple pre-configured hooks for specific djLint profiles (it This will look for files matching `*.tmpl` and set `--profile=golang`. ::: -Note that these predefined hooks are sometimes too conservative in the inputs they accept (your templates may be using a different extension) so pre-commit explicitly allows you to override any of these pre-defined options. See the `pre-commit docs `\_ for additional configuration +Note that these predefined hooks are sometimes too conservative in the inputs they accept (your templates may be using a different extension) so pre-commit explicitly allows you to override any of these pre-defined options. See the [pre-commit docs](https://pre-commit.com/#pre-commit-configyaml---hooks) for additional configuration ### Default Django example @@ -64,7 +64,7 @@ djLint can be used as a SublimeText Linter plugin. It can be installed via [pack 3. Install SublimeLinter-contrib-djlint ::: -Ensure djLint is installed in your global python, or on yout `PATH`. +Ensure djLint is installed in your global python, or on your `PATH`. ## Visual Studio Code diff --git a/docs/src/index.njk b/docs/src/index.njk index 9add7c3..a25c2ed 100644 --- a/docs/src/index.njk +++ b/docs/src/index.njk @@ -1,171 +1,4 @@ --- -layout: layout.njk +layout: index.njk date: Last Modified - ---- -{% block body %} -
-
-

dj Lint

- -

- Lint & Format HTML Templates

- -

Once upon a time all the other programming languages had a formatter and linter. Css, javascript, python, the c suite, typescript, ruby, php, go, swift, and you know the others. The cool kids on the block.
-HTML templates were left out there on their own, in the cold, unformatted and unlinted :( The dirty corner in your repository. Something had to change.
-Welcome djLint, the free cleaning service for html templates!
And the html templates lived happily ever after.

- -

find your favorite template language!

- -
-
- -
-

Watch it run!

- -
- -
- -

Show your format!

-
-
- - -Add a badge to your projects readme.md: - -{% highlight "md" %} -[![Code style: djLint](https://img.shields.io/badge/html%20style-djLint-blue.svg)](https://github.com/Riverside-Healthcare/djlint) -{% endhighlight %} - -Add a badge to your readme.rst: - -{% highlight "md" %} - - .. image:: https://img.shields.io/badge/html%20style-djLint-blue.svg - :target: https://github.com/Riverside-Healthcare/djlint -{% endhighlight %} - -

Looks like this:

- -
https://github.com/Riverside-Healthcare/djlint
- -
-
-

Contributing

-

-Contributions are welcome. Send a pr with a new feature, or checkout the issue list and help where you can.

-
- - - - -{% endblock body %} +--- \ No newline at end of file diff --git a/docs/src/ru/docs/best-practices.md b/docs/src/ru/docs/best-practices.md new file mode 100644 index 0000000..0edad95 --- /dev/null +++ b/docs/src/ru/docs/best-practices.md @@ -0,0 +1,75 @@ +--- +description: Лучшие практики использования djLint для форматирования HTML-шаблонов. +title: Лучшие практики +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование +--- + +# {{ "best_practices" | i18n }} + +## Пробелы вокруг условных атрибутов + +Иногда условия используются для добавления классов в тег. djLint удаляет пробелы внутри условных операторов. + +Этот шаблон рекомендуется: + +{% raw %} + +```html +
содержание
+ ^ место здесь +``` + +{% endraw %} + +Эта схема не рекомендуется: + +{% raw %} + +```html +
содержание
+ ^ место здесь +``` + +{% endraw %} + +## `format_attribute_template_tags` и беспространственные условные атрибуты + +Если `format_attribute_template_tags` опция включена, условные атрибуты должны использовать теги без пробелов, например {% raw %}`{% if a -%}`{% endraw %} в nunjuck и jinja, чтобы удалить пробелы внутри. + +djLint будет форматировать длинные атрибуты на несколько строк, и пробелы, сохраненные внутри атрибутов, могут сломать ваш код. + +Рекомендуется использовать этот шаблон: + +{% raw %} + +```html + + ^ ^ ^ ^ -- беспространственные метки +``` + +{% endraw %} + +Эта схема не рекомендуется: + +{% raw %} + +```html + +``` + +{% endraw %} + +После форматирования это может выглядеть следующим образом: + +{% raw %} + +```html + +``` + +{% endraw %} diff --git a/docs/src/ru/docs/changelog.md b/docs/src/ru/docs/changelog.md new file mode 100644 index 0000000..b8ce14c --- /dev/null +++ b/docs/src/ru/docs/changelog.md @@ -0,0 +1,408 @@ +--- +description: djLint Изменения. Ознакомьтесь с обновлениями последних релизов и узнайте, какие функции вы можете ожидать при следующем обновлении. +title: Изменения +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, Изменения +--- + +{% raw %} + +# Изменения + +## 0.7.4 + +::: content + +- Исправления ошибок [#177](https://github.com/Riverside-Healthcare/djLint/issues/177) + ::: + +## 0.7.3 + +::: content + +- Исправления ошибок [#173](https://github.com/Riverside-Healthcare/djLint/issues/173), [#174](https://github.com/Riverside-Healthcare/djLint/issues/174) +- Упал Py3.6 с сайта `pyproject.toml`. + ::: + +## 0.7.2 + +::: content + +- Исправления ошибок [#167](https://github.com/Riverside-Healthcare/djLint/issues/167), [#166](https://github.com/Riverside-Healthcare/djLint/issues/166), [#171](https://github.com/Riverside-Healthcare/djLint/issues/171), [#169](https://github.com/Riverside-Healthcare/djLint/issues/169) + ::: + +## 0.7.1 + +::: content + +- Исправления ошибок [#166](https://github.com/Riverside-Healthcare/djLint/issues/166) + ::: + +## 0.7.0 + +::: content + +- Добавлена настройка для пользовательских HTML-тегов +- Исправления ошибок + ::: + +## 0.6.9 + +::: content + +- Добавлены профили HTML и Angular +- Разрешены некоторые сущности в правиле #H023 +- Исправления ошибок + ::: + +## 0.6.8 + +::: content + +- Исправления ошибок +- Обновленные документы + ::: + +## 0.6.7 + +::: content + +- Добавлена опция конфигурации `format_attribute_template_tags` как опция для форматирования тегов шаблонов внутри атрибутов +- Добавлена опция конфигурации `linter_output_format` для настройки порядка переменных сообщений линтера +- Добавлены правила H030 и H031 для проверки мета-тегов + ::: + +## 0.6.6 + +::: content + +- Большие исправления + ::: + +## 0.6.5 + +::: content + +- Обновлены пути вывода, чтобы они были относительными к корню проекта +- Исправления ошибок + ::: + +## 0.6.4 + +::: content + +- Исправления ошибок + ::: + +## 0.6.3 + +::: content + +- Добавлена поддержка тега django `blocktrans`. +- Исправления ошибок + ::: + +## 0.6.2 + +::: content + +- Исправления ошибок + ::: + +## 0.6.1 + +::: content + +- Исправления ошибок +- Сделать правило T028 более строгим с более четким посланием + ::: + +## 0.6.0 + +::: content + +- Добавлено правило T027 для проверки наличия незакрытых тегов в синтаксисе шаблона +- Добавлено правило T028 для проверки отсутствия пробельных тегов в атрибутах +- Добавлено правило H029 для проверки метода формы в нижнем регистре +- Игнорируются теги djagno blocktranslate, которые не имеют "trimmed" от форматера +- Исправления ошибок + ::: + +## 0.5.9a + +::: content + +- Добавлена поддержка тестирования для python 3.10 +- Добавлен крючок предварительного коммита + ::: + +## 0.5.9 + +::: content + +- Добавлена опция `--use-gitignore` для расширения исключений +- Изменено сопоставление исключений по умолчанию +- Исправлены пути исключения окон +- Исправлено форматирование тегов `{%...%}` в атрибутах +- Исправлено форматирование циклов for и вложенных условий в атрибутах + ::: + +## 0.5.8 + +::: content + +- Добавлена опция require_pragma +- Обновлен DJ018 для перехвата `data-src` и `action` на входах +- Исправлен синтаксис игнорирования строк +- Добавлена опция `--lint` в качестве заполнителя для использования по умолчанию +- Исправления ошибок + ::: + +## 0.5.7 + +::: content + +- Исправления ошибок + ::: + +## 0.5.6 + +::: content + +- Добавлено правило H026 для поиска пустых тегов id и class +- Исправления ошибок + ::: + +## 0.5.5 + +::: content + +- Консолидированные настройки и сокращенный код +- Исправления ошибок + ::: + +## 0.5.4 + +::: content + +- Добавлено правило H020 для поиска пустых пар тегов +- Добавлено правило H021 для поиска инлайн-стилей +- Добавлено правило H022 для поиска http-ссылок +- Добавлено правило H023 для поиска ссылок на сущности +- Добавлено правило H024 для поиска типов в скриптах и стилях +- Добавлено правило H025 для проверки сиротских тегов. Благодаря https://stackoverflow.com/a/1736801/10265880 +- Улучшено форматирование атрибутов +- Обновлена опция `blank_line_after_tag` для добавления новой строки независимо от местоположения +- Исправлено форматирование тегов django `trans` +- Добавлено форматирование для встроенных стилей +- Добавлено форматирование для условий шаблона внутри атрибутов +- Добавлен srcset как возможное местоположение url в правилах линтера +- Ускорено форматирование +- Особая благодарность [jayvdb](https://github.com/jayvdb>) + ::: + +## 0.5.3 + +::: content + +- Измените stdout для опций `--reformat/check`, чтобы выводить новый html только при использовании stdin в качестве входа + ::: + +## 0.5.2 + +::: content + +- Разделите требование `alt` с H006 на H013 +- Добавлен необязательный файл пользовательских правил +- Добавлен `golang` в качестве опции профиля +- Исправлено форматирование игнорируемых блоков, содержащих встроенные комментарии +- Добавлен текст по умолчанию для опций `--indent` и `-e` +- Обновлены правила url для принятия # +- Исправлена кодировка файлов в ОС Windows +- Исправлен регекс для однострочных тегов шаблонов +- Исправление `blank_line_after_tag` для тегов с пробелами в начале строки + + ::: + +## 0.5.1 + +::: content + +- Добавлено правило H019 +- Исправлены ошибки в DJ018 и H012 + ::: + +## 0.5.0 + +::: content + +- Исправлено несколько ошибок регекс-сопоставления в правилах linter +- Запрещено возвращать ошибки в игнорируемых блоках +- Добавлена возможность игнорировать блок кода из linter/formatter с тегами `{% djlint:off %}...{% djlint:on %}`. + ::: + +## 0.4.9 + +::: content + +- Исправлена ошибка [#35](https://github.com/Riverside-Healthcare/djLint/issues/35) + ::: + +## 0.4.8 + +::: content + +- Исправлена ошибка [#34](https://github.com/Riverside-Healthcare/djLint/issues/34) + ::: + +## 0.4.7 + +::: content + +- Перемещение тега `source` в однострочные теги + ::: + +## 0.4.6 + +::: content + +- Исправлена ошибка [#31](https://github.com/Riverside-Healthcare/djLint/issues/31) + ::: + +## 0.4.5 + +::: content + +- Добавлены лучшие практики в документацию +- Добавлена опция `--profile` для установки правил linter/formatter по умолчанию +- Добавлены правила linter для шаблонов jinja url + ::: + +## 0.4.4 + +::: content + +- Измените конфигурацию отступа со строки на int. `--indent 3` + ::: + +## 0.4.3 + +::: content + +- Добавлена опция cli для интервала между отступами. `--indent=" "`. + ::: + +## 0.4.2 + +::: content + +- Добавлена поддержка дополнительных пробелов после тегов с помощью опции `blank_line_after_tag`. + ::: + +## 0.4.1 + +::: content + +- Добавлена поддержка одновременной обработки нескольких файлов или папок + ::: + +## 0.4.0 + +::: content + +- Исправлено форматирование тегов django `{# ... #}` тегов +- Добавлена поддержка отступов для тегов figcaption, details и summary +- Добавлена поддержка переопределения или расширения списка исключенных путей в `pyproject.toml`. + ::: + +## 0.3.9 + +::: content + +- Обновленная обработка атрибутов + ::: + +## 0.3.8 + +::: content + +- Добавлена поддержка stdin + ::: + +## 0.3.7 + +::: content + +- Исправлено форматирование тегов `small`, `dt` и `dd`. + ::: + +## 0.3.6 + +::: content + +- Добавлена поддержка форматера для открывающих блоков Nunjucks `{%-` + ::: + +## 0.3.5 + +::: content + +- Добавлена поддержка большего количества блоков Django +- Добавлена поддержка пользовательских блоков +- Добавлена поддержка конфигурации в `pyproject.toml` + ::: + +## 0.3.4 + +::: content + +- Исправлен тег Nunjucks без пробелов в формате `-%}` + ::: + +## 0.3.3 + +::: content + +- Позволяет коротким тегам `div` быть однострочными + ::: + +## 0.3.2 + +::: content + +- Исправлено форматирование комментариев в Django +- Игнорирование форматирования текстовой области + ::: + +## 0.3.1 + +::: content + +- Обновлен регекс форматирования атрибутов +- Обновлено правило притирки W010 + ::: + +## 0.3.0 + +::: content + +- Изменен код выхода на 1 в случае изменения форматирования +- Добавлена поддержка тегов `asset` в Jinja + ::: + +## 0.2.9 + +::: content + +- Обновленный регекс W018 +- Удалены дублирующиеся сообщения lint +- Обновлен E001 для Handlebars + ::: + +## 0.2.8 + +::: content + +- Исправлена ошибка прогресс-бара для старой версии Click + ::: + +{% endraw %} diff --git a/docs/src/ru/docs/configuration.md b/docs/src/ru/docs/configuration.md new file mode 100644 index 0000000..6509a3d --- /dev/null +++ b/docs/src/ru/docs/configuration.md @@ -0,0 +1,205 @@ +--- +description: Конфигурация djLint для линтинга и форматирования HTML-шаблонов. Воспользуйтесь многочисленными возможностями форматирования. +title: Конфигурация +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, configuration +--- + +# {{ "configuration" | i18n }} + +Конфигурация выполняется через файл `pyproject.toml` вашего проекта. Арги командной строки всегда будут переопределять любые настройки в `pyproject.toml`. + +```ini +[tool.djlint] + +``` + +## ignore + +Игнорируйте коды линтера. + +Использование: + +```ini +ignore="H014,H015" +``` + +## extension + +Используется для поиска файлов только с определенным расширением. + +Использование: + +```ini +extension="html.dj" +``` + +## custom_blocks + +Используется для отступов в пользовательских блоках кода. Например, {% raw %}`{% toc %}...{% endtoc %}`{% endraw %} + +Использование: + +```ini +custom_blocks="toc,example" +``` + +## custom_html + +Используется для отступа пользовательских HTML-тегов. Например, `` или `` или ``. + +Использование: + +```ini +custom_html="mjml,simple-greeting,mj-\\w+" +``` + +## indent + +Используется для изменения отступа кода. По умолчанию - 4 (четыре пробела). + +Использование: + +```ini +indent=3 +``` + +## exclude + +Переопределите пути исключения по умолчанию. + +Использование: + +```ini +exclude=".venv,venv,.tox,.eggs,..." +``` + +## extend_exclude + +Добавьте дополнительные пути к исключаемым по умолчанию. + +Использование: + +```ini +extend_exclude=".custom" +``` + +## blank_line_after_tag + +Добавьте дополнительную пустую строку после групп тегов {% raw %}`{% ... %}`{% endraw %}. + +Использование: + +```ini +blank_line_after_tag="load,extends,include" +``` + +## profile + +Установите профиль по умолчанию для языка шаблона. Профиль отключает правила линтера, которые не применимы к языку шаблона, а также может изменить переформатирование. Например, в `handlebars` нет пробелов внутри тегов {% raw %}`{{#if}}`{% endraw %}. + +Параметры: + +:::content + +- html +- django +- jinja +- nunjucks (для nunjucks и twig) +- handlebars (для handlebars и mustache) +- golang +- angular + ::: + +Использование: + +```ini +profile="django" +``` + +## require_pragma + +Форматировать или линтовать только те файлы, которые начинаются с комментария, содержащего только текст 'djlint:on'. Комментарий может быть HTML-комментарием или комментарием на языке шаблонов, определенном настройкой профиля. Если профиль не указан, принимается комментарий на любом из языков шаблонов. + +Использование: + +```ini +require_pragma=true +``` + +{% raw %} + +```html + +или {# djlint:on #} или {% comment %} djlint:on {% endcomment %} или {{ /* djlint:on */ }} или {{!-- djlint:on --}} +``` + +{% endraw %} + +## max_line_length + +Форматировщик попытается разместить некоторые html и шаблонные теги на одной строке вместо того, чтобы обернуть их, если длина строки не превышает этого значения. + +Использование: + +```ini +max_line_length=120 +``` + +## max_attribute_length + +Форматировщик попытается обернуть атрибуты тега, если длина атрибута превышает это значение. + +Использование: + +```ini +max_attribute_length=10 +``` + +## use_gitignore + +Добавьте исключения .gitignore к исключениям по умолчанию. + +Использование: + +```ini +use_gitignore=True +``` + +## format_attribute_template_tags + +Форматировщик будет пытаться форматировать синтаксис шаблона внутри атрибутов тега. По умолчанию отключен. + +Использование: + +```ini +format_attribute_template_tags=true +``` + +Например, если эта опция включена, то допустимым будет следующий html: + +```html + +``` + +## linter_output_format + +Настройка порядка вывода сообщения. По умолчанию="{code} {line} {message} {match}". Если `{filename}` не включено в сообщение, то вывод будет сгруппирован по файлам и к каждой группе будет автоматически добавлен заголовок. + +Использование: + +```ini +# необязательные переменные: +# {filename} +# {line} +# {code} +# {message} +# {match} + +linter_output_format="{filename}:{line}: {code} {message} {match}" +``` diff --git a/docs/src/ru/docs/docs.json b/docs/src/ru/docs/docs.json new file mode 100644 index 0000000..9b6b75e --- /dev/null +++ b/docs/src/ru/docs/docs.json @@ -0,0 +1,3 @@ +{ + "layout": "docs_layout.njk" +} diff --git a/docs/src/ru/docs/formatter.md b/docs/src/ru/docs/formatter.md new file mode 100644 index 0000000..103c8f9 --- /dev/null +++ b/docs/src/ru/docs/formatter.md @@ -0,0 +1,119 @@ +--- +description: Форматируйте свои HTML-шаблоны с помощью djLint. Быстрый и точный вывод сделает ваши шаблоны блестящими. +title: Использование форматера +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, Использование форматера +--- + +# Использование форматера + +Форматировщик djLint возьмет неряшливые html-шаблоны и сделает форматирование последовательным и легким! + +Форматировщик - это бета-версия инструмента. Прежде чем вносить изменения, проверьте результат. + +Чтобы просмотреть, что может измениться в форматировании, выполните следующие действия: + +```bash +djlint . --check +``` + +Для форматирования кода и обновления файлов выполните: + +```bash +djlint . --reformat +``` + + + +{% admonition + "note", + "Note", + "Переформатирование не работает с длинными json/html, встроенными в данные атрибутов." +%} + +{% admonition + "note", + "Note", + "djLint не является парсером html или синтаксическим валидатором." +%} + +## Игнорирование кодекса + +Код можно игнорировать, обернув его в теги `djlint`: + +{% raw %} + +Для простого старого html - + +```html + +<плохой html, который следует игнорировать> +``` + +или как комментарий - + +```html +{# djlint:off #} <плохой html, который следует игнорировать> {# djlint:on #} +``` + +или в виде длинного комментария + +```html +{% comment %} djlint:off {% endcomment %} +<плохой html, который следует игнорировать> {% comment %} djlint:on {% endcomment %} +``` + +или как комментарий в стиле javascript - + +```html +{{ /* djlint:off */ }} <плохой html, который следует игнорировать> {{ /* djlint:on */ }} +``` + +или как комментарий в стиле golang - + +```html +{{!-- djlint:off --}} <плохой html, который следует игнорировать> {{!-- djlint:on --}} +``` + +{% endraw %} + +## Вот пример! + +### До + +Вот кусок HTML, который отчаянно нуждается во внимании - +{% raw %} + +``` +{% load admin_list %}{% load i18n %}

{% if pagination_required %}{% for i in page_range %}{% paginator_number cl i %}{% endfor %}{% endif %}{{ cl.result_count }}{% if cl.result_count == 1 %}{{ cl.opts.verbose_name }} {% else %}{{ cl.opts.verbose_name_plural }} {% endif %}{% if show_all_url %} {% translate 'Show all' %} {% endif %}{% if cl.formset and cl.result_count %}{% endif %}

+``` + +{% endraw %} + +### После + +Теперь он выглядит немного лучше... мы можем его прочитать :) + +{% raw %} + +```html +{% load admin_list %} {% load i18n %} +

+ {% if pagination_required %} {% for i in page_range %} {% paginator_number cl + i %} {% endfor %} {% endif %} {{ cl.result_count }} {% if cl.result_count == 1 + %} {{ cl.opts.verbose_name }} {% else %} {{ cl.opts.verbose_name_plural }} {% + endif %} {% if show_all_url %} + {% translate 'Show all' %} + {% endif %} {% if cl.formset and cl.result_count %} + + {% endif %} +

+``` + +{% endraw %} diff --git a/docs/src/ru/docs/getting-started.md b/docs/src/ru/docs/getting-started.md new file mode 100644 index 0000000..956f53b --- /dev/null +++ b/docs/src/ru/docs/getting-started.md @@ -0,0 +1,81 @@ +--- +description: Начало работы с djLint для линтинга и форматирования HTML-шаблонов. Воспользуйтесь простым интерфейсом cli и множеством опций форматирования. +title: Начало работы +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование +--- + +# {{ "getting_started" | i18n }} + +## Установка от [Pypi](https://pypi.org/project/djlint/) + +djLint собирается с [Python 3.7+](https://python.org), он может быть установлен простым запуском: + +```bash +pip install djlint +``` + +## Использование CLI + +djLint - это приложение командной строки. Для расширенной настройки смотрите `конфигурация`. + +```bash +Usage: python -m djlint [OPTIONS] SRC ... + + djLint · lint and reformat HTML templates. + +Options: + --version Show the version and exit. + -e, --extension TEXT File extension to check [default: html] + -i, --ignore TEXT Codes to ignore. ex: "H014,H017" + --reformat Reformat the file(s). + --check Check formatting on the file(s). + --indent INTEGER Indent spacing. [default: 4] + --quiet Do not print diff when reformatting. + --profile TEXT Enable defaults by template language. ops: django, + jinja, nunjucks, handlebars, golang + --require-pragma Only format or lint files that starts with a comment + with the text 'djlint:on' + --lint Lint for common issues. [default option] + --use-gitignore Use .gitignore file to extend excludes. + -h, --help Show this message and exit. +``` + +{% admonition + "note", + "Note", + "Если команда `djlint` не найдена, убедитесь, что Python находится [в вашем пути](https://www.geeksforgeeks.org/how-to-add-python-to-windows-path/)." +%} + +## Использование Path против Stdin + +djLint работает с путем или stdin. + +Бег с тропинкой - + +```bash +djlint /path/to/templates --lint +``` + +Или конкретный файл - + +```bash +djlint /path/to/this.mustache --lint +``` + +Или с помощью stdin - + +```bash +echo "
" | djlint - +``` + +Stdin также может быть использован для переформатирования кода. На выходе будет только отформатированный код без сообщений. + +```bash +echo "
" | djlint - --reformat +``` + +Выход - + +```html +
+``` diff --git a/docs/src/ru/docs/integrations.md b/docs/src/ru/docs/integrations.md new file mode 100644 index 0000000..98c9784 --- /dev/null +++ b/docs/src/ru/docs/integrations.md @@ -0,0 +1,77 @@ +--- +description: Интегрируйте djLint с вашим любимым редактором. Автоматическое форматирование ваших шаблонов с помощью Pre-Commit или Visual Studio Code. Lint с SublimeText. +title: Интеграции +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, integrations +--- + +# {{ "integrations" | i18n }} + +Существует несколько интеграций редакторов для djLint. + +## Pre-Commit + +djLint можно использовать как [pre-commit](https://pre-commit.com) крючок. + +Репозиторий предоставляет несколько предварительно настроенных хуков для определенных профилей djLint (он просто задает аргумент `--profile` и указывает pre-commit, какие расширения файлов искать): + +::: content + +- `djlint-django` для шаблонов Django: + Это будет искать файлы, соответствующие `templates/**.html` и устанавливать `--profile=django`. +- `djlint-jinja`. + Это будет искать файлы, соответствующие `*.j2` и устанавливать `--профиль=jinja`. +- `djlint-nunjucks`. + Будет искать файлы, соответствующие `*.njk` и устанавливать `--profile=nunjucks`. +- `djlint-handlebars` + Будет искать файлы, соответствующие `*.hbs` и устанавливать `--profile=handlebars`. +- `djlint-golang` + Будет искать файлы, соответствующие `*.tmpl` и устанавливать `--profile=golang`. + ::: + +Обратите внимание, что эти предопределенные хуки иногда слишком консервативны в принимаемых ими входных данных (ваши шаблоны могут использовать другое расширение), поэтому pre-commit явно позволяет вам переопределять любые из этих предопределенных опций. См. [pre-commit документы](https://pre-commit.com/#pre-commit-configyaml---hooks) для дополнительной настройки. + +### Пример Django по умолчанию + +```yaml +repos: +- repo: https://github.com/Riverside-Healthcare/djLint + rev: 0.5.10 # grab latest tag from GitHub + hooks: + - id: djlint-django +``` + +### Handlebars с расширением .html вместо .hbs + +```yaml +repos: +- repo: https://github.com/Riverside-Healthcare/djLint + rev: 0.5.10 # grab latest tag from GitHub + hooks: + - id: djlint-handlebars + files: "\\.html" +``` + +Вы можете использовать параметры `files` или `exclude`, чтобы ограничить каждый хук своим каталогом, что позволит вам поддерживать несколько языков шаблонов в одном репозитории. + +## SublimeText Linter + +djLint можно использовать в качестве плагина SublimeText Linter. Его можно установить через [package-control](https://packagecontrol.io/packages/SublimeLinter-contrib-djlint). + +::: content + +1. `cmd + shft + p` +2. Install SublimeLinter +3. Install SublimeLinter-contrib-djlint + ::: + +Убедитесь, что djLint установлен в вашем глобальном python или в вашем `PATH`. + +## Visual Studio Code + +[Страница рынка](https://marketplace.visualstudio.com/items?itemName=monosans.djlint) + +[GitHub репозиторий](https://github.com/monosans/djlint-vscode) + +## coc.nvim + +https://www.npmjs.com/package/coc-htmldjango diff --git a/docs/src/ru/docs/languages/angular.md b/docs/src/ru/docs/languages/angular.md new file mode 100644 index 0000000..343d07e --- /dev/null +++ b/docs/src/ru/docs/languages/angular.md @@ -0,0 +1,29 @@ +--- +title: Angular Template Linter +keywords: angular, djlint, angular template linter, lint angular templates +description: djLint - это ангулярный линтер шаблонов! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: angular +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/languages/django.md b/docs/src/ru/docs/languages/django.md new file mode 100644 index 0000000..1e9cba7 --- /dev/null +++ b/docs/src/ru/docs/languages/django.md @@ -0,0 +1,29 @@ +--- +title: Django Template Linter и Formatter +keywords: django, djlint, django template linter, django template formatter, format django templates +description: djLint - это линтер шаблонов django и форматер шаблонов django! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: django +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + \ No newline at end of file diff --git a/docs/src/ru/docs/languages/golang.md b/docs/src/ru/docs/languages/golang.md new file mode 100644 index 0000000..f480c30 --- /dev/null +++ b/docs/src/ru/docs/languages/golang.md @@ -0,0 +1,29 @@ +--- +title: GoLang Template Linter and Formatter +keywords: GoLang, djlint, GoLang template linter, GoLang template formatter, format GoLang templates +description: djLint - это линтер шаблонов GoLang и форматер шаблонов GoLang! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: golang +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/languages/handlebars.md b/docs/src/ru/docs/languages/handlebars.md new file mode 100644 index 0000000..f3877b9 --- /dev/null +++ b/docs/src/ru/docs/languages/handlebars.md @@ -0,0 +1,29 @@ +--- +title: Handlebars Template Linter and Formatter +keywords: handlebars, djlint, handlebars template linter, handlebars template formatter, format handlebars templates +description: djLint - это линтеры и форматоры шаблонов для ручек! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: handlebars +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/languages/jinja.md b/docs/src/ru/docs/languages/jinja.md new file mode 100644 index 0000000..fbc9729 --- /dev/null +++ b/docs/src/ru/docs/languages/jinja.md @@ -0,0 +1,29 @@ +--- +title: Jinja Template Linter and Formatter +keywords: jinja, djlint, jinja template linter, jinja template formatter, format jinja templates +description: djLint - это линтер шаблонов jinja и форматер шаблонов jinja! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: jinja +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/languages/languages.json b/docs/src/ru/docs/languages/languages.json new file mode 100644 index 0000000..6294776 --- /dev/null +++ b/docs/src/ru/docs/languages/languages.json @@ -0,0 +1,3 @@ +{ + "layout": "languages_layout.njk" +} diff --git a/docs/src/ru/docs/languages/mustache.md b/docs/src/ru/docs/languages/mustache.md new file mode 100644 index 0000000..0be76d6 --- /dev/null +++ b/docs/src/ru/docs/languages/mustache.md @@ -0,0 +1,29 @@ +--- +title: Mustache Template Linter and Formatter +keywords: mustache, djlint, mustache template linter, mustache template formatter, format mustache templates +description: djLint - это линтер шаблонов mustache и форматировщик шаблонов mustache! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: handlebars +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + \ No newline at end of file diff --git a/docs/src/ru/docs/languages/nunjucks.md b/docs/src/ru/docs/languages/nunjucks.md new file mode 100644 index 0000000..137c2db --- /dev/null +++ b/docs/src/ru/docs/languages/nunjucks.md @@ -0,0 +1,29 @@ +--- +title: Nunjucks Template Linter and Formatter +keywords: nunjucks, djlint, nunjucks template linter, nunjucks template formatter, format nunjucks templates +description: djLint - это линтер шаблонов nunjucks и форматер шаблонов nunjucks! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: nunjucks +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/languages/twig.md b/docs/src/ru/docs/languages/twig.md new file mode 100644 index 0000000..4672f6b --- /dev/null +++ b/docs/src/ru/docs/languages/twig.md @@ -0,0 +1,29 @@ +--- +title: Twig Template Linter and Formatter +keywords: twig, djlint, twig template linter, twig template formatter, format twig templates +description: djLint - это линтер шаблонов twig и форматировщик шаблонов twig! Используйте преимущества профиля предварительной сборки при линтинге и форматировании ваших шаблонов с помощью djLint. +tool: nunjucks +--- + +# {{ title }} + +{{ description }} + +#### Использование командной строки + +```bash +djlint /path/to/templates --profile={{ tool }} +``` + +#### Или используйте файл конфигурации + +Настройте djLint в вашем проекте `pyproject.toml`. + +```toml +[tool.djlint] +profile="{{ tool }}" +``` + + diff --git a/docs/src/ru/docs/linter.md b/docs/src/ru/docs/linter.md new file mode 100644 index 0000000..2fc81c3 --- /dev/null +++ b/docs/src/ru/docs/linter.md @@ -0,0 +1,108 @@ +--- +description: djLint HTML Template linter включает более 30 правил! Найти определения можно здесь. Легко расширить, включив пользовательские правила! +title: Правила Линтера +keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, правила +--- + +# Использование вкладышей + +djLint включает в себя множество правил для проверки стиля и валидности ваших шаблонов. Используйте все преимущества линтера, настроив его на использование предустановленного профиля для выбранного вами языка шаблонов. + +```bash +djlint /path/to/templates --lint + +# with custom extensions +djlint /path/to/templates -e html.dj --profile=django + +# or to file +djlint /path/to/this.html.j2 --profile=jinja +``` + + + +## Пользовательские правила + +Создайте файл `.djlint_rules.yaml` рядом с вашим `pyproject.toml`. Правила могут быть добавлены в этот файл, и djLint подхватит их. + +Хорошее правило выглядит следующим образом: + +```yaml +- rule: + name: T001 + message: Найти трихотилломанию + flags: re.DOTALL|re.I + patterns: + - трихотилломанию +``` + +## Правила + +| Код | Значение | +| ---- | ------------------------------------------------------------------------------------------------------------------------- | +| T001 | Переменные должны быть заключены в один пробел. Например: {% raw %}`{{ this }}`{% endraw %} | +| T002 | В тегах следует использовать двойные кавычки. Ex {% raw %}`{% extends "this.html" %}`{% endraw %} | +| T003 | Конечный блок должен иметь имя. Например: {% raw %}`{% endblock body %}`{% endraw %}. | +| D004 | (Django) Статические урлы должны следовать шаблону {% raw %}`{% static path/to/file %}`{% endraw %}. | +| J004 | (Jinja) Статические урлы должны следовать шаблону {% raw %}`{{ url_for('static'...)}}`{% endraw %}. | +| H005 | Html-тег должен иметь атрибут `lang`. | +| H006 | Тег `img` должен иметь атрибуты `height` и `width`. | +| H007 | `` должен присутствовать перед тегом html. | +| H008 | Атрибуты должны быть заключены в двойные кавычки. | +| H009 | Имена тегов должны быть в нижнем регистре. | +| H010 | Имена атрибутов должны быть в нижнем регистре. | +| H011 | Значения атрибутов должны быть заключены в кавычки. | +| H012 | Вокруг атрибута `=` не должно быть пробелов. | +| H013 | Тег `img` должен иметь атрибуты alt. | +| H014 | Более 2 пустых строк. | +| H015 | После тегов `h` следует перевод строки. | +| H016 | Отсутствие тега `title` в html. | +| H017 | Тег должен быть самозакрывающимся. | +| D018 | (Django) Внутренние ссылки должны использовать шаблон {% raw %}`{% url ... %}`{% endraw %}. | +| J018 | (Jinja) Внутренние ссылки должны использовать шаблон {% raw %}`{% url ... %}`{% endraw %}. | +| H019 | Замените `javascript:abc()` на событие `on_` и реальный url. | +| H020 | Найдена пустая пара тегов. Рассмотрите возможность удаления. | +| H021 | Следует избегать инлайн-стилей. | +| H022 | Используйте HTTPS для внешних ссылок. | +| H023 | Не используйте ссылки на сущности. | +| H024 | Опускайте тип в скриптах и стилях. | +| H025 | Тег кажется бесхозным. | +| H026 | Теги Emtpy id и class могут быть удалены. | +| T027 | В синтаксисе шаблона найдена незакрытая строка. | +| T028 | Рассмотрите возможность использования тегов без пробелов внутри значений атрибутов. {% raw %}`{%- if/for -%}`{% endraw %} | +| H029 | Рассмотрите возможность использования строчных значений метода формы. | +| H030 | Рассмотрите возможность добавления мета-описания. | +| H031 | Рассмотрите возможность добавления мета-ключевых слов. | + +### Добавление правил + +Мы приветствуем запросы с новыми правилами! + +Хорошее правило состоит из + +::: content + +- Name +- Code +- Message - Сообщение для отображения при обнаружении ошибки. +- Flags - Флаги регекса. По умолчанию используется re.DOTALL. например: re.I|re.M +- Patterns - regex-выражения, которые найдут ошибку. +- Exclude - Необязательный список профилей, из которых нужно исключить правило. + ::: + +Пожалуйста, включите тест для проверки правила. + +### Кодовые шаблоны + +Первая буква кода соответствует схеме: + +::: content + +- T: применяется в целом к шаблонам +- H: применяется к html +- D: применяется специально для Django +- J: применяется специально для Jinja +- N: применяется специально для Nunjucks +- M: применяется специально для Handlebars + ::: diff --git a/docs/src/ru/index.njk b/docs/src/ru/index.njk new file mode 100644 index 0000000..a25c2ed --- /dev/null +++ b/docs/src/ru/index.njk @@ -0,0 +1,4 @@ +--- +layout: index.njk +date: Last Modified +--- \ No newline at end of file diff --git a/docs/src/ru/ru.json b/docs/src/ru/ru.json new file mode 100644 index 0000000..79ca439 --- /dev/null +++ b/docs/src/ru/ru.json @@ -0,0 +1,4 @@ +{ + "dir": "ltr", + "locale": "ru" +} \ No newline at end of file diff --git a/docs/src/search/all.njk b/docs/src/search/all.njk deleted file mode 100644 index e670407..0000000 --- a/docs/src/search/all.njk +++ /dev/null @@ -1,19 +0,0 @@ ---- -permalink: search/all.json -eleventyExcludeFromCollections: true ---- -{%- set posts = collections.algolia -%} -[ -{%- for post in posts -%} - { - "title": "{{ post.data.title | default(" ") }}", - "date": "{{ page.date }}", - "url": "{{ post.url }}", - "content": {{ post.templateContent | algExcerpt | jsonify | safe }}, - "_tags": [{%- for tag in post.data.tags -%}"{{ tag }}"{%- if not loop.last -%},{% endif %} -{% endfor %} -] -} -{% if not loop.last %},{% endif %} -{% endfor %} -] diff --git a/docs/src/search/update-algolia-index.js b/docs/src/search/update-algolia-index.js deleted file mode 100644 index 225c4ee..0000000 --- a/docs/src/search/update-algolia-index.js +++ /dev/null @@ -1,14 +0,0 @@ -const algoliasearch = require('algoliasearch'); - -const objects = require('../../_site/search/all.json'); - -const client = algoliasearch('QFXNLHI6NP', process.env.ALGOLIA_SEARCH); - -const index = client.initIndex('dev_atlas'); - -index - .replaceAllObjects(objects, { autoGenerateObjectIDIfNotExist: true }) - .then(() => { - console.log('updated'); - }) - .catch((error) => console.error('Failed to Algolia update index', error)); diff --git a/docs/src/static/css/site.scss b/docs/src/static/css/site.scss index 847bf89..6c9ac02 100644 --- a/docs/src/static/css/site.scss +++ b/docs/src/static/css/site.scss @@ -565,6 +565,9 @@ a.card:hover { width: 6rem; } +.is-transparent, .is-transparent:hover { + background-color: transparent !important; +} /* purgecss end ignore */ .navbar-item.is-mega { diff --git a/docs/src/static/font/fontawesome/stylesheet.scss b/docs/src/static/font/fontawesome/stylesheet.scss index 83a392d..dfaf1f5 100644 --- a/docs/src/static/font/fontawesome/stylesheet.scss +++ b/docs/src/static/font/fontawesome/stylesheet.scss @@ -155,6 +155,7 @@ $icons: ( life-ring: $fa-var-life-ring, pencil-alt: $fa-var-pencil-alt, arrow-circle-right: $fa-var-arrow-circle-right, + globe: $fa-var-globe, ); @each $key, $value in $icons { diff --git a/docs/src/static/js/search.js b/docs/src/static/js/search.js deleted file mode 100644 index d23eec1..0000000 --- a/docs/src/static/js/search.js +++ /dev/null @@ -1,95 +0,0 @@ -// var client = algoliasearch('QFXNLHI6NP', '6b5ccc86ead48e79e587963eeb2d83e8'); -// var searchIndex = client.initIndex("dev_atlas"); - -// var searchBox = document.getElementById("search"); -// var searchForm = document.getElementById("search-form"); - -// var runSearch = function(event) { -// var searchResultsContainer = document.getElementById("search-results"); -// searchResultsContainer.textContent = ""; - -// var searchTerm = event.target.value; -// if (searchTerm.length < 2) return; - -// var toolToFilterBy = event.target.dataset.filter || false; - -// var alogliaArgs = { -// hitsPerPage: 10, -// attributesToRetrieve: ["title", "url", "_tags"], -// attributesToSnippet: ["content"], -// snippetEllipsisText: "…", -// }; - -// if (toolToFilterBy) alogliaArgs.filters = toolToFilterBy; - -// searchIndex.search(searchTerm, alogliaArgs).then(function(e){ -// results = e["hits"] - -// console.log(results); - -// var formattedResults = results.map(function(result){ -// var toolName = extractToolName(result._tags); -// console.log(toolName) -// // Create elements -// var link = document.createElement("a"); -// var title = document.createElement("strong"); -// var excerpt = document.createElement("p"); -// var tool = document.createElement("span"); - -// link.href = result.url; -// link.classList.add( -// "panel-block", -// "p-3", -// "is-block" -// ); - -// excerpt.classList.add("search-snippet"); -// excerpt.innerHTML = result._snippetResult.content.value; - -// title.classList.add("is-flex", "is-justify-content-space-between"); -// title.innerText = result.title; - -// tool.innerText = toolName; -// tool.classList.add( -// "tag", -// "is-info", -// "is-light" - -// ); - -// // Put all the elements together -// title.appendChild(tool); -// link.appendChild(title); -// link.appendChild(excerpt); -// return link; -// }); - -// formattedResults.map(function(el){ -// searchResultsContainer.insertAdjacentElement("beforeend", el) -// }); -// }); -// }; - -// var extractToolName = function(tags) { -// return tags.filter(function(tag){ return tag === "BI Library" || tag === "Automation Hub" || tag === "Atlas"}); -// }; - -// Function.prototype.debounce = function (delay) { -// var outter = this, -// timer; - -// return function () { -// var inner = this, -// args = [].slice.apply(arguments); - -// clearTimeout(timer); -// timer = setTimeout(function () { -// outter.apply(inner, args); -// }, delay); -// }; -// }; - -// if(searchBox != undefined || searchForm != undefined){ -// searchBox.addEventListener("input", runSearch.debounce(250)); -// searchForm.addEventListener("submit", (e) => e.preventDefault()); -// }