├── .editorconfig ├── .github └── logo.svg ├── .gitignore ├── LICENSE ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── src ├── abstracts │ ├── _config.scss │ ├── _core-functions.scss │ ├── _helper-mixins.scss │ ├── _mixins.scss │ ├── _utils.scss │ ├── _variables.scss │ ├── config │ │ ├── _border.scss │ │ ├── _breakpoint.scss │ │ ├── _button.scss │ │ ├── _color.scss │ │ ├── _container.scss │ │ ├── _font.scss │ │ ├── _heading.scss │ │ └── _spacing.scss │ ├── functions │ │ ├── _convert-unit.scss │ │ ├── _get.scss │ │ ├── _grid-calc.scss │ │ └── helpers │ │ │ ├── _str-replace.scss │ │ │ ├── _strip-unit.scss │ │ │ └── _yiq.scss │ └── mixins │ │ ├── _border-radius.scss │ │ ├── _color.scss │ │ ├── _font-face.scss │ │ ├── _grid-generator.scss │ │ ├── _media-queries.scss │ │ ├── _pseudo-states.scss │ │ ├── _spacing.scss │ │ └── helpers │ │ ├── _button-sizes.scss │ │ ├── _focus.scss │ │ └── _input-sizes.scss ├── base │ ├── _@reset.scss │ ├── _animations.scss │ ├── _container.scss │ ├── _grid.scss │ ├── _helpers.scss │ ├── _print.scss │ └── _typography.scss ├── components │ ├── .gitkeep │ ├── _action.scss │ ├── _button.scss │ └── _input.scss └── differs.scss └── stylelint.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.github/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS specific 2 | ._* 3 | .DS_Store 4 | Thumbs.db 5 | 6 | # IDE/Code Editor 7 | .idea 8 | 9 | # Directories 10 | node_modules 11 | dist 12 | playground 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nenad Novaković, dvlden. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Differs 4 | 5 |

6 | 7 |

8 | This project is currently a work in progress...
9 | Any kind of help is appreciated! Also, if you could, please :star: this project 10 | if you want to support me and increase my motivation, thank you! 11 |

12 | 13 | > Made with :heart: by Nenad Novaković - dvlden. 14 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Differs 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 |
20 |

21 | Hello World 22 |

