From 601498b4b01b723cc73c8072e7fc5adddae1ce66 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Wed, 26 May 2021 19:54:22 -0700 Subject: [PATCH 01/63] Cleanup --- .DS_Store | Bin 0 -> 8196 bytes .gitignore | 11 - .ruby-gemset | 1 - Gemfile | 3 - bower.json | 17 - eyeglass-exports.js | 7 - lib/modular-scale.rb | 34 - libsass/package-lock.json | 4034 ---------------------------------- libsass/package.json | 15 - libsass/public/css/main.css | 66 - libsass/scss/main.scss | 56 - modular-scale.gemspec | 24 - package-lock.json | 5 + package.json | 12 +- readme.md | 25 +- stylesheets/.DS_Store | Bin 0 -> 8196 bytes stylesheets/modularscale.zip | Bin 0 -> 6160 bytes test-compass/config.rb | 15 - test-compass/css/style.css | 97 - test-compass/index.html | 31 - test-compass/sass/style.scss | 56 - test-eyeglass/.gitignore | 4 - test-eyeglass/build.js | 16 - test-eyeglass/main.scss | 56 - test-eyeglass/package.json | 15 - 25 files changed, 14 insertions(+), 4586 deletions(-) create mode 100644 .DS_Store delete mode 100644 .gitignore delete mode 100644 .ruby-gemset delete mode 100644 Gemfile delete mode 100644 bower.json delete mode 100644 eyeglass-exports.js delete mode 100644 lib/modular-scale.rb delete mode 100644 libsass/package-lock.json delete mode 100644 libsass/package.json delete mode 100644 libsass/public/css/main.css delete mode 100644 libsass/scss/main.scss delete mode 100644 modular-scale.gemspec create mode 100644 package-lock.json create mode 100644 stylesheets/.DS_Store create mode 100644 stylesheets/modularscale.zip delete mode 100644 test-compass/config.rb delete mode 100644 test-compass/css/style.css delete mode 100644 test-compass/index.html delete mode 100644 test-compass/sass/style.scss delete mode 100644 test-eyeglass/.gitignore delete mode 100644 test-eyeglass/build.js delete mode 100644 test-eyeglass/main.scss delete mode 100644 test-eyeglass/package.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..303757f3f483d7a0e15f22490f37041df4be8901 GIT binary patch literal 8196 zcmeI1O>Epm6vyA&q>1e`jZ<1D*@UtXLen&9^U*X-Ny{div<;;su=#2my78_}W8t;a zwRh7bq*_#t{wSqeoq-$q>Pavmz9E?{jZZ2MPoV+>r{f=R<@JW~08%bL%}isPeV|WJ{^r zE7YcafR_{TZPd4UZoO2xCf_}vpNjq#19>|6BP^V3)VFzVc{(6Z2lPiqe}{tJ=#&@n z!U3b)26do7pulk|M4r z=S;(K+uOgxP)X^gvT{L?1gTPbB0g)+$6eLUIstr-Pxqy9}Yox1txizxX(b3t_ z8tLinUS1Z3nx>9J!!zlH#igg0FTBB)L(c{O`2kh@e6@a)T18gNKWO};Af}UxaX~^0 z1wn2U1QDeQ<;YQKI3aJ%(K<)wT*J1U2|eSGO~_RaX)~O%tFZyq+)^c1Zd+2R zT#>g_RVp<~ogg;~Q`w|(E^D|8-nHr*6lq$cAy3#EyP76n6GYDwX;75Y%oEG#RBM9Z zb>H8lNMjD0nd%4bYLTR|r|2Hb4h_X7xM#1VjGJmwH)T!aXG@4aow3#E|Emv%e zw);c~PzQVH<#P1N;a-!O!q3{0@J@ zUr3apgbLPRE#8X{U^DK*7VN?Ucn}}NJ{-d1cmf~A5uCyqOkxT(Ok)lga1odAS$r8^ z#nn|~{FKiuR3P|af2O{{&_V8YY?y@t-*4$tt=5$V`}gXi~~ zIg@v7+rFc5=kE6IgAc9V(=~VT7SL{H%L9rN&Uc%?_MSO{f zdQT?2WK0sKnWkOmhJzCihuv#;8_L31quWT zY@`BMIv5`upb?8bm)TxBLdOgptgyH|w_XZWEQIxY+i|k1e;86b;`^e$&2vj0DjWVG QKo8#k!TaAs?~bni2A_rZ{r~^~ literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 93c2cdc7..00000000 --- a/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*.gem -.sass-cache -.bundle -libsass/node_modules -libsass/npm-debug.log - -*.lock - -stylesheets/modular-scale.zip -.DS_Store -*.zip diff --git a/.ruby-gemset b/.ruby-gemset deleted file mode 100644 index 93a497e2..00000000 --- a/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -modularscale \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 1d8c9e6a..00000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' -gem 'compass', '~> 1.0', '>= 1.0.0' -gem 'modular-scale' diff --git a/bower.json b/bower.json deleted file mode 100644 index 0043b4fc..00000000 --- a/bower.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "modular-scale", - "version": "v3.0.8", - "main": [ - "stylesheets/_modularscale.scss" - ], - "ignore": [ - "lib", - "test-compass", - "test-node-sass", - "eyeglass-exports.js", - "Gemfile", - "Gemfile.lock", - "modular-scale.gemspec", - "sache.json" - ] -} diff --git a/eyeglass-exports.js b/eyeglass-exports.js deleted file mode 100644 index 812ed03f..00000000 --- a/eyeglass-exports.js +++ /dev/null @@ -1,7 +0,0 @@ -var path = require('path'); - -module.exports = function(eyeglass, sass) { - return { - sassDir: path.join(__dirname, 'stylesheets') - } -} \ No newline at end of file diff --git a/lib/modular-scale.rb b/lib/modular-scale.rb deleted file mode 100644 index d5fcc8ba..00000000 --- a/lib/modular-scale.rb +++ /dev/null @@ -1,34 +0,0 @@ -# All gems that are required for this extension to work should go here. -# These are the requires you would normally put in your config.rb file -# By default, you should always included Compass. Do not include your -# extension. -require 'compass' - -# This tells Compass what your Compass extension is called, and where to find -# its files -extension_path = File.expand_path(File.join(File.dirname(__FILE__), "..")) -Compass::Frameworks.register('modular-scale', :path => extension_path) - -# Version and date of version for your Compass extension. -# Replace ModularScale with the name of your extension -# Letters, numbers, and underscores only -# Version is a number. If a version contains alphas, it will be created as -# a prerelease version -# Date is in the form of YYYY-MM-DD -module ModularScale - VERSION = "3.0.8" - DATE = "2018-09-27" -end - -# This is where any custom SassScript should be placed. The functions will be -# available on require of your extension without the need for users to import -# any partials. Uncomment below. - -module Sass::Script::Functions - - # Let modularscale know that this was installed via Compass - def ms_gem_installed() - Sass::Script::Bool.new(true) - end - -end \ No newline at end of file diff --git a/libsass/package-lock.json b/libsass/package-lock.json deleted file mode 100644 index db84e17f..00000000 --- a/libsass/package-lock.json +++ /dev/null @@ -1,4034 +0,0 @@ -{ - "name": "libsass", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", - "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "event-stream": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.6.tgz", - "integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "flatmap-stream": "^0.1.0", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flatmap-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/flatmap-stream/-/flatmap-stream-0.1.0.tgz", - "integrity": "sha512-Nlic4ZRYxikqnK5rj3YoxDVKGGtUjcNDUtvQ7XsdGLZmMwdUYnXf10o1zcXtzEZTBgc6GxeRpQxV/Wu3WPIIHA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - } - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", - "dev": true - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "dev": true, - "requires": { - "mime-db": "~1.36.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-sass": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", - "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "2.87.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - } - }, - "nodemon": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.4.tgz", - "integrity": "sha512-hyK6vl65IPnky/ee+D3IWvVGgJa/m3No2/Xc/3wanS6Ce1MWjCzH6NnhPJ/vZM+6JFym16jtHx51lmCMB9HDtg==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.0", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", - "dev": true, - "requires": { - "event-stream": "~3.3.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "pstree.remy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", - "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", - "dev": true, - "requires": { - "ps-tree": "^1.1.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.1.tgz", - "integrity": "sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - } - } -} diff --git a/libsass/package.json b/libsass/package.json deleted file mode 100644 index f394173c..00000000 --- a/libsass/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "libsass", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build-css": "node-sass --include-path scss scss/main.scss public/css/main.css" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "node-sass": "^4.9.3", - "nodemon": "^1.11.0" - } -} diff --git a/libsass/public/css/main.css b/libsass/public/css/main.css deleted file mode 100644 index 8a8a25f5..00000000 --- a/libsass/public/css/main.css +++ /dev/null @@ -1,66 +0,0 @@ -body { - line-height: 1.3; - margin: 0 auto; - padding: 10% 5% 50%; - max-width: 42em; - font-size: ms-round-px(1em); } - -h1 { - font-size: ms-round-px(3.71293em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h1 { - font-size: calc( ms-round-px(3.71293em) + ms-round-px(10.48576em)/ms-round-px(10.48576em)-ms-round-px(10.48576em)1-ms-round-px(3.71293em)/ms-round-px(3.71293em)-ms-round-px(3.71293em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h1 { - font-size: ms-round-px(10.48576em); } } - -h2 { - font-size: ms-round-px(2.8561em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h2 { - font-size: calc( ms-round-px(2.8561em) + ms-round-px(6.5536em)/ms-round-px(6.5536em)-ms-round-px(6.5536em)1-ms-round-px(2.8561em)/ms-round-px(2.8561em)-ms-round-px(2.8561em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h2 { - font-size: ms-round-px(6.5536em); } } - -h3 { - font-size: ms-round-px(2.197em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h3 { - font-size: calc( ms-round-px(2.197em) + ms-round-px(4.096em)/ms-round-px(4.096em)-ms-round-px(4.096em)1-ms-round-px(2.197em)/ms-round-px(2.197em)-ms-round-px(2.197em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h3 { - font-size: ms-round-px(4.096em); } } - -h4 { - font-size: ms-round-px(1.69em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h4 { - font-size: calc( ms-round-px(1.69em) + ms-round-px(2.56em)/ms-round-px(2.56em)-ms-round-px(2.56em)1-ms-round-px(1.69em)/ms-round-px(1.69em)-ms-round-px(1.69em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h4 { - font-size: ms-round-px(2.56em); } } - -h5 { - font-size: ms-round-px(1.3em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h5 { - font-size: calc( ms-round-px(1.3em) + ms-round-px(1.6em)/ms-round-px(1.6em)-ms-round-px(1.6em)1-ms-round-px(1.3em)/ms-round-px(1.3em)-ms-round-px(1.3em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h5 { - font-size: ms-round-px(1.6em); } } - -h6 { - font-size: ms-round-px(1em); - line-height: 1; } - @media (min-width: 20em) and (max-width: 60em) { - h6 { - font-size: calc( ms-round-px(1em) + ms-round-px(1em)/ms-round-px(1em)-ms-round-px(1em)1-ms-round-px(1em)/ms-round-px(1em)-ms-round-px(1em)1 * ( ( 100vw - 20em) / 40 )); } } - @media (min-width: 60em) { - h6 { - font-size: ms-round-px(1em); } } diff --git a/libsass/scss/main.scss b/libsass/scss/main.scss deleted file mode 100644 index 7796d6de..00000000 --- a/libsass/scss/main.scss +++ /dev/null @@ -1,56 +0,0 @@ -@import "../../stylesheets/modularscale"; - -$modularscale: ( - base: 16px, - ratio: 1.5 -); - -@debug ms(-1); -@debug ms(); -@debug ms(0); -@debug ms(1); -@debug ms(2); - -$modularscale: ( - base: 1em, - ratio: 1.3, - 20em: ( - ratio: 1.3 - ), - 60em: ( - ratio: 1.6 - ), -); - -body { - line-height: 1.3; - margin: 0 auto; - padding: 10% 5% 50%; - max-width: 42em; - font-size: ms(0); -} - -h1 { - @include ms-respond(font-size, 5); - line-height: 1; -} -h2 { - @include ms-respond(font-size, 4); - line-height: 1; -} -h3 { - @include ms-respond(font-size, 3); - line-height: 1; -} -h4 { - @include ms-respond(font-size, 2); - line-height: 1; -} -h5 { - @include ms-respond(font-size, 1); - line-height: 1; -} -h6 { - @include ms-respond(font-size, 0); - line-height: 1; -} diff --git a/modular-scale.gemspec b/modular-scale.gemspec deleted file mode 100644 index 131ac7ee..00000000 --- a/modular-scale.gemspec +++ /dev/null @@ -1,24 +0,0 @@ -require './lib/modular-scale' - -Gem::Specification.new do |s| - s.name = 'modular-scale' - s.version = ModularScale::VERSION - s.date = ModularScale::DATE - s.authors = ['Scott Kellum', 'Mason Wendell', 'Adam Stacoviak'] - s.email = ['scott@scottkellum.com', 'mason@thecodingdesigner.com', 'adam@stacoviak.com'] - s.homepage = 'http://modularscale.com' - s.license = 'MIT' - - s.summary = 'Modular scale calculator built into your Sass.' - s.description = 'A modular scale is a list of values that share the same relationship. These -values are often used to size type and create a sense of harmony in a design. Proportions within -modular scales are all around us from the spacing of the joints on our fingers to branches on -trees. These natural proportions have been used since the time of the ancient Greeks in -architecture and design and can be a tremendously helpful tool to leverage for web designers.' - - s.files = Dir['lib/**/*'] + Dir['stylesheets/**/*'] - s.extra_rdoc_files = ['changelog.md', 'license.md', 'readme.md'] - - s.required_rubygems_version = '>= 1.3.6' - -end diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..8e095ce4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "modularscale-sass", + "version": "3.0.10", + "lockfileVersion": 1 +} diff --git a/package.json b/package.json index 71c2a077..efcf179e 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,11 @@ { "name": "modularscale-sass", - "version": "3.0.10", + "version": "4.0.0.beta1", "description": "A tool to help web designers size their type in a more meaningful way.", "main": "stylesheets/_modularscale.scss", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "eyeglass": { - "exports": "eyeglass-exports.js", - "name": "modularscale", - "needs": "^1.2.1 || ^2.0.0" - }, "repository": { "type": "git", "url": "https://github.com/modularscale/modularscale-sass.git" @@ -27,5 +22,8 @@ "bugs": { "url": "https://github.com/modularscale/modularscale-sass/issues" }, - "homepage": "https://github.com/modularscale/modularscale-sass" + "homepage": "https://www.modularscale.com", + "dependencies": { + "sass": "^1.34.0" + } } diff --git a/readme.md b/readme.md index acaf3bf7..8059f6bd 100644 --- a/readme.md +++ b/readme.md @@ -8,34 +8,17 @@ To get started, you need to select a ratio and a base value. The base value is u ## Install -### Eyeglass +### NPM * Terminal: `npm install modularscale-sass --save-dev` -* SCSS: `@import 'modularscale'` +* SCSS: `@use '~modularscale-sass/stylesheets/modularscale';` -### Webpack with sass-loader - -* Terminal: `npm install modularscale-sass --save-dev` -* Webpack config: install and use [sass-loader](https://github.com/jtangelder/sass-loader#apply-via-webpack-config) -* SCSS: `@import '~modularscale-sass/stylesheets/modularscale';` - -### Bower - -* Terminal: `bower install modular-scale --save-dev` -* SCSS: `@import '../link_to_component_dir/modularscale';` - -### Vanilla Sass +### Sass * [Download the latest zip](https://github.com/modularscale/modularscale-sass/releases/latest) * Extract into your project * SCSS: `@import 'modularscale';` -### Compass (no longer being updated. Last release v3.0.2) - -* Terminal: `gem install modular-scale --pre` -* Compass config: `require 'modular-scale'` -* SCSS: `@import 'modularscale';` - ## Using modular scale #### Initial setup and usage: @@ -179,7 +162,7 @@ By default ratio is set to `$fifth`. The MIT License (MIT) -Copyright © 2015 [Scott Kellum](http://www.scottkellum.com/) ([@scottkellum](http://twitter.com/scottkellum)), [Adam Stacoviak](http://adamstacoviak.com/) ([@adamstac](http://twitter.com/adamstac)) and [Mason Wendell](http://thecodingdesigner.com/) ([@codingdesigner](http://twitter.com/codingdesigner)) +Copyright © 2011 - 2021 [Scott Kellum](http://www.scottkellum.com/) ([@scottkellum](http://twitter.com/scottkellum)), [Adam Stacoviak](http://adamstacoviak.com/) ([@adamstac](http://twitter.com/adamstac)) and [Mason Wendell](http://thecodingdesigner.com/) ([@codingdesigner](http://twitter.com/codingdesigner)) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/stylesheets/.DS_Store b/stylesheets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4a3ae4d90d21b02bfb178fd6bc444cf8ff948dad GIT binary patch literal 8196 zcmeHMT}&NC6h7xd+u4Q6f>hYrTdt)jZJ~wImQve#`4cIvG~UZ^DX{nM3LBSQdUx-I zmSQl*-x!TQi5fMU#iqCV)0k4B@3PkLr&FA-Xr_@I(>Cz<(X z=FFMdbLN|woO=NP+p>BiKqUY$${dv_!!qDX?+k#Pyf zloFRr?@l}R@r=Rc18K*~PTB65QkvGRbk@>5qt&t!<{85s^o&`L*M?mucoA$&odCvCC`%NPwl}0v8Nn4vTuG~^lsi+&(O)F_JrJ4<9Q|76x>75p9RH?T~ z$~$aCr>{8X=zK=qm#9^04Pz&Ge|yHDQgq9;>UK%dSkfg!#1!@NE=h5vKB=sYMNW~Eps4W^x`DYC~E-K}anQ!cSlzV=bg^?Iib zo0j*jt5Uld8{(2yT{m=A9j_Jp?|Yy+-XK~MJvJ)rq^IQ`7y$#O;WRu2Ps20t3cLvy z;B9yxK88#13498d;T!k?eu7`%SNIKnhd+^_ghg14DsI7Q+=>m@f(P&*9>O;4!J~LD z_F@uG;wX-zh7&lAr_e$08v zJE?pg38MG}$`i!j&ZVrR{Z}{MDo6W>XU6RE6OreS1e@c%VRhMBtmL`NIV zywZKmW9=B_amqaLaSH-{6)N};-tULwgo}R|Qau*P;sGuQBnhSe{D*+>{SV)NpLsWS F@fWwd@8AFc literal 0 HcmV?d00001 diff --git a/stylesheets/modularscale.zip b/stylesheets/modularscale.zip new file mode 100644 index 0000000000000000000000000000000000000000..01cb6d740742c0e1fb76ad4f474362dfa49db12c GIT binary patch literal 6160 zcmb7I1z6L4*B*i}V2qKYLjfhFrKCXtK{`ZYl9N#zrIeH)4N6K%hk{5-2#ho+6_L`> zI8r2(`q<<1y$?g*_r2cjT3y%v_w_sHfA0I7`{-&B5|IILk3wU4?Z3YK{YC+R0GwTI zJrOV@$_9q8yI^Dr0#K}1nww5nnr{-&0(6fqr3C+pfB-p~de*&k@Nvq*qj_rLsVW z&HSX%EJg6Ig!H@XUfa!daI(*OIX8(ht)(ioDuagAAETF`R;vW zY?Yf=OE8Nzb~DHw2HVr9Ank5+k1-YuKqi=4l-@g^FE;O9qdOBZTxR6Wh0X%0j&!kd z7KUajzvIK)4jVHG|3K5ej6H|lY9Wf20HXWfk6m}Q-U~HRln=_enIru(jcz)~ol4Va z11e-MyY2A2IV#opAwsU?d%4+zL4!Hx&WD9115BRnSam*hXm5^nQdbbHQ8tadvgnD# zV7mLF^U8uxCiDjU!N{c?pSWj<0V}bFq+#s& zJ8Ajv31E)0q-LYHZ|0>(&GeuQ>|t+H3wwKeE&KX}T6#zrTC~_jWC<({nwn3I`GK}# zucj~r(gpmCo@|iuhS`XZ)Qr+N9!l%AAIjI?w&ZB!le`FVke*y7MKzfo>e?G(UT*K5 zm6$AQy*6}6psPg!&dJU(FMm-+a)A%%f+t{#tT#T z)H&uFBoP+uf+d*Pog~bN{5Bm~E-rMHd>;gu_0mN*Twby%eWaNpEH%U4(Vs$3!R}7f zc7BSZUL~BWy@4Q?b2s+6=sO>N$L7_EQUUK*bt*>h^R>Ezc64(`ldM_-`l_78Qb+kk zb0#bRugmOW$#)*u0mc`hKiimgh)OX^cSK>5g}(h5!Nb>7lFaqK@WGqL=pK-c|yzP#JW-iCpQ})EiOAO-{o9)@?&5Ec5*AG zKi+Yyd`9aRsix-FGO(QS;yyw=T z!5V4ax8}G#l5}q1Q_{n0h=VU}`C1GT4tX6FbTc1hxDTxFm9BPG8kT@Hb>6EKV4oSs z++-13h$Ph`w1j(fb}E0q046K!qZ3aSZ;YMCxPh9T{N>Tz_b*?OvR~J!{Op3BYlA1> zv+#{Qgf{L$Wz~cMDi>gi%D=;ni0a^tJN zQUGaG7hFMk*mfoQjvpooO?wm71dImv9C0z^0O4L8e{g@OaaVR9pFGA#)lcZL?S z7&2pxN&PAWl%91V%GEAIm?qAKfzFPTe*CJR`2enQyA-@Tyc%}nE5e@;7peda_IctF zhx(6R|1_ZSEBM5M{uZj&Q5VAt)9vx!%zCGd4B?;!d}%Jq5i_eMm&j4K@w%k!sz?N4 zd>DOmbQ($#8GO6UQGSx$h9!i(ynZQ!Fad2epleK~z&oH9Ok3|x3Z`6X;#Z<>qqTSN zc$K&$*GT-?4q9r(m->RSE@gGLIOp1^P9@QKnY12@B9N%i#>OXtOGe=E*8Ka;dAp3a?JqL-F}W_^ ziywww1!u~OzMw4x%KWfAblKoW)%)sQoTS3W8~CK5Jp%$anvJTsqe2#zo1Mo88{;@) z+b*u~4#cis&&Hy$J55bcByo zw!Mukcp@!6ii|kmQ|5s42&CT?dqzMdc)J&MC#LSo^Lc=yZ8lY&;ZQcKz_8wCOFOIJ z+nHW0b^L+j}NErMEuw_P0VPc<7>I>zMazab(Uqm;RiQHzd=;Y;@kSr@1Q~T=NNfx7m zS-nH`o&I5C2N_S>HEgm+?Q*Nv;Ua0dt{P`Z39a^(l5F zr!Tw$5wIGlX{YRe!*-R$g-sb%movJQ?DS=lSRnmwx1EpusJ$?+j!BC zQuh*9mZh`MIQgUILqq(Z6oTP5MMil#z>s(~`Tvrv9iya!Rs^YSOLtm%C>2!0SS2lx z0I;q@7iTh$SkiL7azvvT!D!XS$HRaM?3%ISikuaTWq-{T)$_NnQjfdQW$XIgR7+IS z2z#<9qpQh~!qTB7880gO76Bz=3C!+$&f3@QynFp=Q&laq6;hYSMnFA;Ydwyh=uzZP zRp|p^3(b2Ywc1+cO}FN4-es)JBCa*obfcmsbYYj&HM=BuKO9i`msaicbgd+Qe$wqC zhP)CD_+HMck_C}t{vJj_x*}@S|7}u=F-L7pwE~ppC7n!5H5dV5$z5p9} zFRs%)-1V~pTg8VJ(<$(F+^%;)^)Ae5h4sl9@rv;+z7GSX0J5jg7@4;By4G_1Xk@Et z70ro@=yTs~!6-bd3wRth1R8tNs-F*pJy{DdO_SK`69wE8>)V6~!XK1AkYdg8s2y%W zYl>TlEOtg}8KW18YD5Y8_mB-WqhDz678P-db8tnw=F3rZoDON|etIps*hqZ3N?Cz( zw#1A0EIXsq*KIQ?1FQvNwBZh+UDRw;eQ+rPQzS|S)pei}I5;zy$D3U;VVFI|o9SFW zyY;Fh%0p-IocfJ#o$EU`aao>KW*>V@CN>d4RdgOtBh_yM3#L+D!75#WAimdP-|03| zy&N2UFmSY{%CZGXxLK0Yn69i2*-%~8F3rgIdQ7n3(#Lsej~)JMwoFZg0=H5t+V*M4 zIl0NMv#Tl4L+40#M2&{#?C`A3e%P|L=?(`_jH*lQ9Pr8*RpJj zGdupDWZZ9!pLwQl59#9UNq?oP?rWG={T5msn5^I8E4jZqT@|Pn832)+0#>4XE17>LDd4EGE1O*!Ll4D^5@9qjPSOWF6AC-;0ffolt4s~fZikdYM` ztkiCHCFK0~Qj=wxp8HckTX;g(WP76b>XoXDeCr6#H-72TTN!#rZIpQ=Fe;DF679h% z{GQ~FU9C60mp0i71_v6r)49V?h2%Te0m3!wB*~f!^w;E@HuV~VjCS62R=+1%PpPu= z%07MbT-?LZZSPx;4bRiT3%`JG#bqp(@a@>WA^Fmq-g2o;sg|16&HwIx@tvVXzfXD3 zTDe%BEaqgzJ}W^(Hl?_?+p)030HwiV_*#0EOh^Ub<5*5eqOvpr^k!znCd+z!M7Z>n z2vr=a!{AKTT*SPpTtC%?`#x!BEos(eE;n&cImeoE-}Kb#$YK9R8yDU(5gou1K=N8@ z55fr*(emOL^H1$>vP_~n|3%g)VnljVBiwLpz;I4Z2JUcr%h;f8d8)}Y{#igGZ&1jr zt+Qi24GBjSO3}qUNZ9Q|)L|35s5ClJV({RDoo`RLJF00pL6w8Izsfm3AgT{^raH*d zmy+gX5q)G{1k+xF{q(MnBI!JG*`$;g`QYE*%Oet~HXHh0@4Pxq*ZSC}NGgv{`(g z&1^xwt=4D*fy6Oc>Y~I7>Ekb62%jY>I&}`Hr^H}J>vX2959t6B(n_;HomU6NbK5IO zc-h)wNSDG6>2+e{;W4)YYRGI$JSu0FYrAR9+QaFcy)n~Eh>2a9Ko#D%X-EO?9T?~%t-D_D%Ag8d?kUxm=KFu35ty{OTo+*jU z)*QMnmGyNReUI7ET(@bK1lxT97a;g+y?4S!G-;g!?=m z@6pl__^+j*t`-jFpOxY9B?%MYADH|g*^@9Q7Kp%qEf9}m;?^t2tuQ?vrp=K$;vLQE zpJmH0JlwM7I3CVGANQNgczA=SPvV`h)4xD*cKSFdjycCo6%-G&>1c?;Kjbmv`U?;@ zC7lF3ZVm8HDF8ePc*2?e85HL#jt_SDpmn4tK~H#$U!XXTaq^_c2O$Q$&~=Uq06+BO z6XKtbiA(13?uVaD6vc0d|BO?A2E;YZ - - - - - - Modular Scale - - - - - -

Vulputate Consectetur Vestibulum Quam Dapibus

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde delectus quam debitis dicta modi, laboriosam architecto fuga voluptatibus. Porro eveniet dolores ipsa eum architecto non in temporibus natus magnam perferendis.

-

Consectetur velit pariatur tempore neque perferendis officiis praesentium error a aliquid, ad delectus quas quidem assumenda id nostrum blanditiis at non soluta aut sed iste accusantium nisi laborum? Consequatur, sint.

-

Nulla, doloribus, atque. Molestias culpa nostrum eligendi expedita, dolore iure commodi quas velit voluptatem, tempore eveniet eum voluptates veniam deserunt. Pariatur ipsa saepe corrupti aut perspiciatis, rem nulla nihil. Est.

-

Quidem architecto, totam animi porro quaerat cupiditate ex dolorum cum facere vel. A fugiat cupiditate deserunt reiciendis est odit. Quae laborum, distinctio rerum pariatur autem voluptatem doloribus nostrum dicta libero.

-

Maxime dignissimos provident, at commodi eius unde accusamus praesentium iste, itaque consequatur, eum ab. Modi assumenda dolor dolorum molestias debitis, provident voluptate. Ex porro mollitia voluptatem hic possimus, quaerat in.

- -

Parturient Condimentum Commodo Ligula Tristique

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis quas tempore soluta esse ratione sunt, cupiditate quibusdam, libero modi architecto dicta ut, distinctio dolores delectus accusantium laudantium alias. Fugiat, commodi.

-

Vehicula Justo Porta Fringilla Cras

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis quas tempore soluta esse ratione sunt, cupiditate quibusdam, libero modi architecto dicta ut, distinctio dolores delectus accusantium laudantium alias. Fugiat, commodi.

-

Venenatis Pharetra Cras Risus Malesuada

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis quas tempore soluta esse ratione sunt, cupiditate quibusdam, libero modi architecto dicta ut, distinctio dolores delectus accusantium laudantium alias. Fugiat, commodi.

-
Ridiculus Risus Vehicula Ullamcorper Purus
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis quas tempore soluta esse ratione sunt, cupiditate quibusdam, libero modi architecto dicta ut, distinctio dolores delectus accusantium laudantium alias. Fugiat, commodi.

