From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- .../postcss-modules-local-by-default/CHANGELOG.md | 73 ++ .../postcss-modules-local-by-default/LICENSE | 20 + .../postcss-modules-local-by-default/README.md | 65 + .../postcss-modules-local-by-default/index.js | 364 ++++++ .../node_modules/postcss/CHANGELOG.md | 552 +++++++++ .../node_modules/postcss/CONTRIBUTING.md | 78 ++ .../node_modules/postcss/LICENSE | 20 + .../node_modules/postcss/README-cn.md | 349 ++++++ .../node_modules/postcss/README.md | 376 ++++++ .../node_modules/postcss/docs/architecture.md | 156 +++ .../node_modules/postcss/docs/guidelines/plugin.md | 195 +++ .../node_modules/postcss/docs/guidelines/runner.md | 143 +++ .../node_modules/postcss/docs/source-maps.md | 74 ++ .../node_modules/postcss/docs/syntax.md | 231 ++++ .../node_modules/postcss/gulpfile.js | 97 ++ .../node_modules/postcss/lib/at-rule.js | 131 ++ .../node_modules/postcss/lib/comment.js | 61 + .../node_modules/postcss/lib/container.js | 907 ++++++++++++++ .../node_modules/postcss/lib/css-syntax-error.js | 256 ++++ .../node_modules/postcss/lib/declaration.js | 101 ++ .../node_modules/postcss/lib/input.js | 204 +++ .../node_modules/postcss/lib/lazy-result.js | 435 +++++++ .../node_modules/postcss/lib/list.js | 95 ++ .../node_modules/postcss/lib/map-generator.js | 323 +++++ .../node_modules/postcss/lib/node.js | 625 ++++++++++ .../node_modules/postcss/lib/parse.js | 41 + .../node_modules/postcss/lib/parser.js | 552 +++++++++ .../node_modules/postcss/lib/postcss.d.ts | 1301 ++++++++++++++++++++ .../node_modules/postcss/lib/postcss.js | 292 +++++ .../node_modules/postcss/lib/previous-map.js | 170 +++ .../node_modules/postcss/lib/processor.js | 240 ++++ .../node_modules/postcss/lib/result.js | 206 ++++ .../node_modules/postcss/lib/root.js | 129 ++ .../node_modules/postcss/lib/rule.js | 123 ++ .../node_modules/postcss/lib/stringifier.js | 344 ++++++ .../node_modules/postcss/lib/stringify.js | 17 + .../node_modules/postcss/lib/terminal-highlight.js | 83 ++ .../node_modules/postcss/lib/tokenize.js | 306 +++++ .../node_modules/postcss/lib/vendor.js | 52 + .../node_modules/postcss/lib/warn-once.js | 14 + .../node_modules/postcss/lib/warning.js | 122 ++ .../node_modules/postcss/package.json | 25 + .../postcss-modules-local-by-default/package.json | 43 + 43 files changed, 9991 insertions(+) create mode 100644 node_modules/postcss-modules-local-by-default/CHANGELOG.md create mode 100644 node_modules/postcss-modules-local-by-default/LICENSE create mode 100644 node_modules/postcss-modules-local-by-default/README.md create mode 100644 node_modules/postcss-modules-local-by-default/index.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/CHANGELOG.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/CONTRIBUTING.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/LICENSE create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/README-cn.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/README.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/docs/architecture.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/docs/guidelines/plugin.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/docs/guidelines/runner.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/docs/source-maps.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/docs/syntax.md create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/gulpfile.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/at-rule.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/comment.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/container.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/css-syntax-error.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/declaration.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/input.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/lazy-result.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/list.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/map-generator.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/node.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/parse.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/parser.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/postcss.d.ts create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/postcss.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/previous-map.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/processor.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/result.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/root.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/rule.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/stringifier.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/stringify.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/terminal-highlight.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/tokenize.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/vendor.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/warn-once.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/lib/warning.js create mode 100644 node_modules/postcss-modules-local-by-default/node_modules/postcss/package.json create mode 100644 node_modules/postcss-modules-local-by-default/package.json (limited to 'node_modules/postcss-modules-local-by-default') diff --git a/node_modules/postcss-modules-local-by-default/CHANGELOG.md b/node_modules/postcss-modules-local-by-default/CHANGELOG.md new file mode 100644 index 00000000..126c61e3 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/CHANGELOG.md @@ -0,0 +1,73 @@ +# Change Log +All notable changes to this project will be documented in this file. +This project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased][unreleased] +### Changed +- Nothing yet. + +## [0.0.11] - 2015-07-19 +### Fixed +- Localisation of animation properties. + +## [0.0.10] - 2015-06-17 +### Added +- Localised at-rules. + +## [0.0.9] - 2015-06-12 +### Changed +- Using global selectors outside of a global context no longer triggers warnings. Instead, this functionality will be provided by a CSS Modules linter. + +### Fixed +- Keyframe rules. + +## [0.0.8] - 2015-06-11 +### Added +- Pure mode where only local scope is allowed. + +### Changed +- Using global selectors outside of a global context now triggers warnings. + +## [0.0.7] - 2015-05-30 +### Changed +- Migrated to `css-selector-tokenizer`. + +## [0.0.6] - 2015-05-28 +### Changed +- Renamed project to `postcss-modules-local-by-default`. + +## [0.0.5] - 2015-05-22 +### Added +- Support for css-loader [inheritance](https://github.com/webpack/css-loader#inheriting) and [local imports](https://github.com/webpack/css-loader#importing-local-class-names). + +## [0.0.4] - 2015-05-22 +### Changed +- Hide global leak detection behind undocumented `lint` option until it's more robust. + +## [0.0.3] - 2015-05-22 +### Changed +- Transformer output now uses the new `:local(.identifier)` syntax. + +### Added +- Simple global leak detection. Non-local selectors like `input{}` and `[data-foobar]` now throw when not marked as global. + +## [0.0.2] - 2015-05-14 +### Added +- Support for global selectors appended directly to locals, e.g. `.foo:global(.bar)` + +## 0.0.1 - 2015-05-12 +### Added +- Automatic local classes +- Explicit global selectors with `:global` + +[unreleased]: https://github.com/postcss-modules-local-by-default/compare/v0.0.10...HEAD +[0.0.2]: https://github.com/postcss-modules-local-by-default/compare/v0.0.1...v0.0.2 +[0.0.3]: https://github.com/postcss-modules-local-by-default/compare/v0.0.2...v0.0.3 +[0.0.4]: https://github.com/postcss-modules-local-by-default/compare/v0.0.3...v0.0.4 +[0.0.5]: https://github.com/postcss-modules-local-by-default/compare/v0.0.4...v0.0.5 +[0.0.6]: https://github.com/postcss-modules-local-by-default/compare/v0.0.5...v0.0.6 +[0.0.7]: https://github.com/postcss-modules-local-by-default/compare/v0.0.6...v0.0.7 +[0.0.8]: https://github.com/postcss-modules-local-by-default/compare/v0.0.7...v0.0.8 +[0.0.9]: https://github.com/postcss-modules-local-by-default/compare/v0.0.8...v0.0.9 +[0.0.10]: https://github.com/postcss-modules-local-by-default/compare/v0.0.9...v0.0.10 +[0.0.11]: https://github.com/postcss-modules-local-by-default/compare/v0.0.10...v0.0.11 diff --git a/node_modules/postcss-modules-local-by-default/LICENSE b/node_modules/postcss-modules-local-by-default/LICENSE new file mode 100644 index 00000000..ae675bf1 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2015 Mark Dalgleish + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/postcss-modules-local-by-default/README.md b/node_modules/postcss-modules-local-by-default/README.md new file mode 100644 index 00000000..13fb1310 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/README.md @@ -0,0 +1,65 @@ +[![Build Status][ci-img]][ci] [![codecov][codecov-img]][codecov] [![npm][npm-img]][npm] + +# CSS Modules: Local by Default + +Transformation examples: + +```css +.foo { ... } /* => */ :local(.foo) { ... } + +.foo .bar { ... } /* => */ :local(.foo) :local(.bar) { ... } + +/* Shorthand global selector */ + +:global .foo .bar { ... } /* => */ .foo .bar { ... } + +.foo :global .bar { ... } /* => */ :local(.foo) .bar { ... } + +/* Targeted global selector */ + +:global(.foo) .bar { ... } /* => */ .foo :local(.bar) { ... } + +.foo:global(.bar) { ... } /* => */ :local(.foo).bar { ... } + +.foo :global(.bar) .baz { ... } /* => */ :local(.foo) .bar :local(.baz) { ... } + +.foo:global(.bar) .baz { ... } /* => */ :local(.foo).bar :local(.baz) { ... } +``` + +## Building + +```bash +$ npm install +$ npm test +``` + + - Build: [![Build Status][ci-img]][ci] + - Lines: [![coveralls][coveralls-img]][coveralls] + - Statements: [![codecov][codecov-img]][codecov] + +## Development + +```bash +$ npm run autotest +``` + +## License + +MIT + +## With thanks + + - [Tobias Koppers](https://github.com/sokra) + - [Glen Maddern](https://github.com/geelen) + +--- +Mark Dalgleish, 2015. + +[ci-img]: https://img.shields.io/travis/css-modules/postcss-modules-local-by-default/master.svg?style=flat-square +[ci]: https://travis-ci.org/css-modules/postcss-modules-local-by-default +[npm-img]: https://img.shields.io/npm/v/postcss-modules-local-by-default.svg?style=flat-square +[npm]: https://www.npmjs.com/package/postcss-modules-local-by-default +[coveralls-img]: https://img.shields.io/coveralls/css-modules/postcss-modules-local-by-default/master.svg?style=flat-square +[coveralls]: https://coveralls.io/r/css-modules/postcss-modules-local-by-default?branch=master +[codecov-img]: https://img.shields.io/codecov/c/github/css-modules/postcss-modules-local-by-default/master.svg?style=flat-square +[codecov]: https://codecov.io/github/css-modules/postcss-modules-local-by-default?branch=master diff --git a/node_modules/postcss-modules-local-by-default/index.js b/node_modules/postcss-modules-local-by-default/index.js new file mode 100644 index 00000000..09be8222 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/index.js @@ -0,0 +1,364 @@ +var postcss = require('postcss'); +var Tokenizer = require('css-selector-tokenizer'); + +function normalizeNodeArray(nodes) { + var array = []; + nodes.forEach(function(x) { + if(Array.isArray(x)) { + normalizeNodeArray(x).forEach(function(item) { + array.push(item); + }); + } else if(x) { + array.push(x); + } + }); + if(array.length > 0 && array[array.length - 1].type === 'spacing') { + array.pop(); + } + return array; +} + +function localizeNode(node, context) { + if(context.ignoreNextSpacing && node.type !== 'spacing') { + throw new Error('Missing whitespace after :' + context.ignoreNextSpacing); + } + if(context.enforceNoSpacing && node.type === 'spacing') { + throw new Error('Missing whitespace before :' + context.enforceNoSpacing); + } + + var newNodes; + switch(node.type) { + case 'selectors': + var resultingGlobal; + context.hasPureGlobals = false; + newNodes = node.nodes.map(function(n) { + var nContext = { + global: context.global, + lastWasSpacing: true, + hasLocals: false, + explicit: false + }; + n = localizeNode(n, nContext); + if(typeof resultingGlobal === 'undefined') { + resultingGlobal = nContext.global; + } else if(resultingGlobal !== nContext.global) { + throw new Error('Inconsistent rule global/local result in rule "' + + Tokenizer.stringify(node) + '" (multiple selectors must result in the same mode for the rule)'); + } + if(!nContext.hasLocals) { + context.hasPureGlobals = true; + } + return n; + }); + context.global = resultingGlobal; + node = Object.create(node); + node.nodes = normalizeNodeArray(newNodes); + break; + + case 'selector': + newNodes = node.nodes.map(function(n) { + return localizeNode(n, context); + }); + node = Object.create(node); + node.nodes = normalizeNodeArray(newNodes); + break; + + case 'spacing': + if(context.ignoreNextSpacing) { + context.ignoreNextSpacing = false; + context.lastWasSpacing = false; + context.enforceNoSpacing = false; + return null; + } + context.lastWasSpacing = true; + return node; + + case 'pseudo-class': + if(node.name === 'local' || node.name === 'global') { + if(context.inside) { + throw new Error('A :' + node.name + ' is not allowed inside of a :' + context.inside + '(...)'); + } + context.ignoreNextSpacing = context.lastWasSpacing ? node.name : false; + context.enforceNoSpacing = context.lastWasSpacing ? false : node.name; + context.global = (node.name === 'global'); + context.explicit = true; + return null; + } + break; + + case 'nested-pseudo-class': + var subContext; + if(node.name === 'local' || node.name === 'global') { + if(context.inside) { + throw new Error('A :' + node.name + '(...) is not allowed inside of a :' + context.inside + '(...)'); + } + subContext = { + global: (node.name === 'global'), + inside: node.name, + hasLocals: false, + explicit: true + }; + node = node.nodes.map(function(n) { + return localizeNode(n, subContext); + }); + // don't leak spacing + node[0].before = undefined; + node[node.length - 1].after = undefined; + } else { + subContext = { + global: context.global, + inside: context.inside, + lastWasSpacing: true, + hasLocals: false, + explicit: context.explicit + }; + newNodes = node.nodes.map(function(n) { + return localizeNode(n, subContext); + }); + node = Object.create(node); + node.nodes = normalizeNodeArray(newNodes); + } + if(subContext.hasLocals) { + context.hasLocals = true; + } + break; + + case 'id': + case 'class': + if(!context.global) { + node = { + type: 'nested-pseudo-class', + name: 'local', + nodes: [node] + }; + context.hasLocals = true; + } + break; + } + + // reset context + context.lastWasSpacing = false; + context.ignoreNextSpacing = false; + context.enforceNoSpacing = false; + return node; +} + +function localizeDeclNode(node, context) { + var newNode; + switch(node.type) { + case 'item': + if(context.localizeNextItem) { + newNode = Object.create(node); + newNode.name = ':local(' + newNode.name + ')'; + context.localizeNextItem = false; + return newNode; + } + break; + + case 'nested-item': + var newNodes = node.nodes.map(function(n) { + return localizeDeclValue(n, context); + }); + node = Object.create(node); + node.nodes = newNodes; + break; + + case 'url': + if(context.options && context.options.rewriteUrl) { + newNode = Object.create(node); + newNode.url = context.options.rewriteUrl(context.global, node.url); + return newNode; + } + break; + } + return node; +} + +function localizeDeclValue(valueNode, context) { + var newValueNode = Object.create(valueNode); + newValueNode.nodes = valueNode.nodes.map(function(node) { + return localizeDeclNode(node, context); + }); + return newValueNode; +} + +function localizeAnimationShorthandDeclValueNodes(nodes, context) { + var validIdent = validIdent = /^-?[_a-z][_a-z0-9-]*$/i; + + /* + The spec defines some keywords that you can use to describe properties such as the timing + function. These are still valid animation names, so as long as there is a property that accepts + a keyword, it is given priority. Only when all the properties that can take a keyword are + exhausted can the animation name be set to the keyword. I.e. + + animation: infinite infinite; + + The animation will repeat an infinite number of times from the first argument, and will have an + animation name of infinite from the second. + */ + var animationKeywords = { + '$alternate': 1, + '$alternate-reverse': 1, + '$backwards': 1, + '$both': 1, + '$ease': 1, + '$ease-in': 1, + '$ease-in-out': 1, + '$ease-out': 1, + '$forwards': 1, + '$infinite': 1, + '$linear': 1, + '$none': Infinity, // No matter how many times you write none, it will never be an animation name + '$normal': 1, + '$paused': 1, + '$reverse': 1, + '$running': 1, + '$step-end': 1, + '$step-start': 1, + '$initial': Infinity, + '$inherit': Infinity, + '$unset': Infinity, + }; + + var didParseAnimationName = false; + var parsedAnimationKeywords = {}; + return nodes.map(function(valueNode) { + var value = valueNode.type === 'item' + ? valueNode.name.toLowerCase() + : null; + + var shouldParseAnimationName = false; + + if (!didParseAnimationName && value && validIdent.test(value)) { + if ('$' + value in animationKeywords) { + parsedAnimationKeywords['$' + value] = ('$' + value in parsedAnimationKeywords) + ? (parsedAnimationKeywords['$' + value] + 1) + : 0; + + shouldParseAnimationName = (parsedAnimationKeywords['$' + value] >= animationKeywords['$' + value]); + } else { + shouldParseAnimationName = true; + } + } + + var subContext = { + options: context.options, + global: context.global, + localizeNextItem: shouldParseAnimationName && !context.global + }; + return localizeDeclNode(valueNode, subContext); + }); +} + +function localizeAnimationShorthandDeclValues(valuesNode, decl, context) { + var newValuesNode = Object.create(valuesNode); + newValuesNode.nodes = valuesNode.nodes.map(function(valueNode, index) { + var newValueNode = Object.create(valueNode); + newValueNode.nodes = localizeAnimationShorthandDeclValueNodes(valueNode.nodes, context); + return newValueNode; + }); + decl.value = Tokenizer.stringifyValues(newValuesNode); +} + +function localizeDeclValues(localize, valuesNode, decl, context) { + var newValuesNode = Object.create(valuesNode); + newValuesNode.nodes = valuesNode.nodes.map(function(valueNode) { + var subContext = { + options: context.options, + global: context.global, + localizeNextItem: localize && !context.global + }; + return localizeDeclValue(valueNode, subContext); + }); + decl.value = Tokenizer.stringifyValues(newValuesNode); +} + +function localizeDecl(decl, context) { + var valuesNode = Tokenizer.parseValues(decl.value); + + var isAnimation = /animation?$/.test(decl.prop); + if (isAnimation) return localizeAnimationShorthandDeclValues(valuesNode, decl, context); + + var isAnimationName = /animation(-name)?$/.test(decl.prop); + if (isAnimationName) return localizeDeclValues(true, valuesNode, decl, context); + + return localizeDeclValues(false, valuesNode, decl, context); +} + +module.exports = postcss.plugin('postcss-modules-local-by-default', function (options) { + if (typeof options !== 'object') { + options = {}; // If options is undefined or not an object the plugin fails + } + if(options && options.mode) { + if(options.mode !== 'global' && options.mode !== 'local' && options.mode !== 'pure') { + throw new Error('options.mode must be either "global", "local" or "pure" (default "local")'); + } + } + var pureMode = options && options.mode === 'pure'; + var globalMode = options && options.mode === 'global'; + return function(css) { + css.walkAtRules(function(atrule) { + if(/keyframes$/.test(atrule.name)) { + var globalMatch = /^\s*:global\s*\((.+)\)\s*$/.exec(atrule.params); + var localMatch = /^\s*:local\s*\((.+)\)\s*$/.exec(atrule.params); + var globalKeyframes = globalMode; + if(globalMatch) { + if(pureMode) { + throw atrule.error('@keyframes :global(...) is not allowed in pure mode'); + } + atrule.params = globalMatch[1]; + globalKeyframes = true; + } else if(localMatch) { + atrule.params = localMatch[0]; + globalKeyframes = false; + } else if(!globalMode) { + atrule.params = ':local(' + atrule.params + ')'; + } + atrule.walkDecls(function(decl) { + localizeDecl(decl, { + options: options, + global: globalKeyframes + }); + }); + } else if(atrule.nodes) { + atrule.nodes.forEach(function(decl) { + if(decl.type === 'decl') { + localizeDecl(decl, { + options: options, + global: globalMode + }); + } + }); + } + }); + css.walkRules(function(rule) { + if(rule.parent.type === 'atrule' && /keyframes$/.test(rule.parent.name)) { + // ignore keyframe rules + return; + } + var selector = Tokenizer.parse(rule.selector); + var context = { + options: options, + global: globalMode, + hasPureGlobals: false + }; + var newSelector; + try { + newSelector = localizeNode(selector, context); + } catch(e) { + throw rule.error(e.message); + } + if(pureMode && context.hasPureGlobals) { + throw rule.error('Selector "' + Tokenizer.stringify(selector) + '" is not pure ' + + '(pure selectors must contain at least one local class or id)'); + } + // Less-syntax mixins parse as rules with no nodes + if (rule.nodes) { + rule.nodes.forEach(function(decl) { + localizeDecl(decl, context); + }); + } + rule.selector = Tokenizer.stringify(newSelector); + }); + }; +}); diff --git a/node_modules/postcss-modules-local-by-default/node_modules/postcss/CHANGELOG.md b/node_modules/postcss-modules-local-by-default/node_modules/postcss/CHANGELOG.md new file mode 100644 index 00000000..e2cd381e --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/node_modules/postcss/CHANGELOG.md @@ -0,0 +1,552 @@ +# Change Log +This project adheres to [Semantic Versioning](http://semver.org/). + +## 6.0.23 +* Fix parsing nested at-rules without semicolon, params, and spaces. + +## 6.0.22 +* Fix `Node#prev` and `Node#next` on missed parent. + +## 6.0.21 +* Rename Chinese docs to fix `yarnpkg.com` issue. + +## 6.0.20 +* Better error message on `null` as input CSS. + +## 6.0.19 +* Fix TypeScript definitions for source maps (by Oleh Kuchuk). +* Fix `source` field in TypeScript definitions (by Sylvain Pollet-Villard). + +## 6.0.18 +* Use primitive object in TypeScript definitions (by Sylvain Pollet-Villard). + +## 6.0.17 +* Fix parsing comment in selector between word tokens (by Oleh Kuchuk). + +## 6.0.16 +* Fix warning text (by Michael Keller). + +## 6.0.15 +* Add warning about missed `from` option on `process().then()` call. +* Add IE 10 support. + +## 6.0.14 +* Fix TypeScript definitions (by Jed Mao). + +## 6.0.13 +* Fix TypeScript definitions for case of multiple PostCSS versions + in `node_modules` (by Chris Eppstein). +* Use `source-map` 0.6. + +## 6.0.12 +* Don’t copy `*` hack to declaration indent. + +## 6.0.11 +* Add upper case `!IMPORTANT` support. + +## 6.0.10 +* Reduce PostCSS size in webpack bundle. + +## 6.0.9 +* Improve error message for plugin with old PostCSS (by Igor Adamenko). + +## 6.0.8 +* Fix Node.js 4.2.2 support. + +## 6.0.7 +* Fix base64 decoding for old Node.js and browser. + +## 6.0.6 +* Fix `end` position in at-rule without semicolon (by Oleh Kuchuk). + +## 6.0.5 +* Move Babel config from `package.json` for `node_modules` compiling cases. + +## 6.0.4 +* Fix parsing `;;` after rules. +* Use Chalk 2.0. + +## 6.0.3 +* Fix escape sequences parsing (by Oleh Kuchuk). +* Added ability to force disable colors with an environment variable. +* Improved color detection of some terminal apps. + +## 6.0.2 +* Keep `raws.before` on moving `Root` children to new `Root`. + +## 6.0.1 +* Fix parser extensibility to use it in Safe Parser. + +## 6.0 “Marquis Orias” +* Remove node.js 0.12 support. +* Remove deprecated method from PostCSS 4. +* Insert methods remove child from previous parent, instead of closing. +* Insert methods and cloning doesn’t clean `raws` anymore. +* Methods `moveTo`, `moveAfter`, `moveBefore` were deprecated. +* Options was changed in `Plugin#process(css, processOptions, pluginOptions)`. +* Add stream parser to reduce memory usage (by Oleh Kuchuk). +* Add `before()`/`after()` shortcuts for `node.parent.insertBefore(node, x)`. +* Add `Rule#raws.ownSemicolon` for semicolon after templates for `@apply`. +* Use `babel-preset-env` to compile npm package. +* Remove `js-base64` from dependencies (by Roman Dvornov). +* Fix error message on single `:` in CSS. +* Move tests to Jest. +* Clean up test (by Gabriel Kalani). + +## 5.2.18 +* Fix TypeScript definitions for case of multiple PostCSS versions + in `node_modules` (by Chris Eppstein). + +## 5.2.17 +* Add `postcss-sass` suggestion to syntax error on `.sass` input. + +## 5.2.16 +* Better error on wrong argument in node constructor. + +## 5.2.15 +* Fix TypeScript definitions (by bumbleblym). + +## 5.2.14 +* Fix browser bundle building in webpack (by janschoenherr). + +## 5.2.13 +* Do not add comment to important raws. +* Fix JSDoc (by Dmitry Semigradsky). + +## 5.2.12 +* Fix typo in deprecation message (by Garet McKinley). + +## 5.2.11 +* Fix TypeScript definitions (by Jed Mao). + +## 5.2.10 +* Fix TypeScript definitions (by Jed Mao). + +## 5.2.9 +* Update TypeScript definitions (by Jed Mao). + +## 5.2.8 +* Fix error message (by Ben Briggs). + +## 5.2.7 +* Better error message on syntax object in plugins list. + +## 5.2.6 +* Fix `postcss.vendor` for values with spaces (by 刘祺). + +## 5.2.5 +* Better error message on unclosed string (by Ben Briggs). + +## 5.2.4 +* Improve terminal CSS syntax highlight (by Simon Lydell). + +## 5.2.3 +* Better color highlight in syntax error code frame. +* Fix color highlight support in old systems. + +## 5.2.2 +* Update `Processor#version`. + +## 5.2.1 +* Fix source map path for CSS without `from` option (by Michele Locati). + +## 5.2 “Duke Vapula” +* Add syntax highlight to code frame in syntax error (by Andrey Popp). +* Use Babel code frame style and size in syntax error. +* Add `[` and `]` tokens to parse `[attr=;] {}` correctly. +* Add `ignoreErrors` options to tokenizer (by Andrey Popp). +* Fix error position on tab indent (by Simon Lydell). + +## 5.1.2 +* Suggests SCSS/Less parsers on parse errors depends on file extension. + +## 5.1.1 +* Fix TypeScript definitions (by Efremov Alexey). + +## 5.1 “King and President Zagan” +* Add URI in source map support (by Mark Finger). +* Add `map.from` option (by Mark Finger). +* Add `` mappings for nodes without source (by Bogdan Chadkin). +* Add function value support to `map.prev` option (by Chris Montoro). +* Add declaration value type check in shortcut creating (by 刘祺). +* `Result#warn` now returns new created warning. +* Don’t call plugin creator in `postcss.plugin` call. +* Add source maps to PostCSS ES5 build. +* Add JSDoc to PostCSS classes. +* Clean npm package from unnecessary docs. + +## 5.0.21 +* Fix support with input source mao with `utf8` encoding name. + +## 5.0.20 +* Fix between raw value parsing (by David Clark). +* Update TypeScript definitions (by Jed Mao). +* Clean fake node.source after `append(string)`. + +## 5.0.19 +* Fix indent-based syntaxes support. + +## 5.0.18 +* Parse new lines according W3C CSS syntax specification. + +## 5.0.17 +* Fix options argument in `Node#warn` (by Ben Briggs). +* Fix TypeScript definitions (by Jed Mao). + +## 5.0.16 +* Fix CSS syntax error position on unclosed quotes. + +## 5.0.15 +* Fix `Node#clone()` on `null` value somewhere in node. + +## 5.0.14 +* Allow to use PostCSS in webpack bundle without JSON loader. + +## 5.0.13 +* Fix `index` and `word` options in `Warning#toString` (by Bogdan Chadkin). +* Fix input source content loading in errors. +* Fix map options on using `LazyResult` as input CSS. +* 100% test coverage. +* Use Babel 6. + +## 5.0.12 +* Allow passing a previous map with no mappings (by Andreas Lind). + +## 5.0.11 +* Increase plugins performance by 1.5 times. + +## 5.0.10 +* Fix warning from nodes without source. + +## 5.0.9 +* Fix source map type detection (by @asan). + +## 5.0.8 +* Fixed a missed step in `5.0.7` that caused the module to be published as + ES6 code. + +## 5.0.7 +* PostCSS now requires that node 0.12 is installed via the engines property + in package.json (by Howard Zuo). + +## 5.0.6 +* Fix parsing nested at-rule without semicolon (by Matt Drake). +* Trim `Declaration#value` (by Bogdan Chadkin). + +## 5.0.5 +* Fix multi-tokens property parsing (by Matt Drake). + +## 5.0.4 +* Fix start position in `Root#source`. +* Fix source map annotation, when CSS uses `\r\n` (by Mohammad Younes). + +## 5.0.3 +* Fix `url()` parsing. +* Fix using `selectors` in `Rule` constructor. +* Add start source to `Root` node. + +## 5.0.2 +* Fix `remove(index)` to be compatible with 4.x plugin. + +## 5.0.1 +* Fix PostCSS 4.x plugins compatibility. +* Fix type definition loading (by Jed Mao). + +## 5.0 “President Valac” +* Remove `safe` option. Move Safe Parser to separate project. +* `Node#toString` does not include `before` for root nodes. +* Remove plugin returning `Root` API. +* Remove Promise polyfill for node.js 0.10. +* Deprecate `eachInside`, `eachDecl`, `eachRule`, `eachAtRule` and `eachComment` + in favor of `walk`, `walkDecls`, `walkRules`, `walkAtRules` and `walkComments` + (by Jed Mao). +* Deprecate `Container#remove` and `Node#removeSelf` + in favor of `Container#removeChild` and `Node#remove` (by Ben Briggs). +* Deprecate `Node#replace` in favor of `replaceWith` (by Ben Briggs). +* Deprecate raw properties in favor of `Node#raws` object. +* Deprecate `Node#style` in favor of `raw`. +* Deprecate `CssSyntaxError#generated` in favor of `input`. +* Deprecate `Node#cleanStyles` in favor of `cleanRaws`. +* Deprecate `Root#prevMap` in favor of `Root.source.input.map`. +* Add `syntax`, `parser` and `stringifier` options for Custom Syntaxes. +* Add stringifier option to `Node#toString`. +* Add `Result#content` alias for non-CSS syntaxes. +* Add `plugin.process(css)` shortcut to every plugin function (by Ben Briggs). +* Add multiple nodes support to insert methods (by Jonathan Neal). +* Add `Node#warn` shortcut (by Ben Briggs). +* Add `word` and `index` options to errors and warnings (by David Clark). +* Add `line`, `column` properties to `Warning`. +* Use `supports-color` library to detect color support in error output. +* Add type definitions for TypeScript plugin developers (by Jed Mao). +* `Rule#selectors` setter detects separators. +* Add `postcss.stringify` method. +* Throw descriptive errors for incorrectly formatted plugins. +* Add docs to npm release. +* Fix `url()` parsing. +* Fix Windows support (by Jed Mao). + +## 4.1.16 +* Fix errors without stack trace. + +## 4.1.15 +* Allow asynchronous plugins to change processor plugins list (by Ben Briggs). + +## 4.1.14 +* Fix for plugins packs defined by `postcss.plugin`. + +## 4.1.13 +* Fix input inlined source maps with UTF-8 encoding. + +## 4.1.12 +* Update Promise polyfill. + +## 4.1.11 +* Fix error message on wrong plugin format. + +## 4.1.10 +* Fix Promise behavior on sync plugin errors. +* Automatically fill `plugin` field in `CssSyntaxError`. +* Fix warning message (by Ben Briggs). + +## 4.1.9 +* Speed up `node.clone()`. + +## 4.1.8 +* Accepts `Processor` instance in `postcss()` constructor too. + +## 4.1.7 +* Speed up `postcss.list` (by Bogdan Chadkin). + +## 4.1.6 +* Fix Promise behavior on parsing error. + +## 4.1.5 +* Parse at-words in declaration values. + +## 4.1.4 +* Fix Promise polyfill dependency (by Anton Yakushev and Matija Marohnić). + +## 4.1.3 +* Add Promise polyfill for node.js 0.10 and IE. + +## 4.1.2 +* List helpers can be accessed independently `var space = postcss.list.space`. + +## 4.1.1 +* Show deprecated message only once. + +## 4.1 “Marquis Andras” +* Asynchronous plugin support. +* Add warnings from plugins and `Result#messages`. +* Add `postcss.plugin()` to create plugins with a standard API. +* Insert nodes by CSS string. +* Show version warning message on error from an outdated plugin. +* Send `Result` instance to plugins as the second argument. +* Add `CssSyntaxError#plugin`. +* Add `CssSyntaxError#showSourceCode()`. +* Add `postcss.list` and `postcss.vendor` aliases. +* Add `Processor#version`. +* Parse wrong closing bracket. +* Parse `!important` statement with spaces and comments inside (by Ben Briggs). +* Throw an error on declaration without `prop` or `value` (by Philip Peterson). +* Fix source map mappings position. +* Add indexed source map support. +* Always set `error.generated`. +* Clean all source map annotation comments. + +## 4.0.6 +* Remove `babel` from released package dependencies (by Andres Suarez). + +## 4.0.5 +* Fix error message on double colon in declaration. + +## 4.0.4 +* Fix indent detection in some rare cases. + +## 4.0.3 +* Faster API with 6to5 Loose mode. +* Fix indexed source maps support. + +## 4.0.2 +* Do not copy IE hacks to code style. + +## 4.0.1 +* Add `source.input` to `Root` too. + +## 4.0 “Duke Flauros” +* Rename `Container#childs` to `nodes`. +* Rename `PostCSS#processors` to `plugins`. +* Add `Node#replaceValues()` method. +* Add `Node#moveTo()`, `moveBefore()` and `moveAfter()` methods. +* Add `Node#cloneBefore()` and `cloneAfter()` shortcuts. +* Add `Node#next()`, `prev()` and `root()` shortcuts. +* Add `Node#replaceWith()` method. +* Add `Node#error()` method. +* Add `Container#removeAll()` method. +* Add filter argument to `eachDecl()` and `eachAtRule()`. +* Add `Node#source.input` and move `source.file` or `source.id` to `input`. +* Change code indent, when node was moved. +* Better fix code style on `Rule`, `AtRule` and `Comment` nodes changes. +* Allow to create rules and at-rules by hash shortcut in append methods. +* Add class name to CSS syntax error output. + +## 3.0.7 +* Fix IE filter parsing with multiple commands. +* Safer way to consume PostCSS object as plugin (by Maxime Thirouin). + +## 3.0.6 +* Fix missing semicolon when comment comes after last declaration. +* Fix Safe Mode declaration parsing on unclosed blocks. + +## 3.0.5 +* Fix parser to support difficult cases with backslash escape and brackets. +* Add `CssSyntaxError#stack` (by Maxime Thirouin). + +## 3.0.4 +* Fix Safe Mode on unknown word before declaration. + +## 3.0.3 +* Increase tokenizer speed (by Roman Dvornov). + +## 3.0.2 +* Fix empty comment parsing. +* Fix `Root#normalize` in some inserts. + +## 3.0.1 +* Fix Rhino JS runtime support. +* Typo in deprecated warning (by Maxime Thirouin). + +## 3.0 “Marquis Andrealphus” +* New parser, which become the fastest ever CSS parser written in JavaScript. +* Parser can now parse declarations and rules in one parent (like in `@page`) + and nested declarations for plugins like `postcss-nested`. +* Child nodes array is now in `childs` property, instead of `decls` and `rules`. +* `map.inline` and `map.sourcesContent` options are now `true` by default. +* Fix iterators (`each`, `insertAfter`) on children array changes. +* Use previous source map to show origin source of CSS syntax error. +* Use 6to5 ES6 compiler, instead of ES6 Transpiler. +* Use code style for manually added rules from existing rules. +* Use `from` option from previous source map `file` field. +* Set `to` value to `from` if `to` option is missing. +* Use better node source name when missing `from` option. +* Show a syntax error when `;` is missed between declarations. +* Allow to pass `PostCSS` instance or list of plugins to `use()` method. +* Allow to pass `Result` instance to `process()` method. +* Trim Unicode BOM on source maps parsing. +* Parse at-rules without spaces like `@import"file"`. +* Better previous `sourceMappingURL` annotation comment cleaning. +* Do not remove previous `sourceMappingURL` comment on `map.annotation: false`. +* Parse nameless at-rules in Safe Mode. +* Fix source map generation for nodes without source. +* Fix next child `before` if `Root` first child got removed. + +## 2.2.6 +* Fix map generation for nodes without source (by Josiah Savary). + +## 2.2.5 +* Fix source map with BOM marker support (by Mohammad Younes). +* Fix source map paths (by Mohammad Younes). + +## 2.2.4 +* Fix `prepend()` on empty `Root`. + +## 2.2.3 +* Allow to use object shortcut in `use()` with functions like `autoprefixer`. + +## 2.2.2 +* Add shortcut to set processors in `use()` via object with `.postcss` property. + +## 2.2.1 +* Send `opts` from `Processor#process(css, opts)` to processors. + +## 2.2 “Marquis Cimeies” +* Use GNU style syntax error messages. +* Add `Node#replace` method. +* Add `CssSyntaxError#reason` property. + +## 2.1.2 +* Fix UTF-8 support in inline source map. +* Fix source map `sourcesContent` if there is no `from` and `to` options. + +## 2.1.1 +* Allow to miss `to` and `from` options for inline source maps. +* Add `Node#source.id` if file name is unknown. +* Better detect splitter between rules in CSS concatenation tools. +* Automatically clone node in insert methods. + +## 2.1 “King Amdusias” +* Change Traceur ES6 compiler to ES6 Transpiler. +* Show broken CSS line in syntax error. + +## 2.0 “King Belial” +* Project was rewritten from CoffeeScript to ES6. +* Add Safe Mode to works with live input or with hacks from legacy code. +* More safer parser to pass all hacks from Browserhacks.com. +* Use real properties instead of magic getter/setter for raw properties. + +## 1.0 “Marquis Decarabia” +* Save previous source map for each node to support CSS concatenation + with multiple previous maps. +* Add `map.sourcesContent` option to add origin content to `sourcesContent` + inside map. +* Allow to set different place of output map in annotation comment. +* Allow to use arrays and `Root` in `Container#append` and same methods. +* Add `Root#prevMap` with information about previous map. +* Allow to use latest PostCSS from GitHub by npm. +* `Result` now is lazy and it will generate output CSS only if you use `css` + or `map` property. +* Use separated `map.prev` option to set previous map. +* Rename `inlineMap` option to `map.inline`. +* Rename `mapAnnotation` option to `map.annotation`. +* `Result#map` now return `SourceMapGenerator` object, instead of string. +* Run previous map autodetect only if input CSS contains annotation comment. +* Add `map: 'inline'` shortcut for `map: { inline: true }` option. +* `Node#source.file` now will contains absolute path. +* Clean `Declaration#between` style on node clone. + +## 0.3.5 +* Allow to use `Root` or `Result` as first argument in `process()`. +* Save parsed AST to `Result#root`. + +## 0.3.4 +* Better space symbol detect to read UTF-8 BOM correctly. + +## 0.3.3 +* Remove source map hacks by using new Mozilla’s `source-map` (by Simon Lydell). + +## 0.3.2 +* Add URI encoding support for inline source maps. + +## 0.3.1 +* Fix relative paths from previous source map. +* Safer space split in `Rule#selectors` (by Simon Lydell). + +## 0.3 “Prince Seere” +* Add `Comment` node for comments between declarations or rules. +* Add source map annotation comment to output CSS. +* Allow to inline source map to annotation comment by data:uri. +* Fix source maps on Windows. +* Fix source maps for subdirectory (by Dmitry Nikitenko and Simon Lydell). +* Autodetect previous source map. +* Add `first` and `last` shortcuts to container nodes. +* Parse `!important` to separated property in `Declaration`. +* Allow to break iteration by returning `false`. +* Copy code style to new nodes. +* Add `eachInside` method to recursively iterate all nodes. +* Add `selectors` shortcut to get selectors array. +* Add `toResult` method to `Rule` to simplify work with several input files. +* Clean declaration’s `value`, rule’s `selector` and at-rule’s `params` + by storing spaces in `between` property. + +## 0.2 “Duke Dantalion” +* Add source map support. +* Add shortcuts to create nodes. +* Method `process()` now returns object with `css` and `map` keys. +* Origin CSS file option was renamed from `file` to `from`. +* Rename `Node#remove()` method to `removeSelf()` to fix name conflict. +* Node source was moved to `source` property with origin file + and node end position. +* You can set own CSS generate function. + +## 0.1 “Count Andromalius” +* Initial release. diff --git a/node_modules/postcss-modules-local-by-default/node_modules/postcss/CONTRIBUTING.md b/node_modules/postcss-modules-local-by-default/node_modules/postcss/CONTRIBUTING.md new file mode 100644 index 00000000..227caa27 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/node_modules/postcss/CONTRIBUTING.md @@ -0,0 +1,78 @@ +# Contributing Guide to PostCSS + +If you want contribute to PostCSS, there are few things that you should +be familiar with. + + +## In Case You Have Question About Using PostCSS + +* **Ask for help in [the chat]** + + If you stuck on something there is a big chance + that someone had similar problem before. + +[the chat]: https://gitter.im/postcss/postcss + + +## Adding Your Plugin to the List + +If you created or found a plugin and want to add it to PostCSS plugins list +follow this simple steps. + +PR should not change plugins defined in README it contains only favorite plugins +and moderated by PostCSS author. + +Plugins submitted by community located in [`docs/plugins`]. + +* **Keep plugins order** + + Be sure that plugin not presented yet and find suitable position + in alphabetic order for it. + But plugins with `postcss-` prefix should come first. + +* **Check spelling** + + Before submitting PR be sure that spelling check pass. + For that run command `npm test`. + If it fails with unknown word error, add it as word + to `.yaspellerrc` dictionary. + +* **Check PostCSS plugin guideline** + + Provided plugin should match plugin [guidelines]. + +- **Provide link to suggested plugin** + + Make sure your pull request description contains link to plugin + you are willing to add. + +[`docs/plugins`]: https://github.com/postcss/postcss/blob/master/docs/plugins.md +[guidelines]: https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md + + +## TypeScript Declaration Improvements + +If you found a bug or want to add certain improvements to types declaration file + +* **Check current TypeScript styling** + + Be sure that your changes match TypeScript styling rules defined in typings file. + * We use classes for existing JS classes like `Stringifier`. + * Namespaces used for separating functions related to same subject. + * Interfaces used for defining custom types. + + Make sure you read through declaration file writing [best practices] + by TypeScript team. + +[best practices]: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html + + +## Core Development + +If you want to add new feature or fix existed issue + +- **Become familiar with PostCSS architecture** + + For gentle intro to PostCSS architecture look through our [guide]. + +[guide]: https://github.com/postcss/postcss/blob/master/docs/architecture.md diff --git a/node_modules/postcss-modules-local-by-default/node_modules/postcss/LICENSE b/node_modules/postcss-modules-local-by-default/node_modules/postcss/LICENSE new file mode 100644 index 00000000..da057b45 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/node_modules/postcss/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2013 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/postcss-modules-local-by-default/node_modules/postcss/README-cn.md b/node_modules/postcss-modules-local-by-default/node_modules/postcss/README-cn.md new file mode 100644 index 00000000..4846ed96 --- /dev/null +++ b/node_modules/postcss-modules-local-by-default/node_modules/postcss/README-cn.md @@ -0,0 +1,349 @@ +# PostCSS [![Gitter][chat-img]][chat] + +哲学家的石头 - PostCSS 的 logo + +[chat-img]: https://img.shields.io/badge/Gitter-Join_the_PostCSS_chat-brightgreen.svg +[chat]: https://gitter.im/postcss/postcss + +PostCSS 是一个允许使用 JS 插件转换样式的工具。 +这些插件可以检查(lint)你的 CSS,支持 CSS Variables 和 Mixins, +编译尚未被浏览器广泛支持的先进的 CSS 语法,内联图片,以及其它很多优秀的功能。 + +PostCSS 在工业界被广泛地应用,其中不乏很多有名的行业领导者,如:维基百科,Twitter,阿里巴巴, +JetBrains。PostCSS 的 [Autoprefixer] 插件是最流行的 CSS 处理工具之一。 + +PostCSS 接收一个 CSS 文件并提供了一个 API 来分析、修改它的规则(通过把 CSS 规则转换成一个[抽象语法树]的方式)。在这之后,这个 API 便可被许多[插件]利用来做有用的事情,比如寻错或自动添加 CSS vendor 前缀。 + +**Twitter 账号:** [@postcss](https://twitter.com/postcss)
+**支持 / 讨论:** [Gitter](https://gitter.im/postcss/postcss)
+ +如果需要 PostCSS 商业支持(如咨询,提升公司的前端文化, +PostCSS 插件),请联系 [Evil Martians](https://evilmartians.com/?utm_source=postcss) +邮箱 。 + +[抽象语法树]: https://zh.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E8%AA%9E%E6%B3%95%E6%A8%B9 +[Autoprefixer]: https://github.com/postcss/autoprefixer +[插件]: https://github.com/postcss/postcss/blob/master/README-cn.md#%E6%8F%92%E4%BB%B6 + + + 由 Evil Martians 赞助 + + +## 插件 + +截止到目前,PostCSS 有 200 多个插件。你可以在 [插件列表] 或 [搜索目录] 找到它们。 +下方的列表是我们最喜欢的插件 - 它们很好地演示了我们可以用 PostCSS 做些什么。 + +如果你有任何新的想法,[开发 PostCSS 插件] 非常简单易上手。 + +[搜索目录]: http://postcss.parts +[插件列表]: https://github.com/postcss/postcss/blob/master/docs/plugins.md + +### 解决全局 CSS 的问题 + +* [`postcss-use`] 允许你在 CSS 里明确地设置 PostCSS 插件,并且只在当前文件执行它们。 +* [`postcss-modules`] 和 [`react-css-modules`] 可以自动以组件为单位隔绝 CSS 选择器。 +* [`postcss-autoreset`] 是全局样式重置的又一个选择,它更适用于分离的组件。 +* [`postcss-initial`] 添加了 `all: initial` 的支持,重置了所有继承的样式。 +* [`cq-prolyfill`] 添加了容器查询的支持,允许添加响应于父元素宽度的样式. + +### 提前使用先进的 CSS 特性 + +* [`autoprefixer`] 添加了 vendor 浏览器前缀,它使用 Can I Use 上面的数据。 +* [`postcss-preset-env`] 允许你使用未来的 CSS 特性。 + +### 更佳的 CSS 可读性 + +* [`precss`] 囊括了许多插件来支持类似 Sass 的特性,比如 CSS 变量,套嵌,mixins 等。 +* [`postcss-sorting`] 给规则的内容以及@规则排序。 +* [`postcss-utilities`] 囊括了最常用的简写方式和书写帮助。 +* [`short`] 添加并拓展了大量的缩写属性。 + +### 图片和字体 + +* [`postcss-assets`] 可以插入图片尺寸和内联文件。 +* [`postcss-sprites`] 能生成雪碧图。 +* [`font-magician`] 生成所有在 CSS 里需要的 `@font-face` 规则。 +* [`postcss-inline-svg`] 允许你内联 SVG 并定制它的样式。 +* [`postcss-write-svg`] 允许你在 CSS 里写简单的 SVG。 + +### 提示器(Linters) + +* [`stylelint`] 是一个模块化的样式提示器。 +* [`stylefmt`] 是一个能根据 `stylelint` 规则自动优化 CSS 格式的工具。 +* [`doiuse`] 提示 CSS 的浏览器支持性,使用的数据来自于 Can I Use。 +* [`colorguard`] 帮助你保持一个始终如一的调色板。 + +### 其它 + +* [`postcss-rtl`] 在单个 CSS 文件里组合了两个方向(左到右,右到左)的样式。 +* [`cssnano`] 是一个模块化的 CSS 压缩器。 +* [`lost`] 是一个功能强大的 `calc()` 栅格系统。 +* [`rtlcss`] 镜像翻转 CSS 样式,适用于 right-to-left 的应用场景。 + +[`postcss-inline-svg`]: https://github.com/TrySound/postcss-inline-svg +[`postcss-preset-env`]: https://github.com/jonathantneal/postcss-preset-env +[`react-css-modules`]: https://github.com/gajus/react-css-modules +[`postcss-autoreset`]: https://github.com/maximkoretskiy/postcss-autoreset +[`postcss-write-svg`]: https://github.com/jonathantneal/postcss-write-svg +[`postcss-utilities`]: https://github.com/ismamz/postcss-utilities +[`postcss-initial`]: https://github.com/maximkoretskiy/postcss-initial +[`postcss-sprites`]: https://github.com/2createStudio/postcss-sprites +[`postcss-modules`]: https://github.com/outpunk/postcss-modules +[`postcss-sorting`]: https://github.com/hudochenkov/postcss-sorting +[`postcss-assets`]: https://github.com/assetsjs/postcss-assets +[开发 PostCSS 插件]: https://github.com/postcss/postcss/blob/master/docs/writing-a-plugin.md +[`font-magician`]: https://github.com/jonathantneal/postcss-font-magician +[`autoprefixer`]: https://github.com/postcss/autoprefixer +[`cq-prolyfill`]: https://github.com/ausi/cq-prolyfill +[`postcss-rtl`]: https://github.com/vkalinichev/postcss-rtl +[`postcss-use`]: https://github.com/postcss/postcss-use +[`css-modules`]: https://github.com/css-modules/css-modules +[`colorguard`]: https://github.com/SlexAxton/css-colorguard +[`stylelint`]: https://github.com/stylelint/stylelint +[`stylefmt`]: https://github.com/morishitter/stylefmt +[`cssnano`]: http://cssnano.co +[`precss`]: https://github.com/jonathantneal/precss +[`doiuse`]: https://github.com/anandthakker/doiuse +[`rtlcss`]: https://github.com/MohammadYounes/rtlcss +[`short`]: https://github.com/jonathantneal/postcss-short +[`lost`]: https://github.com/peterramsing/lost + +## 语法 + +PostCSS 可以转化样式到任意语法,不仅仅是 CSS。 +如果还没有支持你最喜欢的语法,你可以编写一个解释器以及(或者)一个 stringifier 来拓展 PostCSS。 + +* [`sugarss`] 是一个以缩进为基础的语法,类似于 Sass 和 Stylus。 +* [`postcss-syntax`] 通过文件扩展名自动切换语法。 +* [`postcss-html`] 解析类 HTML 文件里`