23 | 24 |
25 |
26 | 27 | 28 |
29 |
30 | 31 |
32 | 33 |
34 | 35 |
36 | 37 |
38 | 39 |
40 |
41 | 42 | 45 |
46 | 47 |
48 | 49 | 52 |
53 | 54 |
55 | 56 | 59 |
60 |
61 | 62 |
63 |
64 |
65 | 66 | 67 |
68 | 69 |
70 | 71 | 72 |
73 |
74 |
75 | 76 | 79 |
80 | 81 | 82 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "differs", 3 | "description": "Differs is not just another CSS framework, it's different. It focuses on 3 important words with \"ity\" suffixes: simplicity, readability, flexibility.", 4 | "version": "0.1.0", 5 | "private": true, 6 | "main": "src/differs.scss", 7 | "license": "MIT", 8 | "homepage": "https://github.com/dvlden/differs#readme", 9 | "bugs": "https://github.com/dvlden/differs/issues", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/dvlden/differs.git" 13 | }, 14 | "author": { 15 | "name": "Nenad Novaković", 16 | "email": "n.dvlden@gmail.com", 17 | "url": "https://github.com/dvlden" 18 | }, 19 | "keywords": [ 20 | "differs", 21 | "framework", 22 | "css", 23 | "sass", 24 | "scss" 25 | ], 26 | "scripts": { 27 | "clean": "rimraf dist", 28 | "lint": "stylelint --custom-syntax=postcss-scss \"src/**/**.scss\"", 29 | "compile": "sass --style=expanded --source-map src/differs.scss dist/differs.css", 30 | "prefix": "postcss dist/differs.css --use=autoprefixer --map=false --output=dist/differs.css", 31 | "minify": "cleancss -O1 --source-map --source-map-inline-sources --output dist/differs.min.css dist/differs.css", 32 | "dev": "pnpm run compile --watch", 33 | "build": "pnpm run clean && pnpm run lint && pnpm run compile && pnpm run prefix && pnpm run minify" 34 | }, 35 | "devDependencies": { 36 | "autoprefixer": "^10.4.14", 37 | "clean-css-cli": "^5.6.2", 38 | "postcss": "^8.4.23", 39 | "postcss-cli": "^10.1.0", 40 | "postcss-scss": "^4.0.6", 41 | "rimraf": "^5.0.0", 42 | "sass": "^1.62.1", 43 | "stylelint": "^15.6.0", 44 | "stylelint-order": "^6.0.3", 45 | "stylelint-scss": "^5.0.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | devDependencies: 4 | autoprefixer: 5 | specifier: ^10.4.14 6 | version: 10.4.14(postcss@8.4.23) 7 | clean-css-cli: 8 | specifier: ^5.6.2 9 | version: 5.6.2 10 | postcss: 11 | specifier: ^8.4.23 12 | version: 8.4.23 13 | postcss-cli: 14 | specifier: ^10.1.0 15 | version: 10.1.0(postcss@8.4.23) 16 | postcss-scss: 17 | specifier: ^4.0.6 18 | version: 4.0.6(postcss@8.4.23) 19 | rimraf: 20 | specifier: ^5.0.0 21 | version: 5.0.0 22 | sass: 23 | specifier: ^1.62.1 24 | version: 1.62.1 25 | stylelint: 26 | specifier: ^15.6.0 27 | version: 15.6.0 28 | stylelint-order: 29 | specifier: ^6.0.3 30 | version: 6.0.3(stylelint@15.6.0) 31 | stylelint-scss: 32 | specifier: ^5.0.0 33 | version: 5.0.0(stylelint@15.6.0) 34 | 35 | packages: 36 | 37 | /@babel/code-frame@7.21.4: 38 | resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 39 | engines: {node: '>=6.9.0'} 40 | dependencies: 41 | '@babel/highlight': 7.18.6 42 | dev: true 43 | 44 | /@babel/helper-validator-identifier@7.19.1: 45 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 46 | engines: {node: '>=6.9.0'} 47 | dev: true 48 | 49 | /@babel/highlight@7.18.6: 50 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 51 | engines: {node: '>=6.9.0'} 52 | dependencies: 53 | '@babel/helper-validator-identifier': 7.19.1 54 | chalk: 2.4.2 55 | js-tokens: 4.0.0 56 | dev: true 57 | 58 | /@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1): 59 | resolution: {integrity: sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA==} 60 | engines: {node: ^14 || ^16 || >=18} 61 | peerDependencies: 62 | '@csstools/css-tokenizer': ^2.1.1 63 | dependencies: 64 | '@csstools/css-tokenizer': 2.1.1 65 | dev: true 66 | 67 | /@csstools/css-tokenizer@2.1.1: 68 | resolution: {integrity: sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==} 69 | engines: {node: ^14 || ^16 || >=18} 70 | dev: true 71 | 72 | /@csstools/media-query-list-parser@2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): 73 | resolution: {integrity: sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA==} 74 | engines: {node: ^14 || ^16 || >=18} 75 | peerDependencies: 76 | '@csstools/css-parser-algorithms': ^2.1.1 77 | '@csstools/css-tokenizer': ^2.1.1 78 | dependencies: 79 | '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) 80 | '@csstools/css-tokenizer': 2.1.1 81 | dev: true 82 | 83 | /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.12): 84 | resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} 85 | engines: {node: ^14 || ^16 || >=18} 86 | peerDependencies: 87 | postcss-selector-parser: ^6.0.10 88 | dependencies: 89 | postcss-selector-parser: 6.0.12 90 | dev: true 91 | 92 | /@nodelib/fs.scandir@2.1.5: 93 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 94 | engines: {node: '>= 8'} 95 | dependencies: 96 | '@nodelib/fs.stat': 2.0.5 97 | run-parallel: 1.2.0 98 | dev: true 99 | 100 | /@nodelib/fs.stat@2.0.5: 101 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 102 | engines: {node: '>= 8'} 103 | dev: true 104 | 105 | /@nodelib/fs.walk@1.2.8: 106 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 107 | engines: {node: '>= 8'} 108 | dependencies: 109 | '@nodelib/fs.scandir': 2.1.5 110 | fastq: 1.15.0 111 | dev: true 112 | 113 | /@pkgjs/parseargs@0.11.0: 114 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 115 | engines: {node: '>=14'} 116 | requiresBuild: true 117 | dev: true 118 | optional: true 119 | 120 | /@types/minimist@1.2.2: 121 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 122 | dev: true 123 | 124 | /@types/normalize-package-data@2.4.1: 125 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 126 | dev: true 127 | 128 | /ajv@8.12.0: 129 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 130 | dependencies: 131 | fast-deep-equal: 3.1.3 132 | json-schema-traverse: 1.0.0 133 | require-from-string: 2.0.2 134 | uri-js: 4.4.1 135 | dev: true 136 | 137 | /ansi-regex@5.0.1: 138 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 139 | engines: {node: '>=8'} 140 | dev: true 141 | 142 | /ansi-styles@3.2.1: 143 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 144 | engines: {node: '>=4'} 145 | dependencies: 146 | color-convert: 1.9.3 147 | dev: true 148 | 149 | /ansi-styles@4.3.0: 150 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 151 | engines: {node: '>=8'} 152 | dependencies: 153 | color-convert: 2.0.1 154 | dev: true 155 | 156 | /anymatch@3.1.3: 157 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 158 | engines: {node: '>= 8'} 159 | dependencies: 160 | normalize-path: 3.0.0 161 | picomatch: 2.3.1 162 | dev: true 163 | 164 | /argparse@2.0.1: 165 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 166 | dev: true 167 | 168 | /array-union@2.1.0: 169 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 170 | engines: {node: '>=8'} 171 | dev: true 172 | 173 | /arrify@1.0.1: 174 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 175 | engines: {node: '>=0.10.0'} 176 | dev: true 177 | 178 | /astral-regex@2.0.0: 179 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 180 | engines: {node: '>=8'} 181 | dev: true 182 | 183 | /autoprefixer@10.4.14(postcss@8.4.23): 184 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 185 | engines: {node: ^10 || ^12 || >=14} 186 | hasBin: true 187 | peerDependencies: 188 | postcss: ^8.1.0 189 | dependencies: 190 | browserslist: 4.21.5 191 | caniuse-lite: 1.0.30001482 192 | fraction.js: 4.2.0 193 | normalize-range: 0.1.2 194 | picocolors: 1.0.0 195 | postcss: 8.4.23 196 | postcss-value-parser: 4.2.0 197 | dev: true 198 | 199 | /balanced-match@1.0.2: 200 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 201 | dev: true 202 | 203 | /balanced-match@2.0.0: 204 | resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} 205 | dev: true 206 | 207 | /binary-extensions@2.2.0: 208 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 209 | engines: {node: '>=8'} 210 | dev: true 211 | 212 | /brace-expansion@1.1.11: 213 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 214 | dependencies: 215 | balanced-match: 1.0.2 216 | concat-map: 0.0.1 217 | dev: true 218 | 219 | /brace-expansion@2.0.1: 220 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 221 | dependencies: 222 | balanced-match: 1.0.2 223 | dev: true 224 | 225 | /braces@3.0.2: 226 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 227 | engines: {node: '>=8'} 228 | dependencies: 229 | fill-range: 7.0.1 230 | dev: true 231 | 232 | /browserslist@4.21.5: 233 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 234 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 235 | hasBin: true 236 | dependencies: 237 | caniuse-lite: 1.0.30001482 238 | electron-to-chromium: 1.4.378 239 | node-releases: 2.0.10 240 | update-browserslist-db: 1.0.11(browserslist@4.21.5) 241 | dev: true 242 | 243 | /callsites@3.1.0: 244 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 245 | engines: {node: '>=6'} 246 | dev: true 247 | 248 | /camelcase-keys@6.2.2: 249 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 250 | engines: {node: '>=8'} 251 | dependencies: 252 | camelcase: 5.3.1 253 | map-obj: 4.3.0 254 | quick-lru: 4.0.1 255 | dev: true 256 | 257 | /camelcase@5.3.1: 258 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 259 | engines: {node: '>=6'} 260 | dev: true 261 | 262 | /caniuse-lite@1.0.30001482: 263 | resolution: {integrity: sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==} 264 | dev: true 265 | 266 | /chalk@2.4.2: 267 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 268 | engines: {node: '>=4'} 269 | dependencies: 270 | ansi-styles: 3.2.1 271 | escape-string-regexp: 1.0.5 272 | supports-color: 5.5.0 273 | dev: true 274 | 275 | /chokidar@3.5.3: 276 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 277 | engines: {node: '>= 8.10.0'} 278 | dependencies: 279 | anymatch: 3.1.3 280 | braces: 3.0.2 281 | glob-parent: 5.1.2 282 | is-binary-path: 2.1.0 283 | is-glob: 4.0.3 284 | normalize-path: 3.0.0 285 | readdirp: 3.6.0 286 | optionalDependencies: 287 | fsevents: 2.3.2 288 | dev: true 289 | 290 | /clean-css-cli@5.6.2: 291 | resolution: {integrity: sha512-GDQkr6zVqHJhO3yWTy3sA22sMCT6iUqaJuBdqZMW6oI25MtiJ2iZXDmWzErpjoRotsB+TYPTpuZSNSgaC1n4lA==} 292 | engines: {node: '>= 10.12.0'} 293 | hasBin: true 294 | dependencies: 295 | chokidar: 3.5.3 296 | clean-css: 5.3.2 297 | commander: 7.2.0 298 | glob: 7.2.3 299 | dev: true 300 | 301 | /clean-css@5.3.2: 302 | resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} 303 | engines: {node: '>= 10.0'} 304 | dependencies: 305 | source-map: 0.6.1 306 | dev: true 307 | 308 | /cliui@8.0.1: 309 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 310 | engines: {node: '>=12'} 311 | dependencies: 312 | string-width: 4.2.3 313 | strip-ansi: 6.0.1 314 | wrap-ansi: 7.0.0 315 | dev: true 316 | 317 | /color-convert@1.9.3: 318 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 319 | dependencies: 320 | color-name: 1.1.3 321 | dev: true 322 | 323 | /color-convert@2.0.1: 324 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 325 | engines: {node: '>=7.0.0'} 326 | dependencies: 327 | color-name: 1.1.4 328 | dev: true 329 | 330 | /color-name@1.1.3: 331 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 332 | dev: true 333 | 334 | /color-name@1.1.4: 335 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 336 | dev: true 337 | 338 | /colord@2.9.3: 339 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 340 | dev: true 341 | 342 | /commander@7.2.0: 343 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 344 | engines: {node: '>= 10'} 345 | dev: true 346 | 347 | /concat-map@0.0.1: 348 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 349 | dev: true 350 | 351 | /cosmiconfig@8.1.3: 352 | resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} 353 | engines: {node: '>=14'} 354 | dependencies: 355 | import-fresh: 3.3.0 356 | js-yaml: 4.1.0 357 | parse-json: 5.2.0 358 | path-type: 4.0.0 359 | dev: true 360 | 361 | /cross-spawn@7.0.3: 362 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 363 | engines: {node: '>= 8'} 364 | dependencies: 365 | path-key: 3.1.1 366 | shebang-command: 2.0.0 367 | which: 2.0.2 368 | dev: true 369 | 370 | /css-functions-list@3.1.0: 371 | resolution: {integrity: sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==} 372 | engines: {node: '>=12.22'} 373 | dev: true 374 | 375 | /css-tree@2.3.1: 376 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 377 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 378 | dependencies: 379 | mdn-data: 2.0.30 380 | source-map-js: 1.0.2 381 | dev: true 382 | 383 | /cssesc@3.0.0: 384 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 385 | engines: {node: '>=4'} 386 | hasBin: true 387 | dev: true 388 | 389 | /debug@4.3.4: 390 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 391 | engines: {node: '>=6.0'} 392 | peerDependencies: 393 | supports-color: '*' 394 | peerDependenciesMeta: 395 | supports-color: 396 | optional: true 397 | dependencies: 398 | ms: 2.1.2 399 | dev: true 400 | 401 | /decamelize-keys@1.1.1: 402 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 403 | engines: {node: '>=0.10.0'} 404 | dependencies: 405 | decamelize: 1.2.0 406 | map-obj: 1.0.1 407 | dev: true 408 | 409 | /decamelize@1.2.0: 410 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 411 | engines: {node: '>=0.10.0'} 412 | dev: true 413 | 414 | /dependency-graph@0.11.0: 415 | resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} 416 | engines: {node: '>= 0.6.0'} 417 | dev: true 418 | 419 | /dir-glob@3.0.1: 420 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 421 | engines: {node: '>=8'} 422 | dependencies: 423 | path-type: 4.0.0 424 | dev: true 425 | 426 | /electron-to-chromium@1.4.378: 427 | resolution: {integrity: sha512-RfCD26kGStl6+XalfX3DGgt3z2DNwJS5DKRHCpkPq5T/PqpZMPB1moSRXuK9xhkt/sF57LlpzJgNoYl7mO7Z6w==} 428 | dev: true 429 | 430 | /emoji-regex@8.0.0: 431 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 432 | dev: true 433 | 434 | /error-ex@1.3.2: 435 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 436 | dependencies: 437 | is-arrayish: 0.2.1 438 | dev: true 439 | 440 | /escalade@3.1.1: 441 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 442 | engines: {node: '>=6'} 443 | dev: true 444 | 445 | /escape-string-regexp@1.0.5: 446 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 447 | engines: {node: '>=0.8.0'} 448 | dev: true 449 | 450 | /fast-deep-equal@3.1.3: 451 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 452 | dev: true 453 | 454 | /fast-glob@3.2.12: 455 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 456 | engines: {node: '>=8.6.0'} 457 | dependencies: 458 | '@nodelib/fs.stat': 2.0.5 459 | '@nodelib/fs.walk': 1.2.8 460 | glob-parent: 5.1.2 461 | merge2: 1.4.1 462 | micromatch: 4.0.5 463 | dev: true 464 | 465 | /fastest-levenshtein@1.0.16: 466 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 467 | engines: {node: '>= 4.9.1'} 468 | dev: true 469 | 470 | /fastq@1.15.0: 471 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 472 | dependencies: 473 | reusify: 1.0.4 474 | dev: true 475 | 476 | /file-entry-cache@6.0.1: 477 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 478 | engines: {node: ^10.12.0 || >=12.0.0} 479 | dependencies: 480 | flat-cache: 3.0.4 481 | dev: true 482 | 483 | /fill-range@7.0.1: 484 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 485 | engines: {node: '>=8'} 486 | dependencies: 487 | to-regex-range: 5.0.1 488 | dev: true 489 | 490 | /find-up@4.1.0: 491 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 492 | engines: {node: '>=8'} 493 | dependencies: 494 | locate-path: 5.0.0 495 | path-exists: 4.0.0 496 | dev: true 497 | 498 | /flat-cache@3.0.4: 499 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 500 | engines: {node: ^10.12.0 || >=12.0.0} 501 | dependencies: 502 | flatted: 3.2.7 503 | rimraf: 3.0.2 504 | dev: true 505 | 506 | /flatted@3.2.7: 507 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 508 | dev: true 509 | 510 | /foreground-child@3.1.1: 511 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 512 | engines: {node: '>=14'} 513 | dependencies: 514 | cross-spawn: 7.0.3 515 | signal-exit: 4.0.1 516 | dev: true 517 | 518 | /fraction.js@4.2.0: 519 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 520 | dev: true 521 | 522 | /fs-extra@11.1.1: 523 | resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} 524 | engines: {node: '>=14.14'} 525 | dependencies: 526 | graceful-fs: 4.2.11 527 | jsonfile: 6.1.0 528 | universalify: 2.0.0 529 | dev: true 530 | 531 | /fs.realpath@1.0.0: 532 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 533 | dev: true 534 | 535 | /fsevents@2.3.2: 536 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 537 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 538 | os: [darwin] 539 | requiresBuild: true 540 | dev: true 541 | optional: true 542 | 543 | /function-bind@1.1.1: 544 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 545 | dev: true 546 | 547 | /get-caller-file@2.0.5: 548 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 549 | engines: {node: 6.* || 8.* || >= 10.*} 550 | dev: true 551 | 552 | /get-stdin@9.0.0: 553 | resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} 554 | engines: {node: '>=12'} 555 | dev: true 556 | 557 | /glob-parent@5.1.2: 558 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 559 | engines: {node: '>= 6'} 560 | dependencies: 561 | is-glob: 4.0.3 562 | dev: true 563 | 564 | /glob@10.2.2: 565 | resolution: {integrity: sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==} 566 | engines: {node: '>=16 || 14 >=14.17'} 567 | hasBin: true 568 | dependencies: 569 | foreground-child: 3.1.1 570 | jackspeak: 2.1.1 571 | minimatch: 9.0.0 572 | minipass: 5.0.0 573 | path-scurry: 1.7.0 574 | dev: true 575 | 576 | /glob@7.2.3: 577 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 578 | dependencies: 579 | fs.realpath: 1.0.0 580 | inflight: 1.0.6 581 | inherits: 2.0.4 582 | minimatch: 3.1.2 583 | once: 1.4.0 584 | path-is-absolute: 1.0.1 585 | dev: true 586 | 587 | /global-modules@2.0.0: 588 | resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} 589 | engines: {node: '>=6'} 590 | dependencies: 591 | global-prefix: 3.0.0 592 | dev: true 593 | 594 | /global-prefix@3.0.0: 595 | resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} 596 | engines: {node: '>=6'} 597 | dependencies: 598 | ini: 1.3.8 599 | kind-of: 6.0.3 600 | which: 1.3.1 601 | dev: true 602 | 603 | /globby@11.1.0: 604 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 605 | engines: {node: '>=10'} 606 | dependencies: 607 | array-union: 2.1.0 608 | dir-glob: 3.0.1 609 | fast-glob: 3.2.12 610 | ignore: 5.2.4 611 | merge2: 1.4.1 612 | slash: 3.0.0 613 | dev: true 614 | 615 | /globby@13.1.4: 616 | resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} 617 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 618 | dependencies: 619 | dir-glob: 3.0.1 620 | fast-glob: 3.2.12 621 | ignore: 5.2.4 622 | merge2: 1.4.1 623 | slash: 4.0.0 624 | dev: true 625 | 626 | /globjoin@0.1.4: 627 | resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} 628 | dev: true 629 | 630 | /graceful-fs@4.2.11: 631 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 632 | dev: true 633 | 634 | /hard-rejection@2.1.0: 635 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 636 | engines: {node: '>=6'} 637 | dev: true 638 | 639 | /has-flag@3.0.0: 640 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 641 | engines: {node: '>=4'} 642 | dev: true 643 | 644 | /has-flag@4.0.0: 645 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 646 | engines: {node: '>=8'} 647 | dev: true 648 | 649 | /has@1.0.3: 650 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 651 | engines: {node: '>= 0.4.0'} 652 | dependencies: 653 | function-bind: 1.1.1 654 | dev: true 655 | 656 | /hosted-git-info@2.8.9: 657 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 658 | dev: true 659 | 660 | /hosted-git-info@4.1.0: 661 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 662 | engines: {node: '>=10'} 663 | dependencies: 664 | lru-cache: 6.0.0 665 | dev: true 666 | 667 | /html-tags@3.3.1: 668 | resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} 669 | engines: {node: '>=8'} 670 | dev: true 671 | 672 | /ignore@5.2.4: 673 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 674 | engines: {node: '>= 4'} 675 | dev: true 676 | 677 | /immutable@4.3.0: 678 | resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} 679 | dev: true 680 | 681 | /import-fresh@3.3.0: 682 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 683 | engines: {node: '>=6'} 684 | dependencies: 685 | parent-module: 1.0.1 686 | resolve-from: 4.0.0 687 | dev: true 688 | 689 | /import-lazy@4.0.0: 690 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 691 | engines: {node: '>=8'} 692 | dev: true 693 | 694 | /imurmurhash@0.1.4: 695 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 696 | engines: {node: '>=0.8.19'} 697 | dev: true 698 | 699 | /indent-string@4.0.0: 700 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 701 | engines: {node: '>=8'} 702 | dev: true 703 | 704 | /inflight@1.0.6: 705 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 706 | dependencies: 707 | once: 1.4.0 708 | wrappy: 1.0.2 709 | dev: true 710 | 711 | /inherits@2.0.4: 712 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 713 | dev: true 714 | 715 | /ini@1.3.8: 716 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 717 | dev: true 718 | 719 | /is-arrayish@0.2.1: 720 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 721 | dev: true 722 | 723 | /is-binary-path@2.1.0: 724 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 725 | engines: {node: '>=8'} 726 | dependencies: 727 | binary-extensions: 2.2.0 728 | dev: true 729 | 730 | /is-core-module@2.12.0: 731 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 732 | dependencies: 733 | has: 1.0.3 734 | dev: true 735 | 736 | /is-extglob@2.1.1: 737 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 738 | engines: {node: '>=0.10.0'} 739 | dev: true 740 | 741 | /is-fullwidth-code-point@3.0.0: 742 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 743 | engines: {node: '>=8'} 744 | dev: true 745 | 746 | /is-glob@4.0.3: 747 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 748 | engines: {node: '>=0.10.0'} 749 | dependencies: 750 | is-extglob: 2.1.1 751 | dev: true 752 | 753 | /is-number@7.0.0: 754 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 755 | engines: {node: '>=0.12.0'} 756 | dev: true 757 | 758 | /is-plain-obj@1.1.0: 759 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 760 | engines: {node: '>=0.10.0'} 761 | dev: true 762 | 763 | /is-plain-object@5.0.0: 764 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 765 | engines: {node: '>=0.10.0'} 766 | dev: true 767 | 768 | /isexe@2.0.0: 769 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 770 | dev: true 771 | 772 | /jackspeak@2.1.1: 773 | resolution: {integrity: sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw==} 774 | engines: {node: '>=14'} 775 | dependencies: 776 | cliui: 8.0.1 777 | optionalDependencies: 778 | '@pkgjs/parseargs': 0.11.0 779 | dev: true 780 | 781 | /js-tokens@4.0.0: 782 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 783 | dev: true 784 | 785 | /js-yaml@4.1.0: 786 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 787 | hasBin: true 788 | dependencies: 789 | argparse: 2.0.1 790 | dev: true 791 | 792 | /json-parse-even-better-errors@2.3.1: 793 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 794 | dev: true 795 | 796 | /json-schema-traverse@1.0.0: 797 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 798 | dev: true 799 | 800 | /jsonfile@6.1.0: 801 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 802 | dependencies: 803 | universalify: 2.0.0 804 | optionalDependencies: 805 | graceful-fs: 4.2.11 806 | dev: true 807 | 808 | /kind-of@6.0.3: 809 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 810 | engines: {node: '>=0.10.0'} 811 | dev: true 812 | 813 | /known-css-properties@0.27.0: 814 | resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==} 815 | dev: true 816 | 817 | /lilconfig@2.1.0: 818 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 819 | engines: {node: '>=10'} 820 | dev: true 821 | 822 | /lines-and-columns@1.2.4: 823 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 824 | dev: true 825 | 826 | /locate-path@5.0.0: 827 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 828 | engines: {node: '>=8'} 829 | dependencies: 830 | p-locate: 4.1.0 831 | dev: true 832 | 833 | /lodash.truncate@4.4.2: 834 | resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} 835 | dev: true 836 | 837 | /lru-cache@6.0.0: 838 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 839 | engines: {node: '>=10'} 840 | dependencies: 841 | yallist: 4.0.0 842 | dev: true 843 | 844 | /lru-cache@9.1.1: 845 | resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} 846 | engines: {node: 14 || >=16.14} 847 | dev: true 848 | 849 | /map-obj@1.0.1: 850 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 851 | engines: {node: '>=0.10.0'} 852 | dev: true 853 | 854 | /map-obj@4.3.0: 855 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 856 | engines: {node: '>=8'} 857 | dev: true 858 | 859 | /mathml-tag-names@2.1.3: 860 | resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} 861 | dev: true 862 | 863 | /mdn-data@2.0.30: 864 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 865 | dev: true 866 | 867 | /meow@9.0.0: 868 | resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} 869 | engines: {node: '>=10'} 870 | dependencies: 871 | '@types/minimist': 1.2.2 872 | camelcase-keys: 6.2.2 873 | decamelize: 1.2.0 874 | decamelize-keys: 1.1.1 875 | hard-rejection: 2.1.0 876 | minimist-options: 4.1.0 877 | normalize-package-data: 3.0.3 878 | read-pkg-up: 7.0.1 879 | redent: 3.0.0 880 | trim-newlines: 3.0.1 881 | type-fest: 0.18.1 882 | yargs-parser: 20.2.9 883 | dev: true 884 | 885 | /merge2@1.4.1: 886 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 887 | engines: {node: '>= 8'} 888 | dev: true 889 | 890 | /micromatch@4.0.5: 891 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 892 | engines: {node: '>=8.6'} 893 | dependencies: 894 | braces: 3.0.2 895 | picomatch: 2.3.1 896 | dev: true 897 | 898 | /min-indent@1.0.1: 899 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 900 | engines: {node: '>=4'} 901 | dev: true 902 | 903 | /minimatch@3.1.2: 904 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 905 | dependencies: 906 | brace-expansion: 1.1.11 907 | dev: true 908 | 909 | /minimatch@9.0.0: 910 | resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} 911 | engines: {node: '>=16 || 14 >=14.17'} 912 | dependencies: 913 | brace-expansion: 2.0.1 914 | dev: true 915 | 916 | /minimist-options@4.1.0: 917 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 918 | engines: {node: '>= 6'} 919 | dependencies: 920 | arrify: 1.0.1 921 | is-plain-obj: 1.1.0 922 | kind-of: 6.0.3 923 | dev: true 924 | 925 | /minipass@5.0.0: 926 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 927 | engines: {node: '>=8'} 928 | dev: true 929 | 930 | /ms@2.1.2: 931 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 932 | dev: true 933 | 934 | /nanoid@3.3.6: 935 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 936 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 937 | hasBin: true 938 | dev: true 939 | 940 | /node-releases@2.0.10: 941 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 942 | dev: true 943 | 944 | /normalize-package-data@2.5.0: 945 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 946 | dependencies: 947 | hosted-git-info: 2.8.9 948 | resolve: 1.22.2 949 | semver: 5.7.1 950 | validate-npm-package-license: 3.0.4 951 | dev: true 952 | 953 | /normalize-package-data@3.0.3: 954 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 955 | engines: {node: '>=10'} 956 | dependencies: 957 | hosted-git-info: 4.1.0 958 | is-core-module: 2.12.0 959 | semver: 7.5.0 960 | validate-npm-package-license: 3.0.4 961 | dev: true 962 | 963 | /normalize-path@3.0.0: 964 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 965 | engines: {node: '>=0.10.0'} 966 | dev: true 967 | 968 | /normalize-range@0.1.2: 969 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 970 | engines: {node: '>=0.10.0'} 971 | dev: true 972 | 973 | /once@1.4.0: 974 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 975 | dependencies: 976 | wrappy: 1.0.2 977 | dev: true 978 | 979 | /p-limit@2.3.0: 980 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 981 | engines: {node: '>=6'} 982 | dependencies: 983 | p-try: 2.2.0 984 | dev: true 985 | 986 | /p-locate@4.1.0: 987 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 988 | engines: {node: '>=8'} 989 | dependencies: 990 | p-limit: 2.3.0 991 | dev: true 992 | 993 | /p-try@2.2.0: 994 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 995 | engines: {node: '>=6'} 996 | dev: true 997 | 998 | /parent-module@1.0.1: 999 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1000 | engines: {node: '>=6'} 1001 | dependencies: 1002 | callsites: 3.1.0 1003 | dev: true 1004 | 1005 | /parse-json@5.2.0: 1006 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1007 | engines: {node: '>=8'} 1008 | dependencies: 1009 | '@babel/code-frame': 7.21.4 1010 | error-ex: 1.3.2 1011 | json-parse-even-better-errors: 2.3.1 1012 | lines-and-columns: 1.2.4 1013 | dev: true 1014 | 1015 | /path-exists@4.0.0: 1016 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1017 | engines: {node: '>=8'} 1018 | dev: true 1019 | 1020 | /path-is-absolute@1.0.1: 1021 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1022 | engines: {node: '>=0.10.0'} 1023 | dev: true 1024 | 1025 | /path-key@3.1.1: 1026 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1027 | engines: {node: '>=8'} 1028 | dev: true 1029 | 1030 | /path-parse@1.0.7: 1031 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1032 | dev: true 1033 | 1034 | /path-scurry@1.7.0: 1035 | resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} 1036 | engines: {node: '>=16 || 14 >=14.17'} 1037 | dependencies: 1038 | lru-cache: 9.1.1 1039 | minipass: 5.0.0 1040 | dev: true 1041 | 1042 | /path-type@4.0.0: 1043 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1044 | engines: {node: '>=8'} 1045 | dev: true 1046 | 1047 | /picocolors@1.0.0: 1048 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1049 | dev: true 1050 | 1051 | /picomatch@2.3.1: 1052 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1053 | engines: {node: '>=8.6'} 1054 | dev: true 1055 | 1056 | /pify@2.3.0: 1057 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1058 | engines: {node: '>=0.10.0'} 1059 | dev: true 1060 | 1061 | /postcss-cli@10.1.0(postcss@8.4.23): 1062 | resolution: {integrity: sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==} 1063 | engines: {node: '>=14'} 1064 | hasBin: true 1065 | peerDependencies: 1066 | postcss: ^8.0.0 1067 | dependencies: 1068 | chokidar: 3.5.3 1069 | dependency-graph: 0.11.0 1070 | fs-extra: 11.1.1 1071 | get-stdin: 9.0.0 1072 | globby: 13.1.4 1073 | picocolors: 1.0.0 1074 | postcss: 8.4.23 1075 | postcss-load-config: 4.0.1(postcss@8.4.23) 1076 | postcss-reporter: 7.0.5(postcss@8.4.23) 1077 | pretty-hrtime: 1.0.3 1078 | read-cache: 1.0.0 1079 | slash: 5.0.1 1080 | yargs: 17.7.2 1081 | transitivePeerDependencies: 1082 | - ts-node 1083 | dev: true 1084 | 1085 | /postcss-load-config@4.0.1(postcss@8.4.23): 1086 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 1087 | engines: {node: '>= 14'} 1088 | peerDependencies: 1089 | postcss: '>=8.0.9' 1090 | ts-node: '>=9.0.0' 1091 | peerDependenciesMeta: 1092 | postcss: 1093 | optional: true 1094 | ts-node: 1095 | optional: true 1096 | dependencies: 1097 | lilconfig: 2.1.0 1098 | postcss: 8.4.23 1099 | yaml: 2.2.2 1100 | dev: true 1101 | 1102 | /postcss-media-query-parser@0.2.3: 1103 | resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} 1104 | dev: true 1105 | 1106 | /postcss-reporter@7.0.5(postcss@8.4.23): 1107 | resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} 1108 | engines: {node: '>=10'} 1109 | peerDependencies: 1110 | postcss: ^8.1.0 1111 | dependencies: 1112 | picocolors: 1.0.0 1113 | postcss: 8.4.23 1114 | thenby: 1.3.4 1115 | dev: true 1116 | 1117 | /postcss-resolve-nested-selector@0.1.1: 1118 | resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} 1119 | dev: true 1120 | 1121 | /postcss-safe-parser@6.0.0(postcss@8.4.23): 1122 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 1123 | engines: {node: '>=12.0'} 1124 | peerDependencies: 1125 | postcss: ^8.3.3 1126 | dependencies: 1127 | postcss: 8.4.23 1128 | dev: true 1129 | 1130 | /postcss-scss@4.0.6(postcss@8.4.23): 1131 | resolution: {integrity: sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==} 1132 | engines: {node: '>=12.0'} 1133 | peerDependencies: 1134 | postcss: ^8.4.19 1135 | dependencies: 1136 | postcss: 8.4.23 1137 | dev: true 1138 | 1139 | /postcss-selector-parser@6.0.12: 1140 | resolution: {integrity: sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==} 1141 | engines: {node: '>=4'} 1142 | dependencies: 1143 | cssesc: 3.0.0 1144 | util-deprecate: 1.0.2 1145 | dev: true 1146 | 1147 | /postcss-sorting@8.0.2(postcss@8.4.23): 1148 | resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} 1149 | peerDependencies: 1150 | postcss: ^8.4.20 1151 | dependencies: 1152 | postcss: 8.4.23 1153 | dev: true 1154 | 1155 | /postcss-value-parser@4.2.0: 1156 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1157 | dev: true 1158 | 1159 | /postcss@8.4.23: 1160 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 1161 | engines: {node: ^10 || ^12 || >=14} 1162 | dependencies: 1163 | nanoid: 3.3.6 1164 | picocolors: 1.0.0 1165 | source-map-js: 1.0.2 1166 | dev: true 1167 | 1168 | /pretty-hrtime@1.0.3: 1169 | resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} 1170 | engines: {node: '>= 0.8'} 1171 | dev: true 1172 | 1173 | /punycode@2.3.0: 1174 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1175 | engines: {node: '>=6'} 1176 | dev: true 1177 | 1178 | /queue-microtask@1.2.3: 1179 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1180 | dev: true 1181 | 1182 | /quick-lru@4.0.1: 1183 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 1184 | engines: {node: '>=8'} 1185 | dev: true 1186 | 1187 | /read-cache@1.0.0: 1188 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1189 | dependencies: 1190 | pify: 2.3.0 1191 | dev: true 1192 | 1193 | /read-pkg-up@7.0.1: 1194 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1195 | engines: {node: '>=8'} 1196 | dependencies: 1197 | find-up: 4.1.0 1198 | read-pkg: 5.2.0 1199 | type-fest: 0.8.1 1200 | dev: true 1201 | 1202 | /read-pkg@5.2.0: 1203 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1204 | engines: {node: '>=8'} 1205 | dependencies: 1206 | '@types/normalize-package-data': 2.4.1 1207 | normalize-package-data: 2.5.0 1208 | parse-json: 5.2.0 1209 | type-fest: 0.6.0 1210 | dev: true 1211 | 1212 | /readdirp@3.6.0: 1213 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1214 | engines: {node: '>=8.10.0'} 1215 | dependencies: 1216 | picomatch: 2.3.1 1217 | dev: true 1218 | 1219 | /redent@3.0.0: 1220 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1221 | engines: {node: '>=8'} 1222 | dependencies: 1223 | indent-string: 4.0.0 1224 | strip-indent: 3.0.0 1225 | dev: true 1226 | 1227 | /require-directory@2.1.1: 1228 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1229 | engines: {node: '>=0.10.0'} 1230 | dev: true 1231 | 1232 | /require-from-string@2.0.2: 1233 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1234 | engines: {node: '>=0.10.0'} 1235 | dev: true 1236 | 1237 | /resolve-from@4.0.0: 1238 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1239 | engines: {node: '>=4'} 1240 | dev: true 1241 | 1242 | /resolve-from@5.0.0: 1243 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1244 | engines: {node: '>=8'} 1245 | dev: true 1246 | 1247 | /resolve@1.22.2: 1248 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 1249 | hasBin: true 1250 | dependencies: 1251 | is-core-module: 2.12.0 1252 | path-parse: 1.0.7 1253 | supports-preserve-symlinks-flag: 1.0.0 1254 | dev: true 1255 | 1256 | /reusify@1.0.4: 1257 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1258 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1259 | dev: true 1260 | 1261 | /rimraf@3.0.2: 1262 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1263 | hasBin: true 1264 | dependencies: 1265 | glob: 7.2.3 1266 | dev: true 1267 | 1268 | /rimraf@5.0.0: 1269 | resolution: {integrity: sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g==} 1270 | engines: {node: '>=14'} 1271 | hasBin: true 1272 | dependencies: 1273 | glob: 10.2.2 1274 | dev: true 1275 | 1276 | /run-parallel@1.2.0: 1277 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1278 | dependencies: 1279 | queue-microtask: 1.2.3 1280 | dev: true 1281 | 1282 | /sass@1.62.1: 1283 | resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} 1284 | engines: {node: '>=14.0.0'} 1285 | hasBin: true 1286 | dependencies: 1287 | chokidar: 3.5.3 1288 | immutable: 4.3.0 1289 | source-map-js: 1.0.2 1290 | dev: true 1291 | 1292 | /semver@5.7.1: 1293 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1294 | hasBin: true 1295 | dev: true 1296 | 1297 | /semver@7.5.0: 1298 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 1299 | engines: {node: '>=10'} 1300 | hasBin: true 1301 | dependencies: 1302 | lru-cache: 6.0.0 1303 | dev: true 1304 | 1305 | /shebang-command@2.0.0: 1306 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1307 | engines: {node: '>=8'} 1308 | dependencies: 1309 | shebang-regex: 3.0.0 1310 | dev: true 1311 | 1312 | /shebang-regex@3.0.0: 1313 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1314 | engines: {node: '>=8'} 1315 | dev: true 1316 | 1317 | /signal-exit@4.0.1: 1318 | resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} 1319 | engines: {node: '>=14'} 1320 | dev: true 1321 | 1322 | /slash@3.0.0: 1323 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1324 | engines: {node: '>=8'} 1325 | dev: true 1326 | 1327 | /slash@4.0.0: 1328 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 1329 | engines: {node: '>=12'} 1330 | dev: true 1331 | 1332 | /slash@5.0.1: 1333 | resolution: {integrity: sha512-ywNzUOiXwetmLvTUiCBZpLi+vxqN3i+zDqjs2HHfUSV3wN4UJxVVKWrS1JZDeiJIeBFNgB5pmioC2g0IUTL+rQ==} 1334 | engines: {node: '>=14.16'} 1335 | dev: true 1336 | 1337 | /slice-ansi@4.0.0: 1338 | resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 1339 | engines: {node: '>=10'} 1340 | dependencies: 1341 | ansi-styles: 4.3.0 1342 | astral-regex: 2.0.0 1343 | is-fullwidth-code-point: 3.0.0 1344 | dev: true 1345 | 1346 | /source-map-js@1.0.2: 1347 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1348 | engines: {node: '>=0.10.0'} 1349 | dev: true 1350 | 1351 | /source-map@0.6.1: 1352 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1353 | engines: {node: '>=0.10.0'} 1354 | dev: true 1355 | 1356 | /spdx-correct@3.2.0: 1357 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1358 | dependencies: 1359 | spdx-expression-parse: 3.0.1 1360 | spdx-license-ids: 3.0.13 1361 | dev: true 1362 | 1363 | /spdx-exceptions@2.3.0: 1364 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 1365 | dev: true 1366 | 1367 | /spdx-expression-parse@3.0.1: 1368 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1369 | dependencies: 1370 | spdx-exceptions: 2.3.0 1371 | spdx-license-ids: 3.0.13 1372 | dev: true 1373 | 1374 | /spdx-license-ids@3.0.13: 1375 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 1376 | dev: true 1377 | 1378 | /string-width@4.2.3: 1379 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1380 | engines: {node: '>=8'} 1381 | dependencies: 1382 | emoji-regex: 8.0.0 1383 | is-fullwidth-code-point: 3.0.0 1384 | strip-ansi: 6.0.1 1385 | dev: true 1386 | 1387 | /strip-ansi@6.0.1: 1388 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1389 | engines: {node: '>=8'} 1390 | dependencies: 1391 | ansi-regex: 5.0.1 1392 | dev: true 1393 | 1394 | /strip-indent@3.0.0: 1395 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1396 | engines: {node: '>=8'} 1397 | dependencies: 1398 | min-indent: 1.0.1 1399 | dev: true 1400 | 1401 | /style-search@0.1.0: 1402 | resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 1403 | dev: true 1404 | 1405 | /stylelint-order@6.0.3(stylelint@15.6.0): 1406 | resolution: {integrity: sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==} 1407 | peerDependencies: 1408 | stylelint: ^14.0.0 || ^15.0.0 1409 | dependencies: 1410 | postcss: 8.4.23 1411 | postcss-sorting: 8.0.2(postcss@8.4.23) 1412 | stylelint: 15.6.0 1413 | dev: true 1414 | 1415 | /stylelint-scss@5.0.0(stylelint@15.6.0): 1416 | resolution: {integrity: sha512-5Ee5kG3JIcP2jk2PMoFMiNmW/815V+wK5o37X5ke90ihWMpPXI9iyqeA6zEWipWSRXeQc0kqbd7hKqiR+wPKNA==} 1417 | peerDependencies: 1418 | stylelint: ^14.5.1 || ^15.0.0 1419 | dependencies: 1420 | postcss-media-query-parser: 0.2.3 1421 | postcss-resolve-nested-selector: 0.1.1 1422 | postcss-selector-parser: 6.0.12 1423 | postcss-value-parser: 4.2.0 1424 | stylelint: 15.6.0 1425 | dev: true 1426 | 1427 | /stylelint@15.6.0: 1428 | resolution: {integrity: sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg==} 1429 | engines: {node: ^14.13.1 || >=16.0.0} 1430 | hasBin: true 1431 | dependencies: 1432 | '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) 1433 | '@csstools/css-tokenizer': 2.1.1 1434 | '@csstools/media-query-list-parser': 2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) 1435 | '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.12) 1436 | balanced-match: 2.0.0 1437 | colord: 2.9.3 1438 | cosmiconfig: 8.1.3 1439 | css-functions-list: 3.1.0 1440 | css-tree: 2.3.1 1441 | debug: 4.3.4 1442 | fast-glob: 3.2.12 1443 | fastest-levenshtein: 1.0.16 1444 | file-entry-cache: 6.0.1 1445 | global-modules: 2.0.0 1446 | globby: 11.1.0 1447 | globjoin: 0.1.4 1448 | html-tags: 3.3.1 1449 | ignore: 5.2.4 1450 | import-lazy: 4.0.0 1451 | imurmurhash: 0.1.4 1452 | is-plain-object: 5.0.0 1453 | known-css-properties: 0.27.0 1454 | mathml-tag-names: 2.1.3 1455 | meow: 9.0.0 1456 | micromatch: 4.0.5 1457 | normalize-path: 3.0.0 1458 | picocolors: 1.0.0 1459 | postcss: 8.4.23 1460 | postcss-media-query-parser: 0.2.3 1461 | postcss-resolve-nested-selector: 0.1.1 1462 | postcss-safe-parser: 6.0.0(postcss@8.4.23) 1463 | postcss-selector-parser: 6.0.12 1464 | postcss-value-parser: 4.2.0 1465 | resolve-from: 5.0.0 1466 | string-width: 4.2.3 1467 | strip-ansi: 6.0.1 1468 | style-search: 0.1.0 1469 | supports-hyperlinks: 3.0.0 1470 | svg-tags: 1.0.0 1471 | table: 6.8.1 1472 | v8-compile-cache: 2.3.0 1473 | write-file-atomic: 5.0.1 1474 | transitivePeerDependencies: 1475 | - supports-color 1476 | dev: true 1477 | 1478 | /supports-color@5.5.0: 1479 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1480 | engines: {node: '>=4'} 1481 | dependencies: 1482 | has-flag: 3.0.0 1483 | dev: true 1484 | 1485 | /supports-color@7.2.0: 1486 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1487 | engines: {node: '>=8'} 1488 | dependencies: 1489 | has-flag: 4.0.0 1490 | dev: true 1491 | 1492 | /supports-hyperlinks@3.0.0: 1493 | resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} 1494 | engines: {node: '>=14.18'} 1495 | dependencies: 1496 | has-flag: 4.0.0 1497 | supports-color: 7.2.0 1498 | dev: true 1499 | 1500 | /supports-preserve-symlinks-flag@1.0.0: 1501 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1502 | engines: {node: '>= 0.4'} 1503 | dev: true 1504 | 1505 | /svg-tags@1.0.0: 1506 | resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} 1507 | dev: true 1508 | 1509 | /table@6.8.1: 1510 | resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 1511 | engines: {node: '>=10.0.0'} 1512 | dependencies: 1513 | ajv: 8.12.0 1514 | lodash.truncate: 4.4.2 1515 | slice-ansi: 4.0.0 1516 | string-width: 4.2.3 1517 | strip-ansi: 6.0.1 1518 | dev: true 1519 | 1520 | /thenby@1.3.4: 1521 | resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} 1522 | dev: true 1523 | 1524 | /to-regex-range@5.0.1: 1525 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1526 | engines: {node: '>=8.0'} 1527 | dependencies: 1528 | is-number: 7.0.0 1529 | dev: true 1530 | 1531 | /trim-newlines@3.0.1: 1532 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 1533 | engines: {node: '>=8'} 1534 | dev: true 1535 | 1536 | /type-fest@0.18.1: 1537 | resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} 1538 | engines: {node: '>=10'} 1539 | dev: true 1540 | 1541 | /type-fest@0.6.0: 1542 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1543 | engines: {node: '>=8'} 1544 | dev: true 1545 | 1546 | /type-fest@0.8.1: 1547 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1548 | engines: {node: '>=8'} 1549 | dev: true 1550 | 1551 | /universalify@2.0.0: 1552 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1553 | engines: {node: '>= 10.0.0'} 1554 | dev: true 1555 | 1556 | /update-browserslist-db@1.0.11(browserslist@4.21.5): 1557 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 1558 | hasBin: true 1559 | peerDependencies: 1560 | browserslist: '>= 4.21.0' 1561 | dependencies: 1562 | browserslist: 4.21.5 1563 | escalade: 3.1.1 1564 | picocolors: 1.0.0 1565 | dev: true 1566 | 1567 | /uri-js@4.4.1: 1568 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1569 | dependencies: 1570 | punycode: 2.3.0 1571 | dev: true 1572 | 1573 | /util-deprecate@1.0.2: 1574 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1575 | dev: true 1576 | 1577 | /v8-compile-cache@2.3.0: 1578 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 1579 | dev: true 1580 | 1581 | /validate-npm-package-license@3.0.4: 1582 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1583 | dependencies: 1584 | spdx-correct: 3.2.0 1585 | spdx-expression-parse: 3.0.1 1586 | dev: true 1587 | 1588 | /which@1.3.1: 1589 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1590 | hasBin: true 1591 | dependencies: 1592 | isexe: 2.0.0 1593 | dev: true 1594 | 1595 | /which@2.0.2: 1596 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1597 | engines: {node: '>= 8'} 1598 | hasBin: true 1599 | dependencies: 1600 | isexe: 2.0.0 1601 | dev: true 1602 | 1603 | /wrap-ansi@7.0.0: 1604 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1605 | engines: {node: '>=10'} 1606 | dependencies: 1607 | ansi-styles: 4.3.0 1608 | string-width: 4.2.3 1609 | strip-ansi: 6.0.1 1610 | dev: true 1611 | 1612 | /wrappy@1.0.2: 1613 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1614 | dev: true 1615 | 1616 | /write-file-atomic@5.0.1: 1617 | resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} 1618 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1619 | dependencies: 1620 | imurmurhash: 0.1.4 1621 | signal-exit: 4.0.1 1622 | dev: true 1623 | 1624 | /y18n@5.0.8: 1625 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1626 | engines: {node: '>=10'} 1627 | dev: true 1628 | 1629 | /yallist@4.0.0: 1630 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1631 | dev: true 1632 | 1633 | /yaml@2.2.2: 1634 | resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} 1635 | engines: {node: '>= 14'} 1636 | dev: true 1637 | 1638 | /yargs-parser@20.2.9: 1639 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1640 | engines: {node: '>=10'} 1641 | dev: true 1642 | 1643 | /yargs-parser@21.1.1: 1644 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1645 | engines: {node: '>=12'} 1646 | dev: true 1647 | 1648 | /yargs@17.7.2: 1649 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1650 | engines: {node: '>=12'} 1651 | dependencies: 1652 | cliui: 8.0.1 1653 | escalade: 3.1.1 1654 | get-caller-file: 2.0.5 1655 | require-directory: 2.1.1 1656 | string-width: 4.2.3 1657 | y18n: 5.0.8 1658 | yargs-parser: 21.1.1 1659 | dev: true 1660 | -------------------------------------------------------------------------------- /src/abstracts/_config.scss: -------------------------------------------------------------------------------- 1 | $dfr-config: () !default; 2 | 3 | @import 'config/border'; 4 | @import 'config/breakpoint'; 5 | @import 'config/button'; 6 | @import 'config/color'; 7 | @import 'config/container'; 8 | @import 'config/font'; 9 | @import 'config/heading'; 10 | @import 'config/spacing'; 11 | -------------------------------------------------------------------------------- /src/abstracts/_core-functions.scss: -------------------------------------------------------------------------------- 1 | @import 'functions/convert-unit'; 2 | @import 'functions/get'; 3 | @import 'functions/grid-calc'; 4 | -------------------------------------------------------------------------------- /src/abstracts/_helper-mixins.scss: -------------------------------------------------------------------------------- 1 | @import 'mixins/helpers/button-sizes'; 2 | @import 'mixins/helpers/focus'; 3 | @import 'mixins/helpers/input-sizes'; 4 | -------------------------------------------------------------------------------- /src/abstracts/_mixins.scss: -------------------------------------------------------------------------------- 1 | @import 'mixins/border-radius'; 2 | @import 'mixins/color'; 3 | @import 'mixins/font-face'; 4 | @import 'mixins/grid-generator'; 5 | @import 'mixins/media-queries'; 6 | @import 'mixins/pseudo-states'; 7 | @import 'mixins/spacing'; 8 | -------------------------------------------------------------------------------- /src/abstracts/_utils.scss: -------------------------------------------------------------------------------- 1 | @forward 'functions/helpers/str-replace'; 2 | @forward 'functions/helpers/strip-unit'; 3 | @forward 'functions/helpers/yiq'; 4 | -------------------------------------------------------------------------------- /src/abstracts/_variables.scss: -------------------------------------------------------------------------------- 1 | $dfr--base-color-dark: #000 !default; 2 | $dfr--base-color-light: #fff !default; 3 | 4 | $dfr--base-lineHeight: 1.5 !default; 5 | $dfr--base-fontSize: 16px !default; 6 | $dfr--root-fontSize-small: ($dfr--base-fontSize - 2) !default; 7 | $dfr--root-fontSize-large: $dfr--base-fontSize !default; 8 | 9 | $dfr--base-borderRadius: 4px !default; 10 | 11 | $dfr--base-spacing: 15px !default; 12 | $dfr--x-spacing: $dfr--base-spacing !default; 13 | $dfr--y-spacing: $dfr--base-spacing / 2 !default; 14 | 15 | $dfr-grid-columns: 12 !default; 16 | $dfr-grid-gutter: 15px !default; 17 | 18 | $dfr-yiq-threshold: 180 !default; // 128 is common default, but looks odd 19 | $dfr-yiq-color-dark: $dfr--base-color-dark !default; 20 | $dfr-yiq-color-light: $dfr--base-color-light !default; 21 | -------------------------------------------------------------------------------- /src/abstracts/config/_border.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'border': ( 6 | 'width': 2px, 7 | 'style': solid, 8 | 'color': $dfr--base-color-dark, 9 | 'radius': ( 10 | 'xs': $dfr--base-borderRadius / 2, 11 | 's': $dfr--base-borderRadius / 1.25, 12 | 'm': $dfr--base-borderRadius, 13 | 'l': $dfr--base-borderRadius * 1.25, 14 | 'xl': $dfr--base-borderRadius * 2, 15 | 'f': 9999px, 16 | ) 17 | ) 18 | ), 19 | $dfr-config, 20 | ); 21 | -------------------------------------------------------------------------------- /src/abstracts/config/_breakpoint.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'breakpoint': ( 6 | 'xs': null, 7 | 's': 544px, 8 | 'm': 768px, 9 | 'l': 992px, 10 | 'xl': 1200px 11 | ) 12 | ), 13 | $dfr-config, 14 | ); 15 | -------------------------------------------------------------------------------- /src/abstracts/config/_button.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'spacing': ( 6 | 'button': ( 7 | 'xs': ( 8 | 'x': $dfr--x-spacing / 1.5, 9 | 'y': $dfr--y-spacing / 1.5, 10 | ), 11 | 's': ( 12 | 'x': $dfr--x-spacing / 1.25, 13 | 'y': $dfr--y-spacing / 1.25, 14 | ), 15 | 'm': ( 16 | 'x': $dfr--x-spacing, 17 | 'y': $dfr--y-spacing, 18 | ), 19 | 'l': ( 20 | 'x': $dfr--x-spacing * 1.25, 21 | 'y': $dfr--y-spacing * 1.25, 22 | ), 23 | 'xl': ( 24 | 'x': $dfr--x-spacing * 1.5, 25 | 'y': $dfr--y-spacing * 1.5, 26 | ), 27 | ) 28 | ) 29 | ), 30 | $dfr-config, 31 | ); 32 | -------------------------------------------------------------------------------- /src/abstracts/config/_color.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'color': ( 6 | 'dark': $dfr--base-color-dark, 7 | 'almost-dark': lighten($dfr--base-color-dark, 15%), 8 | 'medium': mix($dfr--base-color-dark, $dfr--base-color-light, 51%), 9 | 'almost-light': darken($dfr--base-color-light, 15%), 10 | 'light': $dfr--base-color-light, 11 | ) 12 | ), 13 | $dfr-config, 14 | ); 15 | -------------------------------------------------------------------------------- /src/abstracts/config/_container.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'container': ( 6 | 's': 510px, 7 | 'm': 720px, 8 | 'l': 940px, 9 | 'xl': 1140px, 10 | ) 11 | ), 12 | $dfr-config, 13 | ); 14 | -------------------------------------------------------------------------------- /src/abstracts/config/_font.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | /* stylelint-disable */ 4 | $dfr-config: map.deep-merge( 5 | ( 6 | 'font': ( 7 | 'family': ( 8 | 'sans-serif': ( 9 | -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 10 | Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif 11 | ), 12 | 'mono': ( 13 | Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace 14 | ), 15 | ), 16 | 'weight': normal, 17 | 'path': '../fonts', 18 | 'size': ( 19 | 'xs': $dfr--base-fontSize / 1.5, 20 | 's': $dfr--base-fontSize / 1.25, 21 | 'l': $dfr--base-fontSize * 1.25, 22 | 'xl': $dfr--base-fontSize * 1.5, 23 | ), 24 | ) 25 | ), 26 | $dfr-config, 27 | ); 28 | /* stylelint-enable */ 29 | -------------------------------------------------------------------------------- /src/abstracts/config/_heading.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'heading': ( 6 | 'font': ( 7 | 'weight': 500, 8 | 'size': ( 9 | ($dfr--base-fontSize + 26), 10 | ($dfr--base-fontSize + 20), 11 | ($dfr--base-fontSize + 14), 12 | ($dfr--base-fontSize + 8), 13 | ($dfr--base-fontSize + 4), 14 | ($dfr--base-fontSize + 2), 15 | ) 16 | ), 17 | 'line-height': ($dfr--base-lineHeight / 1.2), 18 | 'margin': ( 19 | 'bottom': $dfr--y-spacing, 20 | ), 21 | ), 22 | ), 23 | $dfr-config, 24 | ); 25 | -------------------------------------------------------------------------------- /src/abstracts/config/_spacing.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | 3 | $dfr-config: map.deep-merge( 4 | ( 5 | 'spacing': ( 6 | 'default': ( 7 | 'xs': ( 8 | 'x': $dfr--x-spacing / 2.5, 9 | 'y': $dfr--y-spacing / 2.5, 10 | ), 11 | 's': ( 12 | 'x': $dfr--x-spacing / 1.5, 13 | 'y': $dfr--y-spacing / 1.5, 14 | ), 15 | 'm': ( 16 | 'x': $dfr--base-spacing, 17 | 'y': $dfr--base-spacing, 18 | ), 19 | 'l': ( 20 | 'x': $dfr--x-spacing * 2, 21 | 'y': $dfr--y-spacing * 2, 22 | ), 23 | 'xl': ( 24 | 'x': $dfr--x-spacing * 4, 25 | 'y': $dfr--y-spacing * 4, 26 | ), 27 | ), 28 | ), 29 | ), 30 | $dfr-config, 31 | ); 32 | -------------------------------------------------------------------------------- /src/abstracts/functions/_convert-unit.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:math'; 2 | @use 'sass:string'; 3 | @use 'sass:meta'; 4 | @use '../helper-functions' as utils; 5 | 6 | // --------------------------------------------------------- 7 | // convert-unit 8 | // Convert number's pixel unit to em/rem 9 | // 10 | // Required arguments: 11 | // `$number` Number 12 | // `$unit` String 13 | // `$base` Number *predefined* 14 | // 15 | // Example of use: 16 | // convert-unit(15px, 'rem') 17 | // convert-unit(15px, 'em') 18 | // 19 | // @return List 20 | // --------------------------------------------------------- 21 | @function convert-unit ($number, $unit, $base: $dfr--base-fontSize) { 22 | @if meta.type-of($number) != 'number' { 23 | @error 'The argument $number: `#{$number}` is of incorrect type: `#{type-of($number)}`. Type of `Number` is required!'; 24 | } 25 | @else if math.unit($number) != 'px' { 26 | @error 'The argument $number: `#{$number}` has incorrect unit: `#{unit($number)}`. Unit of `px` is required!'; 27 | } 28 | @else if $unit != 'em' and $unit != 'rem' { 29 | @error 'The argument $unit: `#{$unit}` has incorrect value: `#{$unit}`. Value of `em` or `rem` is required!'; 30 | } 31 | 32 | @return math.div(utils.strip-unit($number), utils.strip-unit($base)) + string.unquote($unit); 33 | } 34 | -------------------------------------------------------------------------------- /src/abstracts/functions/_get.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:string'; 2 | @use 'sass:map'; 3 | 4 | // --------------------------------------------------------- 5 | // get 6 | // Search for any value contained within nested maps, by using 7 | // dot notation as the key argument 8 | // 9 | // Required arguments: 10 | // `$key` String 11 | // 12 | // Example of use: 13 | // get('border.radius.xs') 14 | // 15 | // @return Anything 16 | // --------------------------------------------------------- 17 | @function get ($key, $map: $dfr-config) { 18 | $keys: string.split($key, '.'); 19 | 20 | @if not map.has-key($map, $keys...) { 21 | @error 'The argument $map: `#{$map}` doesn\'t have some of the $keys: `#{$keys}`!'; 22 | } 23 | 24 | @return map.get($map, $keys...); 25 | } 26 | -------------------------------------------------------------------------------- /src/abstracts/functions/_grid-calc.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:meta'; 2 | @use 'sass:string'; 3 | 4 | // --------------------------------------------------------- 5 | // grid-calc 6 | // Formula that calculates percentage of the column(s) 7 | // 8 | // Required arguments: 9 | // `$number` Number 10 | // `$columns` Number *predefined* 11 | // 12 | // Example of use: 13 | // grid-calc(3, 12) 14 | // 15 | // @return String 16 | // --------------------------------------------------------- 17 | @function grid-calc ($number, $columns: $dfr-grid-columns) { 18 | @if meta.type-of($number) != 'number' { 19 | @error 'The argument $number: `#{$number}` is of incorrect type: `#{meta.type-of($number)}`. Type of `Number` is required!'; 20 | } 21 | @else if meta.type-of($columns) != 'number' { 22 | @error 'The argument $columns: `#{$columns}` is of incorrect type: `#{meta.type-of($columns)}`. Type of `Number` is required!'; 23 | } 24 | 25 | @return string.unquote((100 / $columns * $number) + '%'); 26 | } 27 | -------------------------------------------------------------------------------- /src/abstracts/functions/helpers/_str-replace.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // str-replace 3 | // Replace occurence of a string 4 | // 5 | // Required arguments: 6 | // `$string` String 7 | // `$search` String 8 | // `$replace` String *predefined* 9 | // 10 | // Example of use: 11 | // str-replace('This is just an example', 'just', 'not') 12 | // 13 | // @return String 14 | // --------------------------------------------------------- 15 | @function str-replace ($string, $search, $replace: '') { 16 | @if type-of($string) != 'string' { 17 | @error 'The argument $string: `#{$string}` is of incorrect type: `#{type-of($string)}`. Type of `String` is required!'; 18 | } 19 | @else if type-of($search) != 'string' { 20 | @error 'The argument $search: `#{$search}` is of incorrect type: `#{type-of($search)}`. Type of `String` is required!'; 21 | } 22 | @else if type-of($replace) != 'string' { 23 | @error 'The argument $search: `#{$search}` is of incorrect type: `#{type-of($search)}`. Type of `String` is required!'; 24 | } 25 | 26 | $index: str-index($string, $search); 27 | 28 | @if $index { 29 | @return str-slice($string, 1, $index - 1) + $replace + 30 | str-replace( 31 | str-slice($string, $index + str-length($search)), 32 | $search, $replace 33 | ); 34 | } 35 | 36 | @return $string; 37 | } 38 | -------------------------------------------------------------------------------- /src/abstracts/functions/helpers/_strip-unit.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:math'; 2 | @use 'sass:meta'; 3 | 4 | // --------------------------------------------------------- 5 | // strip-unit 6 | // Make a number unitless 7 | // 8 | // Required arguments: 9 | // `$number` String 10 | // 11 | // Example of use: 12 | // strip-unit(15px) 13 | // 14 | // @return Number 15 | // --------------------------------------------------------- 16 | @function strip-unit ($number) { 17 | @if meta.type-of($number) != 'number' { 18 | @error 'The argument $number: `#{$number}` is of incorrect type: `#{type-of($number)}`. Type of `Number` is required!'; 19 | } 20 | @else if math.is-unitless($number) { 21 | @warn 'The argument $number: `#{$number}` has no unit. Unit is required!'; 22 | } 23 | 24 | @return math.div($number, ($number * 0 + 1)); 25 | } 26 | -------------------------------------------------------------------------------- /src/abstracts/functions/helpers/_yiq.scss: -------------------------------------------------------------------------------- 1 | @function yiq-test ($color, $threshold) { 2 | $r: red($color); 3 | $g: green($color); 4 | $b: blue($color); 5 | 6 | $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; 7 | 8 | @return if($yiq >= $threshold, true, false); 9 | } 10 | 11 | @function yiq ($base, $dark: $dfr-yiq-color-dark, $light: $dfr-yiq-color-light, $threshold: $dfr-yiq-threshold) { 12 | @return if(yiq-test($base, $threshold), $dark, $light); 13 | } 14 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // border-radius 3 | // Set predefined or a custom radius on an element 4 | // 5 | // Required arguments: 6 | // `$value` String/Number 7 | // 8 | // Optional arguments: 9 | // `$properties` List 10 | // 11 | // Allowed `$value`(s) as namespaces can be found at: 12 | // "abstracts/iterators/border-radius.scss" @ $dfr-borderRadius 13 | // 14 | // Examples of use: 15 | // @include border-radius(5px) 16 | // @include border-radius('xs') 17 | // @include border-radius('m', ('top')) 18 | // @include border-radius('xl', ('top-left', 'bottom-right')) 19 | // 20 | // *Attention* 21 | // Improper use of this mixin can output duplicate radius 22 | // For example, if you use $properties as ('top', 'top-left') 23 | // Since 'top' means top-right and top-left, it would output: 24 | // top-right, top-left, top-left 25 | // --------------------------------------------------------- 26 | @mixin border-radius ($value, $properties: ()) { 27 | @if type-of($value) == 'string' { 28 | $value: get('border.radius.#{$value}'); 29 | } 30 | 31 | @if type-of($value) == 'number' and unit($value) != '%' { 32 | $value: convert-unit($value, 'rem'); 33 | } 34 | 35 | $_properties: (); 36 | 37 | @each $property in $properties { 38 | @if $property == 'top' or $property == 'bottom' { 39 | $_properties: join($_properties, ('#{$property}-right', '#{$property}-left')); 40 | } 41 | @else if $property == 'left' or $property == 'right' { 42 | $_properties: join($_properties, ('top-#{$property}', 'bottom-#{$property}')); 43 | } 44 | @else { 45 | $_properties: join($_properties, $property); 46 | } 47 | } 48 | 49 | @if length($_properties) > 0 { 50 | @each $_property in $_properties { 51 | border-#{$_property}-radius: $value; 52 | } 53 | } 54 | @else { 55 | border-radius: $value; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_color.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // color 3 | // Set predefined background and text color 4 | // 5 | // Required arguments: 6 | // `$namespace` String 7 | // 8 | // Allowed `$value`(s) as namespaces can be found at: 9 | // "abstracts/config/color.scss" 10 | // 11 | // Examples of use: 12 | // @include color('almost-dark') 13 | // --------------------------------------------------------- 14 | @mixin color ($namespace) { 15 | $color: get('color.#{$namespace}'); 16 | 17 | background-color: $color; 18 | color: yiq($color); 19 | } 20 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_font-face.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // font-face 3 | // Improved and simplified use of `@font-face`(s) 4 | // 5 | // Required arguments: 6 | // `$family` String 7 | // `$name` String 8 | // `$weight` String 9 | // `$style` String 10 | // `$types` List 11 | // `$dir` String 12 | // `$path` String *predefined* 13 | // 14 | // Example of use: 15 | // @include font-face('Myriad Pro', 'Myriad-Pro-Light', 300, 'normal', 'myriad-pro') 16 | // --------------------------------------------------------- 17 | @mixin font-face ($family, $name, $weight, $style, $dir, $types: ('woff2', 'woff'), $path: $dfr-font-path) { 18 | $path: if( 19 | str-slice($path, -1) == '/', 20 | str-slice($path, 0, -2), 21 | $path 22 | ); 23 | 24 | $path: '#{$path}/#{$dir}/#{$name}'; 25 | $src: null; 26 | 27 | @each $type in $types { 28 | // stylelint-disable function-url-quotes 29 | $src: append($src, url(quote($path + '.' + $type)) format(quote($type)), comma); 30 | // stylelint-enable function-url-quotes 31 | } 32 | 33 | @font-face { 34 | font: { 35 | family: quote($family); 36 | weight: $weight; 37 | style: $style; 38 | } 39 | 40 | src: $src; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_grid-generator.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // grid-generator 3 | // Helps to generate the grid easier and cleaner 4 | // 5 | // Required arguments: 6 | // `$namespace` String 7 | // `$number` Number 8 | // 9 | // Allowed `$namespace`(s) can be found at: 10 | // "abstracts/variables/breakpoints.scss" @ $dfr-media-breakpoints 11 | // 12 | // Example of use: 13 | // @include grid-generator('xs', 1) 14 | // --------------------------------------------------------- 15 | @mixin grid-generator ($namespace, $number) { 16 | $dfr-grid-formula: grid-calc($number); 17 | 18 | $suffix: if( 19 | $namespace == 'xs', 20 | $number, 21 | #{$namespace}-#{$number} 22 | ); 23 | 24 | .column { 25 | &.is-#{$suffix} { 26 | flex: { 27 | grow: 0; 28 | shrink: 0; 29 | basis: $dfr-grid-formula; 30 | } 31 | } 32 | } 33 | 34 | .has-offset { 35 | &-#{$suffix} { 36 | margin-left: $dfr-grid-formula; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_media-queries.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // media-min 3 | // Simplifies the use of `@media` queries 4 | // 5 | // Required arguments: 6 | // `$namespace` String 7 | // 8 | // Allowed `$namespace`(s) can be found at: 9 | // "abstracts/config/breakpoint.scss" 10 | // 11 | // Example of use: 12 | // @include media-min('xs') { ... } 13 | // --------------------------------------------------------- 14 | @mixin media-min ($namespace) { 15 | @media (min-width: convert-unit(get('breakpoint.#{$namespace}'), 'em')) { 16 | @content; 17 | } 18 | } 19 | 20 | // --------------------------------------------------------- 21 | // media-max 22 | // Simplifies the use of `@media` queries 23 | // 24 | // Required arguments: 25 | // `$namespace` String 26 | // 27 | // Allowed `$namespace`(s) can be found at: 28 | // "abstracts/config/breakpoint.scss" @ $dfr-breakpoint 29 | // 30 | // Example of use: 31 | // @include media-max('xs') { ... } 32 | // --------------------------------------------------------- 33 | @mixin media-max ($namespace) { 34 | @media (max-width: convert-unit(get('breakpoints.#{$namespace}') - 1, 'em')) { 35 | @content; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_pseudo-states.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // not 3 | // The ability to list more than one selector 4 | // 5 | // Required arguments: 6 | // `$rules...` 7 | // 8 | // Examples of use: 9 | // .el { @include not('.active') { ... } } 10 | // --------------------------------------------------------- 11 | @mixin not ($rules...) { 12 | $not-rules: ''; 13 | 14 | @each $rule in $rules { 15 | $not-rules: $not-rules + ':not(#{$rule})'; 16 | } 17 | 18 | &#{$not-rules} { 19 | @content; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/abstracts/mixins/_spacing.scss: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------- 2 | // margin 3 | // Set predefined margin on an element 4 | // 5 | // Required arguments: 6 | // `$namespace` String 7 | // `$properties` List 8 | // 9 | // Allowed `$namespace`(s) can be found at: 10 | // "abstracts/config/_spacing.scss" @ $dfr-spacing 11 | // 12 | // Allowed `$sides`: 13 | // 'top', 'right', 'bottom', 'left', 'x', 'y' 14 | // 15 | // Example of use: 16 | // @include margin('xs', 'x') 17 | // @include margin('xs', ('bottom', 'left')) 18 | // @include margin('xs', ('y', 'left')) 19 | // 20 | // *Attention* 21 | // Improper use of this mixin can output duplicate margin 22 | // For example, if you use $sides as ('x', 'left') 23 | // Since 'x' means right and left, it would output: 24 | // margin-right, margin-left, margin-left 25 | // --------------------------------------------------------- 26 | @mixin margin ($namespace, $properties: (''), $type: 'default') { 27 | @include spacing($namespace, $properties, $type, 'margin'); 28 | } 29 | 30 | // --------------------------------------------------------- 31 | // padding 32 | // Set predefined padding on an element 33 | // 34 | // Required arguments: 35 | // `$namespace` String 36 | // `$properties` List 37 | // 38 | // Allowed `$namespace`(s) can be found at: 39 | // "abstracts/variables/_global.scss" @ $dfr-spacing 40 | // 41 | // Allowed `$sides`: 42 | // 'top', 'right', 'bottom', 'left', 'x', 'y' 43 | // 44 | // Examples of use: 45 | // @include padding('xs', 'x') 46 | // @include padding('xs', ('bottom', 'left')) 47 | // @include padding('xs', ('y', 'left')) 48 | // 49 | // *Attention* 50 | // Improper use of this mixin can output duplicate padding 51 | // For example, if you use $sides as ('x', 'left') 52 | // Since 'x' means right and left, it would output: 53 | // padding-right, padding-left, padding-left 54 | // --------------------------------------------------------- 55 | @mixin padding ($namespace, $properties: (''), $type: 'default') { 56 | @include spacing($namespace, $properties, $type, 'padding'); 57 | } 58 | 59 | // --------------------------------------------------------- 60 | // spacing 61 | // Used in helper `@mixin's` (margin & padding) 62 | // --------------------------------------------------------- 63 | @mixin spacing ($namespace, $sides, $type, $property) { 64 | $orientations: ( 65 | 'x': ('right', 'left'), 66 | 'y': ('top', 'bottom') 67 | ); 68 | $map: get('spacing.#{$type}'); 69 | $typeCheck: type-of($namespace) == 'string' and $namespace != 'auto' and $namespace != 'unset'; 70 | $size: $namespace; // instead of null, maybe it's a zero which should be unitless 71 | 72 | @if type-of($namespace) == 'number' and not unitless($namespace) { 73 | $size: convert-unit($namespace, 'rem'); 74 | } 75 | @else if $namespace == 'auto' or $namespace == 'unset' { 76 | $size: unquote($namespace); 77 | } 78 | 79 | @each $side in $sides { 80 | @if $side == 'x' or $side == 'y' { 81 | $axis: map-get($orientations, $side); 82 | 83 | @if $typeCheck { 84 | $size: convert-unit(get('#{$namespace}.#{$side}', $map), 'rem'); 85 | } 86 | 87 | @for $i from 1 through length($axis) { 88 | #{$property}-#{nth($axis, $i)}: $size; 89 | } 90 | } 91 | @else if index(map-get($orientations, 'x'), $side) != null { 92 | @if $typeCheck { 93 | $size: convert-unit(get('#{$namespace}.x', $map), 'rem'); 94 | } 95 | 96 | #{$property}-#{$side}: $size; 97 | } 98 | @else if index(map-get($orientations, 'y'), $side) != null { 99 | @if $typeCheck { 100 | $size: convert-unit(get('#{$namespace}.y', $map), 'rem'); 101 | } 102 | 103 | #{$property}-#{$side}: $size; 104 | } 105 | @else { 106 | @if $typeCheck { 107 | $sizeY: convert-unit(get('#{$namespace}.y', $map), 'rem'); 108 | $sizeX: convert-unit(get('#{$namespace}.x', $map), 'rem'); 109 | 110 | #{$property}: if($sizeY == $sizeX, $sizeY, $sizeY $sizeX); 111 | } 112 | @else { 113 | #{$property}: $size; 114 | } 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/abstracts/mixins/helpers/_button-sizes.scss: -------------------------------------------------------------------------------- 1 | @mixin button-sizes ($sizes) { 2 | @each $key, $value in $sizes { 3 | @if $key != 'm' { 4 | &.is-#{$key} { 5 | @include padding($key, 'y', 'button'); 6 | @include padding($key, 'x', 'button'); 7 | 8 | font-size: convert-unit(get('font.size.#{$key}'), 'rem'); 9 | } 10 | } 11 | } 12 | 13 | &.is-full { 14 | width: 100%; 15 | display: block; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/abstracts/mixins/helpers/_focus.scss: -------------------------------------------------------------------------------- 1 | @mixin focus { 2 | &:focus { 3 | outline: 0; 4 | box-shadow: 0 0 0 2px rgba(get('color.medium'), .4); 5 | z-index: 1; 6 | } 7 | } 8 | 9 | @mixin action-focus { 10 | &:focus ~ .action-label::before { 11 | box-shadow: 0 0 0 2px rgba(get('color.medium'), .4); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/abstracts/mixins/helpers/_input-sizes.scss: -------------------------------------------------------------------------------- 1 | @mixin input-sizes ($sizes) { 2 | @each $key, $value in $sizes { 3 | @if $key != 'm' { 4 | &.is-#{$key} { 5 | @include padding($key, 'y', 'button'); 6 | @include padding($key, 'x', 'button'); 7 | 8 | font-size: convert-unit(get('font.size.#{$key}'), 'rem'); 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/base/_@reset.scss: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | } 6 | 7 | :root { 8 | font-size: $dfr--root-fontSize-small; 9 | 10 | @include media-min('l') { 11 | font-size: $dfr--root-fontSize-large; 12 | } 13 | } 14 | 15 | body { 16 | margin: 0; 17 | line-height: $dfr--base-lineHeight; 18 | font: { 19 | size: $dfr--base-fontSize; 20 | weight: get('font.weight'); 21 | family: get('font.family.sans-serif'); 22 | } 23 | 24 | color: get('color.almost-dark'); 25 | } 26 | 27 | a { 28 | text-decoration: none; 29 | } 30 | 31 | hr { 32 | border: none; 33 | 34 | border: { 35 | top-width: get('border.width'); 36 | top-style: get('border.style'); 37 | top-color: get('border.color'); 38 | } 39 | 40 | @include margin('xl', 'y'); 41 | } 42 | 43 | ul, 44 | ol { 45 | @include margin(0, 'y'); 46 | @include padding('l', 'left'); 47 | } 48 | 49 | pre, 50 | code, 51 | kbd { 52 | font: { 53 | family: get('font.family.mono'); 54 | size: 1rem; 55 | } 56 | } 57 | 58 | pre { 59 | @include margin(0, 'y'); 60 | } 61 | 62 | img { 63 | vertical-align: middle; 64 | } 65 | 66 | p { 67 | @include margin(0, 'y'); 68 | } 69 | 70 | // h1 to h6 71 | %dfr-headings-reset { 72 | @include margin(0, 'y'); 73 | 74 | font-weight: 600; 75 | } 76 | 77 | @for $i from 1 through 6 { 78 | h#{$i} { 79 | @extend %dfr-headings-reset; 80 | } 81 | } 82 | 83 | small { 84 | font-size: 80%; 85 | } 86 | 87 | iframe { 88 | border: none; 89 | } 90 | 91 | table { 92 | border-collapse: collapse; 93 | } 94 | 95 | textarea { 96 | resize: none; 97 | } 98 | -------------------------------------------------------------------------------- /src/base/_animations.scss: -------------------------------------------------------------------------------- 1 | @keyframes dfr-spin { 2 | from { 3 | transform: translate(-50%, -50%) rotate(0deg); 4 | } 5 | 6 | to { 7 | transform: translate(-50%, -50%) rotate(360deg); 8 | } 9 | } 10 | 11 | @keyframes dfr-slide { 12 | from { 13 | opacity: 0; 14 | transform: translateY(-50%); 15 | } 16 | 17 | to { 18 | opacity: 1; 19 | transform: translateY(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/base/_container.scss: -------------------------------------------------------------------------------- 1 | %dfr-container-common { 2 | padding-right: convert-unit($dfr-grid-gutter, 'rem'); 3 | padding-left: convert-unit($dfr-grid-gutter, 'rem'); 4 | } 5 | 6 | .container { 7 | @extend %dfr-container-common; 8 | 9 | @include margin(auto, 'x'); 10 | 11 | @each $namespace, $size in get('container') { 12 | @include media-min($namespace) { 13 | max-width: convert-unit($size, 'rem'); 14 | } 15 | } 16 | 17 | &-fluid { 18 | @extend %dfr-container-common; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/base/_grid.scss: -------------------------------------------------------------------------------- 1 | // Use predefined grid gutter and convert it to `rem` unit 2 | $dfr-grid-gutter-rem: convert-unit($dfr-grid-gutter, 'rem'); 3 | 4 | .columns { 5 | display: flex; 6 | flex-wrap: wrap; 7 | 8 | &:not(.are-gapless) { 9 | margin: { 10 | right: -$dfr-grid-gutter-rem; 11 | left: -$dfr-grid-gutter-rem; 12 | } 13 | } 14 | 15 | &.are-reversed { 16 | flex-direction: row-reverse; 17 | } 18 | 19 | &.are-gapless { 20 | .column { 21 | // stylelint-disable length-zero-no-unit 22 | @include padding(0px, 'x'); 23 | // stylelint-enable length-zero-no-unit 24 | } 25 | } 26 | 27 | &.are-at-start { 28 | justify-content: flex-start; 29 | } 30 | 31 | &.are-at-end { 32 | justify-content: flex-end; 33 | } 34 | 35 | &.are-at-center { 36 | justify-content: center; 37 | } 38 | } 39 | 40 | .column { 41 | width: 100%; 42 | min-height: 1px; 43 | padding: $dfr-grid-gutter-rem; 44 | 45 | &:not([class*='is-']) { 46 | flex: { 47 | basis: 0; 48 | grow: 1; 49 | } 50 | } 51 | } 52 | 53 | @each $namespace, $size in get('breakpoint') { 54 | @if type-of($size) == 'number' { 55 | @include media-min($namespace) { 56 | @for $i from 1 through $dfr-grid-columns { 57 | @include grid-generator($namespace, $i); 58 | } 59 | 60 | .column { 61 | &.is-#{$namespace} { 62 | flex: { 63 | basis: 0; 64 | grow: 1; 65 | } 66 | 67 | &-smart { 68 | width: auto; 69 | flex: { 70 | grow: 0; 71 | shrink: 0; 72 | basis: auto; 73 | } 74 | } 75 | } 76 | } 77 | } 78 | } 79 | @else { 80 | .column { 81 | &.is-smart { 82 | width: auto; 83 | flex: { 84 | grow: 0; 85 | shrink: 0; 86 | basis: auto; 87 | } 88 | } 89 | } 90 | 91 | @for $i from 1 through $dfr-grid-columns { 92 | @include grid-generator($namespace, $i); 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/base/_helpers.scss: -------------------------------------------------------------------------------- 1 | .group { 2 | @include margin('m', 'bottom'); 3 | 4 | &.has-spacing { 5 | .group-items > :not(:last-child) { 6 | @include margin('m', 'right'); 7 | } 8 | } 9 | 10 | &-items { 11 | position: relative; 12 | display: flex; 13 | align-items: center; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/base/_print.scss: -------------------------------------------------------------------------------- 1 | //stylelint-disable declaration-no-important, selector-no-qualifying-type 2 | @media print { 3 | *, 4 | *::before, 5 | *::after { 6 | background-color: transparent !important; 7 | color: #000 !important; 8 | box-shadow: none !important; 9 | text-shadow: none !important; 10 | } 11 | 12 | a, 13 | a:visited { 14 | text-decoration: underline; 15 | } 16 | 17 | a[href]::after { 18 | content: ' (' attr(href) ')'; 19 | } 20 | 21 | abbr[title]::after { 22 | content: ' (' attr(title) ')'; 23 | } 24 | 25 | a[href^='#']::after, 26 | a[href^='javascript:']::after { 27 | content: ''; 28 | } 29 | 30 | pre { 31 | white-space: pre-wrap !important; 32 | } 33 | 34 | pre, 35 | blockquote { 36 | border: 1px solid #999; 37 | page-break-inside: avoid; 38 | } 39 | 40 | thead { 41 | display: table-header-group; 42 | } 43 | 44 | tr, 45 | img { 46 | page-break-inside: avoid; 47 | } 48 | 49 | p, 50 | h2, 51 | h3 { 52 | orphans: 3; 53 | widows: 3; 54 | } 55 | 56 | h2, 57 | h3 { 58 | page-break-after: avoid; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/base/_typography.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable font-weight-notation 2 | %dfr-headings-common { 3 | font-weight: get('heading.font.weight'); 4 | line-height: get('heading.line-height'); 5 | margin-bottom: convert-unit(get('heading.margin.bottom'), 'rem'); 6 | } 7 | // stylelint-enable font-weight-notation 8 | 9 | @each $size in get('heading.font.size') { 10 | $index: index(get('heading.font.size'), $size); 11 | 12 | .title-#{$index} { 13 | @extend %dfr-headings-common; 14 | 15 | font-size: convert-unit($size, 'rem'); 16 | } 17 | } 18 | 19 | blockquote { 20 | @include padding('s'); 21 | 22 | margin-left: 0; 23 | border-left: { 24 | width: get('border.width'); 25 | style: get('border.style'); 26 | color: get('border.color'); 27 | } 28 | 29 | p:last-child { 30 | margin-bottom: 0; 31 | } 32 | 33 | cite { 34 | color: get('color.medium'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dvlden/differs-sass/af898798ce5f0ee85c27b5b120f8fcbfcf3acade/src/components/.gitkeep -------------------------------------------------------------------------------- /src/components/_action.scss: -------------------------------------------------------------------------------- 1 | .action { 2 | position: relative; 3 | display: flex; 4 | align-items: center; 5 | 6 | @include padding('l', 'left'); 7 | 8 | &.as-switch { 9 | padding-left: 50px; 10 | 11 | .action-element { 12 | &:checked ~ .action-label { 13 | &::before { 14 | background-color: get('color.light'); 15 | } 16 | 17 | &::after { 18 | background-color: get('color.dark'); 19 | transform: translateX(27px) translateY(-50%); 20 | } 21 | } 22 | } 23 | 24 | .action-label { 25 | &::before { 26 | width: 40px; 27 | left: -50px; 28 | } 29 | 30 | &::after { 31 | background-color: get('color.almost-light'); 32 | height: 14px; 33 | width: 14px; 34 | left: -54px; 35 | } 36 | } 37 | } 38 | 39 | &-element { 40 | position: absolute; 41 | top: 0; 42 | right: 0; 43 | z-index: -1; 44 | opacity: 0; 45 | 46 | @include action-focus; 47 | 48 | &:checked ~ .action-label { 49 | &::before { 50 | background-color: get('color.light'); 51 | } 52 | 53 | &::after { 54 | background-color: get('color.dark'); 55 | } 56 | } 57 | 58 | &[type='radio'] + .action-label { 59 | &::before, 60 | &::after { 61 | border-radius: 50%; 62 | } 63 | } 64 | 65 | &:disabled + .action-label { 66 | opacity: .6; 67 | } 68 | } 69 | 70 | &-label { 71 | position: relative; 72 | cursor: pointer; 73 | 74 | &::before, 75 | &::after { 76 | content: ''; 77 | position: absolute; 78 | top: 50%; 79 | left: -#{get('spacing.default.l.x')}; 80 | display: block; 81 | } 82 | 83 | &::before { 84 | width: 20px; 85 | height: 20px; 86 | background-color: get('color.light'); 87 | transform: translate(0%, -50%); 88 | transition: background-color .1s ease-in-out; 89 | } 90 | 91 | &::after { 92 | width: 10px; 93 | height: 10px; 94 | transform: translate(50%, -50%); 95 | transition: transform .2s ease-in-out, background-color .1s ease-in-out; 96 | } 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/components/_button.scss: -------------------------------------------------------------------------------- 1 | .button { 2 | background-color: transparent; 3 | display: inline-block; 4 | line-height: $dfr--base-lineHeight; 5 | text-align: center; 6 | vertical-align: middle; 7 | cursor: pointer; 8 | user-select: none; 9 | font: { 10 | family: inherit; 11 | weight: get('font.weight'); 12 | size: convert-unit($dfr--base-fontSize, 'rem'); 13 | } 14 | border: { 15 | width: get('border.width'); 16 | style: get('border.style'); 17 | color: transparent; 18 | } // without this, filled button would look weird - next to an outlined button 19 | 20 | @include padding('m', 'y', 'button'); 21 | @include padding('m', 'x', 'button'); 22 | @include focus; 23 | 24 | &:disabled, 25 | &.is-disabled { 26 | opacity: .5; 27 | cursor: not-allowed; 28 | box-shadow: none; 29 | } 30 | 31 | &.is-disabled, 32 | &.is-loading { 33 | pointer-events: none; 34 | } 35 | 36 | &.is-light { 37 | @include color('light'); 38 | 39 | @include not(':disabled') { 40 | &:hover { 41 | @include color('almost-light'); 42 | } 43 | 44 | &:active { 45 | @include color('almost-dark'); 46 | } 47 | } 48 | 49 | &.is-loading { 50 | &::after { 51 | border: { 52 | top-color: get('color.almost-dark'); 53 | left-color: get('color.almost-dark'); 54 | } 55 | } 56 | 57 | @include not(':disabled') { 58 | &:hover { 59 | &::after { 60 | border: { 61 | top-color: get('color.almost-dark'); 62 | left-color: get('color.almost-dark'); 63 | } 64 | } 65 | } 66 | 67 | &:active { 68 | &::after { 69 | border: { 70 | top-color: get('color.light'); 71 | left-color: get('color.light'); 72 | } 73 | } 74 | } 75 | } 76 | } 77 | 78 | &.is-outlined { 79 | color: get('color.light'); 80 | border-color: get('color.light'); 81 | 82 | @include not(':disabled') { 83 | &:hover { 84 | @include color('light'); 85 | 86 | border-color: get('color.light'); 87 | } 88 | 89 | &:active { 90 | @include color('almost-light'); 91 | 92 | border-color: get('color.almost-light'); 93 | } 94 | } 95 | 96 | &.is-loading { 97 | &::after { 98 | border: { 99 | top-color: get('color.light'); 100 | left-color: get('color.light'); 101 | } 102 | } 103 | 104 | @include not(':disabled') { 105 | &:hover { 106 | &::after { 107 | border: { 108 | top-color: get('color.medium'); 109 | left-color: get('color.medium'); 110 | } 111 | } 112 | } 113 | 114 | &:active { 115 | &::after { 116 | border: { 117 | top-color: get('color.dark'); 118 | left-color: get('color.dark'); 119 | } 120 | } 121 | } 122 | } 123 | } 124 | } 125 | 126 | &.as-close { 127 | &::before, 128 | &::after { 129 | background-color: get('color.dark'); 130 | } 131 | 132 | &:active { 133 | &::before, 134 | &::after { 135 | background-color: get('color.light'); 136 | } 137 | } 138 | } 139 | } 140 | 141 | &.is-dark { 142 | @include color('dark'); 143 | 144 | @include not(':disabled') { 145 | &:hover { 146 | @include color('almost-dark'); 147 | } 148 | 149 | &:active { 150 | @include color('almost-light'); 151 | } 152 | } 153 | 154 | &.is-loading { 155 | &::after { 156 | border: { 157 | top-color: get('color.almost-light'); 158 | left-color: get('color.almost-light'); 159 | } 160 | } 161 | 162 | @include not(':disabled') { 163 | &:hover { 164 | &::after { 165 | border: { 166 | top-color: get('color.almost-light'); 167 | left-color: get('color.almost-light'); 168 | } 169 | } 170 | } 171 | 172 | &:active { 173 | &::after { 174 | border: { 175 | top-color: get('color.dark'); 176 | left-color: get('color.dark'); 177 | } 178 | } 179 | } 180 | } 181 | } 182 | 183 | &.is-outlined { 184 | color: get('color.dark'); 185 | border-color: get('color.dark'); 186 | 187 | @include not(':disabled') { 188 | &:hover { 189 | @include color('dark'); 190 | 191 | border-color: get('color.dark'); 192 | } 193 | 194 | &:active { 195 | @include color('almost-dark'); 196 | 197 | border-color: get('color.almost-dark'); 198 | } 199 | } 200 | 201 | &.is-loading { 202 | &::after { 203 | border: { 204 | top-color: get('color.dark'); 205 | left-color: get('color.dark'); 206 | } 207 | } 208 | 209 | @include not(':disabled') { 210 | &:hover { 211 | &::after { 212 | border: { 213 | top-color: get('color.medium'); 214 | left-color: get('color.medium'); 215 | } 216 | } 217 | } 218 | 219 | &:active { 220 | &::after { 221 | border: { 222 | top-color: get('color.light'); 223 | left-color: get('color.light'); 224 | } 225 | } 226 | } 227 | } 228 | } 229 | } 230 | 231 | &.as-close { 232 | &::before, 233 | &::after { 234 | background-color: get('color.light'); 235 | } 236 | 237 | &:active { 238 | &::before, 239 | &::after { 240 | background-color: get('color.dark'); 241 | } 242 | } 243 | } 244 | } 245 | 246 | &.is-outlined { 247 | background-color: transparent; 248 | } 249 | 250 | &.is-loading { 251 | position: relative; 252 | color: transparent !important; /* stylelint-disable-line declaration-no-important */ 253 | 254 | &::after { 255 | content: ''; 256 | position: absolute; 257 | top: 50%; 258 | left: 50%; 259 | border: { 260 | width: 2px; 261 | style: solid; 262 | right-color: transparent; 263 | bottom-color: transparent; 264 | } 265 | 266 | width: 1em; 267 | height: 1em; 268 | transform: translate(-50%, -50%); 269 | animation: dfr-spin .8s ease infinite; 270 | 271 | @include border-radius('f'); 272 | } 273 | } 274 | 275 | @include button-sizes(get('spacing.button')); 276 | 277 | &.as-close { 278 | background-color: transparent; 279 | position: relative; 280 | font-weight: 600; 281 | padding: convert-unit(get('spacing.button.m.x'), 'rem'); 282 | 283 | @include border-radius('f'); 284 | 285 | &::before, 286 | &::after { 287 | content: ''; 288 | position: absolute; 289 | top: 50%; 290 | left: 50%; 291 | width: 2px; 292 | height: 50%; 293 | background-color: get('color.almost-dark'); 294 | 295 | @include border-radius('xs'); 296 | } 297 | 298 | &::before { 299 | transform: translate(-50%, -50%) rotate(45deg); 300 | } 301 | 302 | &::after { 303 | transform: translate(-50%, -50%) rotate(-45deg); 304 | } 305 | 306 | &.is-xs { 307 | padding: convert-unit(get('spacing.button.xs.x'), 'rem'); 308 | } 309 | 310 | &.is-s { 311 | padding: convert-unit(get('spacing.button.s.x'), 'rem'); 312 | } 313 | 314 | &.is-l { 315 | padding: convert-unit(get('spacing.button.l.x'), 'rem'); 316 | } 317 | 318 | &.is-xl { 319 | padding: convert-unit(get('spacing.button.xl.x'), 'rem'); 320 | } 321 | } 322 | } 323 | -------------------------------------------------------------------------------- /src/components/_input.scss: -------------------------------------------------------------------------------- 1 | .input { 2 | display: block; 3 | width: 100%; 4 | background-color: transparent; 5 | line-height: $dfr--base-lineHeight; 6 | font: { 7 | family: inherit; 8 | weight: get('font.weight'); 9 | size: convert-unit($dfr--base-fontSize, 'rem'); 10 | } 11 | border: { 12 | width: get('border.width'); 13 | style: get('border.style'); 14 | color: transparent; 15 | } 16 | 17 | @include padding('m', 'y', 'button'); 18 | @include padding('m', 'x', 'button'); 19 | @include focus; 20 | 21 | &::placeholder { 22 | color: get('color.medium'); 23 | } 24 | 25 | &:disabled, 26 | &[readonly] { 27 | opacity: .6; 28 | } 29 | 30 | @include input-sizes(get('spacing.button')); 31 | 32 | &.is-light { 33 | @include color('light'); 34 | 35 | &.is-outlined { 36 | color: get('color.light'); 37 | border-color: get('color.light'); 38 | 39 | &::placeholder { 40 | color: get('color.almost-light'); 41 | } 42 | } 43 | } 44 | 45 | &.is-dark { 46 | @include color('dark'); 47 | 48 | &.is-outlined { 49 | color: get('color.dark'); 50 | border-color: get('color.dark'); 51 | 52 | &::placeholder { 53 | color: get('color.almost-dark'); 54 | } 55 | } 56 | } 57 | 58 | &.is-outlined { 59 | background-color: transparent; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/differs.scss: -------------------------------------------------------------------------------- 1 | // Core 2 | @forward 'abstracts/variables'; 3 | @forward 'abstracts/helper-functions'; 4 | @forward 'abstracts/config'; 5 | @forward 'abstracts/core-functions'; 6 | @forward 'abstracts/mixins'; 7 | @forward 'abstracts/helper-mixins'; 8 | 9 | // Base 10 | @forward 'base/@reset'; 11 | @forward 'base/animations'; 12 | @forward 'base/container'; 13 | @forward 'base/grid'; 14 | @forward 'base/helpers'; 15 | @forward 'base/print'; 16 | @forward 'base/typography'; 17 | 18 | // Components 19 | @forward 'components/action'; 20 | @forward 'components/button'; 21 | @forward 'components/input'; 22 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: ['stylelint-scss'], 3 | rules: { 4 | 'at-rule-empty-line-before': ['always', { 5 | except: [ 6 | 'blockless-after-same-name-blockless', 7 | 'first-nested' 8 | ], 9 | ignore: ['after-comment'], 10 | ignoreAtRules: ['else'] 11 | }], 12 | 'at-rule-no-vendor-prefix': true, 13 | 'block-no-empty': true, 14 | 'color-hex-length': 'short', 15 | 'color-named': 'never', 16 | 'color-no-invalid-hex': true, 17 | 'comment-empty-line-before': ['always', { 18 | except: ['first-nested'], 19 | ignore: ['stylelint-commands'], 20 | }], 21 | 'comment-no-empty': true, 22 | 'comment-whitespace-inside': 'always', 23 | 'custom-property-empty-line-before': ['always', { 24 | except: [ 25 | 'after-custom-property', 26 | 'first-nested', 27 | ], 28 | ignore: [ 29 | 'after-comment', 30 | 'inside-single-line-block', 31 | ], 32 | }], 33 | 'declaration-block-no-duplicate-properties': [ 34 | true, 35 | { 36 | ignore: ['consecutive-duplicates-with-different-values'] 37 | } 38 | ], 39 | 'declaration-block-no-shorthand-property-overrides': true, 40 | 'declaration-block-single-line-max-declarations': 1, 41 | 'declaration-empty-line-before': ['always', { 42 | except: [ 43 | 'after-declaration', 44 | 'first-nested', 45 | ], 46 | ignore: [ 47 | 'after-comment', 48 | 'inside-single-line-block', 49 | ], 50 | }], 51 | 'declaration-no-important': true, 52 | // 'declaration-property-value-blacklist': { 53 | // '/^border-?/': ['none'] 54 | // }, 55 | 'font-family-no-duplicate-names': true, 56 | 'font-family-no-missing-generic-family-keyword': true, 57 | 'font-family-name-quotes': 'always-where-recommended', 58 | 'font-weight-notation': 'numeric', 59 | 'function-calc-no-unspaced-operator': true, 60 | 'function-linear-gradient-no-nonstandard-direction': true, 61 | 'function-name-case': 'lower', 62 | 'function-url-quotes': 'always', 63 | 'keyframe-declaration-no-important': true, 64 | 'length-zero-no-unit': true, 65 | 'max-nesting-depth': [4, { 66 | 'ignoreAtRules': [ 67 | 'media', 68 | 'supports', 69 | 'include' 70 | ] 71 | }], 72 | 'media-feature-name-no-unknown': true, 73 | 'media-feature-name-no-vendor-prefix': true, 74 | // 'no-descending-specificity': true, 75 | 'no-duplicate-at-import-rules': true, 76 | 'no-duplicate-selectors': true, 77 | 'no-empty-source': true, 78 | 'no-invalid-double-slash-comments': true, 79 | 'property-no-unknown': true, 80 | 'property-no-vendor-prefix': true, 81 | 'rule-empty-line-before': ['always-multi-line', { 82 | except: ['first-nested'], 83 | ignore: ['after-comment'], 84 | }], 85 | 'scss/at-extend-no-missing-placeholder': true, 86 | 'scss/at-function-pattern': ['^[a-z]+(-[a-z]+)*$', { 87 | 'message': 'Function should be written in lowercase with hyphens' 88 | }], 89 | 'scss/at-import-no-partial-leading-underscore': true, 90 | 'scss/at-import-partial-extension-blacklist': ['scss'], 91 | 'scss/at-mixin-pattern': ['^[a-z]+(-[a-z]+)*$', { 92 | 'message': 'Mixin should be written in lowercase with hyphens' 93 | }], 94 | 'scss/at-rule-no-unknown': true, 95 | 'scss/dollar-variable-colon-space-after': 'at-least-one-space', 96 | 'scss/dollar-variable-colon-space-before': 'never', 97 | 'scss/dollar-variable-pattern': ['^dfr(?:--(?:base|root|[xy]))?(?:-(?!base\b|root\b|[xy]\b)[a-z]+(?:[A-Z][a-z]+)*)+$', { 98 | 'message': 'Variable must be written properly... It is predefined pattern!', 99 | 'ignore': 'local' 100 | }], 101 | 'scss/percent-placeholder-pattern': ['^[a-z]+(-[a-z]+)*$', { 102 | 'message': 'Placeholder should be written in lowercase with hyphens' 103 | }], 104 | 'scss/selector-no-redundant-nesting-selector': true, 105 | 'selector-class-pattern': ['^[a-z]+(-[a-z]+)*$', { 106 | 'message': 'Selector should be written in lowercase with hyphens' 107 | }], 108 | 'selector-attribute-quotes': 'always', 109 | 'selector-max-attribute': 1, 110 | 'selector-max-class': 4, 111 | 'selector-max-combinators': 2, 112 | 'selector-max-compound-selectors': 3, 113 | 'selector-max-id': 0, 114 | 'selector-max-universal': 1, 115 | 'selector-no-qualifying-type': true, 116 | 'selector-no-vendor-prefix': true, 117 | 'selector-pseudo-class-no-unknown': true, 118 | 'selector-pseudo-element-colon-notation': 'double', 119 | 'selector-pseudo-element-no-unknown': true, 120 | 'shorthand-property-no-redundant-values': true, 121 | 'selector-type-case': 'lower', 122 | 'selector-type-no-unknown': true, 123 | 'string-no-newline': true, 124 | 'unit-no-unknown': true, 125 | 'value-keyword-case': ['lower', { 126 | 'ignoreProperties': ['font'] 127 | }], 128 | 'value-no-vendor-prefix': true 129 | } 130 | } 131 | --------------------------------------------------------------------------------