- - - - diff --git a/test-compass/sass/style.scss b/test-compass/sass/style.scss deleted file mode 100644 index 4a702c87..00000000 --- a/test-compass/sass/style.scss +++ /dev/null @@ -1,56 +0,0 @@ -@import "modularscale"; - -$modularscale: ( - base: 16px, - ratio: 1.5 -); - -@debug ms(-1); -@debug ms(); -@debug ms(0); -@debug ms(1); -@debug ms(2); - -$modularscale: ( - base: 1em, - ratio: 1.3, - 20em: ( - ratio: 1.3at5 - ), - 60em: ( - ratio: 2at5 - ), -); - -body { - line-height: 1.3; - margin: 0 auto; - padding: 10% 5% 50%; - max-width: 42em; - font-size: ms(0); -} - -h1 { - @include ms-respond(font-size, 5); - line-height: 1; -} -h2 { - @include ms-respond(font-size, 4); - line-height: 1; -} -h3 { - @include ms-respond(font-size, 3); - line-height: 1; -} -h4 { - @include ms-respond(font-size, 2); - line-height: 1; -} -h5 { - @include ms-respond(font-size, 1); - line-height: 1; -} -h6 { - @include ms-respond(font-size, 0); - line-height: 1; -} diff --git a/test-eyeglass/.gitignore b/test-eyeglass/.gitignore deleted file mode 100644 index a0b47a18..00000000 --- a/test-eyeglass/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -package-lock.json -.eyeglass-cache \ No newline at end of file diff --git a/test-eyeglass/build.js b/test-eyeglass/build.js deleted file mode 100644 index 76704e09..00000000 --- a/test-eyeglass/build.js +++ /dev/null @@ -1,16 +0,0 @@ -const sass = require('node-sass'); -const eyeglass = require('eyeglass'); -const path = require('path'); - -sass.render( - eyeglass({ file: path.join(__dirname, 'main.scss') }), - (err, res) => { - if (err) { - console.error(err.stack); - process.exitCode = 1; - return; - } else { - console.log(res.css.toString()); - } - } -); diff --git a/test-eyeglass/main.scss b/test-eyeglass/main.scss deleted file mode 100644 index 9d764830..00000000 --- a/test-eyeglass/main.scss +++ /dev/null @@ -1,56 +0,0 @@ -@import 'modularscale'; - -$modularscale: ( - base: 16px, - ratio: 1.5 -); - -@debug ms(-1); -@debug ms(); -@debug ms(0); -@debug ms(1); -@debug ms(2); - -$modularscale: ( - base: 1em, - ratio: 1.3, - 20em: ( - ratio: 1.3 - ), - 60em: ( - ratio: 1.6 - ), -); - -body { - line-height: 1.3; - margin: 0 auto; - padding: 10% 5% 50%; - max-width: 42em; - font-size: ms(0); -} - -h1 { - @include ms-respond(font-size, 5); - line-height: 1; -} -h2 { - @include ms-respond(font-size, 4); - line-height: 1; -} -h3 { - @include ms-respond(font-size, 3); - line-height: 1; -} -h4 { - @include ms-respond(font-size, 2); - line-height: 1; -} -h5 { - @include ms-respond(font-size, 1); - line-height: 1; -} -h6 { - @include ms-respond(font-size, 0); - line-height: 1; -} diff --git a/test-eyeglass/package.json b/test-eyeglass/package.json deleted file mode 100644 index fc37f74c..00000000 --- a/test-eyeglass/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "test-eyeglass", - "version": "0.0.0", - "scripts": { - "build-css": "node build.js" - }, - "license": "MIT", - "devDependencies": { - "eyeglass": "^2.4.1", - "node-sass": "^4.12.0" - }, - "dependencies": { - "modularscale-sass": "file:.." - } -} From d300d9a8103a14bbeefd93cdf06899ae5ccc1dba Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 06:08:13 -0700 Subject: [PATCH 02/63] Starting the re-write --- .DS_Store | Bin 8196 -> 8196 bytes stylesheets/_modularscale.scss | 1 - stylesheets/modularscale.zip | Bin 6160 -> 0 bytes stylesheets/modularscale/_function.scss | 12 +++++--- stylesheets/modularscale/_pow.scss | 39 ------------------------ test/test.css | 8 +++++ test/test.css.map | 1 + test/test.scss | 8 +++++ 8 files changed, 24 insertions(+), 45 deletions(-) delete mode 100644 stylesheets/modularscale.zip delete mode 100644 stylesheets/modularscale/_pow.scss create mode 100644 test/test.css create mode 100644 test/test.css.map create mode 100644 test/test.scss diff --git a/.DS_Store b/.DS_Store index 303757f3f483d7a0e15f22490f37041df4be8901..71051d75d6ab795829d4ca7acc47406b3b607887 100644 GIT binary patch delta 67 zcmZp1XmOa}FUrcmz`)4BAi%(o%23RZ0VGoyN;VcwW1rZ-yP2JXg@ciGa=NHtHcN=UXPVd`0RRgr5u*SA delta 88 zcmZp1XmOa}FUrQiz`)4BAi%(o$WY8soKl>ela#-)a2or>2Hwr=94s6%AQkKkISiQ$ gNkA1ys`7IfCOe2pZB`RF#=e zI8r2(`q<<1y$?g*_r2cjT3y%v_w_sHfA0I7`{-&B5|IILk3wU4?Z3YK{YC+R0GwTI zJrOV@$_9q8yI^Dr0#K}1nww5nnr{-&0(6fqr3C+pfB-p~de*&k@Nvq*qj_rLsVW z&HSX%EJg6Ig!H@XUfa!daI(*OIX8(ht)(ioDuagAAETF`R;vW zY?Yf=OE8Nzb~DHw2HVr9Ank5+k1-YuKqi=4l-@g^FE;O9qdOBZTxR6Wh0X%0j&!kd z7KUajzvIK)4jVHG|3K5ej6H|lY9Wf20HXWfk6m}Q-U~HRln=_enIru(jcz)~ol4Va z11e-MyY2A2IV#opAwsU?d%4+zL4!Hx&WD9115BRnSam*hXm5^nQdbbHQ8tadvgnD# zV7mLF^U8uxCiDjU!N{c?pSWj<0V}bFq+#s& zJ8Ajv31E)0q-LYHZ|0>(&GeuQ>|t+H3wwKeE&KX}T6#zrTC~_jWC<({nwn3I`GK}# zucj~r(gpmCo@|iuhS`XZ)Qr+N9!l%AAIjI?w&ZB!le`FVke*y7MKzfo>e?G(UT*K5 zm6$AQy*6}6psPg!&dJU(FMm-+a)A%%f+t{#tT#T z)H&uFBoP+uf+d*Pog~bN{5Bm~E-rMHd>;gu_0mN*Twby%eWaNpEH%U4(Vs$3!R}7f zc7BSZUL~BWy@4Q?b2s+6=sO>N$L7_EQUUK*bt*>h^R>Ezc64(`ldM_-`l_78Qb+kk zb0#bRugmOW$#)*u0mc`hKiimgh)OX^cSK>5g}(h5!Nb>7lFaqK@WGqL=pK-c|yzP#JW-iCpQ})EiOAO-{o9)@?&5Ec5*AG zKi+Yyd`9aRsix-FGO(QS;yyw=T z!5V4ax8}G#l5}q1Q_{n0h=VU}`C1GT4tX6FbTc1hxDTxFm9BPG8kT@Hb>6EKV4oSs z++-13h$Ph`w1j(fb}E0q046K!qZ3aSZ;YMCxPh9T{N>Tz_b*?OvR~J!{Op3BYlA1> zv+#{Qgf{L$Wz~cMDi>gi%D=;ni0a^tJN zQUGaG7hFMk*mfoQjvpooO?wm71dImv9C0z^0O4L8e{g@OaaVR9pFGA#)lcZL?S z7&2pxN&PAWl%91V%GEAIm?qAKfzFPTe*CJR`2enQyA-@Tyc%}nE5e@;7peda_IctF zhx(6R|1_ZSEBM5M{uZj&Q5VAt)9vx!%zCGd4B?;!d}%Jq5i_eMm&j4K@w%k!sz?N4 zd>DOmbQ($#8GO6UQGSx$h9!i(ynZQ!Fad2epleK~z&oH9Ok3|x3Z`6X;#Z<>qqTSN zc$K&$*GT-?4q9r(m->RSE@gGLIOp1^P9@QKnY12@B9N%i#>OXtOGe=E*8Ka;dAp3a?JqL-F}W_^ ziywww1!u~OzMw4x%KWfAblKoW)%)sQoTS3W8~CK5Jp%$anvJTsqe2#zo1Mo88{;@) z+b*u~4#cis&&Hy$J55bcByo zw!Mukcp@!6ii|kmQ|5s42&CT?dqzMdc)J&MC#LSo^Lc=yZ8lY&;ZQcKz_8wCOFOIJ z+nHW0b^L+j}NErMEuw_P0VPc<7>I>zMazab(Uqm;RiQHzd=;Y;@kSr@1Q~T=NNfx7m zS-nH`o&I5C2N_S>HEgm+?Q*Nv;Ua0dt{P`Z39a^(l5F zr!Tw$5wIGlX{YRe!*-R$g-sb%movJQ?DS=lSRnmwx1EpusJ$?+j!BC zQuh*9mZh`MIQgUILqq(Z6oTP5MMil#z>s(~`Tvrv9iya!Rs^YSOLtm%C>2!0SS2lx z0I;q@7iTh$SkiL7azvvT!D!XS$HRaM?3%ISikuaTWq-{T)$_NnQjfdQW$XIgR7+IS z2z#<9qpQh~!qTB7880gO76Bz=3C!+$&f3@QynFp=Q&laq6;hYSMnFA;Ydwyh=uzZP zRp|p^3(b2Ywc1+cO}FN4-es)JBCa*obfcmsbYYj&HM=BuKO9i`msaicbgd+Qe$wqC zhP)CD_+HMck_C}t{vJj_x*}@S|7}u=F-L7pwE~ppC7n!5H5dV5$z5p9} zFRs%)-1V~pTg8VJ(<$(F+^%;)^)Ae5h4sl9@rv;+z7GSX0J5jg7@4;By4G_1Xk@Et z70ro@=yTs~!6-bd3wRth1R8tNs-F*pJy{DdO_SK`69wE8>)V6~!XK1AkYdg8s2y%W zYl>TlEOtg}8KW18YD5Y8_mB-WqhDz678P-db8tnw=F3rZoDON|etIps*hqZ3N?Cz( zw#1A0EIXsq*KIQ?1FQvNwBZh+UDRw;eQ+rPQzS|S)pei}I5;zy$D3U;VVFI|o9SFW zyY;Fh%0p-IocfJ#o$EU`aao>KW*>V@CN>d4RdgOtBh_yM3#L+D!75#WAimdP-|03| zy&N2UFmSY{%CZGXxLK0Yn69i2*-%~8F3rgIdQ7n3(#Lsej~)JMwoFZg0=H5t+V*M4 zIl0NMv#Tl4L+40#M2&{#?C`A3e%P|L=?(`_jH*lQ9Pr8*RpJj zGdupDWZZ9!pLwQl59#9UNq?oP?rWG={T5msn5^I8E4jZqT@|Pn832)+0#>4XE17>LDd4EGE1O*!Ll4D^5@9qjPSOWF6AC-;0ffolt4s~fZikdYM` ztkiCHCFK0~Qj=wxp8HckTX;g(WP76b>XoXDeCr6#H-72TTN!#rZIpQ=Fe;DF679h% z{GQ~FU9C60mp0i71_v6r)49V?h2%Te0m3!wB*~f!^w;E@HuV~VjCS62R=+1%PpPu= z%07MbT-?LZZSPx;4bRiT3%`JG#bqp(@a@>WA^Fmq-g2o;sg|16&HwIx@tvVXzfXD3 zTDe%BEaqgzJ}W^(Hl?_?+p)030HwiV_*#0EOh^Ub<5*5eqOvpr^k!znCd+z!M7Z>n z2vr=a!{AKTT*SPpTtC%?`#x!BEos(eE;n&cImeoE-}Kb#$YK9R8yDU(5gou1K=N8@ z55fr*(emOL^H1$>vP_~n|3%g)VnljVBiwLpz;I4Z2JUcr%h;f8d8)}Y{#igGZ&1jr zt+Qi24GBjSO3}qUNZ9Q|)L|35s5ClJV({RDoo`RLJF00pL6w8Izsfm3AgT{^raH*d zmy+gX5q)G{1k+xF{q(MnBI!JG*`$;g`QYE*%Oet~HXHh0@4Pxq*ZSC}NGgv{`(g z&1^xwt=4D*fy6Oc>Y~I7>Ekb62%jY>I&}`Hr^H}J>vX2959t6B(n_;HomU6NbK5IO zc-h)wNSDG6>2+e{;W4)YYRGI$JSu0FYrAR9+QaFcy)n~Eh>2a9Ko#D%X-EO?9T?~%t-D_D%Ag8d?kUxm=KFu35ty{OTo+*jU z)*QMnmGyNReUI7ET(@bK1lxT97a;g+y?4S!G-;g!?=m z@6pl__^+j*t`-jFpOxY9B?%MYADH|g*^@9Q7Kp%qEf9}m;?^t2tuQ?vrp=K$;vLQE zpJmH0JlwM7I3CVGANQNgczA=SPvV`h)4xD*cKSFdjycCo6%-G&>1c?;Kjbmv`U?;@ zC7lF3ZVm8HDF8ePc*2?e85HL#jt_SDpmn4tK~H#$U!XXTaq^_c2O$Q$&~=Uq06+BO z6XKtbiA(13?uVaD6vc0d|BO?A2E;YZ nth($base,1)) { // divide the value until it aligns with main base. @while($ms-base > nth($base,1)) { - $ms-base: $ms-base / $ratio; + $ms-base: math.div($ms-base,$ratio); } $ms-base: $ms-base * $ratio; } @@ -45,9 +47,9 @@ $ms-bases: ms-sort($ms-bases); // Find step to use in calculation - $vtep: floor($v / length($ms-bases)); + $vtep: floor(math.div($v / length($ms-bases))); // Find base to use in calculation - $ms-base: round(($v / length($ms-bases) - $vtep) * length($ms-bases)) + 1; + $ms-base: round((math.div($v / length($ms-bases)) - $vtep) * length($ms-bases)) + 1; - @return ms-pow($ratio, $vtep) * nth($ms-bases,$ms-base); + @return math.pow($ratio, $vtep) * nth($ms-bases,$ms-base); } \ No newline at end of file diff --git a/stylesheets/modularscale/_pow.scss b/stylesheets/modularscale/_pow.scss deleted file mode 100644 index 3e3ab113..00000000 --- a/stylesheets/modularscale/_pow.scss +++ /dev/null @@ -1,39 +0,0 @@ -// Sass does not have native pow() support so this needs to be added. -// Compass and other libs implement this more extensively. -// In order to keep this simple, use those when they are avalible. -// Issue for pow() support in Sass: https://github.com/sass/sass/issues/684 - -@function ms-pow($b,$e) { - - // Return 1 if exponent is 0 - @if $e == 0 { - @return 1; - } - - // If pow() exists (compass or mathsass) use that. - @if function-exists('pow') { - @return pow($b,$e); - } - - // This does not support non-integer exponents, - // Check and return an error if a non-integer exponent is passed. - @if (floor($e) != $e) { - @error 'Non-integer values are not supported in modularscale by default. Try using mathsass in your project to add non-integer scale support. https://github.com/terkel/mathsass' - } - - // Seed the return. - $ms-return: $b; - - // Multiply or divide by the specified number of times. - @if $e > 0 { - @for $i from 1 to $e { - $ms-return: $ms-return * $b; - } - } - @if $e < 0 { - @for $i from $e through 0 { - $ms-return: $ms-return / $b; - } - } - @return $ms-return; -} \ No newline at end of file diff --git a/test/test.css b/test/test.css new file mode 100644 index 00000000..c0a5eb04 --- /dev/null +++ b/test/test.css @@ -0,0 +1,8 @@ +* { + font-size: 1.5em; + font-size: 2.25em; + font-size: 3.375em; + foo: 3.72; +} + +/*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map new file mode 100644 index 00000000..7433cdd6 --- /dev/null +++ b/test/test.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAEA;EACC;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss new file mode 100644 index 00000000..dae156e0 --- /dev/null +++ b/test/test.scss @@ -0,0 +1,8 @@ +@use '../stylesheets/modularscale' as ms; + +* { + font-size: ms.ms(1); + font-size: ms.ms(2); + font-size: ms.ms(3); + foo: 1.24 * 3; +} \ No newline at end of file From 04e34939078e0d16e26d62aa27c796672649f705 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 06:19:33 -0700 Subject: [PATCH 03/63] Chipping away --- changelog.md | 8 ++--- readme.md | 6 ++-- stylesheets/_modularscale.scss | 6 +--- stylesheets/modularscale/_function.scss | 38 +++++++++++----------- stylesheets/modularscale/_respond.scss | 24 +++++++------- stylesheets/modularscale/_round-px.scss | 7 ---- stylesheets/modularscale/_settings.scss | 6 ++-- stylesheets/modularscale/_sort.scss | 2 +- stylesheets/modularscale/_strip-units.scss | 2 +- stylesheets/modularscale/_sugar.scss | 7 ---- stylesheets/modularscale/_target.scss | 16 +++++---- stylesheets/modularscale/_vars.scss | 6 ++-- test/test.css | 7 ++-- test/test.css.map | 2 +- test/test.scss | 11 +++++-- 15 files changed, 69 insertions(+), 79 deletions(-) delete mode 100644 stylesheets/modularscale/_round-px.scss delete mode 100644 stylesheets/modularscale/_sugar.scss diff --git a/changelog.md b/changelog.md index 1b3cf518..8952cf18 100644 --- a/changelog.md +++ b/changelog.md @@ -30,7 +30,7 @@ # Version 3.0.1 -* Fix issue with generic `pow()` being used instead of `ms-pow()` +* Fix issue with generic `pow()` being used instead of `pow()` # Version 3.0.0 @@ -50,7 +50,7 @@ # Version 2.1.0 - Ground-up re-write of ms-respond based on http://madebymike.com.au/writing/precise-control-responsive-typography/ + Ground-up re-write of respond based on http://madebymike.com.au/writing/precise-control-responsive-typography/ # Version 2.0.6 @@ -66,8 +66,8 @@ * Complete re-write. * ratios are variables, not functions - * Common variables are scoped to "ms-" - * ms-lists() is the list functions + * Common variables are scoped to "" + * lists() is the list functions * No more mixins at all, only functions. * Increased compatibility with Sass 3.1 and up * Compatibility with LibSass diff --git a/readme.md b/readme.md index 8059f6bd..254ff586 100644 --- a/readme.md +++ b/readme.md @@ -49,7 +49,7 @@ h4 { } ``` -Occasionally you may wind up with conflicts. All critical components are name-spaced to avoid conflicts with other libraries. If you do run into a conflict, `ms-function()` is the no-conflict function. +Occasionally you may wind up with conflicts. All critical components are name-spaced to avoid conflicts with other libraries. If you do run into a conflict, `function()` is the no-conflict function. #### Multiple scale threads @@ -99,11 +99,11 @@ _Note that you must use the same units for both your type and your breakpoints f This technique is based on [Mike Riethmuller’s](https://twitter.com/MikeRiethmuller) [_Precise control over responsive typography_](http://madebymike.com.au/writing/precise-control-responsive-typography/). A fantastic technique for fluidly scaling typography. -Then, call the mixin `@include ms-respond();` and a fully fluid and responsive scale will be generated. +Then, call the mixin `@include respond();` and a fully fluid and responsive scale will be generated. ```scss h2 { - @include ms-respond(font-size,5); + @include respond(font-size,5); } ``` diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index 8ab400fe..f1649791 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -7,10 +7,6 @@ @import 'modularscale/sort'; @import 'modularscale/target'; @import 'modularscale/function'; -@import 'modularscale/round-px'; // Mixins -@import 'modularscale/respond'; - -// Syntax sugar -@import 'modularscale/sugar'; \ No newline at end of file +@import 'modularscale/respond'; \ No newline at end of file diff --git a/stylesheets/modularscale/_function.scss b/stylesheets/modularscale/_function.scss index b703100d..f0e7138e 100644 --- a/stylesheets/modularscale/_function.scss +++ b/stylesheets/modularscale/_function.scss @@ -1,15 +1,15 @@ @use "sass:math"; -@function ms-function($v: 0, $base: false, $ratio: false, $thread: false, $settings: $modularscale) { +@function step($v: 0, $base: false, $ratio: false, $thread: false, $settings: $settings) { // Parse settings - $ms-settings: ms-settings($base,$ratio,$thread,$settings); - $base: nth($ms-settings, 1); - $ratio: nth($ms-settings, 2); + $settings: settings($base,$ratio,$thread,$settings); + $base: nth($settings, 1); + $ratio: nth($settings, 2); // Render target values from settings. @if unit($ratio) != '' { - $ratio: ms-target($ratio,$base) + $ratio: target($ratio,$base) } // Fast calc if not multi stranded @@ -18,38 +18,38 @@ } // Create new base array - $ms-bases: nth($base,1); + $bases: nth($base,1); // Normalize base values @for $i from 2 through length($base) { // initial base value - $ms-base: nth($base,$i); + $base: nth($base,$i); // If the base is bigger than the main base - @if($ms-base > nth($base,1)) { + @if($base > nth($base,1)) { // divide the value until it aligns with main base. - @while($ms-base > nth($base,1)) { - $ms-base: math.div($ms-base,$ratio); + @while($base > nth($base,1)) { + $base: math.div($base,$ratio); } - $ms-base: $ms-base * $ratio; + $base: $base * $ratio; } // If the base is smaller than the main base. - @else if ($ms-base < nth($base,1)) { + @else if ($base < nth($base,1)) { // pump up the value until it aligns with main base. - @while $ms-base < nth($base,1) { - $ms-base: $ms-base * $ratio; + @while $base < nth($base,1) { + $base: $base * $ratio; } } // Push into new array - $ms-bases: append($ms-bases,$ms-base); + $bases: append($bases,$base); } // Sort array from smallest to largest. - $ms-bases: ms-sort($ms-bases); + $bases: sort($bases); // Find step to use in calculation - $vtep: floor(math.div($v / length($ms-bases))); + $vtep: floor(math.div($v / length($bases))); // Find base to use in calculation - $ms-base: round((math.div($v / length($ms-bases)) - $vtep) * length($ms-bases)) + 1; + $base: round((math.div($v / length($bases)) - $vtep) * length($bases)) + 1; - @return math.pow($ratio, $vtep) * nth($ms-bases,$ms-base); + @return math.pow($ratio, $vtep) * nth($bases,$base); } \ No newline at end of file diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 9f0945af..11aa260d 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -1,24 +1,24 @@ // Generate calc() function // based on Mike Riethmuller's Precise control over responsive typography // http://madebymike.com.au/writing/precise-control-responsive-typography/ -@function ms-fluid($val1: 1em, $val2: 1em, $break1: 0, $break2: 0) { - $diff: ms-unitless($val2) - ms-unitless($val1); +@function fluid($val1: 1em, $val2: 1em, $break1: 0, $break2: 0) { + $diff: unitless($val2) - unitless($val1); // v1 + (v2 - v1) * ( (100vw - b1) / b2 - b1 ) - @return calc( #{$val1} + #{ms-unitless($val2) - ms-unitless($val1)} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) ); + @return calc( #{$val1} + #{unitless($val2) - unitless($val1)} * ( ( 100vw - #{$break1}) / #{unitless($break2) - unitless($break1)} ) ); } // Main responsive mixin -@mixin ms-respond($prop, $val, $map: $modularscale, $ms-important: false) { - $base: $ms-base; - $ratio: $ms-ratio; +@mixin respond($prop, $val, $map: $modularscale, $important: false) { + $base: $base; + $ratio: $ratio; $first-write: true; $last-break: null; $important: ''; - @if $ms-important == true { + @if $important == true { $important: ' !important'; } @@ -29,7 +29,7 @@ // Write out the first value without a media query. @if $first-write { - #{$prop}: unquote("#{ms-function($val, $thread: $v, $settings: $map)}#{$important}"); + #{$prop}: unquote("#{function($val, $thread: $v, $settings: $map)}#{$important}"); // Not the first write anymore, reset to false to move on. $first-write: false; @@ -39,9 +39,9 @@ // Write intermediate breakpoints. @else { @media (min-width: $last-break) and (max-width: $v) { - $val1: ms-function($val, $thread: $last-break, $settings: $map); - $val2: ms-function($val, $thread: $v, $settings: $map); - #{$prop}: unquote("#{ms-fluid($val1,$val2,$last-break,$v)}#{$important}"); + $val1: function($val, $thread: $last-break, $settings: $map); + $val2: function($val, $thread: $v, $settings: $map); + #{$prop}: unquote("#{fluid($val1,$val2,$last-break,$v)}#{$important}"); } $last-break: $v; } @@ -52,7 +52,7 @@ // Write the last breakpoint. @if $last-break { @media (min-width: $last-break) { - #{$prop}: unquote("#{ms-function($val, $thread: $last-break, $settings: $map)}#{$important}"); + #{$prop}: unquote("#{function($val, $thread: $last-break, $settings: $map)}#{$important}"); } } } \ No newline at end of file diff --git a/stylesheets/modularscale/_round-px.scss b/stylesheets/modularscale/_round-px.scss deleted file mode 100644 index 6d8c9bc8..00000000 --- a/stylesheets/modularscale/_round-px.scss +++ /dev/null @@ -1,7 +0,0 @@ -@function ms-round-px($r) { - @if unit($r) == 'px' { - @return round($r); - } - @warn "ms-round-px is no longer used by modular scale and will be removed in the 3.1.0 release."; - @return $r; -} \ No newline at end of file diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_settings.scss index fb87bb10..1ddb8d1c 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_settings.scss @@ -2,9 +2,9 @@ // Settings should cascade down like you would expect in CSS. // More specific overrides previous settings. -@function ms-settings($b: false, $r: false, $t: false, $m: $modularscale) { - $base: $ms-base; - $ratio: $ms-ratio; +@function settings($b: false, $r: false, $t: false, $m: $modularscale) { + $base: $base; + $ratio: $ratio; $thread: map-get($m, $t); // Override with user settings diff --git a/stylesheets/modularscale/_sort.scss b/stylesheets/modularscale/_sort.scss index 01188f16..9d748e54 100644 --- a/stylesheets/modularscale/_sort.scss +++ b/stylesheets/modularscale/_sort.scss @@ -2,7 +2,7 @@ // Would like to replace with http://sassmeister.com/gist/30e4863bd03ce0e1617c // Unfortunately libsass has a bug with passing arguments into the min() funciton. -@function ms-sort($l) { +@function sort($l) { // loop until the list is confirmed to be sorted $sorted: false; diff --git a/stylesheets/modularscale/_strip-units.scss b/stylesheets/modularscale/_strip-units.scss index a89b414c..b1015a54 100644 --- a/stylesheets/modularscale/_strip-units.scss +++ b/stylesheets/modularscale/_strip-units.scss @@ -2,6 +2,6 @@ // This function should not be used elsewhere // It is used here because calc() doesn't do unit logic // AND target ratios use units as a hack to get a number. -@function ms-unitless($val) { +@function unitless($val) { @return ($val / ($val - $val + 1)); } \ No newline at end of file diff --git a/stylesheets/modularscale/_sugar.scss b/stylesheets/modularscale/_sugar.scss deleted file mode 100644 index c46a4fc1..00000000 --- a/stylesheets/modularscale/_sugar.scss +++ /dev/null @@ -1,7 +0,0 @@ -// To attempt to avoid conflicts with other libraries -// all funcitons are namespaced with `ms-`. -// However, to increase usability, a shorthand function is included here. - -@function ms($v: 0, $base: false, $ratio: false, $thread: false, $settings: $modularscale) { - @return ms-function($v, $base, $ratio, $thread, $settings); -} \ No newline at end of file diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 633fdc35..95423de9 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,5 +1,7 @@ +@use 'sass:math'; + // Convert number string to number -@function ms-to-num($n) { +@function to-num($n) { $l: str-length($n); $r: 0; $m: str-index($n,'.'); @@ -22,7 +24,7 @@ @else { $v: null; } @if $v != null { $m: $m - 1; - $r: $r + ms-pow(10,$m - 1) * $v; + $r: $r + pow(10,$m - 1) * $v; } @else { $l: $l - 1; } @@ -31,19 +33,19 @@ } // Find a ratio based on a target value -@function ms-target($t,$b) { +@function target($t,$b) { // Convert to string $t: $t + ''; // Remove base units to calulate ratio - $b: ms-unitless(nth($b,1)); + $b: unitless(nth($b,1)); // Find where 'at' is in the string $at: str-index($t,'at'); // Slice the value and target out // and convert strings to numbers - $v: ms-to-num(str-slice($t,0,$at - 1)); - $t: ms-to-num(str-slice($t,$at + 2)); + $v: to-num(str-slice($t,0,$at - 1)); + $t: to-num(str-slice($t,$at + 2)); // Solve the modular scale function for the ratio. - @return ms-pow(($v/$b),(1/$t)); + @return math.pow(($v/$b),(1/$t)); } \ No newline at end of file diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_vars.scss index 8f421847..bd2f13a2 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_vars.scss @@ -20,6 +20,6 @@ $major-second : 1.125 ; $minor-second : 1.066666667 ; // Base config -$ms-base : 1em !default; -$ms-ratio : $fifth !default; -$modularscale : () !default; \ No newline at end of file +$base : 1em !default; +$ratio : $fifth !default; +$settings : () !default; \ No newline at end of file diff --git a/test/test.css b/test/test.css index c0a5eb04..a60a7a92 100644 --- a/test/test.css +++ b/test/test.css @@ -1,7 +1,8 @@ * { - font-size: 1.5em; - font-size: 2.25em; - font-size: 3.375em; + font-size: 1.2em; + font-size: 1.56em; + font-size: 2.028em; + font-size: 2.6364em; foo: 3.72; } diff --git a/test/test.css.map b/test/test.css.map index 7433cdd6..77897b00 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAEA;EACC;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAMA;EACC;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index dae156e0..e0bea8d2 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,8 +1,13 @@ @use '../stylesheets/modularscale' as ms; +ms.$settings: ( + base: 1.2em, + ratio: 1.3 +); * { - font-size: ms.ms(1); - font-size: ms.ms(2); - font-size: ms.ms(3); + font-size: ms.step(0); + font-size: ms.step(1); + font-size: ms.step(2); + font-size: ms.step(3); foo: 1.24 * 3; } \ No newline at end of file From e135d42d6a50fc3ba1a226f9da37683218cb31b4 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 06:53:20 -0700 Subject: [PATCH 04/63] Updates --- package.json | 2 +- stylesheets/modularscale/_function.scss | 27 ++++++++------- stylesheets/modularscale/_sort.scss | 45 ++++++++----------------- test/test.css | 18 +++++++--- test/test.css.map | 2 +- test/test.scss | 23 +++++++++---- 6 files changed, 59 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index efcf179e..d214cb9f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,6 @@ }, "homepage": "https://www.modularscale.com", "dependencies": { - "sass": "^1.34.0" + "sass": "^1.30.0" } } diff --git a/stylesheets/modularscale/_function.scss b/stylesheets/modularscale/_function.scss index f0e7138e..509a97f8 100644 --- a/stylesheets/modularscale/_function.scss +++ b/stylesheets/modularscale/_function.scss @@ -1,11 +1,12 @@ @use "sass:math"; +@use "sass:list"; @function step($v: 0, $base: false, $ratio: false, $thread: false, $settings: $settings) { // Parse settings $settings: settings($base,$ratio,$thread,$settings); - $base: nth($settings, 1); - $ratio: nth($settings, 2); + $base: list.nth($settings, 1); + $ratio: list.nth($settings, 2); // Render target values from settings. @if unit($ratio) != '' { @@ -13,29 +14,29 @@ } // Fast calc if not multi stranded - @if(length($base) == 1) { + @if(list.length($base) == 1) { @return math.pow($ratio, $v) * $base; } // Create new base array - $bases: nth($base,1); + $bases: list.nth($base,1); // Normalize base values - @for $i from 2 through length($base) { + @for $i from 2 through list.length($base) { // initial base value - $base: nth($base,$i); + $base: list.nth($base,$i); // If the base is bigger than the main base - @if($base > nth($base,1)) { + @if($base > list.nth($base,1)) { // divide the value until it aligns with main base. - @while($base > nth($base,1)) { + @while($base > list.nth($base,1)) { $base: math.div($base,$ratio); } $base: $base * $ratio; } // If the base is smaller than the main base. - @else if ($base < nth($base,1)) { + @else if ($base < list.nth($base,1)) { // pump up the value until it aligns with main base. - @while $base < nth($base,1) { + @while $base < list.nth($base,1) { $base: $base * $ratio; } } @@ -47,9 +48,9 @@ $bases: sort($bases); // Find step to use in calculation - $vtep: floor(math.div($v / length($bases))); + $vtep: math.floor(math.div($v / list.length($bases))); // Find base to use in calculation - $base: round((math.div($v / length($bases)) - $vtep) * length($bases)) + 1; + $base: math.round((math.div($v / list.length($bases)) - $vtep) * list.length($bases)) + 1; - @return math.pow($ratio, $vtep) * nth($bases,$base); + @return math.pow($ratio, $vtep) * list.nth($bases,$base); } \ No newline at end of file diff --git a/stylesheets/modularscale/_sort.scss b/stylesheets/modularscale/_sort.scss index 9d748e54..5b795d87 100644 --- a/stylesheets/modularscale/_sort.scss +++ b/stylesheets/modularscale/_sort.scss @@ -1,34 +1,17 @@ -// Basic list sorting -// Would like to replace with http://sassmeister.com/gist/30e4863bd03ce0e1617c -// Unfortunately libsass has a bug with passing arguments into the min() funciton. +@function sort($l...) { + // Seed the return list + $return: (); -@function sort($l) { - - // loop until the list is confirmed to be sorted - $sorted: false; - @while $sorted == false { - - // Start with the assumption that the lists are sorted. - $sorted: true; - - // Loop through the list, checking each value with the one next to it. - // Swap the values if they need to be swapped. - // Not super fast but simple and modular scale doesn't lean hard on sorting. - @for $i from 2 through length($l) { - $n1: nth($l,$i - 1); - $n2: nth($l,$i); - - // If the first value is greater than the 2nd, swap them. - @if $n1 > $n2 { - $l: set-nth($l, $i, $n1); - $l: set-nth($l, $i - 1, $n2); - - // The list isn't sorted and needs to be looped through again. - $sorted: false; - } - } + // Loop through the list only once. + @for $i from 0 to length($l) { + // Find the lowest value + $m: min($l...); + // Write that value to the return + $return: append($return,$m); + // Replace that value in the list so it won’t be called again. + $l: set-nth($l, index($l,$m), 9999999999); } - // Return the sorted list. - @return $l; -} \ No newline at end of file + // Return the newly sorted list + @return $return; +} diff --git a/test/test.css b/test/test.css index a60a7a92..2f775dfc 100644 --- a/test/test.css +++ b/test/test.css @@ -1,9 +1,17 @@ * { - font-size: 1.2em; - font-size: 1.56em; - font-size: 2.028em; - font-size: 2.6364em; - foo: 3.72; + --step-6: 0.01953125em; + --step-5: 0.0390625em; + --step-4: 0.078125em; + --step-3: 0.15625em; + --step-2: 0.3125em; + --step-1: 0.625em; + --step0: 1.25em; + --step1: 2.5em; + --step2: 5em; + --step3: 10em; + --step4: 20em; + --step5: 40em; + --step6: 80em; } /*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map index 77897b00..55c7392c 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAMA;EACC;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index e0bea8d2..b56193ee 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,13 +1,22 @@ @use '../stylesheets/modularscale' as ms; ms.$settings: ( - base: 1.2em, - ratio: 1.3 + base: 1.25em, + ratio: 2 ); + * { - font-size: ms.step(0); - font-size: ms.step(1); - font-size: ms.step(2); - font-size: ms.step(3); - foo: 1.24 * 3; + --step-6: #{ms.step(-6)}; + --step-5: #{ms.step(-5)}; + --step-4: #{ms.step(-4)}; + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; + --step4: #{ms.step(4)}; + --step5: #{ms.step(5)}; + --step6: #{ms.step(6)}; } \ No newline at end of file From 19b633d3ff621500912486bfeb8bdcb596386238 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 12:31:06 -0700 Subject: [PATCH 05/63] Working on multi stranded scales --- stylesheets/modularscale/_function.scss | 65 ++++++++++++++++--------- test/test.css | 32 ++++++------ test/test.css.map | 2 +- test/test.scss | 33 ++++++++----- 4 files changed, 82 insertions(+), 50 deletions(-) diff --git a/stylesheets/modularscale/_function.scss b/stylesheets/modularscale/_function.scss index 509a97f8..eb4df35c 100644 --- a/stylesheets/modularscale/_function.scss +++ b/stylesheets/modularscale/_function.scss @@ -17,32 +17,51 @@ @if(list.length($base) == 1) { @return math.pow($ratio, $v) * $base; } + @else { + $unit: unit(list.nth($base,1)); + $bases: unitless(list.nth($base,1)); + @for $i from 2 through list.length($base) { + $new-base: unitless(list.nth($base,$i)); + @while($new-base > ($ratio * list.nth($base,1))) { + $new-base: math.div($new-base,$ratio); + } + @while($new-base < list.nth($base,1)) { + $new-base: $new-base * $ratio; + } + $bases: list.append($bases,$new-base); + } + // $bases: sort($bases); + + @return $bases; + } // Create new base array - $bases: list.nth($base,1); - + // $bases: list.nth($base,1); + // Normalize base values - @for $i from 2 through list.length($base) { - // initial base value - $base: list.nth($base,$i); - // If the base is bigger than the main base - @if($base > list.nth($base,1)) { - // divide the value until it aligns with main base. - @while($base > list.nth($base,1)) { - $base: math.div($base,$ratio); - } - $base: $base * $ratio; - } - // If the base is smaller than the main base. - @else if ($base < list.nth($base,1)) { - // pump up the value until it aligns with main base. - @while $base < list.nth($base,1) { - $base: $base * $ratio; - } - } - // Push into new array - $bases: append($bases,$base); - } + // @if(list.length($base) > 1) { + // @for $i from 2 through list.length($base) { + // // initial base value + // $base: list.nth($base,$i); + // // If the base is bigger than the main base + // @if($base > list.nth($base,1)) { + // // divide the value until it aligns with main base. + // @while($base > list.nth($base,1)) { + // $base: math.div($base,$ratio); + // } + // $base: $base * $ratio; + // } + // // If the base is smaller than the main base. + // @else if ($base < list.nth($base,1)) { + // // pump up the value until it aligns with main base. + // @while $base < list.nth($base,1) { + // $base: $base * $ratio; + // } + // } + // // Push into new array + // $bases: list.append($bases,$base); + // } + // } // Sort array from smallest to largest. $bases: sort($bases); diff --git a/test/test.css b/test/test.css index 2f775dfc..dff28785 100644 --- a/test/test.css +++ b/test/test.css @@ -1,17 +1,21 @@ -* { - --step-6: 0.01953125em; - --step-5: 0.0390625em; - --step-4: 0.078125em; - --step-3: 0.15625em; - --step-2: 0.3125em; - --step-1: 0.625em; - --step0: 1.25em; - --step1: 2.5em; - --step2: 5em; - --step3: 10em; - --step4: 20em; - --step5: 40em; - --step6: 80em; +.standard { + --step-3: 0.3936200746em; + --step-2: 0.5707491082em; + --step-1: 0.8275862069em; + --step0: 1.2em; + --step1: 1.74em; + --step2: 2.523em; + --step3: 3.65835em; +} + +.multi-stranded { + --step-3: 1 1.05 1.4 1.2; + --step-2: 1 1.05 1.4 1.2; + --step-1: 1 1.05 1.4 1.2; + --step0: 1 1.05 1.4 1.2; + --step1: 1 1.05 1.4 1.2; + --step2: 1 1.05 1.4 1.2; + --step3: 1 1.05 1.4 1.2; } /*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map index 55c7392c..17df90ea 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index b56193ee..8e132ec6 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,22 +1,31 @@ @use '../stylesheets/modularscale' as ms; ms.$settings: ( - base: 1.25em, + base: 1.2em, + ratio: 1.45 +); + +.standard { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: ( + base: 1em 4.2em 1.4em 0.3em, ratio: 2 ); -* { - --step-6: #{ms.step(-6)}; - --step-5: #{ms.step(-5)}; - --step-4: #{ms.step(-4)}; +.multi-stranded { --step-3: #{ms.step(-3)}; --step-2: #{ms.step(-2)}; --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; - --step4: #{ms.step(4)}; - --step5: #{ms.step(5)}; - --step6: #{ms.step(6)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; } \ No newline at end of file From b4228efd052987abe9764d22b609d2505d4557e1 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 15:06:11 -0700 Subject: [PATCH 06/63] Gitting the core function working --- stylesheets/_modularscale.scss | 2 +- stylesheets/modularscale/_function.scss | 54 ++++++------------------- stylesheets/modularscale/_sort.scss | 7 +++- test/test.css | 14 +++---- test/test.scss | 4 +- 5 files changed, 28 insertions(+), 53 deletions(-) diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index f1649791..adfea566 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -9,4 +9,4 @@ @import 'modularscale/function'; // Mixins -@import 'modularscale/respond'; \ No newline at end of file +@import 'modularscale/respond'; diff --git a/stylesheets/modularscale/_function.scss b/stylesheets/modularscale/_function.scss index eb4df35c..1c187f5e 100644 --- a/stylesheets/modularscale/_function.scss +++ b/stylesheets/modularscale/_function.scss @@ -1,5 +1,6 @@ @use "sass:math"; @use "sass:list"; +@import "vars"; @function step($v: 0, $base: false, $ratio: false, $thread: false, $settings: $settings) { @@ -7,6 +8,9 @@ $settings: settings($base,$ratio,$thread,$settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); + + $base-length: list.length($base); + $bases: (); // Render target values from settings. @if unit($ratio) != '' { @@ -14,62 +18,30 @@ } // Fast calc if not multi stranded - @if(list.length($base) == 1) { + @if($base-length == 1) { @return math.pow($ratio, $v) * $base; } @else { $unit: unit(list.nth($base,1)); - $bases: unitless(list.nth($base,1)); - @for $i from 2 through list.length($base) { - $new-base: unitless(list.nth($base,$i)); + $bases: list.nth($base,1); + @for $i from 2 through $base-length { + $new-base: list.nth($base,$i); @while($new-base > ($ratio * list.nth($base,1))) { $new-base: math.div($new-base,$ratio); } @while($new-base < list.nth($base,1)) { - $new-base: $new-base * $ratio; + $new-base: ($new-base * $ratio); } $bases: list.append($bases,$new-base); } - // $bases: sort($bases); - @return $bases; + $bases: sort($bases); } - // Create new base array - // $bases: list.nth($base,1); - - // Normalize base values - // @if(list.length($base) > 1) { - // @for $i from 2 through list.length($base) { - // // initial base value - // $base: list.nth($base,$i); - // // If the base is bigger than the main base - // @if($base > list.nth($base,1)) { - // // divide the value until it aligns with main base. - // @while($base > list.nth($base,1)) { - // $base: math.div($base,$ratio); - // } - // $base: $base * $ratio; - // } - // // If the base is smaller than the main base. - // @else if ($base < list.nth($base,1)) { - // // pump up the value until it aligns with main base. - // @while $base < list.nth($base,1) { - // $base: $base * $ratio; - // } - // } - // // Push into new array - // $bases: list.append($bases,$base); - // } - // } - - // Sort array from smallest to largest. - $bases: sort($bases); - // Find step to use in calculation - $vtep: math.floor(math.div($v / list.length($bases))); + $step: math.floor(math.div($v, $base-length)); // Find base to use in calculation - $base: math.round((math.div($v / list.length($bases)) - $vtep) * list.length($bases)) + 1; + $base: math.round((math.div($v, $base-length) - $step) * $base-length) + 1; - @return math.pow($ratio, $vtep) * list.nth($bases,$base); + @return math.pow($ratio, $step) * list.nth($bases,$base); } \ No newline at end of file diff --git a/stylesheets/modularscale/_sort.scss b/stylesheets/modularscale/_sort.scss index 5b795d87..c4db63b9 100644 --- a/stylesheets/modularscale/_sort.scss +++ b/stylesheets/modularscale/_sort.scss @@ -1,4 +1,7 @@ -@function sort($l...) { +// Will remove this as soon as Sass has native sorting +// https://github.com/sass/sass/issues/155 + +@function sort($l) { // Seed the return list $return: (); @@ -9,7 +12,7 @@ // Write that value to the return $return: append($return,$m); // Replace that value in the list so it won’t be called again. - $l: set-nth($l, index($l,$m), 9999999999); + $l: set-nth($l, index($l,$m), 999); } // Return the newly sorted list diff --git a/test/test.css b/test/test.css index dff28785..91fa82b5 100644 --- a/test/test.css +++ b/test/test.css @@ -9,13 +9,13 @@ } .multi-stranded { - --step-3: 1 1.05 1.4 1.2; - --step-2: 1 1.05 1.4 1.2; - --step-1: 1 1.05 1.4 1.2; - --step0: 1 1.05 1.4 1.2; - --step1: 1 1.05 1.4 1.2; - --step2: 1 1.05 1.4 1.2; - --step3: 1 1.05 1.4 1.2; + --step-3: 1.5384615385cm; + --step-2: 0.7692307692in; + --step-1: 2cm; + --step0: 1in; + --step1: 2.6cm; + --step2: 1.3in; + --step3: 3.38cm; } /*# sourceMappingURL=test.css.map */ diff --git a/test/test.scss b/test/test.scss index 8e132ec6..09e5a730 100644 --- a/test/test.scss +++ b/test/test.scss @@ -16,8 +16,8 @@ ms.$settings: ( } ms.$settings: ( - base: 1em 4.2em 1.4em 0.3em, - ratio: 2 + base: 1in 2cm, + ratio: 1.3 ); .multi-stranded { From 693dd62b2d25a52cede6279489c67d2fa033dbac Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 19:00:00 -0700 Subject: [PATCH 07/63] More iteration --- stylesheets/_modularscale.scss | 7 ++- .../{_function.scss => _step.scss} | 4 -- stylesheets/modularscale/_target.scss | 2 - stylesheets/modularscale/_write.scss | 11 ++++ test/test.css | 37 ++++++----- test/test.css.map | 2 +- test/test.scss | 63 ++++++++++++++++++- 7 files changed, 96 insertions(+), 30 deletions(-) rename stylesheets/modularscale/{_function.scss => _step.scss} (95%) create mode 100644 stylesheets/modularscale/_write.scss diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index adfea566..08d9e6cd 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -1,3 +1,6 @@ +@use "sass:math"; +@use "sass:list"; + // Defaults and variables @import 'modularscale/vars'; @@ -6,7 +9,7 @@ @import 'modularscale/strip-units'; @import 'modularscale/sort'; @import 'modularscale/target'; -@import 'modularscale/function'; +@import 'modularscale/step'; // Mixins -@import 'modularscale/respond'; +@import 'modularscale/write'; diff --git a/stylesheets/modularscale/_function.scss b/stylesheets/modularscale/_step.scss similarity index 95% rename from stylesheets/modularscale/_function.scss rename to stylesheets/modularscale/_step.scss index 1c187f5e..34e55740 100644 --- a/stylesheets/modularscale/_function.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,7 +1,3 @@ -@use "sass:math"; -@use "sass:list"; -@import "vars"; - @function step($v: 0, $base: false, $ratio: false, $thread: false, $settings: $settings) { // Parse settings diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 95423de9..1d9daec2 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,5 +1,3 @@ -@use 'sass:math'; - // Convert number string to number @function to-num($n) { $l: str-length($n); diff --git a/stylesheets/modularscale/_write.scss b/stylesheets/modularscale/_write.scss new file mode 100644 index 00000000..35b13a4a --- /dev/null +++ b/stylesheets/modularscale/_write.scss @@ -0,0 +1,11 @@ +@mixin write($min:-6, $max:12, $settings: $settings) { + @at-root { + @property --step { + syntax: ""; + inherits: true; + initial-value: ms.step(0); + } + :root { + } + } +} \ No newline at end of file diff --git a/test/test.css b/test/test.css index 91fa82b5..5f8e4507 100644 --- a/test/test.css +++ b/test/test.css @@ -1,21 +1,20 @@ -.standard { - --step-3: 0.3936200746em; - --step-2: 0.5707491082em; - --step-1: 0.8275862069em; - --step0: 1.2em; - --step1: 1.74em; - --step2: 2.523em; - --step3: 3.65835em; -} +/* Error: Undefined operation "pow(10, 0) * 6". + * , + * 25 | $r: $r + pow(10,$m - 1) * $v; + * | ^^^^^^^^^^^^^^^^^^^ + * ' + * stylesheets/modularscale/_target.scss 25:16 to-num() + * stylesheets/modularscale/_target.scss 44:7 target() + * stylesheets/modularscale/_step.scss 13:13 step() + * test/test.scss 59:14 root stylesheet */ -.multi-stranded { - --step-3: 1.5384615385cm; - --step-2: 0.7692307692in; - --step-1: 2cm; - --step0: 1in; - --step1: 2.6cm; - --step2: 1.3in; - --step3: 3.38cm; +body::before { + font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", + "Droid Sans Mono", monospace, monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined operation "pow(10, 0) * 6".\a \2577 \a 25 \2502 $r: $r + pow(10,$m - 1) * $v;\a \2502 ^^^^^^^^^^^^^^^^^^^\a \2575 \a stylesheets/modularscale/_target.scss 25:16 to-num()\a stylesheets/modularscale/_target.scss 44:7 target()\a stylesheets/modularscale/_step.scss 13:13 step()\a test/test.scss 59:14 root stylesheet'; } - -/*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map index 17df90ea..c0effecd 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index 09e5a730..9681902b 100644 --- a/test/test.scss +++ b/test/test.scss @@ -16,7 +16,7 @@ ms.$settings: ( } ms.$settings: ( - base: 1in 2cm, + base: 1in 2cm 13pc, ratio: 1.3 ); @@ -28,4 +28,63 @@ ms.$settings: ( --step1: #{ms.step(1)}; --step2: #{ms.step(2)}; --step3: #{ms.step(3)}; -} \ No newline at end of file +} + +ms.$settings: ( + s: ( + base: 12px, + ratio: 1.2 + ), + l: ( + base: 20px, + ratio: 1.6 + ) +); + +.multi-threaded { + --step0-thread-s: #{ms.step(0, $thread: s)}; + --step1-thread-s: #{ms.step(1, $thread: s)}; + --step2-thread-s: #{ms.step(2, $thread: s)}; + --step0-thread-l: #{ms.step(0, $thread: l)}; + --step1-thread-l: #{ms.step(1, $thread: l)}; + --step2-thread-l: #{ms.step(2, $thread: l)}; +} + +ms.$settings: ( + base: 1.2em, + ratio: 6at3 +); + +.target-size { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: ( + base: 12px, + ratio: 1.2, + 400px: ( + base: 12px 14px, + ratio: 1.2 + ), + 900px: ( + base: 20px, + ratio: 1.6 + ), + small: ( + base: 12px, + ratio: 1.2 + ), + large: ( + base: 20px, + ratio: 1.6 + ) +); + +// @include ms.write(); + From 3c26ec5bb0de7af16fbe540527416eb99a9bcd3e Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 19:53:32 -0700 Subject: [PATCH 08/63] Target feature done --- stylesheets/_modularscale.scss | 1 + stylesheets/modularscale/_target.scss | 48 +++++++++++---------------- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index 08d9e6cd..38331c37 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -1,5 +1,6 @@ @use "sass:math"; @use "sass:list"; +@use "sass:string"; // Defaults and variables @import 'modularscale/vars'; diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 1d9daec2..b6763ccb 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,37 +1,29 @@ // Convert number string to number @function to-num($n) { - $l: str-length($n); - $r: 0; - $m: str-index($n,'.'); - @if $m == null { - $m: $l + 1; - } - // Loop through digits and convert to numbers - @for $i from 1 through $l { - $v: str-slice($n,$i,$i); - @if $v == '1' { $v: 1; } - @else if $v == '2' { $v: 2; } - @else if $v == '3' { $v: 3; } - @else if $v == '4' { $v: 4; } - @else if $v == '5' { $v: 5; } - @else if $v == '6' { $v: 6; } - @else if $v == '7' { $v: 7; } - @else if $v == '8' { $v: 8; } - @else if $v == '9' { $v: 9; } - @else if $v == '0' { $v: 0; } - @else { $v: null; } - @if $v != null { - $m: $m - 1; - $r: $r + pow(10,$m - 1) * $v; - } @else { - $l: $l - 1; - } - } - @return $r; + $length: string.length($n); + $return: 0; + @for $i from 1 through $length { + $return: $return * 10; + $value: string.slice($n, $i, $i); + @if ($value == '0') { $return: $return + 0 } + @if ($value == '1') { $return: $return + 1 } + @if ($value == '2') { $return: $return + 2 } + @if ($value == '3') { $return: $return + 3 } + @if ($value == '4') { $return: $return + 4 } + @if ($value == '5') { $return: $return + 5 } + @if ($value == '6') { $return: $return + 6 } + @if ($value == '7') { $return: $return + 7 } + @if ($value == '8') { $return: $return + 8 } + @if ($value == '9') { $return: $return + 9 } + } + @return $return; } // Find a ratio based on a target value @function target($t,$b) { + @if (list.length($b) > 1) { + @error "You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base."; + } // Convert to string $t: $t + ''; // Remove base units to calulate ratio From fa836224e22f65a4af5f0216edf7d62257f5b6e9 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 27 May 2021 19:53:53 -0700 Subject: [PATCH 09/63] Working on various responsive solutions --- stylesheets/modularscale/_vars.scss | 3 +- stylesheets/modularscale/_write.scss | 36 ++++++++++++---- test/test.css | 64 ++++++++++++++++++++-------- test/test.css.map | 2 +- 4 files changed, 76 insertions(+), 29 deletions(-) diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_vars.scss index bd2f13a2..3961f11e 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_vars.scss @@ -22,4 +22,5 @@ $minor-second : 1.066666667 ; // Base config $base : 1em !default; $ratio : $fifth !default; -$settings : () !default; \ No newline at end of file +$settings : () !default; +$responsive : false !default; \ No newline at end of file diff --git a/stylesheets/modularscale/_write.scss b/stylesheets/modularscale/_write.scss index 35b13a4a..eef6115b 100644 --- a/stylesheets/modularscale/_write.scss +++ b/stylesheets/modularscale/_write.scss @@ -1,11 +1,29 @@ -@mixin write($min:-6, $max:12, $settings: $settings) { - @at-root { - @property --step { - syntax: ""; - inherits: true; - initial-value: ms.step(0); - } - :root { - } +// @import 'vars'; + +@mixin respond($responsive: $responsive) { + @if $responsive { + $settings: ( + base: 1.2em, + ratio: 1.45 + ); + @content + } + @else { + $settings: ( + base: 1em, + ratio: 1.2 + ); + @content + } +} + +@include respond(true) { + foo { + bar: step(2); + } +} +@include respond(false) { + foo { + bar: step(2); } } \ No newline at end of file diff --git a/test/test.css b/test/test.css index 5f8e4507..9dbf5274 100644 --- a/test/test.css +++ b/test/test.css @@ -1,20 +1,48 @@ -/* Error: Undefined operation "pow(10, 0) * 6". - * , - * 25 | $r: $r + pow(10,$m - 1) * $v; - * | ^^^^^^^^^^^^^^^^^^^ - * ' - * stylesheets/modularscale/_target.scss 25:16 to-num() - * stylesheets/modularscale/_target.scss 44:7 target() - * stylesheets/modularscale/_step.scss 13:13 step() - * test/test.scss 59:14 root stylesheet */ +foo { + bar: 2.25em; +} + +foo { + bar: 2.25em; +} + +.standard { + --step-3: 0.3936200746em; + --step-2: 0.5707491082em; + --step-1: 0.8275862069em; + --step0: 1.2em; + --step1: 1.74em; + --step2: 2.523em; + --step3: 3.65835em; +} -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: 'Error: Undefined operation "pow(10, 0) * 6".\a \2577 \a 25 \2502 $r: $r + pow(10,$m - 1) * $v;\a \2502 ^^^^^^^^^^^^^^^^^^^\a \2575 \a stylesheets/modularscale/_target.scss 25:16 to-num()\a stylesheets/modularscale/_target.scss 44:7 target()\a stylesheets/modularscale/_step.scss 13:13 step()\a test/test.scss 59:14 root stylesheet'; +.multi-stranded { + --step-3: 0.7692307692in; + --step-2: 2cm; + --step-1: 5.9171597633pc; + --step0: 1in; + --step1: 2.6cm; + --step2: 7.6923076923pc; + --step3: 1.3in; } + +.multi-threaded { + --step0-thread-s: 12px; + --step1-thread-s: 14.4px; + --step2-thread-s: 17.28px; + --step0-thread-l: 20px; + --step1-thread-l: 32px; + --step2-thread-l: 51.2px; +} + +.target-size { + --step-3: 0.24em; + --step-2: 0.4103942272em; + --step-1: 0.7017642572em; + --step0: 1.2em; + --step1: 2.051971136em; + --step2: 3.5088212859em; + --step3: 6em; +} + +/*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map index c0effecd..59079a36 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAOA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../stylesheets/modularscale/_write.scss","test.scss"],"names":[],"mappings":"AAoBC;EACC;;;AAID;EACC;;;ACnBF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file From 74286646d80f737a56465482e3536cc5e9440083 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Tue, 22 Jun 2021 21:02:40 -0700 Subject: [PATCH 10/63] Run task for Nova and respond tweak --- .nova/Tasks/Run.json | 10 ++++++++++ stylesheets/modularscale/_write.scss | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .nova/Tasks/Run.json diff --git a/.nova/Tasks/Run.json b/.nova/Tasks/Run.json new file mode 100644 index 00000000..ae76083a --- /dev/null +++ b/.nova/Tasks/Run.json @@ -0,0 +1,10 @@ +{ + "actions" : { + "run" : { + "enabled" : true, + "script" : "sass --watch test" + } + }, + "identifier" : "B980F861-6B28-4214-A80C-189821EAF3AC", + "openLogOnRun" : "start" +} diff --git a/stylesheets/modularscale/_write.scss b/stylesheets/modularscale/_write.scss index eef6115b..ecc1cf3b 100644 --- a/stylesheets/modularscale/_write.scss +++ b/stylesheets/modularscale/_write.scss @@ -1,6 +1,6 @@ // @import 'vars'; -@mixin respond($responsive: $responsive) { +@mixin respond($min: -3, $max: 9, $responsive: $responsive) { @if $responsive { $settings: ( base: 1.2em, From 49729b54d96323627d7c60b359469e2ac28ad9a2 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Thu, 24 Jun 2021 19:26:27 -0700 Subject: [PATCH 11/63] Update Sass version number --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d214cb9f..04e7373e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,6 @@ }, "homepage": "https://www.modularscale.com", "dependencies": { - "sass": "^1.30.0" - } + "sass": "^1.34.0" + } } From d4de970c3f54fce538554b7e23ed0c410aee499e Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 07:06:29 -0700 Subject: [PATCH 12/63] Prototype responsive logic --- .nova/Tasks/Run.json | 3 +- stylesheets/_modularscale.scss | 15 +-- stylesheets/modularscale/_step.scss | 54 ++++---- stylesheets/modularscale/_write.scss | 28 ----- test/test.css | 50 ++------ test/test.css.map | 2 +- test/test.scss | 177 +++++++++++++++------------ 7 files changed, 146 insertions(+), 183 deletions(-) diff --git a/.nova/Tasks/Run.json b/.nova/Tasks/Run.json index ae76083a..a125f36a 100644 --- a/.nova/Tasks/Run.json +++ b/.nova/Tasks/Run.json @@ -6,5 +6,6 @@ } }, "identifier" : "B980F861-6B28-4214-A80C-189821EAF3AC", - "openLogOnRun" : "start" + "openLogOnRun" : "start", + "persistent" : true } diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index 38331c37..e0734f30 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -1,16 +1,17 @@ @use "sass:math"; @use "sass:list"; @use "sass:string"; +@use "sass:map"; // Defaults and variables -@import 'modularscale/vars'; +@import "modularscale/vars"; // Core functions -@import 'modularscale/settings'; -@import 'modularscale/strip-units'; -@import 'modularscale/sort'; -@import 'modularscale/target'; -@import 'modularscale/step'; +@import "modularscale/settings"; +@import "modularscale/strip-units"; +@import "modularscale/sort"; +@import "modularscale/target"; +@import "modularscale/step"; // Mixins -@import 'modularscale/write'; +@import "modularscale/write"; diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 34e55740..6b7a86e5 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,43 +1,47 @@ -@function step($v: 0, $base: false, $ratio: false, $thread: false, $settings: $settings) { - +@function step( + $v: 0, + $base: false, + $ratio: false, + $thread: false, + $settings: $settings +) { // Parse settings - $settings: settings($base,$ratio,$thread,$settings); + $settings: settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); - - $base-length: list.length($base); - $bases: (); + + $base-length: list.length($base); + $bases: (); // Render target values from settings. - @if unit($ratio) != '' { - $ratio: target($ratio,$base) + @if unit($ratio) != "" { + $ratio: target($ratio, $base); } // Fast calc if not multi stranded - @if($base-length == 1) { + @if ($base-length == 1) { @return math.pow($ratio, $v) * $base; - } - @else { - $unit: unit(list.nth($base,1)); - $bases: list.nth($base,1); - @for $i from 2 through $base-length { - $new-base: list.nth($base,$i); - @while($new-base > ($ratio * list.nth($base,1))) { - $new-base: math.div($new-base,$ratio); + } @else { + $unit: unit(list.nth($base, 1)); + $bases: list.nth($base, 1); + @for $i from 2 through $base-length { + $new-base: list.nth($base, $i); + @while ($new-base > ($ratio * list.nth($base, 1))) { + $new-base: math.div($new-base, $ratio); } - @while($new-base < list.nth($base,1)) { + @while ($new-base < list.nth($base, 1)) { $new-base: ($new-base * $ratio); } - $bases: list.append($bases,$new-base); - } - - $bases: sort($bases); - } + $bases: list.append($bases, $new-base); + } + + $bases: sort($bases); + } // Find step to use in calculation $step: math.floor(math.div($v, $base-length)); // Find base to use in calculation $base: math.round((math.div($v, $base-length) - $step) * $base-length) + 1; - @return math.pow($ratio, $step) * list.nth($bases,$base); -} \ No newline at end of file + @return math.pow($ratio, $step) * list.nth($bases, $base); +} diff --git a/stylesheets/modularscale/_write.scss b/stylesheets/modularscale/_write.scss index ecc1cf3b..1e35c80c 100644 --- a/stylesheets/modularscale/_write.scss +++ b/stylesheets/modularscale/_write.scss @@ -1,29 +1 @@ // @import 'vars'; - -@mixin respond($min: -3, $max: 9, $responsive: $responsive) { - @if $responsive { - $settings: ( - base: 1.2em, - ratio: 1.45 - ); - @content - } - @else { - $settings: ( - base: 1em, - ratio: 1.2 - ); - @content - } -} - -@include respond(true) { - foo { - bar: step(2); - } -} -@include respond(false) { - foo { - bar: step(2); - } -} \ No newline at end of file diff --git a/test/test.css b/test/test.css index 9dbf5274..61c84f0c 100644 --- a/test/test.css +++ b/test/test.css @@ -1,48 +1,16 @@ foo { - bar: 2.25em; + bar: 17.28px; } -foo { - bar: 2.25em; -} - -.standard { - --step-3: 0.3936200746em; - --step-2: 0.5707491082em; - --step-1: 0.8275862069em; - --step0: 1.2em; - --step1: 1.74em; - --step2: 2.523em; - --step3: 3.65835em; -} - -.multi-stranded { - --step-3: 0.7692307692in; - --step-2: 2cm; - --step-1: 5.9171597633pc; - --step0: 1in; - --step1: 2.6cm; - --step2: 7.6923076923pc; - --step3: 1.3in; -} - -.multi-threaded { - --step0-thread-s: 12px; - --step1-thread-s: 14.4px; - --step2-thread-s: 17.28px; - --step0-thread-l: 20px; - --step1-thread-l: 32px; - --step2-thread-l: 51.2px; +@media (min-width: 400px) { + foo { + bar: 14.4px; + } } - -.target-size { - --step-3: 0.24em; - --step-2: 0.4103942272em; - --step-1: 0.7017642572em; - --step0: 1.2em; - --step1: 2.051971136em; - --step2: 3.5088212859em; - --step3: 6em; +@media (min-width: 900px) { + foo { + bar: 51.2px; + } } /*# sourceMappingURL=test.css.map */ diff --git a/test/test.css.map b/test/test.css.map index 59079a36..65f8204c 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../stylesheets/modularscale/_write.scss","test.scss"],"names":[],"mappings":"AAoBC;EACC;;;AAID;EACC;;;ACnBF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;EACA;EACA;EACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAsCE;EACE;;;AA/BE;EA8BJ;IACE;;;AA/BE;EA8BJ;IACE","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index 9681902b..f9081d39 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,90 +1,107 @@ @use '../stylesheets/modularscale' as ms; +@use "sass:list"; +@use "sass:string"; -ms.$settings: ( - base: 1.2em, - ratio: 1.45 -); - -.standard { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; -} - -ms.$settings: ( - base: 1in 2cm 13pc, - ratio: 1.3 -); - -.multi-stranded { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; -} - -ms.$settings: ( - s: ( - base: 12px, - ratio: 1.2 - ), - l: ( - base: 20px, - ratio: 1.6 - ) -); - -.multi-threaded { - --step0-thread-s: #{ms.step(0, $thread: s)}; - --step1-thread-s: #{ms.step(1, $thread: s)}; - --step2-thread-s: #{ms.step(2, $thread: s)}; - --step0-thread-l: #{ms.step(0, $thread: l)}; - --step1-thread-l: #{ms.step(1, $thread: l)}; - --step2-thread-l: #{ms.step(2, $thread: l)}; -} - -ms.$settings: ( - base: 1.2em, - ratio: 6at3 -); - -.target-size { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; +@mixin step { + @content (ms.$settings); + @each $respond in ms.$settings { + @if (type-of(list.nth($respond, 1)) == "number") { + @media (min-width: list.nth($respond, 1)) { + $respond: list.nth($respond, 2); + @content ($respond); + } + } + } } ms.$settings: ( base: 12px, ratio: 1.2, - 400px: ( - base: 12px 14px, - ratio: 1.2 - ), - 900px: ( - base: 20px, - ratio: 1.6 - ), - small: ( - base: 12px, - ratio: 1.2 - ), - large: ( - base: 20px, - ratio: 1.6 - ) + 400px: ( + base: 12px 14px, + ratio: 1.2, + ), + 900px: ( + base: 20px, + ratio: 1.6, + ), + small: ( + base: 12px, + ratio: 1.2, + ), + large: ( + base: 20px, + ratio: 1.6, + ) ); -// @include ms.write(); +@include step using ($respond) { + foo { + bar: ms.step(2, $settings: $respond); + } +} +// ms.$settings: ( +// base: 1.2em, +// ratio: 1.45 +// ); +// +// .standard { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } +// +// ms.$settings: ( +// base: 1in 2cm 13pc, +// ratio: 1.3 +// ); +// +// .multi-stranded { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } +// +// ms.$settings: ( +// s: ( +// base: 12px, +// ratio: 1.2 +// ), +// l: ( +// base: 20px, +// ratio: 1.6 +// ) +// ); +// +// .multi-threaded { +// --step0-thread-s: #{ms.step(0, $thread: s)}; +// --step1-thread-s: #{ms.step(1, $thread: s)}; +// --step2-thread-s: #{ms.step(2, $thread: s)}; +// --step0-thread-l: #{ms.step(0, $thread: l)}; +// --step1-thread-l: #{ms.step(1, $thread: l)}; +// --step2-thread-l: #{ms.step(2, $thread: l)}; +// } +// +// ms.$settings: ( +// base: 1.2em, +// ratio: 6at3 +// ); +// +// .target-size { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } From 47716c5200816cec7a4b4d5c26157f41fb5da728 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 11:19:52 -0700 Subject: [PATCH 13/63] Basic responsive logic in place --- .nova/Tasks/Run.json | 2 +- stylesheets/_modularscale.scss | 3 +- stylesheets/modularscale/_respond.scss | 66 +++++-------------------- stylesheets/modularscale/_settings.scss | 6 ++- stylesheets/modularscale/_step.scss | 6 ++- stylesheets/modularscale/_vars.scss | 2 +- stylesheets/modularscale/_write.scss | 1 - test/test.css | 1 - test/test.css.map | 2 +- test/test.scss | 19 ++----- 10 files changed, 30 insertions(+), 78 deletions(-) delete mode 100644 stylesheets/modularscale/_write.scss diff --git a/.nova/Tasks/Run.json b/.nova/Tasks/Run.json index a125f36a..7461ae4c 100644 --- a/.nova/Tasks/Run.json +++ b/.nova/Tasks/Run.json @@ -2,7 +2,7 @@ "actions" : { "run" : { "enabled" : true, - "script" : "sass --watch test" + "script" : "sass --watch .\/" } }, "identifier" : "B980F861-6B28-4214-A80C-189821EAF3AC", diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index e0734f30..4f5d3c77 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -2,6 +2,7 @@ @use "sass:list"; @use "sass:string"; @use "sass:map"; +@use "sass:meta"; // Defaults and variables @import "modularscale/vars"; @@ -14,4 +15,4 @@ @import "modularscale/step"; // Mixins -@import "modularscale/write"; +@import "modularscale/respond"; diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 11aa260d..0aff243b 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -1,58 +1,14 @@ -// Generate calc() function -// based on Mike Riethmuller's Precise control over responsive typography -// http://madebymike.com.au/writing/precise-control-responsive-typography/ -@function fluid($val1: 1em, $val2: 1em, $break1: 0, $break2: 0) { - $diff: unitless($val2) - unitless($val1); - - // v1 + (v2 - v1) * ( (100vw - b1) / b2 - b1 ) - @return calc( #{$val1} + #{unitless($val2) - unitless($val1)} * ( ( 100vw - #{$break1}) / #{unitless($break2) - unitless($break1)} ) ); -} - -// Main responsive mixin -@mixin respond($prop, $val, $map: $modularscale, $important: false) { - $base: $base; - $ratio: $ratio; - - $first-write: true; - $last-break: null; - - $important: ''; - - @if $important == true { - $important: ' !important'; - } - - // loop through all settings with a breakpoint type value - @each $v, $s in $map { - @if type-of($v) == number { - @if unit($v) != '' { - - // Write out the first value without a media query. - @if $first-write { - #{$prop}: unquote("#{function($val, $thread: $v, $settings: $map)}#{$important}"); - - // Not the first write anymore, reset to false to move on. - $first-write: false; - $last-break: $v; - } - - // Write intermediate breakpoints. - @else { - @media (min-width: $last-break) and (max-width: $v) { - $val1: function($val, $thread: $last-break, $settings: $map); - $val2: function($val, $thread: $v, $settings: $map); - #{$prop}: unquote("#{fluid($val1,$val2,$last-break,$v)}#{$important}"); - } - $last-break: $v; - } +@mixin step($mode: map-get($settings, respond)) { + // Write fallback styles to broader context + @content ($settings); + + // Loop through breakpoints + @each $breakpoints in $settings { + @if (type-of(list.nth($breakpoints, 1)) == "number") { + @media (min-width: list.nth($breakpoints, 1)) { + $breakpoints: list.nth($breakpoints, 1); + @content ($breakpoints); } } } - - // Write the last breakpoint. - @if $last-break { - @media (min-width: $last-break) { - #{$prop}: unquote("#{function($val, $thread: $last-break, $settings: $map)}#{$important}"); - } - } -} \ No newline at end of file +} diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_settings.scss index 1ddb8d1c..ed3cf627 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_settings.scss @@ -5,6 +5,7 @@ @function settings($b: false, $r: false, $t: false, $m: $modularscale) { $base: $base; $ratio: $ratio; + $respond: $respond; $thread: map-get($m, $t); // Override with user settings @@ -14,6 +15,9 @@ @if map-get($m, ratio) { $ratio: map-get($m, ratio); } + @if map-get($m, respond) { + $respond: map-get($m, respond); + } // Override with thread settings @if $thread { @@ -34,4 +38,4 @@ } @return $base $ratio; -} \ No newline at end of file +} diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 6b7a86e5..79f8ceed 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -3,9 +3,13 @@ $base: false, $ratio: false, $thread: false, - $settings: $settings + $settings: $settings, + $respond-to: false ) { // Parse settings + @if ($respond-to) { + $thread: $respond-to; + } $settings: settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_vars.scss index 3961f11e..234d840e 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_vars.scss @@ -23,4 +23,4 @@ $minor-second : 1.066666667 ; $base : 1em !default; $ratio : $fifth !default; $settings : () !default; -$responsive : false !default; \ No newline at end of file +$respond : media !default; \ No newline at end of file diff --git a/stylesheets/modularscale/_write.scss b/stylesheets/modularscale/_write.scss deleted file mode 100644 index 1e35c80c..00000000 --- a/stylesheets/modularscale/_write.scss +++ /dev/null @@ -1 +0,0 @@ -// @import 'vars'; diff --git a/test/test.css b/test/test.css index 61c84f0c..8e8f2441 100644 --- a/test/test.css +++ b/test/test.css @@ -1,7 +1,6 @@ foo { bar: 17.28px; } - @media (min-width: 400px) { foo { bar: 14.4px; diff --git a/test/test.css.map b/test/test.css.map index 65f8204c..5ba55816 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss"],"names":[],"mappings":"AAsCE;EACE;;;AA/BE;EA8BJ;IACE;;;AA/BE;EA8BJ;IACE","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AA0BA;EAEI;;ACrBE;EDmBN;IAEI;;;ACrBE;EDmBN;IAEI","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index f9081d39..11795650 100644 --- a/test/test.scss +++ b/test/test.scss @@ -2,21 +2,10 @@ @use "sass:list"; @use "sass:string"; -@mixin step { - @content (ms.$settings); - @each $respond in ms.$settings { - @if (type-of(list.nth($respond, 1)) == "number") { - @media (min-width: list.nth($respond, 1)) { - $respond: list.nth($respond, 2); - @content ($respond); - } - } - } -} - ms.$settings: ( base: 12px, ratio: 1.2, + respond: media, 400px: ( base: 12px 14px, ratio: 1.2, @@ -35,9 +24,9 @@ ms.$settings: ( ) ); -@include step using ($respond) { - foo { - bar: ms.step(2, $settings: $respond); +foo { + @include ms.step using ($breakpoints) { + bar: ms.step(2, $respond-to: $breakpoints); } } From 7b9e30f535d2b46939d420feecda92bb7a2b1918 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 12:04:45 -0700 Subject: [PATCH 14/63] Finished responsive logic --- stylesheets/modularscale/_respond.scss | 79 ++++++++++++-- test/test.css | 60 ++++++++++- test/test.css.map | 2 +- test/test.scss | 136 ++++++++++++------------- 4 files changed, 197 insertions(+), 80 deletions(-) diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 0aff243b..01d70c5e 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -1,14 +1,79 @@ @mixin step($mode: map-get($settings, respond)) { - // Write fallback styles to broader context - @content ($settings); - - // Loop through breakpoints + // Setup + $id: #{unique-id()}; + $max: 0; + $queries: 0; + $c: 0; + $query: $mode; + // Default query type + @if ($query == null) { + $query: media; + } + // Find maximum value @each $breakpoints in $settings { @if (type-of(list.nth($breakpoints, 1)) == "number") { - @media (min-width: list.nth($breakpoints, 1)) { - $breakpoints: list.nth($breakpoints, 1); - @content ($breakpoints); + $max: list.nth($breakpoints, 1); + $queries: $queries + 1; + } + } + + // Write fallback styles to broader context + @content ($settings); + + // Typetura styles + @if ($query == typetura) { + --tt-key: #{$id}; + --tt-max: #{$max}; + @keyframes #{$id} { + @each $breakpoints in $settings { + @if (type-of(list.nth($breakpoints, 1)) == "number") { + + $key: list.nth($breakpoints, 1); + $keyframe: percentage($key/$max); + #{$keyframe} { + @content (list.nth($breakpoints, 1)); + } + $c: $c + 1; + } } } + } @else { + + // Loop through breakpoints + @each $breakpoints in $settings { + @if (type-of(list.nth($breakpoints, 1)) == "number") { + @#{$query} (min-width: #{list.nth($breakpoints, 1)}) { + $breakpoints: list.nth($breakpoints, 1); + @content ($breakpoints); + } + } + } + } } + +// @mixin tt($tt...) { +// $id: #{unique-id()}; +// $max: nth(nth($tt, length($tt)), 1); +// $c: 0; +// --tt-key: #{$id}; +// --tt-max: #{$max}; +// @keyframes #{$id} { +// @each $key, $values in $tt { +// $keyframe: percentage($key/$max); +// @if $c == 0 { +// @if $key == 0 { +// $keyframe: 0%; +// } @else { +// $keyframe: 0%, percentage($key/$max); +// } +// } +// #{$keyframe} { +// @each $prop, $val in $values { +// #{$prop}: #{$val}; +// } +// } +// $c: $c + 1; +// } +// } +// } diff --git a/test/test.css b/test/test.css index 8e8f2441..48ac13b8 100644 --- a/test/test.css +++ b/test/test.css @@ -1,14 +1,70 @@ +.standard { + --step-3: 0.3936200746em; + --step-2: 0.5707491082em; + --step-1: 0.8275862069em; + --step0: 1.2em; + --step1: 1.74em; + --step2: 2.523em; + --step3: 3.65835em; +} + +.multi-stranded { + --step-3: 0.7692307692in; + --step-2: 2cm; + --step-1: 5.9171597633pc; + --step0: 1in; + --step1: 2.6cm; + --step2: 7.6923076923pc; + --step3: 1.3in; +} + +.multi-threaded { + --step0-thread-s: 12px; + --step1-thread-s: 14.4px; + --step2-thread-s: 17.28px; + --step0-thread-l: 20px; + --step1-thread-l: 32px; + --step2-thread-l: 51.2px; +} + +.target-size { + --step-3: 0.24em; + --step-2: 0.4103942272em; + --step-1: 0.7017642572em; + --step0: 1.2em; + --step1: 2.051971136em; + --step2: 3.5088212859em; + --step3: 6em; +} + +foo { + bar: 17.28px; + --tt-key: ubhbfqk; + --tt-max: 1000px; +} +@keyframes ubhbfqk { + 40% { + bar: 14.4px; + } + 100% { + bar: 51.2px; + } +} + foo { bar: 17.28px; + padding: 17.28px 17.28px; } -@media (min-width: 400px) { +@container (min-width: 400px) { foo { bar: 14.4px; + padding: 14.4px 17.28px; } } -@media (min-width: 900px) { +@container (min-width: 1000px) { foo { bar: 51.2px; + padding: 51.2px 17.28px; } } diff --git a/test/test.css.map b/test/test.css.map index 5ba55816..7af35aac 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AA0BA;EAEI;;ACrBE;EDmBN;IAEI;;;ACrBE;EDmBN;IAEI","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAyBF;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;AAIJ;EAEI;EACA;;AC7CI;ED0CR;IAEI;IACA;;;AC7CI;ED0CR;IAEI;IACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index 11795650..c6cb0dd8 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,24 +1,78 @@ @use '../stylesheets/modularscale' as ms; -@use "sass:list"; -@use "sass:string"; + +ms.$settings: (base: 1.2em, ratio: 1.45); + +.standard { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: (base: 1in 2cm 13pc, ratio: 1.3); + +.multi-stranded { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: ( + s: ( + base: 12px, + ratio: 1.2, + ), + l: ( + base: 20px, + ratio: 1.6, + ) +); + +.multi-threaded { + --step0-thread-s: #{ms.step(0, $thread: s)}; + --step1-thread-s: #{ms.step(1, $thread: s)}; + --step2-thread-s: #{ms.step(2, $thread: s)}; + --step0-thread-l: #{ms.step(0, $thread: l)}; + --step1-thread-l: #{ms.step(1, $thread: l)}; + --step2-thread-l: #{ms.step(2, $thread: l)}; +} + +ms.$settings: (base: 1.2em, ratio: 6at3); + +.target-size { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} ms.$settings: ( base: 12px, ratio: 1.2, - respond: media, + respond: typetura, 400px: ( base: 12px 14px, ratio: 1.2, ), - 900px: ( + 1000px: ( base: 20px, ratio: 1.6, ), - small: ( + s: ( base: 12px, ratio: 1.2, ), - large: ( + l: ( base: 20px, ratio: 1.6, ) @@ -30,67 +84,9 @@ foo { } } -// ms.$settings: ( -// base: 1.2em, -// ratio: 1.45 -// ); -// -// .standard { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } -// -// ms.$settings: ( -// base: 1in 2cm 13pc, -// ratio: 1.3 -// ); -// -// .multi-stranded { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } -// -// ms.$settings: ( -// s: ( -// base: 12px, -// ratio: 1.2 -// ), -// l: ( -// base: 20px, -// ratio: 1.6 -// ) -// ); -// -// .multi-threaded { -// --step0-thread-s: #{ms.step(0, $thread: s)}; -// --step1-thread-s: #{ms.step(1, $thread: s)}; -// --step2-thread-s: #{ms.step(2, $thread: s)}; -// --step0-thread-l: #{ms.step(0, $thread: l)}; -// --step1-thread-l: #{ms.step(1, $thread: l)}; -// --step2-thread-l: #{ms.step(2, $thread: l)}; -// } -// -// ms.$settings: ( -// base: 1.2em, -// ratio: 6at3 -// ); -// -// .target-size { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } +foo { + @include ms.step(container) using ($breakpoints) { + bar: ms.step(2, $respond-to: $breakpoints); + padding: ms.step(2, $respond-to: $breakpoints) ms.step(2); + } +} From ee3f8e06a6898e13a64e27cf191f17710f5ac49c Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 12:10:14 -0700 Subject: [PATCH 15/63] Naming tweaks --- stylesheets/modularscale/_respond.scss | 24 ++++++++++++------------ stylesheets/modularscale/_step.scss | 6 +++--- test/test.css | 4 ++-- test/test.scss | 18 +++++++++--------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 01d70c5e..5389adc2 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -10,9 +10,9 @@ $query: media; } // Find maximum value - @each $breakpoints in $settings { - @if (type-of(list.nth($breakpoints, 1)) == "number") { - $max: list.nth($breakpoints, 1); + @each $bp in $settings { + @if (type-of(list.nth($bp, 1)) == "number") { + $max: list.nth($bp, 1); $queries: $queries + 1; } } @@ -25,13 +25,13 @@ --tt-key: #{$id}; --tt-max: #{$max}; @keyframes #{$id} { - @each $breakpoints in $settings { - @if (type-of(list.nth($breakpoints, 1)) == "number") { + @each $bp in $settings { + @if (type-of(list.nth($bp, 1)) == "number") { - $key: list.nth($breakpoints, 1); + $key: list.nth($bp, 1); $keyframe: percentage($key/$max); #{$keyframe} { - @content (list.nth($breakpoints, 1)); + @content (list.nth($bp, 1)); } $c: $c + 1; } @@ -40,11 +40,11 @@ } @else { // Loop through breakpoints - @each $breakpoints in $settings { - @if (type-of(list.nth($breakpoints, 1)) == "number") { - @#{$query} (min-width: #{list.nth($breakpoints, 1)}) { - $breakpoints: list.nth($breakpoints, 1); - @content ($breakpoints); + @each $bp in $settings { + @if (type-of(list.nth($bp, 1)) == "number") { + @#{$query} (min-width: #{list.nth($bp, 1)}) { + $bp: list.nth($bp, 1); + @content ($bp); } } } diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 79f8ceed..99089174 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -4,11 +4,11 @@ $ratio: false, $thread: false, $settings: $settings, - $respond-to: false + $respond: false ) { // Parse settings - @if ($respond-to) { - $thread: $respond-to; + @if ($respond) { + $thread: $respond; } $settings: settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); diff --git a/test/test.css b/test/test.css index 48ac13b8..459b307a 100644 --- a/test/test.css +++ b/test/test.css @@ -39,10 +39,10 @@ foo { bar: 17.28px; - --tt-key: ubhbfqk; + --tt-key: ubhbfuz; --tt-max: 1000px; } -@keyframes ubhbfqk { +@keyframes ubhbfuz { 40% { bar: 14.4px; } diff --git a/test/test.scss b/test/test.scss index c6cb0dd8..ea57fcc9 100644 --- a/test/test.scss +++ b/test/test.scss @@ -64,14 +64,14 @@ ms.$settings: ( base: 12px 14px, ratio: 1.2, ), - 1000px: ( - base: 20px, - ratio: 1.6, - ), s: ( base: 12px, ratio: 1.2, ), + 1000px: ( + base: 20px, + ratio: 1.6, + ), l: ( base: 20px, ratio: 1.6, @@ -79,14 +79,14 @@ ms.$settings: ( ); foo { - @include ms.step using ($breakpoints) { - bar: ms.step(2, $respond-to: $breakpoints); + @include ms.step using ($bp) { + bar: ms.step(2, $respond: $bp); } } foo { - @include ms.step(container) using ($breakpoints) { - bar: ms.step(2, $respond-to: $breakpoints); - padding: ms.step(2, $respond-to: $breakpoints) ms.step(2); + @include ms.step(container) using ($bp) { + bar: ms.step(2, $respond: $bp); + padding: ms.step(2, $respond: $bp) ms.step(2); } } From b54ab0c5f006c62309dc1432f1baceddd28b42d4 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 14:25:52 -0700 Subject: [PATCH 16/63] Tweaks and testing --- stylesheets/_modularscale.scss | 1 + stylesheets/modularscale/_respond.scss | 49 +++++---- stylesheets/modularscale/_vars.scss | 3 +- test/test.css | 85 +++++++--------- test/test.css.map | 2 +- test/test.scss | 132 +++++++++++++++---------- 6 files changed, 141 insertions(+), 131 deletions(-) diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss index 4f5d3c77..80e4d899 100644 --- a/stylesheets/_modularscale.scss +++ b/stylesheets/_modularscale.scss @@ -3,6 +3,7 @@ @use "sass:string"; @use "sass:map"; @use "sass:meta"; +@use "sass:selector"; // Defaults and variables @import "modularscale/vars"; diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 5389adc2..e30f6213 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -23,7 +23,7 @@ // Typetura styles @if ($query == typetura) { --tt-key: #{$id}; - --tt-max: #{$max}; + --tt-max: #{unitless($max)}; @keyframes #{$id} { @each $bp in $settings { @if (type-of(list.nth($bp, 1)) == "number") { @@ -37,7 +37,18 @@ } } } - } @else { + } @else if ($query == container) { + $query: $query + ' modularscale'; + // Loop through breakpoints + @each $bp in $settings { + @if (type-of(list.nth($bp, 1)) == "number") { + @#{$query} (min-width: #{list.nth($bp, 1)}) { + $bp: list.nth($bp, 1); + @content ($bp); + } + } + } + } @else { // Loop through breakpoints @each $bp in $settings { @@ -52,28 +63,12 @@ } } -// @mixin tt($tt...) { -// $id: #{unique-id()}; -// $max: nth(nth($tt, length($tt)), 1); -// $c: 0; -// --tt-key: #{$id}; -// --tt-max: #{$max}; -// @keyframes #{$id} { -// @each $key, $values in $tt { -// $keyframe: percentage($key/$max); -// @if $c == 0 { -// @if $key == 0 { -// $keyframe: 0%; -// } @else { -// $keyframe: 0%, percentage($key/$max); -// } -// } -// #{$keyframe} { -// @each $prop, $val in $values { -// #{$prop}: #{$val}; -// } -// } -// $c: $c + 1; -// } -// } -// } +@mixin container($selector: '.modularscale') { + @at-root { + #{$selector} { + container-name: modularscale; + container-type: inline-size; + } + $container-write: true; + } +} diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_vars.scss index 234d840e..2a744579 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_vars.scss @@ -23,4 +23,5 @@ $minor-second : 1.066666667 ; $base : 1em !default; $ratio : $fifth !default; $settings : () !default; -$respond : media !default; \ No newline at end of file +$respond : media !default; +$container-write : false ; \ No newline at end of file diff --git a/test/test.css b/test/test.css index 459b307a..160dccf1 100644 --- a/test/test.css +++ b/test/test.css @@ -1,69 +1,52 @@ -.standard { - --step-3: 0.3936200746em; - --step-2: 0.5707491082em; - --step-1: 0.8275862069em; - --step0: 1.2em; - --step1: 1.74em; - --step2: 2.523em; - --step3: 3.65835em; +.typetura { + font-size: 17.28px; + --tt-key: ubhbh0h; + --tt-max: 1000; } - -.multi-stranded { - --step-3: 0.7692307692in; - --step-2: 2cm; - --step-1: 5.9171597633pc; - --step0: 1in; - --step1: 2.6cm; - --step2: 7.6923076923pc; - --step3: 1.3in; -} - -.multi-threaded { - --step0-thread-s: 12px; - --step1-thread-s: 14.4px; - --step2-thread-s: 17.28px; - --step0-thread-l: 20px; - --step1-thread-l: 32px; - --step2-thread-l: 51.2px; +@keyframes ubhbh0h { + 40% { + font-size: 14.4px; + } + 100% { + font-size: 51.2px; + } } -.target-size { - --step-3: 0.24em; - --step-2: 0.4103942272em; - --step-1: 0.7017642572em; - --step0: 1.2em; - --step1: 2.051971136em; - --step2: 3.5088212859em; - --step3: 6em; +.ms-container { + container-name: modularscale; + container-type: inline-size; } -foo { - bar: 17.28px; - --tt-key: ubhbfuz; - --tt-max: 1000px; +.container { + font-size: 17.28px; + padding: 17.28px 17.28px; } -@keyframes ubhbfuz { - 40% { - bar: 14.4px; +@container modularscale (min-width: 30rem) { + .container { + font-size: 14.4px; + padding: 14.4px 17.28px; } - 100% { - bar: 51.2px; +} +@container modularscale (min-width: 60rem) { + .container { + font-size: 51.2px; + padding: 51.2px 17.28px; } } -foo { - bar: 17.28px; +.foo { + font-size: 17.28px; padding: 17.28px 17.28px; } -@container (min-width: 400px) { - foo { - bar: 14.4px; +@container modularscale (min-width: 30rem) { + .foo { + font-size: 14.4px; padding: 14.4px 17.28px; } } -@container (min-width: 1000px) { - foo { - bar: 51.2px; +@container modularscale (min-width: 60rem) { + .foo { + font-size: 51.2px; padding: 51.2px 17.28px; } } diff --git a/test/test.css.map b/test/test.css.map index 7af35aac..810717f8 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAyBF;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;AAIJ;EAEI;EACA;;AC7CI;ED0CR;IAEI;IACA;;;AC7CI;ED0CR;IAEI;IACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAgFA;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;ACfA;EACE;EACA;;;ADwCN;EAEI;EACA;;ACpEM;EDiEV;IAEI;IACA;;;ACpEM;EDiEV;IAEI;IACA;;;;AAIJ;EAEI;EACA;;AC3EM;EDwEV;IAEI;IACA;;;AC3EM;EDwEV;IAEI;IACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index ea57fcc9..df99f20f 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,66 +1,93 @@ @use '../stylesheets/modularscale' as ms; -ms.$settings: (base: 1.2em, ratio: 1.45); - -.standard { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; -} - -ms.$settings: (base: 1in 2cm 13pc, ratio: 1.3); - -.multi-stranded { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; -} - +// ms.$settings: (base: 1.2em, ratio: 1.45); +// +// .standard { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } +// +// ms.$settings: (base: 1in 2cm 13pc, ratio: 1.3); +// +// .multi-stranded { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } +// +// ms.$settings: ( +// s: ( +// base: 12px, +// ratio: 1.2, +// ), +// l: ( +// base: 20px, +// ratio: 1.6, +// ) +// ); +// +// .multi-threaded { +// --step0-thread-s: #{ms.step(0, $thread: s)}; +// --step1-thread-s: #{ms.step(1, $thread: s)}; +// --step2-thread-s: #{ms.step(2, $thread: s)}; +// --step0-thread-l: #{ms.step(0, $thread: l)}; +// --step1-thread-l: #{ms.step(1, $thread: l)}; +// --step2-thread-l: #{ms.step(2, $thread: l)}; +// } +// +// ms.$settings: (base: 1.2em, ratio: 6at3); +// +// .target-size { +// --step-3: #{ms.step(-3)}; +// --step-2: #{ms.step(-2)}; +// --step-1: #{ms.step(-1)}; +// --step0: #{ms.step(0)}; +// --step1: #{ms.step(1)}; +// --step2: #{ms.step(2)}; +// --step3: #{ms.step(3)}; +// } +// ms.$settings: ( + base: 12px, + ratio: 1.2, + respond: typetura, + 400px: ( + base: 12px 14px, + ratio: 1.2, + ), s: ( base: 12px, ratio: 1.2, ), + 1000px: ( + base: 20px, + ratio: 1.6, + ), l: ( base: 20px, ratio: 1.6, ) ); -.multi-threaded { - --step0-thread-s: #{ms.step(0, $thread: s)}; - --step1-thread-s: #{ms.step(1, $thread: s)}; - --step2-thread-s: #{ms.step(2, $thread: s)}; - --step0-thread-l: #{ms.step(0, $thread: l)}; - --step1-thread-l: #{ms.step(1, $thread: l)}; - --step2-thread-l: #{ms.step(2, $thread: l)}; -} - -ms.$settings: (base: 1.2em, ratio: 6at3); - -.target-size { - --step-3: #{ms.step(-3)}; - --step-2: #{ms.step(-2)}; - --step-1: #{ms.step(-1)}; - --step0: #{ms.step(0)}; - --step1: #{ms.step(1)}; - --step2: #{ms.step(2)}; - --step3: #{ms.step(3)}; +.typetura { + @include ms.step using ($bp) { + font-size: ms.step(2, $respond: $bp); + } } ms.$settings: ( base: 12px, ratio: 1.2, - respond: typetura, - 400px: ( + 30rem: ( base: 12px 14px, ratio: 1.2, ), @@ -68,7 +95,7 @@ ms.$settings: ( base: 12px, ratio: 1.2, ), - 1000px: ( + 60rem: ( base: 20px, ratio: 1.6, ), @@ -78,15 +105,18 @@ ms.$settings: ( ) ); -foo { - @include ms.step using ($bp) { - bar: ms.step(2, $respond: $bp); +@include ms.container(".ms-container"); + +.container { + @include ms.step(container) using ($bp) { + font-size: ms.step(2, $respond: $bp); + padding: ms.step(2, $respond: $bp) ms.step(2); } } -foo { +.foo { @include ms.step(container) using ($bp) { - bar: ms.step(2, $respond: $bp); + font-size: ms.step(2, $respond: $bp); padding: ms.step(2, $respond: $bp) ms.step(2); } } From e1532fcedb1283afd7f0fbee86812587f2ba4a5e Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 14:31:05 -0700 Subject: [PATCH 17/63] Missed a bunch of division errors. Fixed now --- stylesheets/modularscale/_respond.scss | 2 +- stylesheets/modularscale/_strip-units.scss | 4 +- stylesheets/modularscale/_target.scss | 76 ++++++++------ test/test.css | 43 +++++++- test/test.css.map | 2 +- test/test.scss | 112 ++++++++++----------- 6 files changed, 149 insertions(+), 90 deletions(-) diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index e30f6213..068bae52 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -29,7 +29,7 @@ @if (type-of(list.nth($bp, 1)) == "number") { $key: list.nth($bp, 1); - $keyframe: percentage($key/$max); + $keyframe: percentage(math.div($key, $max)); #{$keyframe} { @content (list.nth($bp, 1)); } diff --git a/stylesheets/modularscale/_strip-units.scss b/stylesheets/modularscale/_strip-units.scss index b1015a54..26e73bfb 100644 --- a/stylesheets/modularscale/_strip-units.scss +++ b/stylesheets/modularscale/_strip-units.scss @@ -3,5 +3,5 @@ // It is used here because calc() doesn't do unit logic // AND target ratios use units as a hack to get a number. @function unitless($val) { - @return ($val / ($val - $val + 1)); -} \ No newline at end of file + @return math.div($val, $val - $val + 1); +} diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index b6763ccb..fe784322 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,41 +1,61 @@ // Convert number string to number @function to-num($n) { - $length: string.length($n); - $return: 0; - @for $i from 1 through $length { - $return: $return * 10; - $value: string.slice($n, $i, $i); - @if ($value == '0') { $return: $return + 0 } - @if ($value == '1') { $return: $return + 1 } - @if ($value == '2') { $return: $return + 2 } - @if ($value == '3') { $return: $return + 3 } - @if ($value == '4') { $return: $return + 4 } - @if ($value == '5') { $return: $return + 5 } - @if ($value == '6') { $return: $return + 6 } - @if ($value == '7') { $return: $return + 7 } - @if ($value == '8') { $return: $return + 8 } - @if ($value == '9') { $return: $return + 9 } - } - @return $return; + $length: string.length($n); + $return: 0; + @for $i from 1 through $length { + $return: $return * 10; + $value: string.slice($n, $i, $i); + @if ($value == "0") { + $return: $return + 0; + } + @if ($value == "1") { + $return: $return + 1; + } + @if ($value == "2") { + $return: $return + 2; + } + @if ($value == "3") { + $return: $return + 3; + } + @if ($value == "4") { + $return: $return + 4; + } + @if ($value == "5") { + $return: $return + 5; + } + @if ($value == "6") { + $return: $return + 6; + } + @if ($value == "7") { + $return: $return + 7; + } + @if ($value == "8") { + $return: $return + 8; + } + @if ($value == "9") { + $return: $return + 9; + } + } + @return $return; } // Find a ratio based on a target value -@function target($t,$b) { - @if (list.length($b) > 1) { - @error "You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base."; - } +@function target($t, $b) { + @if (list.length($b) > 1) { + @error "You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base."; + } // Convert to string - $t: $t + ''; + $t: $t + ""; // Remove base units to calulate ratio - $b: unitless(nth($b,1)); + $b: unitless(nth($b, 1)); // Find where 'at' is in the string - $at: str-index($t,'at'); + $at: str-index($t, "at"); // Slice the value and target out // and convert strings to numbers - $v: to-num(str-slice($t,0,$at - 1)); - $t: to-num(str-slice($t,$at + 2)); + $v: to-num(str-slice($t, 0, $at - 1)); + $t: to-num(str-slice($t, $at + 2)); // Solve the modular scale function for the ratio. - @return math.pow(($v/$b),(1/$t)); -} \ No newline at end of file + @return math.pow(math.div($v, $b), math.div(1, $t)); +} diff --git a/test/test.css b/test/test.css index 160dccf1..b5a2f7a3 100644 --- a/test/test.css +++ b/test/test.css @@ -1,9 +1,48 @@ +.standard { + --step-3: 0.3936200746em; + --step-2: 0.5707491082em; + --step-1: 0.8275862069em; + --step0: 1.2em; + --step1: 1.74em; + --step2: 2.523em; + --step3: 3.65835em; +} + +.multi-stranded { + --step-3: 0.7692307692in; + --step-2: 2cm; + --step-1: 5.9171597633pc; + --step0: 1in; + --step1: 2.6cm; + --step2: 7.6923076923pc; + --step3: 1.3in; +} + +.multi-threaded { + --step0-thread-s: 12px; + --step1-thread-s: 14.4px; + --step2-thread-s: 17.28px; + --step0-thread-l: 20px; + --step1-thread-l: 32px; + --step2-thread-l: 51.2px; +} + +.target-size { + --step-3: 0.24em; + --step-2: 0.4103942272em; + --step-1: 0.7017642572em; + --step0: 1.2em; + --step1: 2.051971136em; + --step2: 3.5088212859em; + --step3: 6em; +} + .typetura { font-size: 17.28px; - --tt-key: ubhbh0h; + --tt-key: ufj3zmg; --tt-max: 1000; } -@keyframes ubhbh0h { +@keyframes ufj3zmg { 40% { font-size: 14.4px; } diff --git a/test/test.css.map b/test/test.css.map index 810717f8..26f97cb8 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAgFA;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;ACfA;EACE;EACA;;;ADwCN;EAEI;EACA;;ACpEM;EDiEV;IAEI;IACA;;;ACpEM;EDiEV;IAEI;IACA;;;;AAIJ;EAEI;EACA;;AC3EM;EDwEV;IAEI;IACA;;;AC3EM;EDwEV;IAEI;IACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAyBF;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;ACfA;EACE;EACA;;;ADwCN;EAEI;EACA;;ACpEM;EDiEV;IAEI;IACA;;;ACpEM;EDiEV;IAEI;IACA;;;;AAIJ;EAEI;EACA;;AC3EM;EDwEV;IAEI;IACA;;;AC3EM;EDwEV;IAEI;IACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index df99f20f..fd9e60f3 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,61 +1,61 @@ @use '../stylesheets/modularscale' as ms; -// ms.$settings: (base: 1.2em, ratio: 1.45); -// -// .standard { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } -// -// ms.$settings: (base: 1in 2cm 13pc, ratio: 1.3); -// -// .multi-stranded { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } -// -// ms.$settings: ( -// s: ( -// base: 12px, -// ratio: 1.2, -// ), -// l: ( -// base: 20px, -// ratio: 1.6, -// ) -// ); -// -// .multi-threaded { -// --step0-thread-s: #{ms.step(0, $thread: s)}; -// --step1-thread-s: #{ms.step(1, $thread: s)}; -// --step2-thread-s: #{ms.step(2, $thread: s)}; -// --step0-thread-l: #{ms.step(0, $thread: l)}; -// --step1-thread-l: #{ms.step(1, $thread: l)}; -// --step2-thread-l: #{ms.step(2, $thread: l)}; -// } -// -// ms.$settings: (base: 1.2em, ratio: 6at3); -// -// .target-size { -// --step-3: #{ms.step(-3)}; -// --step-2: #{ms.step(-2)}; -// --step-1: #{ms.step(-1)}; -// --step0: #{ms.step(0)}; -// --step1: #{ms.step(1)}; -// --step2: #{ms.step(2)}; -// --step3: #{ms.step(3)}; -// } -// +ms.$settings: (base: 1.2em, ratio: 1.45); + +.standard { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: (base: 1in 2cm 13pc, ratio: 1.3); + +.multi-stranded { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + +ms.$settings: ( + s: ( + base: 12px, + ratio: 1.2, + ), + l: ( + base: 20px, + ratio: 1.6, + ) +); + +.multi-threaded { + --step0-thread-s: #{ms.step(0, $thread: s)}; + --step1-thread-s: #{ms.step(1, $thread: s)}; + --step2-thread-s: #{ms.step(2, $thread: s)}; + --step0-thread-l: #{ms.step(0, $thread: l)}; + --step1-thread-l: #{ms.step(1, $thread: l)}; + --step2-thread-l: #{ms.step(2, $thread: l)}; +} + +ms.$settings: (base: 1.2em, ratio: 6at3); + +.target-size { + --step-3: #{ms.step(-3)}; + --step-2: #{ms.step(-2)}; + --step-1: #{ms.step(-1)}; + --step0: #{ms.step(0)}; + --step1: #{ms.step(1)}; + --step2: #{ms.step(2)}; + --step3: #{ms.step(3)}; +} + ms.$settings: ( base: 12px, ratio: 1.2, From 0b5454f1e71e61f2adc3ce9c28b65dc2504233f9 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 15:10:17 -0700 Subject: [PATCH 18/63] Readme updates --- readme.md | 139 +++++++++++++------------ stylesheets/modularscale/_respond.scss | 2 +- stylesheets/modularscale/_step.scss | 4 +- test/test.css | 4 +- test/test.scss | 16 +-- 5 files changed, 87 insertions(+), 78 deletions(-) diff --git a/readme.md b/readme.md index 254ff586..19490545 100644 --- a/readme.md +++ b/readme.md @@ -10,42 +10,36 @@ To get started, you need to select a ratio and a base value. The base value is u ### NPM -* Terminal: `npm install modularscale-sass --save-dev` -* SCSS: `@use '~modularscale-sass/stylesheets/modularscale';` +- Terminal: `npm install modularscale-sass --save-dev` +- SCSS: `@use '~modularscale-sass/stylesheets/modularscale' as ms;` ### Sass -* [Download the latest zip](https://github.com/modularscale/modularscale-sass/releases/latest) -* Extract into your project -* SCSS: `@import 'modularscale';` +- [Download the latest zip](https://github.com/modularscale/modularscale-sass/releases/latest) +- Extract into your project +- SCSS: `@use '/modularscale' as ms;` ## Using modular scale #### Initial setup and usage: -The first thing you’ll want to do when you start using modular scale is configure it to meet your needs. This is done in the `$modularscale` map. +The first thing you’ll want to do when you start using modular scale is configure it to meet your needs. This is done in the `ms.$settings` map. ```scss -$modularscale: ( - base: 1em, - ratio: 1.5 -); +ms.$settings: (base: 1rem, ratio: 1.25); ``` You can use any unit you wish as your base and any ratio. Multiple bases can be defined for creating multi stranded scales. There is no limit here to the number of strands you use. ```scss -$modularscale: ( - base: 1em 1.2em 1.6em, - ratio: 1.5 -); +ms.$settings: (base: 1em 1.2em 1.6em, ratio: 1.5); ``` -Now that we have defined your scale, we can start using it anywhere. Simply call the `ms(n)` function where `n` is the point on the scale. +Now that we have defined your scale, we can start using it anywhere. Simply call the `ms.step(n)` function where `n` is the point on the scale. ```scss h4 { - font-size: ms(3); + font-size: ms.step(2); } ``` @@ -56,11 +50,11 @@ Occasionally you may wind up with conflicts. All critical components are name-sp Modular scale now supports different settings threads, so you can set up various threads to configure different ratios or breakpoints. ```scss -$modularscale: ( +ms.$settings: ( base: 1em, ratio: 1.5, a: ( - ratio: 1.3 + ratio: 1.3, ) ); ``` @@ -69,91 +63,106 @@ To call the thread named `a`, call it in your function like so: ```scss h5 { - font-size: ms(2, $thread: a); + font-size: ms.step(2, $thread: a); } ``` -Your settings will cascade into the threads so no need to redefine a base or ratio if you want to re-use it from the main config. +## Responsive modular scales -If you wish to put breakpoints into your settings for use with responsive typography then there are helpers in place for this. Simply organize your config with breakpoint values from smallest to largest: +You will likely want to change your typographic settings as browser or element sizes change. This functionality is built right into modular scale! Configure your breakpoints directly into your settings map and select your responsive mode. [Typetura](https://docs.typetura.com) is the default mode for fluidly responsive text that can respond to various elements in your layout. `media` for media queries and `container` for container queries can also be used. ```scss -$modularscale: ( - base: 12px, +ms.$settings: ( + base: 1rem, ratio: 1.5, - 400px: ( - ratio: 1.2, - ), + respond: typetura, + // typetura, media, or container + 400px: + ( + // base is inheritied + ratio: 1.2, + ), 900px: ( - base: 16px, + base: 1.25rem, ratio: 1.3, ), 1200px: ( - base: 16px, + base: 1.5rem, ratio: 1.6, - ), + ) ); ``` -_Note that you must use the same units for both your type and your breakpoints for this to work_ - -This technique is based on [Mike Riethmuller’s](https://twitter.com/MikeRiethmuller) [_Precise control over responsive typography_](http://madebymike.com.au/writing/precise-control-responsive-typography/). A fantastic technique for fluidly scaling typography. - -Then, call the mixin `@include respond();` and a fully fluid and responsive scale will be generated. +Nest the code you want to be responsive inside the `ms.step using ($respond)` mixin. Each time you call the `ms.step(#, $respond)` function and you want it to respond, you must pass the `$respond` variable to it. ```scss -h2 { - @include respond(font-size,5); +.element { + // Nest the responsive mixin inside of your element + @include ms.step using ($respond) { + // Now write all the styles you want to be responsive + // This value will be responsive + font-size: ms.step(2, $respond); + + // This will not respond + margin-bottom: ms.step(3); + + // top/bottom will be responsive, left/right will not + padding: ms.step(2, $respond) ms.step(2); + } } ``` -If you do happen to have any values that are just named without numbers they will be ignored by the responsive mixin, it’s smart enough to just pull values that look like breakpoints. +#### Typetura implementation notes + +This requires the [Typetura script](https://github.com/Typetura/Typetura/releases/latest) is installed on your website. Only pixel based breakpoints can be used with this mode. You can still use any unit for your base size(s). -#### Note on non-integer values +#### Container query implementation notes -Unfortunately [Sass doesn’t natively support exponents](https://github.com/sass/sass/issues/684#issuecomment-196852515). This isn’t all bad news, you can either use [Compass](http://compass-style.org/), [mathsass](https://github.com/terkel/mathsass), or another library that has a `pow()` function that supports non-integer values and this plugin will pick up on that function and use it. You will then be able to write values like `ms(2.5)`. This is also a prerequisite for _target sizes_ below. +You will need to define a container. Do this with the `@include ms.container;` mixin. -#### Target sizes +```scss +// By default, the container is .modularscale +@include ms.container; +// You can define your own container by passing a selector through as an argument +@include ms.container(".ms-container"); +``` -_NOTE: Please see above section on non-integer values before using this feature_ +## Target sizes One of the more difficult parts of setting up your scales is finding a ratio that works for you. In many cases you know what size you want your text to be and what size you want larger headings to be. The `at` helper allows you to plug in a target size into the ratio value and it will generate your ratio. ```scss -$modularscale: ( - base: 16px, - ratio: 42at5 -); +ms.$settings: (base: 16px, ratio: 42at5); ``` -Now your base is `16px` and when you call `ms(5)` it will be `42px`. Everything in-between falls neatly on a scale created with these two values. +Now your base is `16px` and when you call `ms.step(5)` it will be `42px`. Everything in-between falls neatly on a scale created with these two values. ## Ratios Modular scale includes functions for a number of classic design and musical scale ratios. You can add your own ratios as well. -By default ratio is set to `$fifth`. +By default ratio is set to `ms.$fifth`. - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Function Ratio Decimal value
$phi 1:1.6181.618
$golden 1:1.6181.618
$double-octave 1:4 4
$major-twelfth 1:3 3
$major-eleventh 3:8 2.667
$major-tenth 2:5 2.5
$octave 1:2 2
$major-seventh 8:15 1.875
$minor-seventh 9:16 1.778
$major-sixth 3:5 1.667
$minor-sixth 5:8 1.6
$fifth 2:3 1.5
$augmented-fourth1:√2 1.414
$fourth 3:4 1.333
$major-third 4:5 1.25
$minor-third 5:6 1.2
$major-second 8:9 1.125
$minor-second 15:16 1.067
ms.$phi 1:1.6181.618
ms.$golden 1:1.6181.618
ms.$double-octave 1:4 4
ms.$major-twelfth 1:3 3
ms.$major-eleventh 3:8 2.667
ms.$major-tenth 2:5 2.5
ms.$octave 1:2 2
ms.$major-seventh 8:15 1.875
ms.$minor-seventh 9:16 1.778
ms.$major-sixth 3:5 1.667
ms.$minor-sixth 5:8 1.6
ms.$fifth 2:3 1.5
ms.$augmented-fourth1:√2 1.414
ms.$fourth 3:4 1.333
ms.$major-third 4:5 1.25
ms.$minor-third 5:6 1.2
ms.$major-second 8:9 1.125
ms.$minor-second 15:16 1.067
## [Changelog](https://github.com/Team-Sass/modular-scale/releases) diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 068bae52..d4d8c421 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -7,7 +7,7 @@ $query: $mode; // Default query type @if ($query == null) { - $query: media; + $query: typetura; } // Find maximum value @each $bp in $settings { diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 99089174..e50cc3ef 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,10 +1,10 @@ @function step( $v: 0, + $respond: false, $base: false, $ratio: false, $thread: false, - $settings: $settings, - $respond: false + $settings: $settings ) { // Parse settings @if ($respond) { diff --git a/test/test.css b/test/test.css index b5a2f7a3..ba6b8815 100644 --- a/test/test.css +++ b/test/test.css @@ -39,10 +39,10 @@ .typetura { font-size: 17.28px; - --tt-key: ufj3zmg; + --tt-key: ufj3zsf; --tt-max: 1000; } -@keyframes ufj3zmg { +@keyframes ufj3zsf { 40% { font-size: 14.4px; } diff --git a/test/test.scss b/test/test.scss index fd9e60f3..4fe8331c 100644 --- a/test/test.scss +++ b/test/test.scss @@ -79,8 +79,8 @@ ms.$settings: ( ); .typetura { - @include ms.step using ($bp) { - font-size: ms.step(2, $respond: $bp); + @include ms.step using ($respond) { + font-size: ms.step(2, $respond); } } @@ -108,15 +108,15 @@ ms.$settings: ( @include ms.container(".ms-container"); .container { - @include ms.step(container) using ($bp) { - font-size: ms.step(2, $respond: $bp); - padding: ms.step(2, $respond: $bp) ms.step(2); + @include ms.step(container) using ($respond) { + font-size: ms.step(2, $respond); + padding: ms.step(2, $respond) ms.step(2); } } .foo { - @include ms.step(container) using ($bp) { - font-size: ms.step(2, $respond: $bp); - padding: ms.step(2, $respond: $bp) ms.step(2); + @include ms.step(container) using ($respond) { + font-size: ms.step(2, $respond); + padding: ms.step(2, $respond) ms.step(2); } } From 62346278fe82bc49e155cf564c44bb737db5e62d Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 25 Jun 2021 15:26:10 -0700 Subject: [PATCH 19/63] Version up --- .DS_Store | Bin 8196 -> 8196 bytes .gitignore | 2 ++ package.json | 2 +- stylesheets/modularscale.zip | Bin 0 -> 4679 bytes 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 stylesheets/modularscale.zip diff --git a/.DS_Store b/.DS_Store index 71051d75d6ab795829d4ca7acc47406b3b607887..6131551fb9ffb1be674224beddd2cd3c647cc3d8 100644 GIT binary patch delta 82 zcmZp1XmQwJD8P7nvXMZ8wp4Ysp@F5Lj)I|qajlL5kYjGDqhMifUR%q_A+Bm@>zR;S lSyf$ATQ__1EdhDPIg=g4q&ABPeqh_oF7b_J^Dhy0W&rb18E^mq delta 78 zcmZp1XmQwJD8P7PvXMZ8hIn)bwO_)I75+ed)@AC0u08vnXp#Xt?x-k6d3Ic-s;);s~1Uh`s zm7O=n(c`4IgSYqpI@L4z+wlRXK_+(_J_>A)ECuV1!guBzLspG)1Nm?(#d1o2UUis>JXpq}4YjJ>2^)Y>J8GV0& zxz&g9b5iNg)&;gSvU8P$8_v05GM@@f~-(jopj}fj+Grt(R_{buhKS4!EF^7#gO#4i> ze2lhS`>Nj2(usJg&^&oQaQ0MVsnwUAl>Aoq6}7CHu(W}??7H$#vB??B8x9u91_=3& z?lSTK~E)6!nO7|D|3j$x8S>M!X=D8iBbGywz*I=R*P zqdVqY3{)I#^+eewC$L@{lj>~j6C8{9D7+Z(Rw@o|mDZt^XccXZtZcfcG6~J%*^~th zO0(7&q9bViFK3PyX1jdKO0-NDwvxGA&bIBUV=|049gM1#yXrP8Xl{Ok)0N@U6a`@= z$Hs2LTtP6rYjv(-i^32NhJ09UH^!3)1F&MBFEKv*)O$$_0`dID7cWO|4|nvHeaa{r z5D)-m0DFKkl_vV`W73TEb7riMLKR&e7Mt>lp`S~f;|}b@p546_U?fQ?NU5Cs zhGx)?GF8V2Qg{F`rk33bxXN1Y`{w zV0BhnEj(qQBNj(xD(>;<`w8bZ!Tx9(5wt6%*%?ymJ7YaIY&CTCw(yg`ZaWX3MLQ+L z)Y_)6N}V#{R4yw#X^+?WdYPm1xtfCc`qQ?IFQY*Tj#G4#&+B_WeM5@(JzYvxM3_T5 z6jB43ZTyyNtJC-$q;{K}E(b0UIp-uaWks9H1+Wf1xob`jDXT7+LN?TE+%(-PP&n;f zkE?HA2bfb%W?0f$`v)E0<6J8?oLZp z5HZro8y1aw5EE-(liFp9caju;-fE~5TlpE>Iwq5O_N`rm#09U!8OE4VL`$%d=ntgK zG&IH^wh}rU`Hql+`TXN2OG`t}98sqPfdDSh;HVqD`iNP|8bab@J*5 zjYj@7u@gpo0{XL6muR8MHQPxPAHTof^dZ(f^Hn^t-sxHAX@h>^vA))jbGlAJC!m~b z3-dxzq|oQ8nckVKQN_)%oYRHHDzF(8`<<~-L1=+x9K9UE>#xsZ*>F!D2g%9BWqCW9 zi2B1mGyFEzD9*=orH{rYF=(^V-qGo;<(g~bO-d}V=w5|+3fDHj58KIWt#1zve%uM8 zJQ`-G9IWtN!K!-6@52qlXa&;-uM9gEF~QHvg9V;{7#g5*i6-F+y)j%`$Lk4_A&CcY`1`Q9n(xEnNP5Hjn|OFTVlb{~XEJDruka zl_q5aEoz1NZlTf{Tcujb4)%p`CEgP1it#FIA&B=t=Bya5dd-9P>ei6MqK2Da;o|*W zw0I1i#b`TMCubB^gF$WDl*fI5zV?YC#i@Q ztNY)1;L8*ewj}djT5Tmk-ts|Y{wC+j3m4&wi!h3d^F{;XQx}(c#N{n6aWDG~D%Qw- z=|0zX{$!AZy4JEz@2-DIXEdj**Z4TvCVud|o3*an`gLSiurpLml{$NNG_=>h|9;A! zr2%UU08XjJd_PW;a01ZS$LWyzK2G$cV|(i*6iP>ro1Qoy z5s_8pJby$?akC$HG*3gLxN=*TFT(b=7+%OsF6s^o)!pVgsVq@>KO+t&)kDl`t{p8s zBO-xz{>bkui?z(#6)8m1ckdj1M`-MJ4++1rW2e!bKK^ZYJI6yiFA&0Yw?xhJR82U$ z@B&qwSW(QMxa!Zc>6|F}^u8r|a8)|HK5dNI9SKMGo8GU-l-B%*=9ZFnNl<_xkxwea zGwLzBwyt<_zQ@WYwy zNm>)$hcFOn1WT_CW336hD3=gCLc2yXx{j!;r^E=s*f$>A-o?7yFNc0BeVWYN6pj|< z_rr87fv(A$;IBzvH6h%)rdc)J7&BE)$?f9mJJKyHqo1*4TRN=A*xfmu){tbih{!}N zqQFd~+ejriO8ok**~44(`q=g%2L9PoiNkJE5(6o6+t8f6oVPgX2ppbaaQKTj+>Z4J ztwlia{c9blOGx*QCH<&+sq$*kuf?735=V$K0d`2ijwP+ApcCbBqF?hn)e}eNWQc*t zZ3`zIW^)r_L0Z>Tt_&~h6m=K)S$HyUrV?8SZdpXL(^p-iPnAz-V$}4!Ailq2#xwBE z8h@IWCw!hS)?l}dmel~KtSH8`zyf(ZSHZwDl%8~|7VJ3HObdQAK`rHyHmo@?61dIx z?CYhii4HBc&S(>%PpEUpA3HFL=pY|x7(<-f*9UIgA3LQ|#AM0gD(?UBzUA$~dgXJ* zgM~||3>V0`tU14esA#R!^;6YpIweW(SoBf26iew2;WGSc5q8Fou8xwkC#pyle?t0X zBwa*DLs@fWV;V>NYnUxJo1P9AHYGToDFr!F)t!4D_q~EvO>BNHlK)NqI{OooVTY5T zW07e!EQhI-qCW;>3h)c+LtiEZ!)6kvgPT`I3g$=km#C`-6o~3EFy5ho4|j*%7BI7;kN=wwxB~JJfr~JNfcLe*}$fW3p^=Ud=3rilauIieB`+6IS1Mx2xOOR?~K? zwqImwmr%lP>zzq4=de0f`0hDWC-8+b@kANDgr@az`<12F;y77FNU&1(qgO8F3pWyu zU&;3^2VMX35q9tUfgr%7L*88ilg{44h6a$5;+OBY`!{nBc^sfu zC2yC0-OLeE;{6)uA9t?gL4eMSyw(Gq*WSX0z92QvzXthNeHeKlpmiXxT)*xH0r@S^ zKW!w)g8)U4T$z9(xVNyOM7o1P{zXY74+F>?c~%25x3{pNA&dvZ{9Dl@j|J!ic_slm gvA3|Hg-oFThiVwYX-L3=Ky;+vT~dRW%?$keABXcx+W-In literal 0 HcmV?d00001 From 0d8eb9f1ef7e1a1140c63eae8414ca733104c6cf Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 2 Jul 2021 12:58:13 -0700 Subject: [PATCH 20/63] Update configuration and loading --- stylesheets/_modularscale.scss | 19 ---------- stylesheets/modularscale/_files.scss | 19 ++++++++++ stylesheets/modularscale/_index.scss | 6 ++++ stylesheets/modularscale/_vars.scss | 52 ++++++++++++++-------------- test/test.css | 18 +++++----- test/test.css.map | 2 +- test/test.scss | 4 +-- 7 files changed, 62 insertions(+), 58 deletions(-) delete mode 100644 stylesheets/_modularscale.scss create mode 100644 stylesheets/modularscale/_files.scss create mode 100644 stylesheets/modularscale/_index.scss diff --git a/stylesheets/_modularscale.scss b/stylesheets/_modularscale.scss deleted file mode 100644 index 80e4d899..00000000 --- a/stylesheets/_modularscale.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "sass:math"; -@use "sass:list"; -@use "sass:string"; -@use "sass:map"; -@use "sass:meta"; -@use "sass:selector"; - -// Defaults and variables -@import "modularscale/vars"; - -// Core functions -@import "modularscale/settings"; -@import "modularscale/strip-units"; -@import "modularscale/sort"; -@import "modularscale/target"; -@import "modularscale/step"; - -// Mixins -@import "modularscale/respond"; diff --git a/stylesheets/modularscale/_files.scss b/stylesheets/modularscale/_files.scss new file mode 100644 index 00000000..65ec32cc --- /dev/null +++ b/stylesheets/modularscale/_files.scss @@ -0,0 +1,19 @@ +@use "sass:math"; +@use "sass:list"; +@use "sass:string"; +@use "sass:map"; +@use "sass:meta"; +@use "sass:selector"; + +// Defaults and variables +@import "vars"; + +// Core functions +@import "settings"; +@import "strip-units"; +@import "sort"; +@import "target"; +@import "step"; + +// Mixins +@import "respond"; diff --git a/stylesheets/modularscale/_index.scss b/stylesheets/modularscale/_index.scss new file mode 100644 index 00000000..0cce735e --- /dev/null +++ b/stylesheets/modularscale/_index.scss @@ -0,0 +1,6 @@ +@forward 'files' with ( + $base: 1em !default, + $ratio: 1.5 !default, + $settings: () !default, + $respond: media !default +); diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_vars.scss index 2a744579..3ad04e2b 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_vars.scss @@ -1,27 +1,27 @@ -// Ratios -$double-octave : 4 ; -$pi : 3.14159265359 ; -$major-twelfth : 3 ; -$major-eleventh : 2.666666667 ; -$major-tenth : 2.5 ; -$octave : 2 ; -$major-seventh : 1.875 ; -$minor-seventh : 1.777777778 ; -$major-sixth : 1.666666667 ; -$phi : 1.618034 ; -$golden : $phi ; -$minor-sixth : 1.6 ; -$fifth : 1.5 ; -$augmented-fourth : 1.41421 ; -$fourth : 1.333333333 ; -$major-third : 1.25 ; -$minor-third : 1.2 ; -$major-second : 1.125 ; -$minor-second : 1.066666667 ; - // Base config -$base : 1em !default; -$ratio : $fifth !default; -$settings : () !default; -$respond : media !default; -$container-write : false ; \ No newline at end of file +$base: 1em !default; +$ratio: 1.5 !default; +$settings: () !default; +$respond: media !default; +$container-write: false; + +// Ratios +$double-octave: 4; +$pi: 3.14159265359; +$major-twelfth: 3; +$major-eleventh: 2.666666667; +$major-tenth: 2.5; +$octave: 2; +$major-seventh: 1.875; +$minor-seventh: 1.777777778; +$major-sixth: 1.666666667; +$phi: 1.618034; +$golden: $phi; +$minor-sixth: 1.6; +$fifth: 1.5; +$augmented-fourth: 1.41421; +$fourth: 1.333333333; +$major-third: 1.25; +$minor-third: 1.2; +$major-second: 1.125; +$minor-second: 1.066666667; diff --git a/test/test.css b/test/test.css index ba6b8815..525f9835 100644 --- a/test/test.css +++ b/test/test.css @@ -1,11 +1,11 @@ .standard { - --step-3: 0.3936200746em; - --step-2: 0.5707491082em; - --step-1: 0.8275862069em; - --step0: 1.2em; - --step1: 1.74em; - --step2: 2.523em; - --step3: 3.65835em; + --step-3: 0.9274981217em; + --step-2: 1.0202479339em; + --step-1: 1.1222727273em; + --step0: 1.2345em; + --step1: 1.35795em; + --step2: 1.493745em; + --step3: 1.6431195em; } .multi-stranded { @@ -39,10 +39,10 @@ .typetura { font-size: 17.28px; - --tt-key: ufj3zsf; + --tt-key: uaxt0j4; --tt-max: 1000; } -@keyframes ufj3zsf { +@keyframes uaxt0j4 { 40% { font-size: 14.4px; } diff --git a/test/test.css.map b/test/test.css.map index 26f97cb8..b66d7a4f 100644 --- a/test/test.css.map +++ b/test/test.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAyBF;EAEI;EC1DA;EACA;;AACA;EAMM;IDkDN;;EClDM;IDkDN;;;;ACfA;EACE;EACA;;;ADwCN;EAEI;EACA;;ACpEM;EDiEV;IAEI;IACA;;;ACpEM;EDiEV;IAEI;IACA;;;;AAIJ;EAEI;EACA;;AC3EM;EDwEV;IAEI;IACA;;;AC3EM;EDwEV;IAEI;IACA","file":"test.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["test.scss","../stylesheets/modularscale/_respond.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAyBF;EAEI;ECxDA;EACA;;AACA;EAMM;IDgDN;;EChDM;IDgDN;;;;ACbA;EACE;EACA;;;ADsCN;EAEI;EACA;;AClEM;ED+DV;IAEI;IACA;;;AClEM;ED+DV;IAEI;IACA;;;;AAIJ;EAEI;EACA;;ACzEM;EDsEV;IAEI;IACA;;;ACzEM;EDsEV;IAEI;IACA","file":"test.css"} \ No newline at end of file diff --git a/test/test.scss b/test/test.scss index 4fe8331c..d43f8004 100644 --- a/test/test.scss +++ b/test/test.scss @@ -1,6 +1,4 @@ -@use '../stylesheets/modularscale' as ms; - -ms.$settings: (base: 1.2em, ratio: 1.45); +@use '../stylesheets/modularscale' as ms with ($base: 1.2345em, $ratio: 1.1); .standard { --step-3: #{ms.step(-3)}; From 1308de0034f01022900d0fbb1a844429e6389257 Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 2 Jul 2021 12:59:32 -0700 Subject: [PATCH 21/63] Update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c7887e86..5332318e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "modularscale-sass", - "version": "4.0.0.rc1", + "version": "4.0.0.rc2", "description": "A tool to help web designers size their type in a more meaningful way.", "main": "stylesheets/_modularscale.scss", "scripts": { From 5c2f68a895e8329f9c8a153586294638cbb7690d Mon Sep 17 00:00:00 2001 From: Scott Kellum Date: Fri, 2 Jul 2021 13:10:33 -0700 Subject: [PATCH 22/63] Document forwarding of settings functionality --- .DS_Store | Bin 8196 -> 8196 bytes .gitignore | 1 + readme.md | 8 +++++++- stylesheets/modularscale.zip | Bin 4679 -> 4934 bytes 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 6131551fb9ffb1be674224beddd2cd3c647cc3d8..61fa73867ab03140f7d6dcb6a5d91c42cb05a409 100644 GIT binary patch delta 80 zcmZp1XmQwJD8P7fvXMZ8rbKnMsgZ$>f}y2Ft&T#qC5UZeY*t&#$sw+4XzQ7fTUk|I iQ(HH4@?8OW##xgU1f@2M3w~hR%qsDNW%GX#c4h#}A{grc delta 82 zcmZp1XmQwJD8P7nvXMZ8wp4Ysp@F5Lj)I|qajlL5kYjGDqhMifUR%q_A+Bm@>zR;S lSyf$ATQ__1Z2@`4Ig=g5q&ABReqh_oF7b_J^KTJ$W&rbz8FT;u diff --git a/.gitignore b/.gitignore index 9bea4330..7ce416f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store +*.zip diff --git a/readme.md b/readme.md index 19490545..5bced60f 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,13 @@ h4 { } ``` -Occasionally you may wind up with conflicts. All critical components are name-spaced to avoid conflicts with other libraries. If you do run into a conflict, `function()` is the no-conflict function. +##### Avoiding scoped styles + +You can import the modular scale along with a configuration. Pass the unprefixed settings into the use function. + +```scss +@use '../stylesheets/modularscale' as ms with ($settings: (base: 1em, ratio: 1.5)); +``` #### Multiple scale threads diff --git a/stylesheets/modularscale.zip b/stylesheets/modularscale.zip index f2f4aae0eabbbdc1d1f5ac84b494a438acdbeaca..e4b1b3ea5759dc54c56f40c2eef9abe663b52177 100644 GIT binary patch delta 1442 zcmX@Ea!idkz?+#xgaHIjr#+g;tIYjA?|uRlPqda|4hg$8F+!L7W5)Fa5Wbaif8&I& zjP*dpL10}#q8f-L7!(+C^HWN55{rtH6LV7a<1_P8QY-X|lZ%T(LwFh3K}KH9hZtR2 z!Og(P@|BT+0c>@#$7y{ne;u#D0RPixJaxmuHO}jt47l*%QHZCPj^EZG1D~^@0Y09- z-a2PBFEVzCsZL9Ad&b=Q)hDo}JJ{RH=<}uSwIU`afmfG{i9dP1G(z*qvSlf1hnDUz zS-X=Vz?+>z?Ac+?7^p)b{^elcU;z4TatD(Evez~rX3Aiy*Fo}|7SNHHeoM>DNi9bB z?MN=fZy*}YZ?WeLxegofuwJlTZg9{0TN&q;Z2pC6URnh?%C*zw_Uo|-r3=1z$(^Zj z?40z>*ziNQ@9(NloUYIo#-ml3nY*-xiEZvRiw_-3LU->g=byKdWyWHQo%|~=Xm2QO zUSp{_XMIZamw8j}#ysNi{3u|^_DcQ#jl8crYcvBd6sDPy1A_zPH$-q8hxwWnD5bzO*^*VM{uwmVKs1`iLMJ*-YE}?&`97~{ zWs%|L0Ol-{G;{YE(gHs891fIG7@t3);xNGCSm8@5?j~<<{#Jv86KpSVR z!Gn^C?`AD&vs!3-_OWAL04~2@4;ZZzci8-iE1aeM=-er{k5nx-(D6{Qv)kl+_TNuOi{npj z6fItUdKyTG8xyA+zOa&(700pJ5qilvK>5Gv)laZOBV)x`+4qfg9u?-2A#W#TR z)aIoe35=k;HkpG*a2?mxlJ_e>X)N%uN-U7Kn5tK}k!&@B1xEpK?lkHe#xsehsJQ(Z+ zq?w#KCdUXUp}SEL7$ZULi?%kK0V9zM=s8qFUvn}{uH}$LjxV^Oyn@n9ZQPT!1QpN? u1&7xBwY=5)fxZ<28Z3w6Qf|J<69rXKG${&6@NqG4G5lg?U@+qcg%JQ_(kTc4 delta 1214 zcmX@6c3g!wz?+#xgaHIn%WqEPRpwqFcr5{nCt6D}gG3{A!J?iaV3~~*zA`fRl-``| z#caTB;dd$*t>ke>X;J!D-Q&EZ+;d0#imlj6RR;T>C*9hp8}@O;e6-q1Kk9F zDR!N{_j#p^9ure#=o3B<_s*b{<2OG?=hdnj|)1Omg7sx5h*d@7r z`unF2^#^2Usp|yF$oW3m7R)9&edo_9_Y}tFEh_l*asN{L zJ?8G!o5g;V?66Q-U78*4>A3Kw#rNAw?N_g})_0{a0m>ki0&o|7yeZM3x{N{z54}ZMP*_nIipe4V4*9G&JjG4zP zp8lNv@z^clE6;v4GbuL*Sk;^VGmqZ>rs8Q;K$m&w{-XKu8S3(1-d;2oe*WPP@Mh=emo8*50tVtuW(EdG4014VFl0vDoE*Sm$ekv2Ex|+X zS^|*X+{2N{$SiDkbMg;PUGC#=t|puWVj#WQfGdHKc~|kx$&F)#TJ+cUdvhIf5ODc!d33_wl=ZV4@@!pZmn0qj^Wv3Y|9cKb z&xAYss#rsl8F$OE%wfK{d4GM$#D^xIjE$z+Cz~rW(eGzXxf}E-Wm3{<_Ssi^@B2BgkpHyOWuv{H z>)8t);d#dm&fR{nd(TqK5J}6UJ6Fkr!dUg|1l}3IR1ET7fHxzP2(t(SJ1A)bv&3Xq zenaG(GP#jo29#AMFW|RE&MRPXP+rLvkY=uCVwfDotbm+nK=KNpEQ1`O;=r(kfhCQK ztdqk8<+zbD5!g^rT+b7fX5PWZFgbxk5joC5@`}JH4{Beuwb=~ldM+jg22?{6I2a~# zaLFPk2(YQ3^pGPY&Gegda;K02a Date: Sun, 1 Aug 2021 16:53:11 -0300 Subject: [PATCH 23/63] Update `gitignore` --- .gitignore | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) diff --git a/.gitignore b/.gitignore index 7ce416f0..68f45630 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,219 @@ +# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,node,sass,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,node,sass,visualstudiocode + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General .DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Sass ### +.sass-cache/ +*.css.map +*.sass.map +*.scss.map + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,node,sass,visualstudiocode + *.zip From 6713c474cd4c7a48a6db1b65667ebc1c9783da3d Mon Sep 17 00:00:00 2001 From: Sobral Date: Sun, 1 Aug 2021 16:54:38 -0300 Subject: [PATCH 24/63] Install True Sass tester --- package-lock.json | 575 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 + 2 files changed, 576 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8e095ce4..042c1880 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,576 @@ { "name": "modularscale-sass", - "version": "3.0.10", - "lockfileVersion": 1 + "version": "4.0.0.rc2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "4.0.0.rc2", + "license": "MIT", + "dependencies": { + "sass": "^1.34.0" + }, + "devDependencies": { + "sass-true": "^6.0.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/sass": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.0.tgz", + "integrity": "sha512-B+Tu6cSAG8ffs/cqsZl/bgSH2pCmavDaPTYAoW8QA1qNHh/RqndNfVKuABKYkLjUQ5aq/BnCENVpE80cqdSM1w==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-true": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/sass-true/-/sass-true-6.0.1.tgz", + "integrity": "sha512-Ow72fStIgw+qRRUc0r77emeWry06a3e1hXtadPEzDL/GFiEjtQKZel5fr+gu85zC8JYmLkZofMn6x9b/sq+wfg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + } + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "sass": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.0.tgz", + "integrity": "sha512-B+Tu6cSAG8ffs/cqsZl/bgSH2pCmavDaPTYAoW8QA1qNHh/RqndNfVKuABKYkLjUQ5aq/BnCENVpE80cqdSM1w==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "sass-true": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/sass-true/-/sass-true-6.0.1.tgz", + "integrity": "sha512-Ow72fStIgw+qRRUc0r77emeWry06a3e1hXtadPEzDL/GFiEjtQKZel5fr+gu85zC8JYmLkZofMn6x9b/sq+wfg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "lodash": "^4.17.19" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } } diff --git a/package.json b/package.json index 5332318e..aea0697f 100644 --- a/package.json +++ b/package.json @@ -25,5 +25,8 @@ "homepage": "https://www.modularscale.com", "dependencies": { "sass": "^1.34.0" + }, + "devDependencies": { + "sass-true": "^6.0.1" } } From b844c3fa47e4aed100fde62d5ebba598b6d9cdb3 Mon Sep 17 00:00:00 2001 From: Sobral Date: Sun, 1 Aug 2021 16:54:58 -0300 Subject: [PATCH 25/63] Add test scripts --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0697f..5e4af85b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "description": "A tool to help web designers size their type in a more meaningful way.", "main": "stylesheets/_modularscale.scss", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "post-test": "git diff --exit-code tests/results.css", + "test": "npx sass --no-source-map --stop-on-error tests/index.scss:tests/results.css", + "test:watch": "npx sass --watch --no-source-map --stop-on-error tests/index.scss:tests/results.css" }, "repository": { "type": "git", From 38e3140135bd1d93cdd6a429899f6268222fbc96 Mon Sep 17 00:00:00 2001 From: Sobral Date: Sun, 1 Aug 2021 16:55:17 -0300 Subject: [PATCH 26/63] Start to add tests --- tests/_sort.scss | 9 +++++++++ tests/index.scss | 1 + tests/results.css | 7 +++++++ 3 files changed, 17 insertions(+) create mode 100644 tests/_sort.scss create mode 100644 tests/index.scss create mode 100644 tests/results.css diff --git a/tests/_sort.scss b/tests/_sort.scss new file mode 100644 index 00000000..e196f6d9 --- /dev/null +++ b/tests/_sort.scss @@ -0,0 +1,9 @@ +@use '../node_modules/sass-true' as *; + +@use '../stylesheets/modularscale/sort' as *; + +@include describe('sort [function]') { + @include it('It sorts a list of numbers') { + @include assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); + } +} diff --git a/tests/index.scss b/tests/index.scss new file mode 100644 index 00000000..d9c7134f --- /dev/null +++ b/tests/index.scss @@ -0,0 +1 @@ +@use 'sort'; diff --git a/tests/results.css b/tests/results.css new file mode 100644 index 00000000..1346e262 --- /dev/null +++ b/tests/results.css @@ -0,0 +1,7 @@ +@charset "UTF-8"; +/* # Module: sort [function] */ +/* ------------------------- */ +/* Test: It sorts a list of numbers */ +/* ✔ [assert-equal] It sorts a list of numbers */ +/* */ +/* */ From 185a7670fcf3443cddb10d6d2443ac16573f6fb2 Mon Sep 17 00:00:00 2001 From: Sobral Date: Sun, 1 Aug 2021 19:42:22 -0300 Subject: [PATCH 27/63] Remove wrong parameter on test scripts Why I thought I would need that?! --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5e4af85b..8b64e805 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "stylesheets/_modularscale.scss", "scripts": { "post-test": "git diff --exit-code tests/results.css", - "test": "npx sass --no-source-map --stop-on-error tests/index.scss:tests/results.css", - "test:watch": "npx sass --watch --no-source-map --stop-on-error tests/index.scss:tests/results.css" + "test": "npx sass --no-source-map tests/index.scss:tests/results.css", + "test:watch": "npx sass --watch --no-source-map tests/index.scss:tests/results.css" }, "repository": { "type": "git", From 4374a021d0014e77f5925efb157d01773415d4f5 Mon Sep 17 00:00:00 2001 From: Sobral Date: Sun, 1 Aug 2021 23:16:14 -0300 Subject: [PATCH 28/63] Prefix True --- tests/_sort.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/_sort.scss b/tests/_sort.scss index e196f6d9..fc4255c5 100644 --- a/tests/_sort.scss +++ b/tests/_sort.scss @@ -1,9 +1,9 @@ -@use '../node_modules/sass-true' as *; +@use '../node_modules/sass-true' as true; @use '../stylesheets/modularscale/sort' as *; -@include describe('sort [function]') { - @include it('It sorts a list of numbers') { - @include assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); +@include true.describe('sort [function]') { + @include true.it('It sorts a list of numbers') { + @include true.assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); } } From a9f0b5c6eb09f816252aa4dd09d546282065fb64 Mon Sep 17 00:00:00 2001 From: Sobral Date: Thu, 5 Aug 2021 22:46:57 -0300 Subject: [PATCH 29/63] Rename `unitless()` to `strip-unit()` to... ...avoid conflicts with out reserved word. https://sass-lang.com/documentation/modules/math#is-unitless --- stylesheets/modularscale/_files.scss | 2 +- stylesheets/modularscale/_respond.scss | 2 +- .../modularscale/{_strip-units.scss => _strip-unit.scss} | 4 +++- stylesheets/modularscale/_target.scss | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) rename stylesheets/modularscale/{_strip-units.scss => _strip-unit.scss} (83%) diff --git a/stylesheets/modularscale/_files.scss b/stylesheets/modularscale/_files.scss index 65ec32cc..047fb043 100644 --- a/stylesheets/modularscale/_files.scss +++ b/stylesheets/modularscale/_files.scss @@ -10,7 +10,7 @@ // Core functions @import "settings"; -@import "strip-units"; +@import "strip-unit"; @import "sort"; @import "target"; @import "step"; diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index d4d8c421..627e2bd3 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -23,7 +23,7 @@ // Typetura styles @if ($query == typetura) { --tt-key: #{$id}; - --tt-max: #{unitless($max)}; + --tt-max: #{strip-unit($max)}; @keyframes #{$id} { @each $bp in $settings { @if (type-of(list.nth($bp, 1)) == "number") { diff --git a/stylesheets/modularscale/_strip-units.scss b/stylesheets/modularscale/_strip-unit.scss similarity index 83% rename from stylesheets/modularscale/_strip-units.scss rename to stylesheets/modularscale/_strip-unit.scss index 26e73bfb..904358d6 100644 --- a/stylesheets/modularscale/_strip-units.scss +++ b/stylesheets/modularscale/_strip-unit.scss @@ -1,7 +1,9 @@ +@use "sass:math"; + // Stripping units is not a best practice // This function should not be used elsewhere // It is used here because calc() doesn't do unit logic // AND target ratios use units as a hack to get a number. -@function unitless($val) { +@function strip-unit($val) { @return math.div($val, $val - $val + 1); } diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index fe784322..021ad3e4 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -46,8 +46,8 @@ } // Convert to string $t: $t + ""; - // Remove base units to calulate ratio - $b: unitless(nth($b, 1)); + // Remove base units to calculate ratio + $b: strip-unit(nth($b, 1)); // Find where 'at' is in the string $at: str-index($t, "at"); From 26bb2bfe23bf6119b7e35a04902694c6880fd32b Mon Sep 17 00:00:00 2001 From: Sobral Date: Thu, 5 Aug 2021 22:49:14 -0300 Subject: [PATCH 30/63] Test `strip-unit()` --- tests/_strip-unit.scss | 11 +++++++++++ tests/index.scss | 1 + tests/results.css | 8 ++++++++ 3 files changed, 20 insertions(+) create mode 100644 tests/_strip-unit.scss diff --git a/tests/_strip-unit.scss b/tests/_strip-unit.scss new file mode 100644 index 00000000..37ed3674 --- /dev/null +++ b/tests/_strip-unit.scss @@ -0,0 +1,11 @@ +@use '../node_modules/sass-true' as true; + +@use '../stylesheets/modularscale/strip-unit'as *; + +@include true.describe('strip-unit [function]') { + @include true.it('It remove units from numbers') { + @include true.assert-equal(strip-unit(3px), 3); + @include true.assert-equal(strip-unit(-5em), -5); + @include true.assert-equal(strip-unit(7rem), 7); + } +} diff --git a/tests/index.scss b/tests/index.scss index d9c7134f..5d307f3f 100644 --- a/tests/index.scss +++ b/tests/index.scss @@ -1 +1,2 @@ @use 'sort'; +@use 'strip-unit'; diff --git a/tests/results.css b/tests/results.css index 1346e262..de4a0b58 100644 --- a/tests/results.css +++ b/tests/results.css @@ -5,3 +5,11 @@ /* ✔ [assert-equal] It sorts a list of numbers */ /* */ /* */ +/* # Module: strip-unit [function] */ +/* ------------------------------- */ +/* Test: It remove units from numbers */ +/* ✔ [assert-equal] It remove units from numbers */ +/* ✔ [assert-equal] It remove units from numbers */ +/* ✔ [assert-equal] It remove units from numbers */ +/* */ +/* */ From a8f651c0390ed442934aae9a82c5660facadb1b9 Mon Sep 17 00:00:00 2001 From: Sobral Date: Thu, 5 Aug 2021 23:26:59 -0300 Subject: [PATCH 31/63] Normalize IDE configurations --- .editorconfig | 11 +++++++++++ stylesheets/modularscale/_respond.scss | 12 ++++++------ tests/_sort.scss | 18 +++++++++--------- 3 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..00ab9373 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +# EditorConfig is awesome: https://EditorConfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 627e2bd3..4e5777fa 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -16,10 +16,10 @@ $queries: $queries + 1; } } - + // Write fallback styles to broader context @content ($settings); - + // Typetura styles @if ($query == typetura) { --tt-key: #{$id}; @@ -27,7 +27,7 @@ @keyframes #{$id} { @each $bp in $settings { @if (type-of(list.nth($bp, 1)) == "number") { - + $key: list.nth($bp, 1); $keyframe: percentage(math.div($key, $max)); #{$keyframe} { @@ -37,7 +37,7 @@ } } } - } @else if ($query == container) { + } @else if ($query == container) { $query: $query + ' modularscale'; // Loop through breakpoints @each $bp in $settings { @@ -49,7 +49,7 @@ } } } @else { - + // Loop through breakpoints @each $bp in $settings { @if (type-of(list.nth($bp, 1)) == "number") { @@ -59,7 +59,7 @@ } } } - + } } diff --git a/tests/_sort.scss b/tests/_sort.scss index fc4255c5..437347ec 100644 --- a/tests/_sort.scss +++ b/tests/_sort.scss @@ -1,9 +1,9 @@ -@use '../node_modules/sass-true' as true; - -@use '../stylesheets/modularscale/sort' as *; - -@include true.describe('sort [function]') { - @include true.it('It sorts a list of numbers') { - @include true.assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); - } -} +@use '../node_modules/sass-true' as true; + +@use '../stylesheets/modularscale/sort' as *; + +@include true.describe('sort [function]') { + @include true.it('It sorts a list of numbers') { + @include true.assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); + } +} From 3e0d70751bd7cf6a7e7897d63f2d8341e22f8b63 Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 00:11:12 -0300 Subject: [PATCH 32/63] Improve `sort()` tests --- tests/_sort.scss | 3 ++- tests/results.css | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/_sort.scss b/tests/_sort.scss index 437347ec..b714de36 100644 --- a/tests/_sort.scss +++ b/tests/_sort.scss @@ -4,6 +4,7 @@ @include true.describe('sort [function]') { @include true.it('It sorts a list of numbers') { - @include true.assert-equal(sort(1 3 5 2 9), (1 2 3 5 9)); + @include true.assert-equal(sort(1 3 5 2 9), 1 2 3 5 9, 'separated by spaces'); + @include true.assert-equal(sort((7, 1, 8, 3, 0)), 0 1 3 7 8, 'separated by commas'); } } diff --git a/tests/results.css b/tests/results.css index de4a0b58..2e770381 100644 --- a/tests/results.css +++ b/tests/results.css @@ -2,7 +2,8 @@ /* # Module: sort [function] */ /* ------------------------- */ /* Test: It sorts a list of numbers */ -/* ✔ [assert-equal] It sorts a list of numbers */ +/* ✔ [assert-equal] separated by spaces */ +/* ✔ [assert-equal] separated by commas */ /* */ /* */ /* # Module: strip-unit [function] */ From 0444e2eebba91b49051d48e9b03d345f01f191b2 Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 00:11:59 -0300 Subject: [PATCH 33/63] Improve `strip-unit()` test --- tests/_strip-unit.scss | 6 +++--- tests/results.css | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/_strip-unit.scss b/tests/_strip-unit.scss index 37ed3674..82a12853 100644 --- a/tests/_strip-unit.scss +++ b/tests/_strip-unit.scss @@ -4,8 +4,8 @@ @include true.describe('strip-unit [function]') { @include true.it('It remove units from numbers') { - @include true.assert-equal(strip-unit(3px), 3); - @include true.assert-equal(strip-unit(-5em), -5); - @include true.assert-equal(strip-unit(7rem), 7); + @include true.assert-equal(strip-unit(3px), 3, 'when positives'); + @include true.assert-equal(strip-unit(-5em), -5, 'when negatives'); + @include true.assert-equal(strip-unit(7%), 7, 'when percentages'); } } diff --git a/tests/results.css b/tests/results.css index 2e770381..b2c1a182 100644 --- a/tests/results.css +++ b/tests/results.css @@ -9,8 +9,8 @@ /* # Module: strip-unit [function] */ /* ------------------------------- */ /* Test: It remove units from numbers */ -/* ✔ [assert-equal] It remove units from numbers */ -/* ✔ [assert-equal] It remove units from numbers */ -/* ✔ [assert-equal] It remove units from numbers */ +/* ✔ [assert-equal] when positives */ +/* ✔ [assert-equal] when negatives */ +/* ✔ [assert-equal] when percentages */ /* */ /* */ From 4ac73324af7af04e1f7ab1a17489f720d0198c9f Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 00:15:05 -0300 Subject: [PATCH 34/63] Test `to-num()` function --- stylesheets/modularscale/_target.scss | 7 +++++++ tests/_target.scss | 12 ++++++++++++ tests/results.css | 9 +++++++++ 3 files changed, 28 insertions(+) create mode 100644 tests/_target.scss diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 021ad3e4..0df05f18 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,3 +1,5 @@ +@use "sass:string"; + // Convert number string to number @function to-num($n) { $length: string.length($n); @@ -36,6 +38,11 @@ $return: $return + 9; } } + + @if string.slice($n, 1, 1) == '-' { + $return: $return * -1; + } + @return $return; } diff --git a/tests/_target.scss b/tests/_target.scss new file mode 100644 index 00000000..b0d3c5a6 --- /dev/null +++ b/tests/_target.scss @@ -0,0 +1,12 @@ +@use '../node_modules/sass-true' as true; + +@use '../stylesheets/modularscale/target' as *; + +@include true.describe('to-num [function]') { + @include true.it('It parses string digits as numbers') { + @include true.assert-equal(to-num('000'), 0, 'when 0'); + @include true.assert-equal(to-num('0339'), 339, 'when positive padded'); + @include true.assert-equal(to-num('-53150'), -53150, 'when negative'); + @include true.assert-equal(to-num('7321'), 7321, 'when positive'); + } +} diff --git a/tests/results.css b/tests/results.css index b2c1a182..07e44a5b 100644 --- a/tests/results.css +++ b/tests/results.css @@ -14,3 +14,12 @@ /* ✔ [assert-equal] when percentages */ /* */ /* */ +/* # Module: to-num [function] */ +/* --------------------------- */ +/* Test: It parses string digits as numbers */ +/* ✔ [assert-equal] when 0 */ +/* ✔ [assert-equal] when positive padded */ +/* ✔ [assert-equal] when negative */ +/* ✔ [assert-equal] when positive */ +/* */ +/* */ From d9f6bba148a290c572db5ca0d305e130888ffec2 Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 11:03:23 -0300 Subject: [PATCH 35/63] Reorganize tests to make proper use of `--watch`... ...and fix NPM test scripts --- package.json | 6 +++--- stylesheets/tests.scss | 7 +++++++ {tests => stylesheets/tests}/_sort.scss | 4 ++-- {tests => stylesheets/tests}/_strip-unit.scss | 4 ++-- {tests => stylesheets/tests}/_target.scss | 4 ++-- tests/results.css => test-results/tests.css | 0 tests/index.scss | 2 -- 7 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 stylesheets/tests.scss rename {tests => stylesheets/tests}/_sort.scss (75%) rename {tests => stylesheets/tests}/_strip-unit.scss (77%) rename {tests => stylesheets/tests}/_target.scss (81%) rename tests/results.css => test-results/tests.css (100%) delete mode 100644 tests/index.scss diff --git a/package.json b/package.json index 8b64e805..34697be9 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "description": "A tool to help web designers size their type in a more meaningful way.", "main": "stylesheets/_modularscale.scss", "scripts": { - "post-test": "git diff --exit-code tests/results.css", - "test": "npx sass --no-source-map tests/index.scss:tests/results.css", - "test:watch": "npx sass --watch --no-source-map tests/index.scss:tests/results.css" + "pretest": "npx sass --no-source-map stylesheets:test--results", + "test": "git diff --exit-code test-results/tests.css", + "test:watch": "npx sass --watch --no-source-map stylesheets:test--results" }, "repository": { "type": "git", diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss new file mode 100644 index 00000000..7bbc1f4b --- /dev/null +++ b/stylesheets/tests.scss @@ -0,0 +1,7 @@ +@use '../node_modules/sass-true' as true; + +@use 'modularscale' as ms; + +@use 'tests/sort'; +@use 'tests/strip-unit'; +@use 'tests/target'; diff --git a/tests/_sort.scss b/stylesheets/tests/_sort.scss similarity index 75% rename from tests/_sort.scss rename to stylesheets/tests/_sort.scss index b714de36..d2ec9fc9 100644 --- a/tests/_sort.scss +++ b/stylesheets/tests/_sort.scss @@ -1,6 +1,6 @@ -@use '../node_modules/sass-true' as true; +@use '../../node_modules/sass-true' as true; -@use '../stylesheets/modularscale/sort' as *; +@use '../modularscale/sort' as *; @include true.describe('sort [function]') { @include true.it('It sorts a list of numbers') { diff --git a/tests/_strip-unit.scss b/stylesheets/tests/_strip-unit.scss similarity index 77% rename from tests/_strip-unit.scss rename to stylesheets/tests/_strip-unit.scss index 82a12853..64998395 100644 --- a/tests/_strip-unit.scss +++ b/stylesheets/tests/_strip-unit.scss @@ -1,6 +1,6 @@ -@use '../node_modules/sass-true' as true; +@use '../../node_modules/sass-true' as true; -@use '../stylesheets/modularscale/strip-unit'as *; +@use '../modularscale/strip-unit' as *; @include true.describe('strip-unit [function]') { @include true.it('It remove units from numbers') { diff --git a/tests/_target.scss b/stylesheets/tests/_target.scss similarity index 81% rename from tests/_target.scss rename to stylesheets/tests/_target.scss index b0d3c5a6..4df5007e 100644 --- a/tests/_target.scss +++ b/stylesheets/tests/_target.scss @@ -1,6 +1,6 @@ -@use '../node_modules/sass-true' as true; +@use '../../node_modules/sass-true' as true; -@use '../stylesheets/modularscale/target' as *; +@use '../modularscale/target' as *; @include true.describe('to-num [function]') { @include true.it('It parses string digits as numbers') { diff --git a/tests/results.css b/test-results/tests.css similarity index 100% rename from tests/results.css rename to test-results/tests.css diff --git a/tests/index.scss b/tests/index.scss deleted file mode 100644 index 5d307f3f..00000000 --- a/tests/index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@use 'sort'; -@use 'strip-unit'; From d518da8aac28593b0a99abb35428570a433c46bf Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 11:58:19 -0300 Subject: [PATCH 36/63] Test `target()` function --- stylesheets/modularscale/_target.scss | 16 +++++++++++++--- stylesheets/tests/_target.scss | 10 ++++++++++ test-results/tests.css | 10 ++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 0df05f18..bc61cdaa 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,5 +1,9 @@ +@use "sass:list"; +@use "sass:math"; @use "sass:string"; +@use "strip-unit" as *; + // Convert number string to number @function to-num($n) { $length: string.length($n); @@ -53,15 +57,21 @@ } // Convert to string $t: $t + ""; + // Remove base units to calculate ratio $b: strip-unit(nth($b, 1)); + // Find where 'at' is in the string - $at: str-index($t, "at"); + $at: string.index($t, "at"); // Slice the value and target out // and convert strings to numbers - $v: to-num(str-slice($t, 0, $at - 1)); - $t: to-num(str-slice($t, $at + 2)); + $v: to-num(string.slice($t, 0, $at - 1)); + $t: to-num(string.slice($t, $at + 2)); + + @if $v == $b or $t == 0 { + @error 'It\'s impossible to calculate a ratio from the same size as its base'; + } // Solve the modular scale function for the ratio. @return math.pow(math.div($v, $b), math.div(1, $t)); diff --git a/stylesheets/tests/_target.scss b/stylesheets/tests/_target.scss index 4df5007e..2dd9cbb6 100644 --- a/stylesheets/tests/_target.scss +++ b/stylesheets/tests/_target.scss @@ -10,3 +10,13 @@ @include true.assert-equal(to-num('7321'), 7321, 'when positive'); } } + +@include true.describe('target [function]') { + @include true.it('It finds a ratio based on a target value') { + @include true.assert-equal(target('128at3', 16px), 2); + @include true.assert-equal(target('80at3', 10px), 2); + @include true.assert-equal(target('81at4', 16px), 1.5); + @include true.assert-equal(target('25at2', 16px), 1.25); + @include true.assert-equal(target('18at1', 16px), 1.125); + } +} diff --git a/test-results/tests.css b/test-results/tests.css index 07e44a5b..7a795c13 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -23,3 +23,13 @@ /* ✔ [assert-equal] when positive */ /* */ /* */ +/* # Module: target [function] */ +/* --------------------------- */ +/* Test: It finds a ratio based on a target value */ +/* ✔ [assert-equal] It finds a ratio based on a target value */ +/* ✔ [assert-equal] It finds a ratio based on a target value */ +/* ✔ [assert-equal] It finds a ratio based on a target value */ +/* ✔ [assert-equal] It finds a ratio based on a target value */ +/* ✔ [assert-equal] It finds a ratio based on a target value */ +/* */ +/* */ From 552f33b2ad8077c8f70708e90ca983a30759be2a Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 11:59:17 -0300 Subject: [PATCH 37/63] Add report to tests --- stylesheets/tests.scss | 2 ++ test-results/tests.css | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 7bbc1f4b..618f8cc6 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -5,3 +5,5 @@ @use 'tests/sort'; @use 'tests/strip-unit'; @use 'tests/target'; + +@include true.report; diff --git a/test-results/tests.css b/test-results/tests.css index 7a795c13..b6b8fe45 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -33,3 +33,12 @@ /* ✔ [assert-equal] It finds a ratio based on a target value */ /* */ /* */ +/* # SUMMARY ---------- */ +/* 4 Tests: */ +/* - 4 Passed */ +/* - 0 Failed */ +/* Stats: */ +/* - 4 Modules */ +/* - 4 Tests */ +/* - 14 Assertions */ +/* -------------------- */ From 74145cdeac13831f6f5d7cab150eed26959a14ab Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 12:13:46 -0300 Subject: [PATCH 38/63] Fix `/test-results` path --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 34697be9..b60039f5 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "description": "A tool to help web designers size their type in a more meaningful way.", "main": "stylesheets/_modularscale.scss", "scripts": { - "pretest": "npx sass --no-source-map stylesheets:test--results", + "pretest": "npx sass --no-source-map stylesheets:test-results", "test": "git diff --exit-code test-results/tests.css", - "test:watch": "npx sass --watch --no-source-map stylesheets:test--results" + "test:watch": "npx sass --watch --no-source-map stylesheets:test-results" }, "repository": { "type": "git", From 263b30d9d589de9467b2e2561cf03f51f8c7aaf3 Mon Sep 17 00:00:00 2001 From: Sobral Date: Fri, 6 Aug 2021 14:38:34 -0300 Subject: [PATCH 39/63] Add tests to `step()` function --- stylesheets/modularscale/_step.scss | 15 ++++++++++++--- stylesheets/tests.scss | 3 +-- stylesheets/tests/_step.scss | 11 +++++++++++ test-results/tests.css | 18 +++++++++++++----- 4 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 stylesheets/tests/_step.scss diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index e50cc3ef..87f98a15 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,3 +1,12 @@ +@use "sass:list"; +@use 'sass:math'; + +@use 'settings' as *; +@use 'sort' as *; +@use 'target' as *; + +$settings: $settings !default; + @function step( $v: 0, $respond: false, @@ -13,12 +22,11 @@ $settings: settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); - $base-length: list.length($base); $bases: (); // Render target values from settings. - @if unit($ratio) != "" { + @if math.unit($ratio) != "" { $ratio: target($ratio, $base); } @@ -26,7 +34,7 @@ @if ($base-length == 1) { @return math.pow($ratio, $v) * $base; } @else { - $unit: unit(list.nth($base, 1)); + $unit: math.unit(list.nth($base, 1)); $bases: list.nth($base, 1); @for $i from 2 through $base-length { $new-base: list.nth($base, $i); @@ -44,6 +52,7 @@ // Find step to use in calculation $step: math.floor(math.div($v, $base-length)); + // Find base to use in calculation $base: math.round((math.div($v, $base-length) - $step) * $base-length) + 1; diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 618f8cc6..2d787f54 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,9 +1,8 @@ @use '../node_modules/sass-true' as true; -@use 'modularscale' as ms; - @use 'tests/sort'; @use 'tests/strip-unit'; +@use 'tests/step'; @use 'tests/target'; @include true.report; diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss new file mode 100644 index 00000000..61ec64e3 --- /dev/null +++ b/stylesheets/tests/_step.scss @@ -0,0 +1,11 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/step' as * with ($settings: (base: 1em, ratio: 1.5)); + +@include true.describe('step [function]') { + @include true.it('It returns the size based at the provided step') { + @include true.assert-equal(step(3), 3.375em, 'when positive', true); + @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); + @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); + } +} diff --git a/test-results/tests.css b/test-results/tests.css index b6b8fe45..635d461e 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -14,6 +14,14 @@ /* ✔ [assert-equal] when percentages */ /* */ /* */ +/* # Module: step [function] */ +/* ------------------------- */ +/* Test: It returns the size based at the provided step */ +/* ✔ [assert-equal] when positive */ +/* ✔ [assert-equal] when negative */ +/* ✔ [assert-equal] when float */ +/* */ +/* */ /* # Module: to-num [function] */ /* --------------------------- */ /* Test: It parses string digits as numbers */ @@ -34,11 +42,11 @@ /* */ /* */ /* # SUMMARY ---------- */ -/* 4 Tests: */ -/* - 4 Passed */ +/* 5 Tests: */ +/* - 5 Passed */ /* - 0 Failed */ /* Stats: */ -/* - 4 Modules */ -/* - 4 Tests */ -/* - 14 Assertions */ +/* - 5 Modules */ +/* - 5 Tests */ +/* - 17 Assertions */ /* -------------------- */ From 79c209b13a5d528cde683131b80c6d713ee25126 Mon Sep 17 00:00:00 2001 From: Sobral Date: Mon, 9 Aug 2021 10:49:01 -0300 Subject: [PATCH 40/63] Allow the use of target as "step" --- stylesheets/modularscale/_step.scss | 10 ++++++++++ stylesheets/tests/_step.scss | 10 ++++++++++ test-results/tests.css | 21 ++++++++++++--------- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 87f98a15..6da3b57a 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -25,6 +25,16 @@ $settings: $settings !default; $base-length: list.length($base); $bases: (); + // if the step provided is actually a target and has the same unit as the base, + // we can figured the closest integer step on the current scale to be used. + // it's for the cases when the designer provided all values as pixels and not respecting + // the modular scale to the "number", but getting close. + // Designers don't like float numbers. + @if (math.unit($v) == math.unit($base)) { + $v: math.log(math.div($v, $base), $ratio); + $v: math.round($v); + } + // Render target values from settings. @if math.unit($ratio) != "" { $ratio: target($ratio, $base); diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 61ec64e3..da14de75 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -1,3 +1,5 @@ +@use 'sass:math'; + @use '../../node_modules/sass-true' as true; @use '../modularscale/step' as * with ($settings: (base: 1em, ratio: 1.5)); @@ -7,5 +9,13 @@ @include true.assert-equal(step(3), 3.375em, 'when positive', true); @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); + + @include true.assert-equal(step(5em), 5.0625em, 'when reversed and approximated to 5.0625em, being 5em', true); + + $target: math.div(56px, 16px)*1em; + @include true.assert-equal(step($target), 3.375em, 'when reversed and approximated to 54px, being 56px', true); + + $target: math.div(180px, 16px)*1em; + @include true.assert-equal(step($target), 11.390625em, 'when reversed and approximated to 182.25px, being 180px', true); } } diff --git a/test-results/tests.css b/test-results/tests.css index 635d461e..3f0e8417 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -6,20 +6,23 @@ /* ✔ [assert-equal] separated by commas */ /* */ /* */ -/* # Module: strip-unit [function] */ -/* ------------------------------- */ -/* Test: It remove units from numbers */ -/* ✔ [assert-equal] when positives */ -/* ✔ [assert-equal] when negatives */ -/* ✔ [assert-equal] when percentages */ -/* */ -/* */ /* # Module: step [function] */ /* ------------------------- */ /* Test: It returns the size based at the provided step */ /* ✔ [assert-equal] when positive */ /* ✔ [assert-equal] when negative */ /* ✔ [assert-equal] when float */ +/* ✔ [assert-equal] when reversed and approximated to 5.0625em, being 5em */ +/* ✔ [assert-equal] when reversed and approximated to 54px, being 56px */ +/* ✔ [assert-equal] when reversed and approximated to 182.25px, being 180px */ +/* */ +/* */ +/* # Module: strip-unit [function] */ +/* ------------------------------- */ +/* Test: It remove units from numbers */ +/* ✔ [assert-equal] when positives */ +/* ✔ [assert-equal] when negatives */ +/* ✔ [assert-equal] when percentages */ /* */ /* */ /* # Module: to-num [function] */ @@ -48,5 +51,5 @@ /* Stats: */ /* - 5 Modules */ /* - 5 Tests */ -/* - 17 Assertions */ +/* - 20 Assertions */ /* -------------------- */ From d37b9fd44b0bf117f420131b1b519d5f82cb57ec Mon Sep 17 00:00:00 2001 From: sobral Date: Tue, 17 Aug 2021 17:09:51 -0300 Subject: [PATCH 41/63] Accept incompatible units on `step(12px)` using 16px as root size --- stylesheets/modularscale/_step.scss | 40 +++++++++++++++++++++-------- stylesheets/tests/_step.scss | 18 ++++++++++--- test-results/tests.css | 7 ++++- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 6da3b57a..d6aae3f0 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -9,10 +9,10 @@ $settings: $settings !default; @function step( $v: 0, - $respond: false, - $base: false, - $ratio: false, - $thread: false, + $respond: null, + $base: null, + $ratio: null, + $thread: null, $settings: $settings ) { // Parse settings @@ -25,26 +25,44 @@ $settings: $settings !default; $base-length: list.length($base); $bases: (); + // Render target values from settings. + @if math.unit($ratio) != "" { + $ratio: target($ratio, $base); + } + // if the step provided is actually a target and has the same unit as the base, // we can figured the closest integer step on the current scale to be used. // it's for the cases when the designer provided all values as pixels and not respecting // the modular scale to the "number", but getting close. // Designers don't like float numbers. - @if (math.unit($v) == math.unit($base)) { + @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { + + // convert target pixels to the unit used on $base + @if (not math.compatible($v, $base)) { + + @if (math.unit($v) != 'px') { + @error "To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}."; + } + + @if (math.unit($base) == 'rem') { + $v: math.div($v, 16px) * 1rem; + } @else if (math.unit($base) == 'em') { + $v: math.div($v, 16px) * 1em; + } @else if (math.unit($base) == '%') { + $v: math.div($v, 16px * math.div($base, 100%)) * $base; + } @else { + @error "#{$v} and #{$base} don't have units that can be converted using browser root size"; + } + } + $v: math.log(math.div($v, $base), $ratio); $v: math.round($v); } - // Render target values from settings. - @if math.unit($ratio) != "" { - $ratio: target($ratio, $base); - } - // Fast calc if not multi stranded @if ($base-length == 1) { @return math.pow($ratio, $v) * $base; } @else { - $unit: math.unit(list.nth($base, 1)); $bases: list.nth($base, 1); @for $i from 2 through $base-length { $new-base: list.nth($base, $i); diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index da14de75..165917bc 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -7,15 +7,25 @@ @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); + @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); + @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); @include true.assert-equal(step(5em), 5.0625em, 'when reversed and approximated to 5.0625em, being 5em', true); - $target: math.div(56px, 16px)*1em; - @include true.assert-equal(step($target), 3.375em, 'when reversed and approximated to 54px, being 56px', true); + @include true.assert-equal(step(56px), 3.375em, 'when reversed and approximated to 54px, being 56px', true); + + @include true.assert-equal(step(180px), 11.390625em, 'when reversed and approximated to 182.25px, being 180px', true); + + @include true.assert-equal(step(170px, null, 62.5%), 1067.87109375%, 'when reversed and approximated to 170.86px, being 170px and using a percentage base', true); + + @include true.assert-equal(step(50px, null, 60%), 303.75%, 'when reversed and approximated to 50.63px, being 50px and using a unusual percentage base', true); + + @include true.assert-equal(step(40px, null, 16px, 1.125), 41.0525522232px, 'when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels', true); + + @include true.assert-equal(step(30px, null, 1rem, 1.125), 1.8020324707rem, 'when reversed, approximated and greater than 28.833px, being 30px', true); - $target: math.div(180px, 16px)*1em; - @include true.assert-equal(step($target), 11.390625em, 'when reversed and approximated to 182.25px, being 180px', true); + @include true.assert-equal(step(12px, null, 1rem, 1.125), 0.7901234568rem, 'when reversed and approximated to 12.642px, being 12px, lesser than the base', true); } } diff --git a/test-results/tests.css b/test-results/tests.css index 3f0e8417..9bc06f9c 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -15,6 +15,11 @@ /* ✔ [assert-equal] when reversed and approximated to 5.0625em, being 5em */ /* ✔ [assert-equal] when reversed and approximated to 54px, being 56px */ /* ✔ [assert-equal] when reversed and approximated to 182.25px, being 180px */ +/* ✔ [assert-equal] when reversed and approximated to 170.86px, being 170px and using a percentage base */ +/* ✔ [assert-equal] when reversed and approximated to 50.63px, being 50px and using a unusual percentage base */ +/* ✔ [assert-equal] when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels */ +/* ✔ [assert-equal] when reversed, approximated and greater than 28.833px, being 30px */ +/* ✔ [assert-equal] when reversed and approximated to 12.642px, being 12px, lesser than the base */ /* */ /* */ /* # Module: strip-unit [function] */ @@ -51,5 +56,5 @@ /* Stats: */ /* - 5 Modules */ /* - 5 Tests */ -/* - 20 Assertions */ +/* - 25 Assertions */ /* -------------------- */ From 1fa6c0e43b17ffe34863237df45f7ed1af1a791d Mon Sep 17 00:00:00 2001 From: sobral Date: Fri, 20 Aug 2021 11:44:54 -0300 Subject: [PATCH 42/63] Remove use of `@import` --- stylesheets/modularscale/_files.scss | 19 ---------- stylesheets/modularscale/_index.scss | 21 +++++++---- stylesheets/modularscale/_respond.scss | 11 ++++-- stylesheets/modularscale/_settings.scss | 8 ++--- stylesheets/modularscale/_step.scss | 4 +-- stylesheets/modularscale/_target.scss | 47 +------------------------ stylesheets/modularscale/_to-num.scss | 47 +++++++++++++++++++++++++ stylesheets/tests.scss | 3 +- stylesheets/tests/_step.scss | 2 +- stylesheets/tests/_target.scss | 15 ++------ stylesheets/tests/_to-num.scss | 12 +++++++ test-results/tests.css | 18 +++++----- 12 files changed, 105 insertions(+), 102 deletions(-) delete mode 100644 stylesheets/modularscale/_files.scss create mode 100644 stylesheets/modularscale/_to-num.scss create mode 100644 stylesheets/tests/_to-num.scss diff --git a/stylesheets/modularscale/_files.scss b/stylesheets/modularscale/_files.scss deleted file mode 100644 index 047fb043..00000000 --- a/stylesheets/modularscale/_files.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "sass:math"; -@use "sass:list"; -@use "sass:string"; -@use "sass:map"; -@use "sass:meta"; -@use "sass:selector"; - -// Defaults and variables -@import "vars"; - -// Core functions -@import "settings"; -@import "strip-unit"; -@import "sort"; -@import "target"; -@import "step"; - -// Mixins -@import "respond"; diff --git a/stylesheets/modularscale/_index.scss b/stylesheets/modularscale/_index.scss index 0cce735e..7303ad82 100644 --- a/stylesheets/modularscale/_index.scss +++ b/stylesheets/modularscale/_index.scss @@ -1,6 +1,15 @@ -@forward 'files' with ( - $base: 1em !default, - $ratio: 1.5 !default, - $settings: () !default, - $respond: media !default -); +$settings: ( + $base: 1em, + $ratio: 1.5, + $settings: (), + $respond: media +) !default; + +// Defaults and variables +@forward 'vars'; + +// Core functions +@forward 'step' with ($_settings: $settings); + +// Mixins +@forward 'respond' with ($_settings: $settings); diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 4e5777fa..4311f9ce 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -1,4 +1,11 @@ -@mixin step($mode: map-get($settings, respond)) { +@use 'sass:list'; +@use 'sass:math'; + +@use 'strip-unit' as *; + +$_settings: () !default; + +@mixin step($mode: map-get($_settings, respond)) { // Setup $id: #{unique-id()}; $max: 0; @@ -39,7 +46,7 @@ } } @else if ($query == container) { $query: $query + ' modularscale'; - // Loop through breakpoints + // Loop through breakpoints @each $bp in $settings { @if (type-of(list.nth($bp, 1)) == "number") { @#{$query} (min-width: #{list.nth($bp, 1)}) { diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_settings.scss index ed3cf627..13361ae0 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_settings.scss @@ -2,10 +2,10 @@ // Settings should cascade down like you would expect in CSS. // More specific overrides previous settings. -@function settings($b: false, $r: false, $t: false, $m: $modularscale) { - $base: $base; - $ratio: $ratio; - $respond: $respond; +@function settings($b: false, $r: false, $t: false, $m: ()) { + $base: 1em; + $ratio: 1.5; + $respond: media; $thread: map-get($m, $t); // Override with user settings diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index d6aae3f0..7da235b5 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -5,7 +5,7 @@ @use 'sort' as *; @use 'target' as *; -$settings: $settings !default; +$_settings: () !default; @function step( $v: 0, @@ -13,7 +13,7 @@ $settings: $settings !default; $base: null, $ratio: null, $thread: null, - $settings: $settings + $settings: $_settings ) { // Parse settings @if ($respond) { diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index bc61cdaa..b18f0045 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -3,52 +3,7 @@ @use "sass:string"; @use "strip-unit" as *; - -// Convert number string to number -@function to-num($n) { - $length: string.length($n); - $return: 0; - @for $i from 1 through $length { - $return: $return * 10; - $value: string.slice($n, $i, $i); - @if ($value == "0") { - $return: $return + 0; - } - @if ($value == "1") { - $return: $return + 1; - } - @if ($value == "2") { - $return: $return + 2; - } - @if ($value == "3") { - $return: $return + 3; - } - @if ($value == "4") { - $return: $return + 4; - } - @if ($value == "5") { - $return: $return + 5; - } - @if ($value == "6") { - $return: $return + 6; - } - @if ($value == "7") { - $return: $return + 7; - } - @if ($value == "8") { - $return: $return + 8; - } - @if ($value == "9") { - $return: $return + 9; - } - } - - @if string.slice($n, 1, 1) == '-' { - $return: $return * -1; - } - - @return $return; -} +@use "to-num" as *; // Find a ratio based on a target value @function target($t, $b) { diff --git a/stylesheets/modularscale/_to-num.scss b/stylesheets/modularscale/_to-num.scss new file mode 100644 index 00000000..05ed93d8 --- /dev/null +++ b/stylesheets/modularscale/_to-num.scss @@ -0,0 +1,47 @@ +@use "sass:string"; + +// Convert number string to number +@function to-num($n) { + $length: string.length($n); + $return: 0; + @for $i from 1 through $length { + $return: $return * 10; + $value: string.slice($n, $i, $i); + @if ($value == "0") { + $return: $return + 0; + } + @if ($value == "1") { + $return: $return + 1; + } + @if ($value == "2") { + $return: $return + 2; + } + @if ($value == "3") { + $return: $return + 3; + } + @if ($value == "4") { + $return: $return + 4; + } + @if ($value == "5") { + $return: $return + 5; + } + @if ($value == "6") { + $return: $return + 6; + } + @if ($value == "7") { + $return: $return + 7; + } + @if ($value == "8") { + $return: $return + 8; + } + @if ($value == "9") { + $return: $return + 9; + } + } + + @if string.slice($n, 1, 1) == '-' { + $return: $return * -1; + } + + @return $return; +} diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 2d787f54..13a7a5e2 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,8 +1,9 @@ @use '../node_modules/sass-true' as true; @use 'tests/sort'; -@use 'tests/strip-unit'; @use 'tests/step'; +@use 'tests/strip-unit'; @use 'tests/target'; +@use 'tests/to-num'; @include true.report; diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 165917bc..f3375568 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -2,7 +2,7 @@ @use '../../node_modules/sass-true' as true; -@use '../modularscale/step' as * with ($settings: (base: 1em, ratio: 1.5)); +@use '../modularscale/step'as * with ($_settings: (base: 1em, ratio: 1.5)); @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { diff --git a/stylesheets/tests/_target.scss b/stylesheets/tests/_target.scss index 2dd9cbb6..caf567e5 100644 --- a/stylesheets/tests/_target.scss +++ b/stylesheets/tests/_target.scss @@ -2,21 +2,12 @@ @use '../modularscale/target' as *; -@include true.describe('to-num [function]') { - @include true.it('It parses string digits as numbers') { - @include true.assert-equal(to-num('000'), 0, 'when 0'); - @include true.assert-equal(to-num('0339'), 339, 'when positive padded'); - @include true.assert-equal(to-num('-53150'), -53150, 'when negative'); - @include true.assert-equal(to-num('7321'), 7321, 'when positive'); - } -} - @include true.describe('target [function]') { @include true.it('It finds a ratio based on a target value') { + @include true.assert-equal(target('18at1', 16px), 1.125); + @include true.assert-equal(target('25at2', 16px), 1.25); + @include true.assert-equal(target('81at4', 16px), 1.5); @include true.assert-equal(target('128at3', 16px), 2); @include true.assert-equal(target('80at3', 10px), 2); - @include true.assert-equal(target('81at4', 16px), 1.5); - @include true.assert-equal(target('25at2', 16px), 1.25); - @include true.assert-equal(target('18at1', 16px), 1.125); } } diff --git a/stylesheets/tests/_to-num.scss b/stylesheets/tests/_to-num.scss new file mode 100644 index 00000000..04426e57 --- /dev/null +++ b/stylesheets/tests/_to-num.scss @@ -0,0 +1,12 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/to-num' as *; + +@include true.describe('to-num [function]') { + @include true.it('It parses string digits as numbers') { + @include true.assert-equal(to-num('000'), 0, 'when 0'); + @include true.assert-equal(to-num('0339'), 339, 'when positive padded'); + @include true.assert-equal(to-num('-53150'), -53150, 'when negative'); + @include true.assert-equal(to-num('7321'), 7321, 'when positive'); + } +} diff --git a/test-results/tests.css b/test-results/tests.css index 9bc06f9c..68591ca8 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -30,15 +30,6 @@ /* ✔ [assert-equal] when percentages */ /* */ /* */ -/* # Module: to-num [function] */ -/* --------------------------- */ -/* Test: It parses string digits as numbers */ -/* ✔ [assert-equal] when 0 */ -/* ✔ [assert-equal] when positive padded */ -/* ✔ [assert-equal] when negative */ -/* ✔ [assert-equal] when positive */ -/* */ -/* */ /* # Module: target [function] */ /* --------------------------- */ /* Test: It finds a ratio based on a target value */ @@ -49,6 +40,15 @@ /* ✔ [assert-equal] It finds a ratio based on a target value */ /* */ /* */ +/* # Module: to-num [function] */ +/* --------------------------- */ +/* Test: It parses string digits as numbers */ +/* ✔ [assert-equal] when 0 */ +/* ✔ [assert-equal] when positive padded */ +/* ✔ [assert-equal] when negative */ +/* ✔ [assert-equal] when positive */ +/* */ +/* */ /* # SUMMARY ---------- */ /* 5 Tests: */ /* - 5 Passed */ From d7a455923bcd44d254aafa29cbfa035d85070a0c Mon Sep 17 00:00:00 2001 From: sobral Date: Fri, 20 Aug 2021 14:05:23 -0300 Subject: [PATCH 43/63] Improve reversed steps tests --- stylesheets/tests/_step.scss | 6 ++++++ test-results/tests.css | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index f3375568..1e4a88b2 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -26,6 +26,12 @@ @include true.assert-equal(step(30px, null, 1rem, 1.125), 1.8020324707rem, 'when reversed, approximated and greater than 28.833px, being 30px', true); + @include true.assert-equal(step(17px, null, 1rem, 1.125), 1.125rem, 'when reversed, and half way to 16px and 18px, being 17px', true); + + @include true.assert-equal(step(15.5px, null, 1rem, 1.125), 1rem, 'when reversed, approximated and lesser than 16px, being 15.5px', true); + + @include true.assert-equal(step(15px, null, 1rem, 1.125), 0.8888888889rem, 'when reversed, approximated and greater than 14.2222222222px, being 15px', true); + @include true.assert-equal(step(12px, null, 1rem, 1.125), 0.7901234568rem, 'when reversed and approximated to 12.642px, being 12px, lesser than the base', true); } } diff --git a/test-results/tests.css b/test-results/tests.css index 68591ca8..80717b01 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -19,6 +19,9 @@ /* ✔ [assert-equal] when reversed and approximated to 50.63px, being 50px and using a unusual percentage base */ /* ✔ [assert-equal] when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels */ /* ✔ [assert-equal] when reversed, approximated and greater than 28.833px, being 30px */ +/* ✔ [assert-equal] when reversed, and half way to 16px and 18px, being 17px */ +/* ✔ [assert-equal] when reversed, approximated and lesser than 16px, being 15.5px */ +/* ✔ [assert-equal] when reversed, approximated and greater than 14.2222222222px, being 15px */ /* ✔ [assert-equal] when reversed and approximated to 12.642px, being 12px, lesser than the base */ /* */ /* */ @@ -56,5 +59,5 @@ /* Stats: */ /* - 5 Modules */ /* - 5 Tests */ -/* - 25 Assertions */ +/* - 28 Assertions */ /* -------------------- */ From a797012b99b237a22228389409cfcd1b4cf13dab Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 22 Aug 2021 23:59:02 -0300 Subject: [PATCH 44/63] Test settings normalizer --- stylesheets/modularscale/_settings.scss | 2 +- stylesheets/tests.scss | 1 + stylesheets/tests/_settings.scss | 18 ++++++++++++++++++ test-results/tests.css | 25 ++++++++++++++++++++----- 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 stylesheets/tests/_settings.scss diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_settings.scss index 13361ae0..4c992fa9 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_settings.scss @@ -2,7 +2,7 @@ // Settings should cascade down like you would expect in CSS. // More specific overrides previous settings. -@function settings($b: false, $r: false, $t: false, $m: ()) { +@function settings($b: null, $r: null, $t: null, $m: ()) { $base: 1em; $ratio: 1.5; $respond: media; diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 13a7a5e2..0a6ad836 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,5 +1,6 @@ @use '../node_modules/sass-true' as true; +@use 'tests/settings'; @use 'tests/sort'; @use 'tests/step'; @use 'tests/strip-unit'; diff --git a/stylesheets/tests/_settings.scss b/stylesheets/tests/_settings.scss new file mode 100644 index 00000000..3629c662 --- /dev/null +++ b/stylesheets/tests/_settings.scss @@ -0,0 +1,18 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/settings' as *; + +@include true.describe('settings [function]') { + @include true.it('It parses settings starting with defaults') { + @include true.assert-equal(settings(16px), 16px 1.5); + @include true.assert-equal(settings(1rem, 1.125), 1rem 1.125); + @include true.assert-equal(settings((1em 1.2em 1.6em), 1.618), (1em 1.2em 1.6em) 1.618); + @include true.assert-equal(settings($b: 1em 1.2em 1.6em, $r: 1.5), (1em 1.2em 1.6em) 1.5); + @include true.assert-equal(settings($b: 1em, $r: 1.5, $t: 'a', $m: (a: (ratio: 1.3))), 1em 1.5); + @include true.assert-equal(settings($b: 1em, $r: 1.5, $m: (a: (base: 1rem, ratio: 1.3))), 1em 1.5); + @include true.assert-equal(settings($t: 'a', $m: (a: (ratio: 1.3))), 1em 1.3); + @include true.assert-equal(settings($b: 1em, $m: (ratio: 1.3)), 1em 1.3); + @include true.assert-equal(settings($r: 1.5, $m: (base: 62.5%)), 62.5% 1.5); + @include true.assert-equal(settings($b: 1em, $r: 1.5), 1em 1.5); + } +} diff --git a/test-results/tests.css b/test-results/tests.css index 80717b01..4409290b 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -1,4 +1,19 @@ @charset "UTF-8"; +/* # Module: settings [function] */ +/* ----------------------------- */ +/* Test: It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* ✔ [assert-equal] It parses settings starting with defaults */ +/* */ +/* */ /* # Module: sort [function] */ /* ------------------------- */ /* Test: It sorts a list of numbers */ @@ -53,11 +68,11 @@ /* */ /* */ /* # SUMMARY ---------- */ -/* 5 Tests: */ -/* - 5 Passed */ +/* 6 Tests: */ +/* - 6 Passed */ /* - 0 Failed */ /* Stats: */ -/* - 5 Modules */ -/* - 5 Tests */ -/* - 28 Assertions */ +/* - 6 Modules */ +/* - 6 Tests */ +/* - 38 Assertions */ /* -------------------- */ From e40cfd790a26cb89b315e3d5eb363a566f0dd4b0 Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 22 Aug 2021 23:59:27 -0300 Subject: [PATCH 45/63] Improve test script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b60039f5..3128d644 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "pretest": "npx sass --no-source-map stylesheets:test-results", "test": "git diff --exit-code test-results/tests.css", - "test:watch": "npx sass --watch --no-source-map stylesheets:test-results" + "test:watch": "npm run pretest && npx sass --watch --no-source-map stylesheets:test-results" }, "repository": { "type": "git", From c04b832960650a8d1185fe84998f9bade4d1229d Mon Sep 17 00:00:00 2001 From: sobral Date: Mon, 23 Aug 2021 01:09:41 -0300 Subject: [PATCH 46/63] Add multiple scales to `step()` test --- stylesheets/tests/_step.scss | 4 ++++ test-results/tests.css | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 1e4a88b2..92541b6e 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -8,6 +8,10 @@ @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); + @include true.assert-equal(step(5, $thread: test, + $settings: (base: 1em, ratio: 1.5, test: (ratio: 1.618 )) + ), 11.0890051809em, 'when using multiple scales', true); + @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); diff --git a/test-results/tests.css b/test-results/tests.css index 4409290b..0d1627b2 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -25,6 +25,7 @@ /* ------------------------- */ /* Test: It returns the size based at the provided step */ /* ✔ [assert-equal] when positive */ +/* ✔ [assert-equal] when using multiple scales */ /* ✔ [assert-equal] when negative */ /* ✔ [assert-equal] when float */ /* ✔ [assert-equal] when reversed and approximated to 5.0625em, being 5em */ @@ -74,5 +75,5 @@ /* Stats: */ /* - 6 Modules */ /* - 6 Tests */ -/* - 38 Assertions */ +/* - 39 Assertions */ /* -------------------- */ From 169be4a5adc96c037ca0eb0ef7821207e7bf5e71 Mon Sep 17 00:00:00 2001 From: sobral Date: Thu, 30 Sep 2021 12:02:34 -0300 Subject: [PATCH 47/63] Lint the code --- .stylelintrc.js | 117 + package-lock.json | 6241 ++++++++++++++++++++- package.json | 3 +- stylesheets/modularscale/_respond.scss | 12 +- stylesheets/modularscale/_settings.scss | 26 +- stylesheets/modularscale/_sort.scss | 4 +- stylesheets/modularscale/_step.scss | 10 +- stylesheets/modularscale/_strip-unit.scss | 2 +- stylesheets/modularscale/_target.scss | 16 +- stylesheets/modularscale/_to-num.scss | 33 +- stylesheets/tests/_step.scss | 20 +- 11 files changed, 6116 insertions(+), 368 deletions(-) create mode 100644 .stylelintrc.js diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 00000000..d449a1cf --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,117 @@ +module.exports = { + "extends": [ + "stylelint-config-sass-guidelines", + ], + rules: { + 'scss/at-function-pattern': "^_?[a-z]+([a-z0-9-]+[a-z0-9]+)?$", + 'scss/at-mixin-pattern': "^_?[a-z]+([a-z0-9-]+[a-z0-9]+)?$", + 'scss/dollar-variable-pattern': "^_?[a-z0-9]+(-[a-z0-9]+)*(__[a-z0-9]+(-[a-z0-9]+)*)?(--[a-z0-9]+(-[a-z0-9]+)*)?$", + "at-rule-empty-line-before": [ + "always", { + "except": [ + "blockless-after-same-name-blockless", + "first-nested" + ], + "ignore": [ + "after-comment" + ], + "ignoreAtRules": [ + "else", + "forward", + "use" + ] + } + ], + "order/properties-alphabetical-order": null, + "selector-pseudo-element-case": "lower", + "color-hex-case": "lower", + "color-hex-length": "long", + "at-rule-name-space-after": "always", + "at-rule-no-vendor-prefix": true, + "at-rule-semicolon-space-before": "never", + "block-closing-brace-empty-line-before": null, + "block-closing-brace-newline-after": null, + "block-opening-brace-space-before": "always", + "block-opening-brace-space-after": "never-single-line", + "block-no-empty": null, + "color-named": "never", + "declaration-colon-space-before": "never", + "declaration-colon-space-after": "always", + "selector-combinator-space-after": "always", + "declaration-block-semicolon-newline-after": "always-multi-line", + "declaration-block-semicolon-newline-before": "never-multi-line", + "declaration-block-semicolon-space-after": "always-single-line", + // "declaration-empty-line-before": [ + // "always", { + // "except": [ + // "first-nested", + // "after-comment", + // "after-declaration" + // ] + // } + // ], + "declaration-empty-line-before": null, + "declaration-no-important": true, + "font-family-name-quotes": "always-where-recommended", + "function-parentheses-space-inside": "never-single-line", + "function-url-no-scheme-relative": true, + "function-url-quotes": "always", + "length-zero-no-unit": true, + "max-empty-lines": 2, + "max-line-length": null, + "max-nesting-depth": 3, + "media-feature-name-no-vendor-prefix": true, + "media-feature-parentheses-space-inside": "never", + "media-feature-range-operator-space-after": "always", + "media-feature-range-operator-space-before": "never", + "no-descending-specificity": null, + "no-duplicate-selectors": true, + "number-leading-zero": "always", + "property-no-vendor-prefix": true, + // "rule-empty-line-before": [ + // "always", { + // "except": [ + // "first-nested" + // ], + // "ignore": [ + // "after-comment" + // ] + // } + // ], + "selector-attribute-quotes": "always", + "selector-class-pattern": [ + "^_?[a-z0-9]+(-[a-z0-9]+)*(__[a-z0-9]+(-[a-z0-9]+)*)?(--[a-z0-9]+(-[a-z0-9]+)*)?$", + { + "message": "Class names should match the BEM naming convention" + } + ], + "selector-list-comma-newline-after": "always", + "selector-list-comma-newline-before": "never-multi-line", + "selector-list-comma-space-after": "always-single-line", + "selector-list-comma-space-before": "never-single-line", + "declaration-colon-newline-after": null, + "selector-max-attribute": 2, + "selector-max-class": 4, + "selector-max-combinators": 4, + "selector-max-compound-selectors": 4, + "selector-max-empty-lines": 1, + "selector-max-id": 0, + "selector-max-specificity": null, + "selector-max-universal": 2, + "selector-no-qualifying-type": [ + true, + { + "ignore": [ + "attribute" + ] + } + ], + "selector-no-vendor-prefix": true, + "string-quotes": "single", + "value-keyword-case": "lower", + "value-list-comma-newline-after": "never-multi-line", + "value-list-comma-newline-before": "never-multi-line", + "value-list-comma-space-after": "always", + "value-no-vendor-prefix": true + } +}; diff --git a/package-lock.json b/package-lock.json index 042c1880..1e5e98fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,515 +11,5680 @@ "sass": "^1.34.0" }, "devDependencies": { - "sass-true": "^6.0.1" + "sass-true": "^6.0.1", + "stylelint-config-sass-guidelines": "^8.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/highlight": "^7.14.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", + "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", + "dev": true, + "peer": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.5", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, - "bin": { - "atob": "bin/atob.js" + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.15.4", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" }, "engines": { - "node": ">= 4.5.0" + "node": ">=6.9.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "peer": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@babel/types": "^7.15.4" }, "engines": { - "node": ">= 8.10.0" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.15.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/types": "^7.15.4" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.9.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", + "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, "engines": { - "node": ">=0.10" + "node": ">=6.9.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "peer": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=6.9.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "peer": true, "dependencies": { - "is-glob": "^4.0.1" + "@babel/types": "^7.15.4" }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "peer": true, "dependencies": { - "binary-extensions": "^2.0.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, "dependencies": { - "is-extglob": "^2.1.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=4" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "peer": true, "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, "dependencies": { - "picomatch": "^2.2.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=4" } }, - "node_modules/sass": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.0.tgz", - "integrity": "sha512-B+Tu6cSAG8ffs/cqsZl/bgSH2pCmavDaPTYAoW8QA1qNHh/RqndNfVKuABKYkLjUQ5aq/BnCENVpE80cqdSM1w==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, + "node_modules/@babel/parser": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", + "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", + "dev": true, + "peer": true, "bin": { - "sass": "sass.js" + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=8.9.0" + "node": ">=6.0.0" } }, - "node_modules/sass-true": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/sass-true/-/sass-true-6.0.1.tgz", - "integrity": "sha512-Ow72fStIgw+qRRUc0r77emeWry06a3e1hXtadPEzDL/GFiEjtQKZel5fr+gu85zC8JYmLkZofMn6x9b/sq+wfg==", + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, + "peer": true, "dependencies": { - "chalk": "^4.1.0", - "css": "^3.0.0", - "lodash": "^4.17.19" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, + "peer": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "peer": true, "dependencies": { - "is-number": "^7.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=8.0" + "node": ">= 8" } - } - }, - "dependencies": { - "ansi-styles": { + }, + "node_modules/@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": ">=7.9.0" + }, + "peerDependencies": { + "postcss": ">=7.0.0", + "postcss-syntax": ">=0.36.2" + } + }, + "node_modules/@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "peer": true, + "dependencies": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + }, + "peerDependencies": { + "postcss": ">=7.0.0", + "postcss-syntax": ">=0.36.2" + } + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true, + "peer": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true, + "peer": true + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true, + "peer": true + }, + "node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "atob": { + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } }, - "binary-extensions": { + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "peer": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "peer": true + }, + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } }, - "braces": { + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "peer": true + }, + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "chalk": { + "node_modules/browserslist": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", + "dev": true, + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001255", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", + "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "chokidar": { + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "requires": { + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "peer": true, + "dependencies": { + "is-regexp": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "peer": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "peer": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "peer": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "peer": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "peer": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.834", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.834.tgz", + "integrity": "sha512-9hnYJOlj2zbVn59Oy1R2mW/jntsRG7Gy56/aAOq8s29DzDYW/kOrq/ryJXGAQRRMg4MreHjI63XavGZTsnPubg==", + "dev": true, + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "peer": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "peer": true, + "dependencies": { + "clone-regexp": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "peer": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dev": true, + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true, + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "peer": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true, + "peer": true + }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "peer": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "peer": true + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "peer": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "peer": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "peer": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "peer": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "peer": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true, + "peer": true + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true, + "peer": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true, + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "peer": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true, + "peer": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "peer": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + }, + "node_modules/node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true, + "peer": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true, + "peer": true + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true, + "peer": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "peer": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "peer": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "peer": true, + "dependencies": { + "htmlparser2": "^3.10.0" + }, + "peerDependencies": { + "postcss": ">=5.0.0", + "postcss-syntax": ">=0.36.0" + } + }, + "node_modules/postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "peer": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "peer": true, + "dependencies": { + "postcss": "^7.0.26" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "peer": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "node_modules/postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "peer": true, + "dependencies": { + "postcss": "^7.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sorting": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", + "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14", + "postcss": "^7.0.17" + }, + "engines": { + "node": ">=8.7.0" + } + }, + "node_modules/postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true, + "peer": true, + "peerDependencies": { + "postcss": ">=5.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "peer": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "peer": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "peer": true, + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "peer": true, + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "peer": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "peer": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/sass": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.0.tgz", + "integrity": "sha512-B+Tu6cSAG8ffs/cqsZl/bgSH2pCmavDaPTYAoW8QA1qNHh/RqndNfVKuABKYkLjUQ5aq/BnCENVpE80cqdSM1w==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-true": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/sass-true/-/sass-true-6.0.1.tgz", + "integrity": "sha512-Ow72fStIgw+qRRUc0r77emeWry06a3e1hXtadPEzDL/GFiEjtQKZel5fr+gu85zC8JYmLkZofMn6x9b/sq+wfg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true, + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "peer": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true, + "peer": true + }, + "node_modules/specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true, + "peer": true, + "bin": { + "specificity": "bin/specificity" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "peer": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true, + "peer": true + }, + "node_modules/stylelint": { + "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", + "dev": true, + "peer": true, + "dependencies": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^2.0.0", + "chalk": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.3", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.1.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.5", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.6.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^3.0.3" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-sass-guidelines": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-8.0.0.tgz", + "integrity": "sha512-v21iDWtzpfhuKJlYKpoE1vjp+GT8Cr6ZBWwMx/jf+eCEblZgAIDVVjgAELoDLhVj17DcEFwlIKJBMfrdAmXg0Q==", + "dev": true, + "dependencies": { + "stylelint-order": "^4.0.0", + "stylelint-scss": "^3.18.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "stylelint": "^13.7.0" + } + }, + "node_modules/stylelint-order": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz", + "integrity": "sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "postcss": "^7.0.31", + "postcss-sorting": "^5.0.1" + }, + "peerDependencies": { + "stylelint": "^10.0.1 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.20.1.tgz", + "integrity": "sha512-OTd55O1TTAC5nGKkVmUDLpz53LlK39R3MImv1CfuvsK7/qugktqiZAeQLuuC4UBhzxCnsc7fp9u/gfRZwFAIkA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, + "node_modules/sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "peer": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true, + "peer": true + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "peer": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "peer": true, + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "peer": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "peer": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "peer": true + }, + "@babel/core": { + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", + "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.5", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "peer": true + } + } + }, + "@babel/generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "peer": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", + "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true, + "peer": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "peer": true + }, + "@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", + "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", + "dev": true, + "peer": true + }, + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "peer": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "peer": true, + "requires": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + } + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "peer": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true, + "peer": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true, + "peer": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true, + "peer": true + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true, + "peer": true + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "peer": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "peer": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "peer": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "peer": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "peer": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "peer": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "peer": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001255", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", + "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==", + "dev": true, + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "peer": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "peer": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "peer": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "peer": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "peer": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "peer": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "peer": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "peer": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "peer": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "peer": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "peer": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "peer": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "peer": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "electron-to-chromium": { + "version": "1.3.834", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.834.tgz", + "integrity": "sha512-9hnYJOlj2zbVn59Oy1R2mW/jntsRG7Gy56/aAOq8s29DzDYW/kOrq/ryJXGAQRRMg4MreHjI63XavGZTsnPubg==", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "peer": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "peer": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "peer": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true, + "peer": true + }, + "fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dev": true, + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true, + "peer": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "peer": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "peer": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "peer": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "peer": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "peer": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "peer": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true, + "peer": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "peer": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "peer": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "peer": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "peer": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "peer": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "peer": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "peer": true + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "peer": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "peer": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "peer": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "peer": true + }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "peer": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "peer": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "peer": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "peer": true + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true, + "peer": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "peer": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "peer": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "peer": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true + }, + "known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true, + "peer": true + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true, + "peer": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "peer": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "peer": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true, + "peer": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "peer": true + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "peer": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "peer": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "peer": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "peer": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true + }, + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "peer": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "peer": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "peer": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true, + "peer": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "peer": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + }, + "node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true, + "peer": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "peer": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "peer": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true, + "peer": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true, + "peer": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "peer": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "peer": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "peer": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "peer": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "peer": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "peer": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "peer": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "peer": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "peer": true, + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-sorting": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", + "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", + "dev": true, + "requires": { + "lodash": "^4.17.14", + "postcss": "^7.0.17" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true, + "peer": true, + "requires": {} + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "peer": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "peer": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "peer": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "peer": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "peer": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "peer": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "peer": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "peer": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "peer": true + } } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, + "peer": true, "requires": { - "color-name": "~1.1.4" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } }, - "css": { + "redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "peer": true, "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "peer": true, "requires": { - "to-regex-range": "^5.0.1" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "peer": true, "requires": { - "is-glob": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "peer": true, "requires": { - "binary-extensions": "^2.0.0" + "mdast-util-to-markdown": "^0.6.0" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "peer": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "peer": true, "requires": { - "is-extglob": "^2.1.1" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "peer": true, "requires": { - "picomatch": "^2.2.1" + "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, "sass": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.0.tgz", @@ -539,6 +5704,39 @@ "lodash": "^4.17.19" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true, + "peer": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -555,6 +5753,208 @@ "decode-uri-component": "^0.2.0" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "peer": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "peer": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "peer": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true, + "peer": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "peer": true + } + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "peer": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true, + "peer": true + }, + "stylelint": { + "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", + "dev": true, + "peer": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^2.0.0", + "chalk": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.3", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.1.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.5", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.6.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^3.0.3" + } + }, + "stylelint-config-sass-guidelines": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-8.0.0.tgz", + "integrity": "sha512-v21iDWtzpfhuKJlYKpoE1vjp+GT8Cr6ZBWwMx/jf+eCEblZgAIDVVjgAELoDLhVj17DcEFwlIKJBMfrdAmXg0Q==", + "dev": true, + "requires": { + "stylelint-order": "^4.0.0", + "stylelint-scss": "^3.18.0" + } + }, + "stylelint-order": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz", + "integrity": "sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss": "^7.0.31", + "postcss-sorting": "^5.0.1" + } + }, + "stylelint-scss": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.20.1.tgz", + "integrity": "sha512-OTd55O1TTAC5nGKkVmUDLpz53LlK39R3MImv1CfuvsK7/qugktqiZAeQLuuC4UBhzxCnsc7fp9u/gfRZwFAIkA==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "peer": true, + "requires": { + "postcss": "^7.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -564,6 +5964,35 @@ "has-flag": "^4.0.0" } }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true, + "peer": true + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "peer": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -571,6 +6000,204 @@ "requires": { "is-number": "^7.0.0" } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "peer": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "peer": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "peer": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "peer": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "peer": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "peer": true + } + } + }, + "unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "peer": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "peer": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "peer": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "peer": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "peer": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "peer": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "peer": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "peer": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "peer": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "peer": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "peer": true } } } diff --git a/package.json b/package.json index 3128d644..be81d4fd 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "sass": "^1.34.0" }, "devDependencies": { - "sass-true": "^6.0.1" + "sass-true": "^6.0.1", + "stylelint-config-sass-guidelines": "^8.0.0" } } diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 4311f9ce..c4bea973 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -5,7 +5,7 @@ $_settings: () !default; -@mixin step($mode: map-get($_settings, respond)) { +@mixin step($mode: map-get($_settings, 'respond')) { // Setup $id: #{unique-id()}; $max: 0; @@ -17,7 +17,7 @@ $_settings: () !default; $query: typetura; } // Find maximum value - @each $bp in $settings { + @each $bp in $_settings { @if (type-of(list.nth($bp, 1)) == "number") { $max: list.nth($bp, 1); $queries: $queries + 1; @@ -25,14 +25,14 @@ $_settings: () !default; } // Write fallback styles to broader context - @content ($settings); + @content ($_settings); // Typetura styles @if ($query == typetura) { --tt-key: #{$id}; --tt-max: #{strip-unit($max)}; @keyframes #{$id} { - @each $bp in $settings { + @each $bp in $_settings { @if (type-of(list.nth($bp, 1)) == "number") { $key: list.nth($bp, 1); @@ -47,7 +47,7 @@ $_settings: () !default; } @else if ($query == container) { $query: $query + ' modularscale'; // Loop through breakpoints - @each $bp in $settings { + @each $bp in $_settings { @if (type-of(list.nth($bp, 1)) == "number") { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); @@ -58,7 +58,7 @@ $_settings: () !default; } @else { // Loop through breakpoints - @each $bp in $settings { + @each $bp in $_settings { @if (type-of(list.nth($bp, 1)) == "number") { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_settings.scss index 4c992fa9..0a6a5a59 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_settings.scss @@ -5,27 +5,30 @@ @function settings($b: null, $r: null, $t: null, $m: ()) { $base: 1em; $ratio: 1.5; - $respond: media; + $respond: 'media'; $thread: map-get($m, $t); // Override with user settings - @if map-get($m, base) { - $base: map-get($m, base); + @if map-get($m, 'base') { + $base: map-get($m, 'base'); } - @if map-get($m, ratio) { - $ratio: map-get($m, ratio); + + @if map-get($m, 'ratio') { + $ratio: map-get($m, 'ratio'); } - @if map-get($m, respond) { - $respond: map-get($m, respond); + + @if map-get($m, 'respond') { + $respond: map-get($m, 'respond'); } // Override with thread settings @if $thread { - @if map-get($thread, base) { - $base: map-get($thread, base); + @if map-get($thread, 'base') { + $base: map-get($thread, 'base'); } - @if map-get($thread, ratio) { - $ratio: map-get($thread, ratio); + + @if map-get($thread, 'ratio') { + $ratio: map-get($thread, 'ratio'); } } @@ -33,6 +36,7 @@ @if $b { $base: $b; } + @if $r { $ratio: $r; } diff --git a/stylesheets/modularscale/_sort.scss b/stylesheets/modularscale/_sort.scss index c4db63b9..85308686 100644 --- a/stylesheets/modularscale/_sort.scss +++ b/stylesheets/modularscale/_sort.scss @@ -10,9 +10,9 @@ // Find the lowest value $m: min($l...); // Write that value to the return - $return: append($return,$m); + $return: append($return, $m); // Replace that value in the list so it won’t be called again. - $l: set-nth($l, index($l,$m), 999); + $l: set-nth($l, index($l, $m), 999); } // Return the newly sorted list diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 7da235b5..d0926329 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,4 +1,4 @@ -@use "sass:list"; +@use 'sass:list'; @use 'sass:math'; @use 'settings' as *; @@ -26,7 +26,7 @@ $_settings: () !default; $bases: (); // Render target values from settings. - @if math.unit($ratio) != "" { + @if math.unit($ratio) != '' { $ratio: target($ratio, $base); } @@ -39,9 +39,8 @@ $_settings: () !default; // convert target pixels to the unit used on $base @if (not math.compatible($v, $base)) { - @if (math.unit($v) != 'px') { - @error "To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}."; + @error 'To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}.'; } @if (math.unit($base) == 'rem') { @@ -64,11 +63,14 @@ $_settings: () !default; @return math.pow($ratio, $v) * $base; } @else { $bases: list.nth($base, 1); + @for $i from 2 through $base-length { $new-base: list.nth($base, $i); + @while ($new-base > ($ratio * list.nth($base, 1))) { $new-base: math.div($new-base, $ratio); } + @while ($new-base < list.nth($base, 1)) { $new-base: ($new-base * $ratio); } diff --git a/stylesheets/modularscale/_strip-unit.scss b/stylesheets/modularscale/_strip-unit.scss index 904358d6..f57f1963 100644 --- a/stylesheets/modularscale/_strip-unit.scss +++ b/stylesheets/modularscale/_strip-unit.scss @@ -1,4 +1,4 @@ -@use "sass:math"; +@use 'sass:math'; // Stripping units is not a best practice // This function should not be used elsewhere diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index b18f0045..7458f516 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,23 +1,23 @@ -@use "sass:list"; -@use "sass:math"; -@use "sass:string"; +@use 'sass:list'; +@use 'sass:math'; +@use 'sass:string'; -@use "strip-unit" as *; -@use "to-num" as *; +@use 'strip-unit' as *; +@use 'to-num' as *; // Find a ratio based on a target value @function target($t, $b) { @if (list.length($b) > 1) { - @error "You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base."; + @error 'You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base.'; } // Convert to string - $t: $t + ""; + $t: $t + ''; // Remove base units to calculate ratio $b: strip-unit(nth($b, 1)); // Find where 'at' is in the string - $at: string.index($t, "at"); + $at: string.index($t, 'at'); // Slice the value and target out // and convert strings to numbers diff --git a/stylesheets/modularscale/_to-num.scss b/stylesheets/modularscale/_to-num.scss index 05ed93d8..2de1e8e1 100644 --- a/stylesheets/modularscale/_to-num.scss +++ b/stylesheets/modularscale/_to-num.scss @@ -1,40 +1,51 @@ -@use "sass:string"; +@use 'sass:string'; // Convert number string to number @function to-num($n) { $length: string.length($n); $return: 0; + @for $i from 1 through $length { $return: $return * 10; $value: string.slice($n, $i, $i); - @if ($value == "0") { + + @if ($value == '0') { $return: $return + 0; } - @if ($value == "1") { + + @if ($value == '1') { $return: $return + 1; } - @if ($value == "2") { + + @if ($value == '2') { $return: $return + 2; } - @if ($value == "3") { + + @if ($value == '3') { $return: $return + 3; } - @if ($value == "4") { + + @if ($value == '4') { $return: $return + 4; } - @if ($value == "5") { + + @if ($value == '5') { $return: $return + 5; } - @if ($value == "6") { + + @if ($value == '6') { $return: $return + 6; } - @if ($value == "7") { + + @if ($value == '7') { $return: $return + 7; } - @if ($value == "8") { + + @if ($value == '8') { $return: $return + 8; } - @if ($value == "9") { + + @if ($value == '9') { $return: $return + 9; } } diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 92541b6e..56e1104c 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -2,40 +2,26 @@ @use '../../node_modules/sass-true' as true; -@use '../modularscale/step'as * with ($_settings: (base: 1em, ratio: 1.5)); +@use '../modularscale/step' as * with ($_settings: (base: 1em, ratio: 1.5)); @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); - @include true.assert-equal(step(5, $thread: test, - $settings: (base: 1em, ratio: 1.5, test: (ratio: 1.618 )) - ), 11.0890051809em, 'when using multiple scales', true); - + $settings: (base: 1em, ratio: 1.5, test: (ratio: 1.618 )) + ), 11.0890051809em, 'when using multiple scales', true); @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); - @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); - @include true.assert-equal(step(5em), 5.0625em, 'when reversed and approximated to 5.0625em, being 5em', true); - @include true.assert-equal(step(56px), 3.375em, 'when reversed and approximated to 54px, being 56px', true); - @include true.assert-equal(step(180px), 11.390625em, 'when reversed and approximated to 182.25px, being 180px', true); - @include true.assert-equal(step(170px, null, 62.5%), 1067.87109375%, 'when reversed and approximated to 170.86px, being 170px and using a percentage base', true); - @include true.assert-equal(step(50px, null, 60%), 303.75%, 'when reversed and approximated to 50.63px, being 50px and using a unusual percentage base', true); - @include true.assert-equal(step(40px, null, 16px, 1.125), 41.0525522232px, 'when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels', true); - @include true.assert-equal(step(30px, null, 1rem, 1.125), 1.8020324707rem, 'when reversed, approximated and greater than 28.833px, being 30px', true); - @include true.assert-equal(step(17px, null, 1rem, 1.125), 1.125rem, 'when reversed, and half way to 16px and 18px, being 17px', true); - @include true.assert-equal(step(15.5px, null, 1rem, 1.125), 1rem, 'when reversed, approximated and lesser than 16px, being 15.5px', true); - @include true.assert-equal(step(15px, null, 1rem, 1.125), 0.8888888889rem, 'when reversed, approximated and greater than 14.2222222222px, being 15px', true); - @include true.assert-equal(step(12px, null, 1rem, 1.125), 0.7901234568rem, 'when reversed and approximated to 12.642px, being 12px, lesser than the base', true); } } From aa4e543caf21341a6f8dd6be212e0384be77ced3 Mon Sep 17 00:00:00 2001 From: sobral Date: Fri, 1 Oct 2021 22:56:22 -0300 Subject: [PATCH 48/63] Rename "vars" as "constants" --- stylesheets/modularscale/{_vars.scss => _constants.scss} | 7 ------- stylesheets/modularscale/_index.scss | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) rename stylesheets/modularscale/{_vars.scss => _constants.scss} (75%) diff --git a/stylesheets/modularscale/_vars.scss b/stylesheets/modularscale/_constants.scss similarity index 75% rename from stylesheets/modularscale/_vars.scss rename to stylesheets/modularscale/_constants.scss index 3ad04e2b..905f4489 100644 --- a/stylesheets/modularscale/_vars.scss +++ b/stylesheets/modularscale/_constants.scss @@ -1,10 +1,3 @@ -// Base config -$base: 1em !default; -$ratio: 1.5 !default; -$settings: () !default; -$respond: media !default; -$container-write: false; - // Ratios $double-octave: 4; $pi: 3.14159265359; diff --git a/stylesheets/modularscale/_index.scss b/stylesheets/modularscale/_index.scss index 7303ad82..4f717538 100644 --- a/stylesheets/modularscale/_index.scss +++ b/stylesheets/modularscale/_index.scss @@ -6,7 +6,7 @@ $settings: ( ) !default; // Defaults and variables -@forward 'vars'; +@forward 'constants'; // Core functions @forward 'step' with ($_settings: $settings); From bfd03e9a36c2fbdbb1de59c37f8c33d537fbe96a Mon Sep 17 00:00:00 2001 From: sobral Date: Fri, 1 Oct 2021 23:03:53 -0300 Subject: [PATCH 49/63] Kill a gremlin https://marketplace.visualstudio.com/items?itemName=nhoizey.gremlins --- stylesheets/modularscale/_sort.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stylesheets/modularscale/_sort.scss b/stylesheets/modularscale/_sort.scss index 85308686..8b535b29 100644 --- a/stylesheets/modularscale/_sort.scss +++ b/stylesheets/modularscale/_sort.scss @@ -11,7 +11,7 @@ $m: min($l...); // Write that value to the return $return: append($return, $m); - // Replace that value in the list so it won’t be called again. + // Replace that value in the list so it won't be called again. $l: set-nth($l, index($l, $m), 999); } From 9ac3d338a0586060f3140c9314775e7b39b538ce Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 12:31:28 -0300 Subject: [PATCH 50/63] Remove redundant code... ...because that's already the default settings --- stylesheets/tests/_step.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 56e1104c..be5b0d4f 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -2,7 +2,7 @@ @use '../../node_modules/sass-true' as true; -@use '../modularscale/step' as * with ($_settings: (base: 1em, ratio: 1.5)); +@use '../modularscale/step' as *; @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { From d6a41ec37bdae9e50fc61de11905f90f3b133d2a Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 12:38:25 -0300 Subject: [PATCH 51/63] Fix multi bases `step()` --- stylesheets/modularscale/_step.scss | 51 ++++++++++++++--------------- stylesheets/tests/_step.scss | 2 ++ test-results/tests.css | 2 ++ 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index d0926329..0ebc0f0e 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -30,36 +30,35 @@ $_settings: () !default; $ratio: target($ratio, $base); } - // if the step provided is actually a target and has the same unit as the base, - // we can figured the closest integer step on the current scale to be used. - // it's for the cases when the designer provided all values as pixels and not respecting - // the modular scale to the "number", but getting close. - // Designers don't like float numbers. - @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { - - // convert target pixels to the unit used on $base - @if (not math.compatible($v, $base)) { - @if (math.unit($v) != 'px') { - @error 'To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}.'; + // Fast calc if not multi stranded + @if ($base-length == 1) { + // if the step provided is actually a target and has the same unit as the base, + // we can figured the closest integer step on the current scale to be used. + // It's for the cases when the designer provided all values as pixels and + // not respecting the modular scale to the "number", but getting close. + // Designers don't like float numbers. + @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { + // convert target pixels to the unit used on $base + @if (not math.compatible($v, $base)) { + @if (math.unit($v) != 'px') { + @error 'To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}.'; + } + + @if (math.unit($base) == 'rem') { + $v: math.div($v, 16px) * 1rem; + } @else if (math.unit($base) == 'em') { + $v: math.div($v, 16px) * 1em; + } @else if (math.unit($base) == '%') { + $v: math.div($v, 16px * math.div($base, 100%)) * $base; + } @else { + @error '#{$v} and #{$base} don\'t have units that can be converted using browser root size'; + } } - @if (math.unit($base) == 'rem') { - $v: math.div($v, 16px) * 1rem; - } @else if (math.unit($base) == 'em') { - $v: math.div($v, 16px) * 1em; - } @else if (math.unit($base) == '%') { - $v: math.div($v, 16px * math.div($base, 100%)) * $base; - } @else { - @error "#{$v} and #{$base} don't have units that can be converted using browser root size"; - } + $v: math.log(math.div($v, $base), $ratio); + $v: math.round($v); } - $v: math.log(math.div($v, $base), $ratio); - $v: math.round($v); - } - - // Fast calc if not multi stranded - @if ($base-length == 1) { @return math.pow($ratio, $v) * $base; } @else { $bases: list.nth($base, 1); diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index be5b0d4f..c4b1107d 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -7,6 +7,8 @@ @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); + @include true.assert-equal(step(5, $base: 1em 1.2em), 2.7em, 'when using two bases', true); + @include true.assert-equal(step(7, $base: 1em 1.2em 1.6em), 2.4em, 'when using three bases', true); @include true.assert-equal(step(5, $thread: test, $settings: (base: 1em, ratio: 1.5, test: (ratio: 1.618 )) ), 11.0890051809em, 'when using multiple scales', true); diff --git a/test-results/tests.css b/test-results/tests.css index 0d1627b2..0f27058d 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -25,6 +25,8 @@ /* ------------------------- */ /* Test: It returns the size based at the provided step */ /* ✔ [assert-equal] when positive */ +/* ✔ [assert-equal] when using two bases */ +/* ✔ [assert-equal] when using three bases */ /* ✔ [assert-equal] when using multiple scales */ /* ✔ [assert-equal] when negative */ /* ✔ [assert-equal] when float */ From 379de7b939dd02cfbf280e2a5fe8dd56d0a0877d Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 12:42:37 -0300 Subject: [PATCH 52/63] Normalize quotation marks --- readme.md | 11 +++++------ stylesheets/modularscale/_respond.scss | 14 +++++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/readme.md b/readme.md index 5bced60f..c271861d 100644 --- a/readme.md +++ b/readme.md @@ -83,11 +83,10 @@ ms.$settings: ( ratio: 1.5, respond: typetura, // typetura, media, or container - 400px: - ( - // base is inheritied - ratio: 1.2, - ), + 400px: ( + // base is inheritied + ratio: 1.2, + ), 900px: ( base: 1.25rem, ratio: 1.3, @@ -130,7 +129,7 @@ You will need to define a container. Do this with the `@include ms.container;` m // By default, the container is .modularscale @include ms.container; // You can define your own container by passing a selector through as an argument -@include ms.container(".ms-container"); +@include ms.container('.ms-container'); ``` ## Target sizes diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index c4bea973..465af813 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -14,11 +14,11 @@ $_settings: () !default; $query: $mode; // Default query type @if ($query == null) { - $query: typetura; + $query: 'typetura'; } // Find maximum value @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == "number") { + @if (type-of(list.nth($bp, 1)) == 'number') { $max: list.nth($bp, 1); $queries: $queries + 1; } @@ -28,12 +28,12 @@ $_settings: () !default; @content ($_settings); // Typetura styles - @if ($query == typetura) { + @if ($query == 'typetura') { --tt-key: #{$id}; --tt-max: #{strip-unit($max)}; @keyframes #{$id} { @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == "number") { + @if (type-of(list.nth($bp, 1)) == 'number') { $key: list.nth($bp, 1); $keyframe: percentage(math.div($key, $max)); @@ -44,11 +44,11 @@ $_settings: () !default; } } } - } @else if ($query == container) { + } @else if ($query == 'container') { $query: $query + ' modularscale'; // Loop through breakpoints @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == "number") { + @if (type-of(list.nth($bp, 1)) == 'number') { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); @content ($bp); @@ -59,7 +59,7 @@ $_settings: () !default; // Loop through breakpoints @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == "number") { + @if (type-of(list.nth($bp, 1)) == 'number') { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); @content ($bp); From 78d7b0551290977a63903b2fc0784c979ebad608 Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 22:26:49 -0300 Subject: [PATCH 53/63] Call ratios by name... ...in a shorter way than the previous one --- readme.md | 59 ++++++++++++++---------- stylesheets/modularscale/_constants.scss | 41 ++++++++-------- stylesheets/modularscale/_step.scss | 12 +++++ stylesheets/tests/_step.scss | 1 + test-results/tests.css | 3 +- 5 files changed, 70 insertions(+), 46 deletions(-) diff --git a/readme.md b/readme.md index c271861d..8a4ed576 100644 --- a/readme.md +++ b/readme.md @@ -144,31 +144,40 @@ Now your base is `16px` and when you call `ms.step(5)` it will be `42px`. Everyt ## Ratios -Modular scale includes functions for a number of classic design and musical scale ratios. You can add your own ratios as well. - -By default ratio is set to `ms.$fifth`. - - - - - - - - - - - - - - - - - - - - - -
Function Ratio Decimal value
ms.$phi 1:1.6181.618
ms.$golden 1:1.6181.618
ms.$double-octave 1:4 4
ms.$major-twelfth 1:3 3
ms.$major-eleventh 3:8 2.667
ms.$major-tenth 2:5 2.5
ms.$octave 1:2 2
ms.$major-seventh 8:15 1.875
ms.$minor-seventh 9:16 1.778
ms.$major-sixth 3:5 1.667
ms.$minor-sixth 5:8 1.6
ms.$fifth 2:3 1.5
ms.$augmented-fourth1:√2 1.414
ms.$fourth 3:4 1.333
ms.$major-third 4:5 1.25
ms.$minor-third 5:6 1.2
ms.$major-second 8:9 1.125
ms.$minor-second 15:16 1.067
+Modular scale includes functions for a number of classic design and musical scale ratios. + +```scss +@use '../stylesheets/modularscale' as ms with ($settings: (base: 1em, ratio: 'fifth')); +``` + +```scss +.sample { + font-size: ms.step(2, $ratio: 'major-second'); +} +``` + +| Function | Ratio | Decimal value | +|----------------------|---------|---------------| +| phi | 1:1.618 | 1.618 | +| golden | 1:1.618 | 1.618 | +| double-octave | 1:4 | 4 | +| major-twelfth | 1:3 | 3 | +| major-eleventh | 3:8 | 2.667 | +| major-tenth | 2:5 | 2.5 | +| octave | 1:2 | 2 | +| major-seventh | 8:15 | 1.875 | +| minor-seventh | 9:16 | 1.778 | +| major-sixth | 3:5 | 1.667 | +| minor-sixth | 5:8 | 1.6 | +| fifth | 2:3 | 1.5 | +| augmented-fourth | 1:√2 | 1.414 | +| fourth | 3:4 | 1.333 | +| major-third | 4:5 | 1.25 | +| minor-third | 5:6 | 1.2 | +| major-second | 8:9 | 1.125 | +| minor-second | 15:16 | 1.067 | + +By default, ratio is set to `fifth`. ## [Changelog](https://github.com/Team-Sass/modular-scale/releases) diff --git a/stylesheets/modularscale/_constants.scss b/stylesheets/modularscale/_constants.scss index 905f4489..3dde9a0e 100644 --- a/stylesheets/modularscale/_constants.scss +++ b/stylesheets/modularscale/_constants.scss @@ -1,20 +1,21 @@ -// Ratios -$double-octave: 4; -$pi: 3.14159265359; -$major-twelfth: 3; -$major-eleventh: 2.666666667; -$major-tenth: 2.5; -$octave: 2; -$major-seventh: 1.875; -$minor-seventh: 1.777777778; -$major-sixth: 1.666666667; -$phi: 1.618034; -$golden: $phi; -$minor-sixth: 1.6; -$fifth: 1.5; -$augmented-fourth: 1.41421; -$fourth: 1.333333333; -$major-third: 1.25; -$minor-third: 1.2; -$major-second: 1.125; -$minor-second: 1.066666667; +$ratios: ( + 'double-octave': 4, + 'pi': 3.14159265359, + 'major-twelfth': 3, + 'major-eleventh': 2.666666667, + 'major-tenth': 2.5, + 'octave': 2, + 'major-seventh': 1.875, + 'minor-seventh': 1.777777778, + 'major-sixth': 1.666666667, + 'phi': 1.618034, + 'golden': 1.618034, + 'minor-sixth': 1.6, + 'fifth': 1.5, + 'augmented-fourth': 1.41421, + 'fourth': 1.333333333, + 'major-third': 1.25, + 'minor-third': 1.2, + 'major-second': 1.125, + 'minor-second': 1.066666667, +); diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 0ebc0f0e..ea233550 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -1,6 +1,9 @@ @use 'sass:list'; +@use 'sass:map'; @use 'sass:math'; +@use 'sass:meta'; +@use 'constants' as *; @use 'settings' as *; @use 'sort' as *; @use 'target' as *; @@ -19,6 +22,15 @@ $_settings: () !default; @if ($respond) { $thread: $respond; } + + @if meta.type-of($ratio) == 'string' { + @if map.has-key($ratios, $ratio) { + $ratio: map.get($ratios, $ratio); + } @else { + @error '#{$ratio} isn\'t a valid ratio'; + } + } + $settings: settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index c4b1107d..9383dd42 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -7,6 +7,7 @@ @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); + @include true.assert-equal(step(11, $ratio: 'phi'), 199.0050402191em, 'when using a named ratio', true); @include true.assert-equal(step(5, $base: 1em 1.2em), 2.7em, 'when using two bases', true); @include true.assert-equal(step(7, $base: 1em 1.2em 1.6em), 2.4em, 'when using three bases', true); @include true.assert-equal(step(5, $thread: test, diff --git a/test-results/tests.css b/test-results/tests.css index 0f27058d..c1610e42 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -25,6 +25,7 @@ /* ------------------------- */ /* Test: It returns the size based at the provided step */ /* ✔ [assert-equal] when positive */ +/* ✔ [assert-equal] when using a named ratio */ /* ✔ [assert-equal] when using two bases */ /* ✔ [assert-equal] when using three bases */ /* ✔ [assert-equal] when using multiple scales */ @@ -77,5 +78,5 @@ /* Stats: */ /* - 6 Modules */ /* - 6 Tests */ -/* - 39 Assertions */ +/* - 42 Assertions */ /* -------------------- */ From beaec89c5cd0197c0e01617c84affd550676c1c9 Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 22:56:37 -0300 Subject: [PATCH 54/63] Allow target to be provided as list, using spaces --- stylesheets/modularscale/_target.scss | 52 +++++++++++++++++++-------- stylesheets/tests/_target.scss | 6 ++-- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_target.scss index 7458f516..c5fc4e40 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_target.scss @@ -1,33 +1,55 @@ @use 'sass:list'; @use 'sass:math'; +@use 'sass:meta'; @use 'sass:string'; @use 'strip-unit' as *; @use 'to-num' as *; // Find a ratio based on a target value -@function target($t, $b) { - @if (list.length($b) > 1) { - @error 'You are currently using multiple bases in your modular scale: #{$b}. When targeting a value for your ratio, please use a single base.'; +@function target($target, $base) { + $value: 0; + + @if (list.length($base) > 1) { + @error 'You are currently using multiple bases in your modular scale: #{$base}. When targeting a value for your ratio, please use a single base.'; } - // Convert to string - $t: $t + ''; - // Remove base units to calculate ratio - $b: strip-unit(nth($b, 1)); + @if meta.type-of($target) == 'list' { + @if list.length($target) != 3 and list.nth($target, 2) != 'at' { + @error 'when using 3 values length list, `target()` function expects the second to be `at`; #{list.nth($target, 2)} given.'; + } + + $value: list.nth($target, 1); + + @if meta.type-of($value) == 'string' { + $value: to-num($value); + } + + $target: list.nth($target, 3); - // Find where 'at' is in the string - $at: string.index($t, 'at'); + @if meta.type-of($target) == 'string' { + $target: to-num($target); + } + } @else { + // Convert to string + $target: $target + ''; - // Slice the value and target out - // and convert strings to numbers - $v: to-num(string.slice($t, 0, $at - 1)); - $t: to-num(string.slice($t, $at + 2)); + // Find where 'at' is in the string + $at: string.index($target, 'at'); + + // Slice the value and target out + // and convert strings to numbers + $value: to-num(string.slice($target, 0, $at - 1)); + $target: to-num(string.slice($target, $at + 2)); + } + + // Remove base units to calculate ratio + $base: strip-unit(nth($base, 1)); - @if $v == $b or $t == 0 { + @if $value == $base or $target == 0 { @error 'It\'s impossible to calculate a ratio from the same size as its base'; } // Solve the modular scale function for the ratio. - @return math.pow(math.div($v, $b), math.div(1, $t)); + @return math.pow(math.div($value, $base), math.div(1, $target)); } diff --git a/stylesheets/tests/_target.scss b/stylesheets/tests/_target.scss index caf567e5..326429af 100644 --- a/stylesheets/tests/_target.scss +++ b/stylesheets/tests/_target.scss @@ -5,9 +5,9 @@ @include true.describe('target [function]') { @include true.it('It finds a ratio based on a target value') { @include true.assert-equal(target('18at1', 16px), 1.125); - @include true.assert-equal(target('25at2', 16px), 1.25); - @include true.assert-equal(target('81at4', 16px), 1.5); - @include true.assert-equal(target('128at3', 16px), 2); + @include true.assert-equal(target(25 at 2, 16px), 1.25); + @include true.assert-equal(target('81' 'at' '4', 16px), 1.5); + @include true.assert-equal(target(128at3, 16px), 2); @include true.assert-equal(target('80at3', 10px), 2); } } From 01376ed9561144e18eba8ecd631775e79dd13109 Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 22:57:00 -0300 Subject: [PATCH 55/63] Prefix `type-of()` --- stylesheets/modularscale/_respond.scss | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss index 465af813..d9eff158 100644 --- a/stylesheets/modularscale/_respond.scss +++ b/stylesheets/modularscale/_respond.scss @@ -1,5 +1,6 @@ @use 'sass:list'; @use 'sass:math'; +@use 'sass:meta'; @use 'strip-unit' as *; @@ -18,7 +19,7 @@ $_settings: () !default; } // Find maximum value @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == 'number') { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { $max: list.nth($bp, 1); $queries: $queries + 1; } @@ -33,7 +34,7 @@ $_settings: () !default; --tt-max: #{strip-unit($max)}; @keyframes #{$id} { @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == 'number') { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { $key: list.nth($bp, 1); $keyframe: percentage(math.div($key, $max)); @@ -48,7 +49,7 @@ $_settings: () !default; $query: $query + ' modularscale'; // Loop through breakpoints @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == 'number') { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); @content ($bp); @@ -59,7 +60,7 @@ $_settings: () !default; // Loop through breakpoints @each $bp in $_settings { - @if (type-of(list.nth($bp, 1)) == 'number') { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { @#{$query} (min-width: #{list.nth($bp, 1)}) { $bp: list.nth($bp, 1); @content ($bp); From c7a9e2be0eb78915507a3b2ca1fd7585e66c7f87 Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 23:11:26 -0300 Subject: [PATCH 56/63] Rename `target()` to make its purpose clearer --- .../{_target.scss => _ratio-by-target.scss} | 2 +- stylesheets/modularscale/_step.scss | 6 +++--- stylesheets/tests.scss | 2 +- stylesheets/tests/_ratio-by-target.scss | 13 +++++++++++++ stylesheets/tests/_target.scss | 13 ------------- test-results/tests.css | 4 ++-- 6 files changed, 20 insertions(+), 20 deletions(-) rename stylesheets/modularscale/{_target.scss => _ratio-by-target.scss} (97%) create mode 100644 stylesheets/tests/_ratio-by-target.scss delete mode 100644 stylesheets/tests/_target.scss diff --git a/stylesheets/modularscale/_target.scss b/stylesheets/modularscale/_ratio-by-target.scss similarity index 97% rename from stylesheets/modularscale/_target.scss rename to stylesheets/modularscale/_ratio-by-target.scss index c5fc4e40..ede8afc0 100644 --- a/stylesheets/modularscale/_target.scss +++ b/stylesheets/modularscale/_ratio-by-target.scss @@ -7,7 +7,7 @@ @use 'to-num' as *; // Find a ratio based on a target value -@function target($target, $base) { +@function ratio-by-target($target, $base) { $value: 0; @if (list.length($base) > 1) { diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index ea233550..cbd34967 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -6,7 +6,7 @@ @use 'constants' as *; @use 'settings' as *; @use 'sort' as *; -@use 'target' as *; +@use 'ratio-by-target' as *; $_settings: () !default; @@ -38,8 +38,8 @@ $_settings: () !default; $bases: (); // Render target values from settings. - @if math.unit($ratio) != '' { - $ratio: target($ratio, $base); + @if type-of($ratio) == 'string' or type-of($ratio) == 'list' { + $ratio: radio-target($ratio, $base); } // Fast calc if not multi stranded diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 0a6ad836..03ac11ac 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -4,7 +4,7 @@ @use 'tests/sort'; @use 'tests/step'; @use 'tests/strip-unit'; -@use 'tests/target'; +@use 'tests/ratio-by-target'; @use 'tests/to-num'; @include true.report; diff --git a/stylesheets/tests/_ratio-by-target.scss b/stylesheets/tests/_ratio-by-target.scss new file mode 100644 index 00000000..1ff30639 --- /dev/null +++ b/stylesheets/tests/_ratio-by-target.scss @@ -0,0 +1,13 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/ratio-by-target' as *; + +@include true.describe('ratio-by-target [function]') { + @include true.it('It finds a ratio based on a target value') { + @include true.assert-equal(ratio-by-target('18at1', 16px), 1.125); + @include true.assert-equal(ratio-by-target(25 at 2, 16px), 1.25); + @include true.assert-equal(ratio-by-target('81' 'at' '4', 16px), 1.5); + @include true.assert-equal(ratio-by-target(128at3, 16px), 2); + @include true.assert-equal(ratio-by-target('80at3', 10px), 2); + } +} diff --git a/stylesheets/tests/_target.scss b/stylesheets/tests/_target.scss deleted file mode 100644 index 326429af..00000000 --- a/stylesheets/tests/_target.scss +++ /dev/null @@ -1,13 +0,0 @@ -@use '../../node_modules/sass-true' as true; - -@use '../modularscale/target' as *; - -@include true.describe('target [function]') { - @include true.it('It finds a ratio based on a target value') { - @include true.assert-equal(target('18at1', 16px), 1.125); - @include true.assert-equal(target(25 at 2, 16px), 1.25); - @include true.assert-equal(target('81' 'at' '4', 16px), 1.5); - @include true.assert-equal(target(128at3, 16px), 2); - @include true.assert-equal(target('80at3', 10px), 2); - } -} diff --git a/test-results/tests.css b/test-results/tests.css index c1610e42..6a51f5fa 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -52,8 +52,8 @@ /* ✔ [assert-equal] when percentages */ /* */ /* */ -/* # Module: target [function] */ -/* --------------------------- */ +/* # Module: ratio-by-target [function] */ +/* ------------------------------------ */ /* Test: It finds a ratio based on a target value */ /* ✔ [assert-equal] It finds a ratio based on a target value */ /* ✔ [assert-equal] It finds a ratio based on a target value */ From 77a18bd5fe9623672f012d71d4faa3571abdd01b Mon Sep 17 00:00:00 2001 From: sobral Date: Sat, 2 Oct 2021 23:17:36 -0300 Subject: [PATCH 57/63] Move `step-by-target()` to its own file --- stylesheets/modularscale/_step-by-target.scss | 26 +++++++++++++++++++ stylesheets/modularscale/_step.scss | 21 ++------------- stylesheets/tests.scss | 1 + stylesheets/tests/_step-by-target.scss | 13 ++++++++++ test-results/tests.css | 10 +++++++ 5 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 stylesheets/modularscale/_step-by-target.scss create mode 100644 stylesheets/tests/_step-by-target.scss diff --git a/stylesheets/modularscale/_step-by-target.scss b/stylesheets/modularscale/_step-by-target.scss new file mode 100644 index 00000000..b5853f55 --- /dev/null +++ b/stylesheets/modularscale/_step-by-target.scss @@ -0,0 +1,26 @@ +@use 'sass:math'; + +// Find a step based on a target value +@function step-by-target($target, $base, $ratio) { + // convert target pixels to the unit used on $base + @if (not math.compatible($target, $base)) { + @if (math.unit($target) != 'px') { + @error 'To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$target}.'; + } + + @if (math.unit($base) == 'rem') { + $target: math.div($target, 16px) * 1rem; + } @else if (math.unit($base) == 'em') { + $target: math.div($target, 16px) * 1em; + } @else if (math.unit($base) == '%') { + $target: math.div($target, 16px * math.div($base, 100%)) * $base; + } @else { + @error '#{$target} and #{$base} don\'t have units that can be converted using browser root size'; + } + } + + $target: math.log(math.div($target, $base), $ratio); + $target: math.round($target); + + @return $target; +} diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index cbd34967..728a826b 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -7,6 +7,7 @@ @use 'settings' as *; @use 'sort' as *; @use 'ratio-by-target' as *; +@use 'step-by-target' as *; $_settings: () !default; @@ -50,25 +51,7 @@ $_settings: () !default; // not respecting the modular scale to the "number", but getting close. // Designers don't like float numbers. @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { - // convert target pixels to the unit used on $base - @if (not math.compatible($v, $base)) { - @if (math.unit($v) != 'px') { - @error 'To match incompatible units, the target one needs to be `px`, as we use 16px as root size. Target provided: #{$v}.'; - } - - @if (math.unit($base) == 'rem') { - $v: math.div($v, 16px) * 1rem; - } @else if (math.unit($base) == 'em') { - $v: math.div($v, 16px) * 1em; - } @else if (math.unit($base) == '%') { - $v: math.div($v, 16px * math.div($base, 100%)) * $base; - } @else { - @error '#{$v} and #{$base} don\'t have units that can be converted using browser root size'; - } - } - - $v: math.log(math.div($v, $base), $ratio); - $v: math.round($v); + $v: step-by-target($v, $base, $ratio); } @return math.pow($ratio, $v) * $base; diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 03ac11ac..fd262ce1 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -5,6 +5,7 @@ @use 'tests/step'; @use 'tests/strip-unit'; @use 'tests/ratio-by-target'; +@use 'tests/step-by-target'; @use 'tests/to-num'; @include true.report; diff --git a/stylesheets/tests/_step-by-target.scss b/stylesheets/tests/_step-by-target.scss new file mode 100644 index 00000000..22807e93 --- /dev/null +++ b/stylesheets/tests/_step-by-target.scss @@ -0,0 +1,13 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/step-by-target' as *; + +@include true.describe('step-by-target [function]') { + @include true.it('It finds a step based on a target value') { + @include true.assert-equal(step-by-target(5em, 1em, 1.5), 4); + @include true.assert-equal(step-by-target(170px, 1em, 1.618034), 5); + @include true.assert-equal(step-by-target(30px, 1rem, 1.066666667), 10); + @include true.assert-equal(step-by-target(15.5px, 1em, 1.125), 0); + @include true.assert-equal(step-by-target(2.5rem, 1rem, 1.2), 5); + } +} diff --git a/test-results/tests.css b/test-results/tests.css index 6a51f5fa..3f1e3bae 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -62,6 +62,16 @@ /* ✔ [assert-equal] It finds a ratio based on a target value */ /* */ /* */ +/* # Module: step-by-target [function] */ +/* ----------------------------------- */ +/* Test: It finds a step based on a target value */ +/* ✔ [assert-equal] It finds a step based on a target value */ +/* ✔ [assert-equal] It finds a step based on a target value */ +/* ✔ [assert-equal] It finds a step based on a target value */ +/* ✔ [assert-equal] It finds a step based on a target value */ +/* ✔ [assert-equal] It finds a step based on a target value */ +/* */ +/* */ /* # Module: to-num [function] */ /* --------------------------- */ /* Test: It parses string digits as numbers */ From 0df0c3325a0160a2793a28f2f89eebb3982e53ec Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 13:44:05 -0300 Subject: [PATCH 58/63] Rename `settings()` to `normalize-settings()` --- ..._settings.scss => _normalize-settings.scss} | 2 +- stylesheets/modularscale/_step.scss | 4 ++-- stylesheets/tests.scss | 2 +- stylesheets/tests/_normalize-settings.scss | 18 ++++++++++++++++++ stylesheets/tests/_settings.scss | 18 ------------------ 5 files changed, 22 insertions(+), 22 deletions(-) rename stylesheets/modularscale/{_settings.scss => _normalize-settings.scss} (92%) create mode 100644 stylesheets/tests/_normalize-settings.scss delete mode 100644 stylesheets/tests/_settings.scss diff --git a/stylesheets/modularscale/_settings.scss b/stylesheets/modularscale/_normalize-settings.scss similarity index 92% rename from stylesheets/modularscale/_settings.scss rename to stylesheets/modularscale/_normalize-settings.scss index 0a6a5a59..ef9b6032 100644 --- a/stylesheets/modularscale/_settings.scss +++ b/stylesheets/modularscale/_normalize-settings.scss @@ -2,7 +2,7 @@ // Settings should cascade down like you would expect in CSS. // More specific overrides previous settings. -@function settings($b: null, $r: null, $t: null, $m: ()) { +@function normalize-settings($b: null, $r: null, $t: null, $m: ()) { $base: 1em; $ratio: 1.5; $respond: 'media'; diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index 728a826b..fd6bd4ea 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -4,7 +4,7 @@ @use 'sass:meta'; @use 'constants' as *; -@use 'settings' as *; +@use 'normalize-settings' as *; @use 'sort' as *; @use 'ratio-by-target' as *; @use 'step-by-target' as *; @@ -32,7 +32,7 @@ $_settings: () !default; } } - $settings: settings($base, $ratio, $thread, $settings); + $settings: normalize-settings($base, $ratio, $thread, $settings); $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); $base-length: list.length($base); diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index fd262ce1..58e97428 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,6 +1,6 @@ @use '../node_modules/sass-true' as true; -@use 'tests/settings'; +@use 'tests/normalize-settings'; @use 'tests/sort'; @use 'tests/step'; @use 'tests/strip-unit'; diff --git a/stylesheets/tests/_normalize-settings.scss b/stylesheets/tests/_normalize-settings.scss new file mode 100644 index 00000000..48658617 --- /dev/null +++ b/stylesheets/tests/_normalize-settings.scss @@ -0,0 +1,18 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/normalize-settings' as *; + +@include true.describe('settings [function]') { + @include true.it('It parses settings starting with defaults') { + @include true.assert-equal(normalize-settings(16px), 16px 1.5); + @include true.assert-equal(normalize-settings(1rem, 1.125), 1rem 1.125); + @include true.assert-equal(normalize-settings((1em 1.2em 1.6em), 1.618), (1em 1.2em 1.6em) 1.618); + @include true.assert-equal(normalize-settings($b: 1em 1.2em 1.6em, $r: 1.5), (1em 1.2em 1.6em) 1.5); + @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5, $t: 'a', $m: (a: (ratio: 1.3))), 1em 1.5); + @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5, $m: (a: (base: 1rem, ratio: 1.3))), 1em 1.5); + @include true.assert-equal(normalize-settings($t: 'a', $m: (a: (ratio: 1.3))), 1em 1.3); + @include true.assert-equal(normalize-settings($b: 1em, $m: (ratio: 1.3)), 1em 1.3); + @include true.assert-equal(normalize-settings($r: 1.5, $m: (base: 62.5%)), 62.5% 1.5); + @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5), 1em 1.5); + } +} diff --git a/stylesheets/tests/_settings.scss b/stylesheets/tests/_settings.scss deleted file mode 100644 index 3629c662..00000000 --- a/stylesheets/tests/_settings.scss +++ /dev/null @@ -1,18 +0,0 @@ -@use '../../node_modules/sass-true' as true; - -@use '../modularscale/settings' as *; - -@include true.describe('settings [function]') { - @include true.it('It parses settings starting with defaults') { - @include true.assert-equal(settings(16px), 16px 1.5); - @include true.assert-equal(settings(1rem, 1.125), 1rem 1.125); - @include true.assert-equal(settings((1em 1.2em 1.6em), 1.618), (1em 1.2em 1.6em) 1.618); - @include true.assert-equal(settings($b: 1em 1.2em 1.6em, $r: 1.5), (1em 1.2em 1.6em) 1.5); - @include true.assert-equal(settings($b: 1em, $r: 1.5, $t: 'a', $m: (a: (ratio: 1.3))), 1em 1.5); - @include true.assert-equal(settings($b: 1em, $r: 1.5, $m: (a: (base: 1rem, ratio: 1.3))), 1em 1.5); - @include true.assert-equal(settings($t: 'a', $m: (a: (ratio: 1.3))), 1em 1.3); - @include true.assert-equal(settings($b: 1em, $m: (ratio: 1.3)), 1em 1.3); - @include true.assert-equal(settings($r: 1.5, $m: (base: 62.5%)), 62.5% 1.5); - @include true.assert-equal(settings($b: 1em, $r: 1.5), 1em 1.5); - } -} From b7616a45f1c8993f2c40912a13df19c7c3d4f00f Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 13:47:09 -0300 Subject: [PATCH 59/63] Allow adding custom named ratios... ..within settings map --- readme.md | 2 ++ stylesheets/modularscale/_step.scss | 16 ++++++++++++++-- stylesheets/tests/_step.scss | 1 + test-results/tests.css | 11 ++++++----- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 8a4ed576..cba3827a 100644 --- a/readme.md +++ b/readme.md @@ -179,6 +179,8 @@ Modular scale includes functions for a number of classic design and musical scal By default, ratio is set to `fifth`. +You can add your own ratios as well. + ## [Changelog](https://github.com/Team-Sass/modular-scale/releases) ### License diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index fd6bd4ea..f0f495ad 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -10,6 +10,10 @@ @use 'step-by-target' as *; $_settings: () !default; +$_ratios: () !default; + + +$_ratios: map.merge(constants.$ratios, $_ratios); @function step( $v: 0, @@ -24,9 +28,17 @@ $_settings: () !default; $thread: $respond; } + @if map.has-key($settings, 'ratios') { + @if meta.type-of(map.get($settings, 'ratios')) == 'map' { + $_ratios: map.merge($_ratios, map.get($settings, 'ratios')) !global; + } @else { + @error 'ratios of invalid type submited whitin $settings: #{meta.type-of(map.get($settings, 'ratios'))}'; + } + } + @if meta.type-of($ratio) == 'string' { - @if map.has-key($ratios, $ratio) { - $ratio: map.get($ratios, $ratio); + @if map.has-key($_ratios, $ratio) { + $ratio: map.get($_ratios, $ratio); } @else { @error '#{$ratio} isn\'t a valid ratio'; } diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 9383dd42..bdca2b9f 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -8,6 +8,7 @@ @include true.it('It returns the size based at the provided step') { @include true.assert-equal(step(3), 3.375em, 'when positive', true); @include true.assert-equal(step(11, $ratio: 'phi'), 199.0050402191em, 'when using a named ratio', true); + @include true.assert-equal(step(13, $ratio: 'week', $settings:('ratios': ('week': 3.428571))), 9046298.548112236em, 'when using a custom named ratio', true); @include true.assert-equal(step(5, $base: 1em 1.2em), 2.7em, 'when using two bases', true); @include true.assert-equal(step(7, $base: 1em 1.2em 1.6em), 2.4em, 'when using three bases', true); @include true.assert-equal(step(5, $thread: test, diff --git a/test-results/tests.css b/test-results/tests.css index 3f1e3bae..b74e61a9 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -26,6 +26,7 @@ /* Test: It returns the size based at the provided step */ /* ✔ [assert-equal] when positive */ /* ✔ [assert-equal] when using a named ratio */ +/* ✔ [assert-equal] when using a custom named ratio */ /* ✔ [assert-equal] when using two bases */ /* ✔ [assert-equal] when using three bases */ /* ✔ [assert-equal] when using multiple scales */ @@ -82,11 +83,11 @@ /* */ /* */ /* # SUMMARY ---------- */ -/* 6 Tests: */ -/* - 6 Passed */ +/* 7 Tests: */ +/* - 7 Passed */ /* - 0 Failed */ /* Stats: */ -/* - 6 Modules */ -/* - 6 Tests */ -/* - 42 Assertions */ +/* - 7 Modules */ +/* - 7 Tests */ +/* - 48 Assertions */ /* -------------------- */ From 6253f527e7a52e8df197293116bfd15b54eb52c5 Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 16:22:23 -0300 Subject: [PATCH 60/63] Fix settings inheritance --- ...gs.scss => _normalize-base-and-ratio.scss} | 2 +- stylesheets/modularscale/_step.scss | 24 ++++++-------- stylesheets/tests.scss | 2 +- .../tests/_normalize-base-and-ratio.scss | 18 +++++++++++ stylesheets/tests/_normalize-settings.scss | 18 ----------- stylesheets/tests/_step.scss | 27 ++++++++-------- test-results/tests.css | 32 +++++++++---------- 7 files changed, 60 insertions(+), 63 deletions(-) rename stylesheets/modularscale/{_normalize-settings.scss => _normalize-base-and-ratio.scss} (91%) create mode 100644 stylesheets/tests/_normalize-base-and-ratio.scss delete mode 100644 stylesheets/tests/_normalize-settings.scss diff --git a/stylesheets/modularscale/_normalize-settings.scss b/stylesheets/modularscale/_normalize-base-and-ratio.scss similarity index 91% rename from stylesheets/modularscale/_normalize-settings.scss rename to stylesheets/modularscale/_normalize-base-and-ratio.scss index ef9b6032..51a2580f 100644 --- a/stylesheets/modularscale/_normalize-settings.scss +++ b/stylesheets/modularscale/_normalize-base-and-ratio.scss @@ -2,7 +2,7 @@ // Settings should cascade down like you would expect in CSS. // More specific overrides previous settings. -@function normalize-settings($b: null, $r: null, $t: null, $m: ()) { +@function normalize-base-and-ratio($b: null, $r: null, $t: null, $m: ()) { $base: 1em; $ratio: 1.5; $respond: 'media'; diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss index f0f495ad..0d723202 100644 --- a/stylesheets/modularscale/_step.scss +++ b/stylesheets/modularscale/_step.scss @@ -3,17 +3,16 @@ @use 'sass:math'; @use 'sass:meta'; -@use 'constants' as *; -@use 'normalize-settings' as *; +@use 'constants'; +@use 'normalize-base-and-ratio' as *; @use 'sort' as *; @use 'ratio-by-target' as *; @use 'step-by-target' as *; -$_settings: () !default; -$_ratios: () !default; +$_settings: ( ) !default; +$_ratios: constants.$ratios; -$_ratios: map.merge(constants.$ratios, $_ratios); @function step( $v: 0, @@ -21,30 +20,27 @@ $_ratios: map.merge(constants.$ratios, $_ratios); $base: null, $ratio: null, $thread: null, - $settings: $_settings + $settings: (), ) { // Parse settings @if ($respond) { $thread: $respond; } - @if map.has-key($settings, 'ratios') { - @if meta.type-of(map.get($settings, 'ratios')) == 'map' { - $_ratios: map.merge($_ratios, map.get($settings, 'ratios')) !global; - } @else { - @error 'ratios of invalid type submited whitin $settings: #{meta.type-of(map.get($settings, 'ratios'))}'; - } - } + $settings: map.deep-merge($_settings, $settings); @if meta.type-of($ratio) == 'string' { @if map.has-key($_ratios, $ratio) { $ratio: map.get($_ratios, $ratio); + } @else if map.has-key($settings, 'ratios', $ratio) { + $ratio: map.get($settings, 'ratios', $ratio); } @else { @error '#{$ratio} isn\'t a valid ratio'; } } - $settings: normalize-settings($base, $ratio, $thread, $settings); + $settings: normalize-base-and-ratio($base, $ratio, $thread, $settings); + $base: list.nth($settings, 1); $ratio: list.nth($settings, 2); $base-length: list.length($base); diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 58e97428..94d584db 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,6 +1,6 @@ @use '../node_modules/sass-true' as true; -@use 'tests/normalize-settings'; +@use 'tests/normalize-base-and-ratio'; @use 'tests/sort'; @use 'tests/step'; @use 'tests/strip-unit'; diff --git a/stylesheets/tests/_normalize-base-and-ratio.scss b/stylesheets/tests/_normalize-base-and-ratio.scss new file mode 100644 index 00000000..b4ebdc78 --- /dev/null +++ b/stylesheets/tests/_normalize-base-and-ratio.scss @@ -0,0 +1,18 @@ +@use '../../node_modules/sass-true' as true; + +@use '../modularscale/normalize-base-and-ratio' as *; + +@include true.describe('settings [function]') { + @include true.it('It normalizes base and ratio starting with defaults') { + @include true.assert-equal(normalize-base-and-ratio(16px), 16px 1.5); + @include true.assert-equal(normalize-base-and-ratio(1rem, 1.125), 1rem 1.125); + @include true.assert-equal(normalize-base-and-ratio((1em 1.2em 1.6em), 1.618), (1em 1.2em 1.6em) 1.618); + @include true.assert-equal(normalize-base-and-ratio($b: 1em 1.2em 1.6em, $r: 1.5), (1em 1.2em 1.6em) 1.5); + @include true.assert-equal(normalize-base-and-ratio($b: 1em, $r: 1.5, $t: 'a', $m: (a: (ratio: 1.3))), 1em 1.5); + @include true.assert-equal(normalize-base-and-ratio($b: 1em, $r: 1.5, $m: (a: (base: 1rem, ratio: 1.3))), 1em 1.5); + @include true.assert-equal(normalize-base-and-ratio($t: 'a', $m: (a: (ratio: 1.3))), 1em 1.3); + @include true.assert-equal(normalize-base-and-ratio($b: 1em, $m: (ratio: 1.3)), 1em 1.3); + @include true.assert-equal(normalize-base-and-ratio($r: 1.5, $m: (base: 62.5%)), 62.5% 1.5); + @include true.assert-equal(normalize-base-and-ratio($b: 1em, $r: 1.5), 1em 1.5); + } +} diff --git a/stylesheets/tests/_normalize-settings.scss b/stylesheets/tests/_normalize-settings.scss deleted file mode 100644 index 48658617..00000000 --- a/stylesheets/tests/_normalize-settings.scss +++ /dev/null @@ -1,18 +0,0 @@ -@use '../../node_modules/sass-true' as true; - -@use '../modularscale/normalize-settings' as *; - -@include true.describe('settings [function]') { - @include true.it('It parses settings starting with defaults') { - @include true.assert-equal(normalize-settings(16px), 16px 1.5); - @include true.assert-equal(normalize-settings(1rem, 1.125), 1rem 1.125); - @include true.assert-equal(normalize-settings((1em 1.2em 1.6em), 1.618), (1em 1.2em 1.6em) 1.618); - @include true.assert-equal(normalize-settings($b: 1em 1.2em 1.6em, $r: 1.5), (1em 1.2em 1.6em) 1.5); - @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5, $t: 'a', $m: (a: (ratio: 1.3))), 1em 1.5); - @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5, $m: (a: (base: 1rem, ratio: 1.3))), 1em 1.5); - @include true.assert-equal(normalize-settings($t: 'a', $m: (a: (ratio: 1.3))), 1em 1.3); - @include true.assert-equal(normalize-settings($b: 1em, $m: (ratio: 1.3)), 1em 1.3); - @include true.assert-equal(normalize-settings($r: 1.5, $m: (base: 62.5%)), 62.5% 1.5); - @include true.assert-equal(normalize-settings($b: 1em, $r: 1.5), 1em 1.5); - } -} diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index bdca2b9f..8e682f02 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -2,25 +2,26 @@ @use '../../node_modules/sass-true' as true; -@use '../modularscale/step' as *; +@use '../modularscale/step' as * with ($_settings: (base: 1.125em, ratio: 1.25)); + @include true.describe('step [function]') { @include true.it('It returns the size based at the provided step') { - @include true.assert-equal(step(3), 3.375em, 'when positive', true); - @include true.assert-equal(step(11, $ratio: 'phi'), 199.0050402191em, 'when using a named ratio', true); - @include true.assert-equal(step(13, $ratio: 'week', $settings:('ratios': ('week': 3.428571))), 9046298.548112236em, 'when using a custom named ratio', true); - @include true.assert-equal(step(5, $base: 1em 1.2em), 2.7em, 'when using two bases', true); - @include true.assert-equal(step(7, $base: 1em 1.2em 1.6em), 2.4em, 'when using three bases', true); + @include true.assert-equal(step(3), 2.197265625em, 'when positive', true); + @include true.assert-equal(step(11, $ratio: 'phi'), 223.8806702465em, 'when using a named ratio', true); + @include true.assert-equal(step(13, $ratio: 'week', $settings:(ratios: (week: 3.428571))), 10177085.866626266em, 'when using a custom named ratio', true); + @include true.assert-equal(step(5, $base: 1em 1.2em, $ratio: 1.5), 2.7em, 'when using two bases', true); + @include true.assert-equal(step(7, $base: 1em 1.2em 1.6em, $ratio: 1.5), 2.4em, 'when using three bases', true); @include true.assert-equal(step(5, $thread: test, $settings: (base: 1em, ratio: 1.5, test: (ratio: 1.618 )) ), 11.0890051809em, 'when using multiple scales', true); - @include true.assert-equal(step(-5), 0.1316872428em, 'when negative', true); - @include true.assert-equal(step(7.5), 20.925914326em, 'when float', true); - @include true.assert-equal(step(5em), 5.0625em, 'when reversed and approximated to 5.0625em, being 5em', true); - @include true.assert-equal(step(56px), 3.375em, 'when reversed and approximated to 54px, being 56px', true); - @include true.assert-equal(step(180px), 11.390625em, 'when reversed and approximated to 182.25px, being 180px', true); - @include true.assert-equal(step(170px, null, 62.5%), 1067.87109375%, 'when reversed and approximated to 170.86px, being 170px and using a percentage base', true); - @include true.assert-equal(step(50px, null, 60%), 303.75%, 'when reversed and approximated to 50.63px, being 50px and using a unusual percentage base', true); + @include true.assert-equal(step(-5), 0.36864em, 'when negative', true); + @include true.assert-equal(step(7.5), 5.9976016872em, 'when float', true); + @include true.assert-equal(step(5em), 5.3644180298em, 'when reversed and approximated to 5.3644180298em, being 5em', true); + @include true.assert-equal(step(56px), 3.4332275391em, 'when reversed and approximated to 54.932px, being 56px', true); + @include true.assert-equal(step(180px), 10.4773789644em, 'when reversed and approximated to 167.638px, being 180px', true); + @include true.assert-equal(step(170px, null, 62.5%), 1136.8683772162%, 'when reversed and approximated to 181.899px, being 170px and using a percentage base', true); + @include true.assert-equal(step(50px, null, 60%), 286.1022949219%, 'when reversed and approximated to 45.776px, being 50px and using a unusual percentage base', true); @include true.assert-equal(step(40px, null, 16px, 1.125), 41.0525522232px, 'when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels', true); @include true.assert-equal(step(30px, null, 1rem, 1.125), 1.8020324707rem, 'when reversed, approximated and greater than 28.833px, being 30px', true); @include true.assert-equal(step(17px, null, 1rem, 1.125), 1.125rem, 'when reversed, and half way to 16px and 18px, being 17px', true); diff --git a/test-results/tests.css b/test-results/tests.css index b74e61a9..47f29f53 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -1,17 +1,17 @@ @charset "UTF-8"; /* # Module: settings [function] */ /* ----------------------------- */ -/* Test: It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ -/* ✔ [assert-equal] It parses settings starting with defaults */ +/* Test: It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ +/* ✔ [assert-equal] It normalizes base and ratio starting with defaults */ /* */ /* */ /* # Module: sort [function] */ @@ -32,11 +32,11 @@ /* ✔ [assert-equal] when using multiple scales */ /* ✔ [assert-equal] when negative */ /* ✔ [assert-equal] when float */ -/* ✔ [assert-equal] when reversed and approximated to 5.0625em, being 5em */ -/* ✔ [assert-equal] when reversed and approximated to 54px, being 56px */ -/* ✔ [assert-equal] when reversed and approximated to 182.25px, being 180px */ -/* ✔ [assert-equal] when reversed and approximated to 170.86px, being 170px and using a percentage base */ -/* ✔ [assert-equal] when reversed and approximated to 50.63px, being 50px and using a unusual percentage base */ +/* ✔ [assert-equal] when reversed and approximated to 5.3644180298em, being 5em */ +/* ✔ [assert-equal] when reversed and approximated to 54.932px, being 56px */ +/* ✔ [assert-equal] when reversed and approximated to 167.638px, being 180px */ +/* ✔ [assert-equal] when reversed and approximated to 181.899px, being 170px and using a percentage base */ +/* ✔ [assert-equal] when reversed and approximated to 45.776px, being 50px and using a unusual percentage base */ /* ✔ [assert-equal] when reversed, approximated and lesser than 41.053px, being 40px, and using a base set on pixels */ /* ✔ [assert-equal] when reversed, approximated and greater than 28.833px, being 30px */ /* ✔ [assert-equal] when reversed, and half way to 16px and 18px, being 17px */ From a8a5c55f5b5a777b3e261242fc0f5aeb8024e6fe Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 22:34:49 -0300 Subject: [PATCH 61/63] Combine API into one file to make easier to handle settings --- stylesheets/modularscale/_api.scss | 193 +++++++++++++++++++++++++ stylesheets/modularscale/_index.scss | 9 +- stylesheets/modularscale/_respond.scss | 82 ----------- stylesheets/modularscale/_step.scss | 92 ------------ stylesheets/tests/_step.scss | 2 +- 5 files changed, 195 insertions(+), 183 deletions(-) create mode 100644 stylesheets/modularscale/_api.scss delete mode 100644 stylesheets/modularscale/_respond.scss delete mode 100644 stylesheets/modularscale/_step.scss diff --git a/stylesheets/modularscale/_api.scss b/stylesheets/modularscale/_api.scss new file mode 100644 index 00000000..0a3450a1 --- /dev/null +++ b/stylesheets/modularscale/_api.scss @@ -0,0 +1,193 @@ +@use 'sass:list'; +@use 'sass:map'; +@use 'sass:math'; +@use 'sass:meta'; + +@use 'constants'; +@use 'normalize-base-and-ratio' as *; +@use 'ratio-by-target' as *; +@use 'sort' as *; +@use 'step-by-target' as *; +@use 'strip-unit' as *; + +$_settings: ( ) !default; + +$_ratios: constants.$ratios; + +@mixin configure($settings: ()) { + @if meta.type-of($settings) != 'map' { + @error 'Invalid type of settings provided: #{meta.type-of($settings)}'; + } + + // we need to preserve base + @if meta.type-of(map.get($settings, 'base') != 'number') { + $base: map.get($_settings, 'base'); + $settings: map.merge($settings, (base: $base)); + } + // we need to preserve ratio + @if meta.type-of(map.get($settings, 'ratio') != 'number') { + $ratio: map.get($_settings, 'ratio'); + $settings: map.merge($settings, (ratio: $ratio)); + } + + @if map.has-key($settings, 'ratios') { + $ratios: map.get('ratios'); + + @if meta.type-of($ratios) == 'map' { + $_ratios: map.deep-merge($_ratios, $ratios) !global; + } + + $settings: map.remove($settings, 'ratios'); + } + + $_settings: $settings !global; +} + +@function step( + $v: 0, + $respond: null, + $base: null, + $ratio: null, + $thread: null, + $settings: (), +) { + // Parse settings + @if ($respond) { + $thread: $respond; + } + + $settings: map.deep-merge($_settings, $settings); + + @if meta.type-of($ratio) == 'string' { + @if map.has-key($_ratios, $ratio) { + $ratio: map.get($_ratios, $ratio); + } @else if map.has-key($settings, 'ratios', $ratio) { + $ratio: map.get($settings, 'ratios', $ratio); + } @else { + @error '#{$ratio} isn\'t a valid ratio'; + } + } + + $settings: normalize-base-and-ratio($base, $ratio, $thread, $settings); + + $base: list.nth($settings, 1); + $ratio: list.nth($settings, 2); + $base-length: list.length($base); + $bases: (); + + // Render target values from settings. + @if type-of($ratio) == 'string' or type-of($ratio) == 'list' { + $ratio: radio-target($ratio, $base); + } + + // Fast calc if not multi stranded + @if ($base-length == 1) { + // if the step provided is actually a target and has the same unit as the base, + // we can figured the closest integer step on the current scale to be used. + // It's for the cases when the designer provided all values as pixels and + // not respecting the modular scale to the "number", but getting close. + // Designers don't like float numbers. + @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { + $v: step-by-target($v, $base, $ratio); + } + + @return math.pow($ratio, $v) * $base; + } @else { + $bases: list.nth($base, 1); + + @for $i from 2 through $base-length { + $new-base: list.nth($base, $i); + + @while ($new-base > ($ratio * list.nth($base, 1))) { + $new-base: math.div($new-base, $ratio); + } + + @while ($new-base < list.nth($base, 1)) { + $new-base: ($new-base * $ratio); + } + $bases: list.append($bases, $new-base); + } + + $bases: sort($bases); + } + + // Find step to use in calculation + $step: math.floor(math.div($v, $base-length)); + + // Find base to use in calculation + $base: math.round((math.div($v, $base-length) - $step) * $base-length) + 1; + + @return math.pow($ratio, $step) * list.nth($bases, $base); +} + +@mixin respond-to($mode: map-get($_settings, 'respond')) { + // Setup + $id: #{unique-id()}; + $max: 0; + $queries: 0; + $c: 0; + $query: $mode; + // Default query type + @if ($query == null) { + $query: 'typetura'; + } + // Find maximum value + @each $bp in $_settings { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { + $max: list.nth($bp, 1); + $queries: $queries + 1; + } + } + + // Write fallback styles to broader context + @content ($_settings); + + // Typetura styles + @if ($query == 'typetura') { + --tt-key: #{$id}; + --tt-max: #{strip-unit($max)}; + @keyframes #{$id} { + @each $bp in $_settings { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { + $key: list.nth($bp, 1); + $keyframe: percentage(math.div($key, $max)); + #{$keyframe} { + @content (list.nth($bp, 1)); + } + $c: $c + 1; + } + } + } + } @else if ($query == 'container') { + $query: $query + ' modularscale'; + // Loop through breakpoints + @each $bp in $_settings { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { + @#{$query} (min-width: #{list.nth($bp, 1)}) { + $bp: list.nth($bp, 1); + @content ($bp); + } + } + } + } @else { + // Loop through breakpoints + @each $bp in $_settings { + @if (meta.type-of(list.nth($bp, 1)) == 'number') { + @#{$query} (min-width: #{list.nth($bp, 1)}) { + $bp: list.nth($bp, 1); + @content ($bp); + } + } + } + } +} + +@mixin container($selector: '.modularscale') { + @at-root { + #{$selector} { + container-name: modularscale; + container-type: inline-size; + } + $container-write: true; + } +} diff --git a/stylesheets/modularscale/_index.scss b/stylesheets/modularscale/_index.scss index 4f717538..d3720695 100644 --- a/stylesheets/modularscale/_index.scss +++ b/stylesheets/modularscale/_index.scss @@ -5,11 +5,4 @@ $settings: ( $respond: media ) !default; -// Defaults and variables -@forward 'constants'; - -// Core functions -@forward 'step' with ($_settings: $settings); - -// Mixins -@forward 'respond' with ($_settings: $settings); +@forward 'api' with ($_settings: $settings); diff --git a/stylesheets/modularscale/_respond.scss b/stylesheets/modularscale/_respond.scss deleted file mode 100644 index d9eff158..00000000 --- a/stylesheets/modularscale/_respond.scss +++ /dev/null @@ -1,82 +0,0 @@ -@use 'sass:list'; -@use 'sass:math'; -@use 'sass:meta'; - -@use 'strip-unit' as *; - -$_settings: () !default; - -@mixin step($mode: map-get($_settings, 'respond')) { - // Setup - $id: #{unique-id()}; - $max: 0; - $queries: 0; - $c: 0; - $query: $mode; - // Default query type - @if ($query == null) { - $query: 'typetura'; - } - // Find maximum value - @each $bp in $_settings { - @if (meta.type-of(list.nth($bp, 1)) == 'number') { - $max: list.nth($bp, 1); - $queries: $queries + 1; - } - } - - // Write fallback styles to broader context - @content ($_settings); - - // Typetura styles - @if ($query == 'typetura') { - --tt-key: #{$id}; - --tt-max: #{strip-unit($max)}; - @keyframes #{$id} { - @each $bp in $_settings { - @if (meta.type-of(list.nth($bp, 1)) == 'number') { - - $key: list.nth($bp, 1); - $keyframe: percentage(math.div($key, $max)); - #{$keyframe} { - @content (list.nth($bp, 1)); - } - $c: $c + 1; - } - } - } - } @else if ($query == 'container') { - $query: $query + ' modularscale'; - // Loop through breakpoints - @each $bp in $_settings { - @if (meta.type-of(list.nth($bp, 1)) == 'number') { - @#{$query} (min-width: #{list.nth($bp, 1)}) { - $bp: list.nth($bp, 1); - @content ($bp); - } - } - } - } @else { - - // Loop through breakpoints - @each $bp in $_settings { - @if (meta.type-of(list.nth($bp, 1)) == 'number') { - @#{$query} (min-width: #{list.nth($bp, 1)}) { - $bp: list.nth($bp, 1); - @content ($bp); - } - } - } - - } -} - -@mixin container($selector: '.modularscale') { - @at-root { - #{$selector} { - container-name: modularscale; - container-type: inline-size; - } - $container-write: true; - } -} diff --git a/stylesheets/modularscale/_step.scss b/stylesheets/modularscale/_step.scss deleted file mode 100644 index 0d723202..00000000 --- a/stylesheets/modularscale/_step.scss +++ /dev/null @@ -1,92 +0,0 @@ -@use 'sass:list'; -@use 'sass:map'; -@use 'sass:math'; -@use 'sass:meta'; - -@use 'constants'; -@use 'normalize-base-and-ratio' as *; -@use 'sort' as *; -@use 'ratio-by-target' as *; -@use 'step-by-target' as *; - -$_settings: ( ) !default; - -$_ratios: constants.$ratios; - - -@function step( - $v: 0, - $respond: null, - $base: null, - $ratio: null, - $thread: null, - $settings: (), -) { - // Parse settings - @if ($respond) { - $thread: $respond; - } - - $settings: map.deep-merge($_settings, $settings); - - @if meta.type-of($ratio) == 'string' { - @if map.has-key($_ratios, $ratio) { - $ratio: map.get($_ratios, $ratio); - } @else if map.has-key($settings, 'ratios', $ratio) { - $ratio: map.get($settings, 'ratios', $ratio); - } @else { - @error '#{$ratio} isn\'t a valid ratio'; - } - } - - $settings: normalize-base-and-ratio($base, $ratio, $thread, $settings); - - $base: list.nth($settings, 1); - $ratio: list.nth($settings, 2); - $base-length: list.length($base); - $bases: (); - - // Render target values from settings. - @if type-of($ratio) == 'string' or type-of($ratio) == 'list' { - $ratio: radio-target($ratio, $base); - } - - // Fast calc if not multi stranded - @if ($base-length == 1) { - // if the step provided is actually a target and has the same unit as the base, - // we can figured the closest integer step on the current scale to be used. - // It's for the cases when the designer provided all values as pixels and - // not respecting the modular scale to the "number", but getting close. - // Designers don't like float numbers. - @if (math.unit($v) == math.unit($base) or math.unit($v) == 'px') { - $v: step-by-target($v, $base, $ratio); - } - - @return math.pow($ratio, $v) * $base; - } @else { - $bases: list.nth($base, 1); - - @for $i from 2 through $base-length { - $new-base: list.nth($base, $i); - - @while ($new-base > ($ratio * list.nth($base, 1))) { - $new-base: math.div($new-base, $ratio); - } - - @while ($new-base < list.nth($base, 1)) { - $new-base: ($new-base * $ratio); - } - $bases: list.append($bases, $new-base); - } - - $bases: sort($bases); - } - - // Find step to use in calculation - $step: math.floor(math.div($v, $base-length)); - - // Find base to use in calculation - $base: math.round((math.div($v, $base-length) - $step) * $base-length) + 1; - - @return math.pow($ratio, $step) * list.nth($bases, $base); -} diff --git a/stylesheets/tests/_step.scss b/stylesheets/tests/_step.scss index 8e682f02..e7e97d17 100644 --- a/stylesheets/tests/_step.scss +++ b/stylesheets/tests/_step.scss @@ -2,7 +2,7 @@ @use '../../node_modules/sass-true' as true; -@use '../modularscale/step' as * with ($_settings: (base: 1.125em, ratio: 1.25)); +@use '../modularscale/api' as * with ($_settings: (base: 1.125em, ratio: 1.25)); @include true.describe('step [function]') { From e1eb838e6baf0790b441c298dad604341a1af9b5 Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 23:21:02 -0300 Subject: [PATCH 62/63] Fix settings overriding --- stylesheets/modularscale/_api.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stylesheets/modularscale/_api.scss b/stylesheets/modularscale/_api.scss index 0a3450a1..ce654eac 100644 --- a/stylesheets/modularscale/_api.scss +++ b/stylesheets/modularscale/_api.scss @@ -20,12 +20,12 @@ $_ratios: constants.$ratios; } // we need to preserve base - @if meta.type-of(map.get($settings, 'base') != 'number') { + @if meta.type-of(map.get($settings, 'base')) != 'number' { $base: map.get($_settings, 'base'); $settings: map.merge($settings, (base: $base)); } // we need to preserve ratio - @if meta.type-of(map.get($settings, 'ratio') != 'number') { + @if meta.type-of(map.get($settings, 'ratio')) != 'number' { $ratio: map.get($_settings, 'ratio'); $settings: map.merge($settings, (ratio: $ratio)); } From d6e588c5c52c40336e47b239d4e3d180715e5b5f Mon Sep 17 00:00:00 2001 From: sobral Date: Sun, 3 Oct 2021 23:24:27 -0300 Subject: [PATCH 63/63] Testing responsive mixins --- .stylelintrc.js | 3 +- readme.md | 2 +- stylesheets/modularscale/_index.scss | 2 +- stylesheets/tests.scss | 4 + stylesheets/tests/_respond.scss | 223 +++++++++++++++++++++++++++ test-results/tests.css | 138 ++++++++++++++++- 6 files changed, 365 insertions(+), 7 deletions(-) create mode 100644 stylesheets/tests/_respond.scss diff --git a/.stylelintrc.js b/.stylelintrc.js index d449a1cf..4a970305 100644 --- a/.stylelintrc.js +++ b/.stylelintrc.js @@ -59,7 +59,8 @@ module.exports = { "length-zero-no-unit": true, "max-empty-lines": 2, "max-line-length": null, - "max-nesting-depth": 3, + // increasing max nesting because Sass-True already needs3 + "max-nesting-depth": 4, "media-feature-name-no-vendor-prefix": true, "media-feature-parentheses-space-inside": "never", "media-feature-range-operator-space-after": "always", diff --git a/readme.md b/readme.md index cba3827a..08dfdf55 100644 --- a/readme.md +++ b/readme.md @@ -81,7 +81,7 @@ You will likely want to change your typographic settings as browser or element s ms.$settings: ( base: 1rem, ratio: 1.5, - respond: typetura, + respond: 'typetura', // typetura, media, or container 400px: ( // base is inheritied diff --git a/stylesheets/modularscale/_index.scss b/stylesheets/modularscale/_index.scss index d3720695..7fad94f9 100644 --- a/stylesheets/modularscale/_index.scss +++ b/stylesheets/modularscale/_index.scss @@ -2,7 +2,7 @@ $settings: ( $base: 1em, $ratio: 1.5, $settings: (), - $respond: media + $respond: 'typetura' ) !default; @forward 'api' with ($_settings: $settings); diff --git a/stylesheets/tests.scss b/stylesheets/tests.scss index 94d584db..2e03e046 100644 --- a/stylesheets/tests.scss +++ b/stylesheets/tests.scss @@ -1,5 +1,6 @@ @use '../node_modules/sass-true' as true; +// functions @use 'tests/normalize-base-and-ratio'; @use 'tests/sort'; @use 'tests/step'; @@ -8,4 +9,7 @@ @use 'tests/step-by-target'; @use 'tests/to-num'; +// mixins +@use 'tests/respond'; + @include true.report; diff --git a/stylesheets/tests/_respond.scss b/stylesheets/tests/_respond.scss new file mode 100644 index 00000000..69b1907f --- /dev/null +++ b/stylesheets/tests/_respond.scss @@ -0,0 +1,223 @@ +@use '../../node_modules/sass-true' as true; + +// as step() is already loaded for other tests, their settings are defined and we need to override them +@use '../modularscale/api' as *; + +@include true.describe('Responsive modular scales') { + @include true.test('declaring Typetura') { + @include true.assert { + $_test-settings: ( + base: 12px, + ratio: 1.2, + respond: 'typetura', + 400px: ( + base: 12px 14px, + ratio: 1.2, + ), + s: ( + base: 12px, + ratio: 1.2, + ), + 1000px: ( + base: 20px, + ratio: 1.6, + ), + l: ( + base: 20px, + ratio: 1.6, + ) + ); + + @include true.output(false) { + @include configure($_test-settings); + + .typetura { + @include respond-to using ($respond) { + font-size: step(2, $respond); + } + } + } + + @include true.expect(false) { + .typetura { + font-size: 17.28px; + --tt-key: uaxt0j4; + --tt-max: 1000; + } + + @keyframes uaxt0j4 { + 40% { + font-size: 14.4px; + } + + 100% { + font-size: 51.2px; + } + } + } + } + } + + @include true.test('not declaring mode') { + @include true.assert { + $_test-settings: ( + base: 12px, + ratio: 1.2, + 30rem: ( + base: 12px 14px, + ratio: 1.2, + ), + s: ( + base: 12px, + ratio: 1.2, + ), + 60rem: ( + base: 20px, + ratio: 1.6, + ), + l: ( + base: 20px, + ratio: 1.6, + ) + ); + + @include true.output(false) { + @include configure($_test-settings); + + // stylelint-disable-next-line order/order + @include container('.ms-container'); + + .container { + @include respond-to(container) using ($respond) { + font-size: step(2, $respond); + margin-bottom: step(3); + padding: step(2, $respond) step(2); + } + } + + .foo { + @include respond-to(container) using ($respond) { + font-size: step(2, $respond); + padding: step(2, $respond) step(2); + } + } + } + + @include true.expect(false) { + .ms-container { + container-name: modularscale; + container-type: inline-size; + } + + .container { + font-size: 17.28px; + margin-bottom: 20.736px; + padding: 17.28px; + } + + @container modularscale (min-width: 30rem) { + .container { + font-size: 14.4px; + padding: 14.4px 17.28px; + } + } + + @container modularscale (min-width: 60rem) { + .container { + font-size: 51.2px; + padding: 51.2px 17.28px; + } + } + + .foo { + font-size: 17.28px; + padding: 17.28px; + } + + @container modularscale (min-width: 30rem) { + .foo { + font-size: 14.4px; + padding: 14.4px 17.28px; + } + } + + @container modularscale (min-width: 60rem) { + .foo { + font-size: 51.2px; + padding: 51.2px 17.28px; + } + } + } + } + } + + // @include true.test('using container query') { + // @include true.assert { + // @include true.output { + // .element { + // @include container; + + // @include respond-to ('container') using ($respond) { + // font-size: step(2, $respond); + // margin-bottom: step(3); + // padding: step(2, $respond) step(2); + // } + // } + // } + + // @include true.expect(false) { + // .element { + // font-size: 2.25em; + // margin-bottom: 3.375em; + // padding: 2.25em; + // } + // } + // } + // } + + // @include true.test('using custom container query') { + // @include true.assert { + // @include true.output { + // .element { + // @include container('.ms-container'); + + // @include respond-to ('container') using ($respond) { + // font-size: step(2, $respond); + // margin-bottom: step(3); + // padding: step(2, $respond) step(2); + // } + // } + // } + + // @include true.expect(false) { + // .element { + // font-size: 2.25em; + // margin-bottom: 3.375em; + // padding: 2.25em; + // } + // } + // } + // } + + // @include true.test('using media query') { + // @include true.assert { + // @include true.output { + // .element { + // @include respond-to ('media') using ($respond) { + // font-size: step(2, $respond); + // margin-bottom: step(3); + // padding: step(2, $respond) step(2); + // } + // } + // } + + // @include true.expect(false) { + // .element { + // font-size: 2.25em; + // margin-bottom: 3.375em; + // padding: 2.25em; + // } + // } + // } + // } +} diff --git a/test-results/tests.css b/test-results/tests.css index 47f29f53..6096990d 100644 --- a/test-results/tests.css +++ b/test-results/tests.css @@ -82,12 +82,142 @@ /* ✔ [assert-equal] when positive */ /* */ /* */ +/* # Module: Responsive modular scales */ +/* ----------------------------------- */ +/* Test: declaring Typetura */ +/* ASSERT: */ +/* OUTPUT */ +.typetura { + font-size: 17.28px; + --tt-key: uus44wb; + --tt-max: 1000; +} +@keyframes uus44wb { + 40% { + font-size: 14.4px; + } + 100% { + font-size: 51.2px; + } +} + +/* END_OUTPUT */ +/* EXPECTED */ +.typetura { + font-size: 17.28px; + --tt-key: uaxt0j4; + --tt-max: 1000; +} + +@keyframes uaxt0j4 { + 40% { + font-size: 14.4px; + } + 100% { + font-size: 51.2px; + } +} +/* END_EXPECTED */ +/* END_ASSERT */ +/* */ +/* Test: not declaring mode */ +/* ASSERT: */ +/* OUTPUT */ +.ms-container { + container-name: modularscale; + container-type: inline-size; +} + +.container { + font-size: 17.28px; + margin-bottom: 20.736px; + padding: 17.28px 17.28px; +} +@container modularscale (min-width: 30rem) { + .container { + font-size: 14.4px; + margin-bottom: 20.736px; + padding: 14.4px 17.28px; + } +} +@container modularscale (min-width: 60rem) { + .container { + font-size: 51.2px; + margin-bottom: 20.736px; + padding: 51.2px 17.28px; + } +} + +.foo { + font-size: 17.28px; + padding: 17.28px 17.28px; +} +@container modularscale (min-width: 30rem) { + .foo { + font-size: 14.4px; + padding: 14.4px 17.28px; + } +} +@container modularscale (min-width: 60rem) { + .foo { + font-size: 51.2px; + padding: 51.2px 17.28px; + } +} + +/* END_OUTPUT */ +/* EXPECTED */ +.ms-container { + container-name: modularscale; + container-type: inline-size; +} + +.container { + font-size: 17.28px; + margin-bottom: 20.736px; + padding: 17.28px; +} + +@container modularscale (min-width: 30rem) { + .container { + font-size: 14.4px; + padding: 14.4px 17.28px; + } +} +@container modularscale (min-width: 60rem) { + .container { + font-size: 51.2px; + padding: 51.2px 17.28px; + } +} +.foo { + font-size: 17.28px; + padding: 17.28px; +} + +@container modularscale (min-width: 30rem) { + .foo { + font-size: 14.4px; + padding: 14.4px 17.28px; + } +} +@container modularscale (min-width: 60rem) { + .foo { + font-size: 51.2px; + padding: 51.2px 17.28px; + } +} +/* END_EXPECTED */ +/* END_ASSERT */ +/* */ +/* */ /* # SUMMARY ---------- */ -/* 7 Tests: */ +/* 9 Tests: */ /* - 7 Passed */ /* - 0 Failed */ +/* - 2 Output to CSS */ /* Stats: */ -/* - 7 Modules */ -/* - 7 Tests */ -/* - 48 Assertions */ +/* - 8 Modules */ +/* - 9 Tests */ +/* - 50 Assertions */ /* -------------------- */