tailwindcss 3.0.9 → 3.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -1
- package/lib/cli.js +57 -28
- package/lib/corePlugins.js +183 -280
- package/lib/css/preflight.css +1 -1
- package/lib/featureFlags.js +2 -5
- package/lib/lib/expandApplyAtRules.js +0 -40
- package/lib/lib/expandTailwindAtRules.js +14 -29
- package/lib/lib/generateRules.js +1 -2
- package/lib/lib/normalizeTailwindDirectives.js +8 -1
- package/lib/lib/partitionApplyAtRules.js +53 -0
- package/lib/lib/resolveDefaultsAtRules.js +4 -4
- package/lib/lib/setupContextUtils.js +48 -52
- package/lib/lib/setupTrackingContext.js +11 -10
- package/lib/processTailwindFeatures.js +5 -2
- package/lib/util/createPlugin.js +1 -2
- package/lib/util/createUtilityPlugin.js +4 -8
- package/lib/util/flattenColorPalette.js +1 -3
- package/lib/util/normalizeConfig.js +6 -12
- package/lib/util/normalizeScreens.js +2 -4
- package/lib/util/pluginUtils.js +6 -13
- package/lib/util/resolveConfig.js +9 -18
- package/lib/util/resolveConfigPath.js +1 -2
- package/lib/util/toColorValue.js +1 -2
- package/lib/util/transformThemeValue.js +4 -8
- package/package.json +8 -10
- package/peers/index.js +652 -651
- package/src/cli.js +57 -12
- package/src/corePlugins.js +121 -155
- package/src/css/preflight.css +1 -1
- package/src/featureFlags.js +1 -5
- package/src/lib/expandApplyAtRules.js +0 -42
- package/src/lib/expandTailwindAtRules.js +12 -21
- package/src/lib/normalizeTailwindDirectives.js +6 -1
- package/src/lib/partitionApplyAtRules.js +52 -0
- package/src/lib/resolveDefaultsAtRules.js +5 -5
- package/src/lib/setupContextUtils.js +37 -17
- package/src/lib/setupTrackingContext.js +11 -10
- package/src/processTailwindFeatures.js +6 -2
- package/src/util/pluginUtils.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
- Nothing yet!
|
|
11
11
|
|
|
12
|
+
## [3.0.13] - 2022-01-11
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Fix consecutive builds with at apply producing different CSS ([#6999](https://github.com/tailwindlabs/tailwindcss/pull/6999))
|
|
17
|
+
|
|
18
|
+
## [3.0.12] - 2022-01-07
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Allow use of falsy values in theme config ([#6917](https://github.com/tailwindlabs/tailwindcss/pull/6917))
|
|
23
|
+
- Ensure we can apply classes that are grouped with non-class selectors ([#6922](https://github.com/tailwindlabs/tailwindcss/pull/6922))
|
|
24
|
+
- Improve standalone CLI compatibility on Linux by switching to the `linuxstatic` build target ([#6914](https://github.com/tailwindlabs/tailwindcss/pull/6914))
|
|
25
|
+
- Ensure `@apply` works consistently with or without `@layer` ([#6938](https://github.com/tailwindlabs/tailwindcss/pull/6938))
|
|
26
|
+
- Only emit defaults when using base layer ([#6926](https://github.com/tailwindlabs/tailwindcss/pull/6926))
|
|
27
|
+
- Emit plugin defaults regardless of usage ([#6926](https://github.com/tailwindlabs/tailwindcss/pull/6926))
|
|
28
|
+
- Move default border color back to preflight ([#6926](https://github.com/tailwindlabs/tailwindcss/pull/6926))
|
|
29
|
+
- Change `experimental.optimizeUniversalDefaults` to only work with `@tailwind base` ([#6926](https://github.com/tailwindlabs/tailwindcss/pull/6926))
|
|
30
|
+
|
|
31
|
+
## [3.0.11] - 2022-01-05
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Preserve casing of CSS variables added by plugins ([#6888](https://github.com/tailwindlabs/tailwindcss/pull/6888))
|
|
36
|
+
- Ignore content paths that are passed in but don't actually exist ([#6901](https://github.com/tailwindlabs/tailwindcss/pull/6901))
|
|
37
|
+
- Revert change that applies Tailwind's defaults in isolated environments like CSS modules ([9fdc391](https://github.com/tailwindlabs/tailwindcss/commit/9fdc391d4ff93e7e350f5ce439060176b1f0162f))
|
|
38
|
+
|
|
39
|
+
## [3.0.10] - 2022-01-04
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- Fix `@apply` in files without `@tailwind` directives ([#6580](https://github.com/tailwindlabs/tailwindcss/pull/6580), [#6875](https://github.com/tailwindlabs/tailwindcss/pull/6875))
|
|
44
|
+
- CLI: avoid unnecessary writes to output files ([#6550](https://github.com/tailwindlabs/tailwindcss/pull/6550))
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- Allow piping data into the CLI ([#6876](https://github.com/tailwindlabs/tailwindcss/pull/6876))
|
|
49
|
+
|
|
12
50
|
## [3.0.9] - 2022-01-03
|
|
13
51
|
|
|
14
52
|
### Fixed
|
|
@@ -1760,7 +1798,11 @@ No release notes
|
|
|
1760
1798
|
|
|
1761
1799
|
- Everything!
|
|
1762
1800
|
|
|
1763
|
-
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.
|
|
1801
|
+
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.13...HEAD
|
|
1802
|
+
[3.0.13]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.12...v3.0.13
|
|
1803
|
+
[3.0.12]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.11...v3.0.12
|
|
1804
|
+
[3.0.11]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.10...v3.0.11
|
|
1805
|
+
[3.0.10]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.9...v3.0.10
|
|
1764
1806
|
[3.0.9]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.8...v3.0.9
|
|
1765
1807
|
[3.0.8]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.7...v3.0.8
|
|
1766
1808
|
[3.0.7]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.6...v3.0.7
|
package/lib/cli.js
CHANGED
|
@@ -40,6 +40,25 @@ function formatNodes(root) {
|
|
|
40
40
|
root.first.raws.before = '';
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
async function outputFile(file, contents) {
|
|
44
|
+
if (_fs.default.existsSync(file) && await _fs.default.promises.readFile(file, 'utf8') === contents) {
|
|
45
|
+
return; // Skip writing the file
|
|
46
|
+
}
|
|
47
|
+
// Write the file
|
|
48
|
+
await _fs.default.promises.writeFile(file, contents, 'utf8');
|
|
49
|
+
}
|
|
50
|
+
function drainStdin() {
|
|
51
|
+
return new Promise((resolve, reject)=>{
|
|
52
|
+
let result = '';
|
|
53
|
+
process.stdin.on('data', (chunk)=>{
|
|
54
|
+
result += chunk;
|
|
55
|
+
});
|
|
56
|
+
process.stdin.on('end', ()=>resolve(result)
|
|
57
|
+
);
|
|
58
|
+
process.stdin.on('error', (err)=>reject(err)
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
43
62
|
function help({ message , usage , commands: commands1 , options }) {
|
|
44
63
|
let indent = 2;
|
|
45
64
|
// Render header
|
|
@@ -70,8 +89,7 @@ function help({ message , usage , commands: commands1 , options }) {
|
|
|
70
89
|
}
|
|
71
90
|
// Render options
|
|
72
91
|
if (options) {
|
|
73
|
-
let groupedOptions = {
|
|
74
|
-
};
|
|
92
|
+
let groupedOptions = {};
|
|
75
93
|
for (let [key, value] of Object.entries(options)){
|
|
76
94
|
if (typeof value === 'object') {
|
|
77
95
|
groupedOptions[key] = {
|
|
@@ -336,7 +354,7 @@ async function build() {
|
|
|
336
354
|
console.error('[deprecation] Running tailwindcss without -i, please provide an input file.');
|
|
337
355
|
input = args['--input'] = args['_'][1];
|
|
338
356
|
}
|
|
339
|
-
if (input && !_fs.default.existsSync(input = _path.default.resolve(input))) {
|
|
357
|
+
if (input && input !== '-' && !_fs.default.existsSync(input = _path.default.resolve(input))) {
|
|
340
358
|
console.error(`Specified input file ${args['--input']} does not exist.`);
|
|
341
359
|
process.exit(9);
|
|
342
360
|
}
|
|
@@ -351,13 +369,11 @@ async function build() {
|
|
|
351
369
|
let { plugins: configPlugins } = customPostCssPath ? await (async ()=>{
|
|
352
370
|
let file = _path.default.resolve(customPostCssPath);
|
|
353
371
|
// Implementation, see: https://unpkg.com/browse/postcss-load-config@3.0.1/src/index.js
|
|
354
|
-
let { config ={
|
|
355
|
-
} } = await (0, _cosmiconfig).cosmiconfig('postcss').load(file);
|
|
372
|
+
let { config ={} } = await (0, _cosmiconfig).cosmiconfig('postcss').load(file);
|
|
356
373
|
if (typeof config === 'function') {
|
|
357
374
|
config = config();
|
|
358
375
|
} else {
|
|
359
|
-
config = Object.assign({
|
|
360
|
-
}, config);
|
|
376
|
+
config = Object.assign({}, config);
|
|
361
377
|
}
|
|
362
378
|
if (!config.plugins) {
|
|
363
379
|
config.plugins = [];
|
|
@@ -383,8 +399,7 @@ async function build() {
|
|
|
383
399
|
];
|
|
384
400
|
}
|
|
385
401
|
function resolveConfig() {
|
|
386
|
-
let config = configPath ? require(configPath) : {
|
|
387
|
-
};
|
|
402
|
+
let config = configPath ? require(configPath) : {};
|
|
388
403
|
let resolvedConfig = (0, _resolveConfig).default(config);
|
|
389
404
|
if (args['--purge']) {
|
|
390
405
|
_log.default.warn('purge-flag-deprecated', [
|
|
@@ -463,8 +478,7 @@ async function build() {
|
|
|
463
478
|
// Try to load a local `autoprefixer` version first
|
|
464
479
|
try {
|
|
465
480
|
return require('autoprefixer');
|
|
466
|
-
} catch {
|
|
467
|
-
}
|
|
481
|
+
} catch {}
|
|
468
482
|
return (0, _indexJs).lazyAutoprefixer();
|
|
469
483
|
})(),
|
|
470
484
|
args['--minify'] && (()=>{
|
|
@@ -479,8 +493,7 @@ async function build() {
|
|
|
479
493
|
// Try to load a local `cssnano` version first
|
|
480
494
|
try {
|
|
481
495
|
return require('cssnano');
|
|
482
|
-
} catch {
|
|
483
|
-
}
|
|
496
|
+
} catch {}
|
|
484
497
|
return (0, _indexJs).lazyCssnano()(options);
|
|
485
498
|
})(),
|
|
486
499
|
].filter(Boolean);
|
|
@@ -499,10 +512,8 @@ async function build() {
|
|
|
499
512
|
return process.stdout.write(result.css);
|
|
500
513
|
}
|
|
501
514
|
return Promise.all([
|
|
502
|
-
|
|
503
|
-
),
|
|
504
|
-
result.map && _fs.default.writeFile(output + '.map', result.map.toString(), ()=>true
|
|
505
|
-
),
|
|
515
|
+
outputFile(output, result.css),
|
|
516
|
+
result.map && outputFile(output + '.map', result.map.toString()),
|
|
506
517
|
].filter(Boolean));
|
|
507
518
|
}).then(()=>{
|
|
508
519
|
let end = process.hrtime.bigint();
|
|
@@ -510,7 +521,18 @@ async function build() {
|
|
|
510
521
|
console.error('Done in', (end - start) / BigInt(1000000) + 'ms.');
|
|
511
522
|
});
|
|
512
523
|
}
|
|
513
|
-
let css1 =
|
|
524
|
+
let css1 = await (()=>{
|
|
525
|
+
// Piping in data, let's drain the stdin
|
|
526
|
+
if (input === '-') {
|
|
527
|
+
return drainStdin();
|
|
528
|
+
}
|
|
529
|
+
// Input file has been provided
|
|
530
|
+
if (input) {
|
|
531
|
+
return _fs.default.readFileSync(_path.default.resolve(input), 'utf8');
|
|
532
|
+
}
|
|
533
|
+
// No input file provided, fallback to default atrules
|
|
534
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
535
|
+
})();
|
|
514
536
|
return processCSS(css1);
|
|
515
537
|
}
|
|
516
538
|
let context = null;
|
|
@@ -547,8 +569,7 @@ async function build() {
|
|
|
547
569
|
// Try to load a local `autoprefixer` version first
|
|
548
570
|
try {
|
|
549
571
|
return require('autoprefixer');
|
|
550
|
-
} catch {
|
|
551
|
-
}
|
|
572
|
+
} catch {}
|
|
552
573
|
return (0, _indexJs).lazyAutoprefixer();
|
|
553
574
|
})(),
|
|
554
575
|
args['--minify'] && (()=>{
|
|
@@ -563,8 +584,7 @@ async function build() {
|
|
|
563
584
|
// Try to load a local `cssnano` version first
|
|
564
585
|
try {
|
|
565
586
|
return require('cssnano');
|
|
566
|
-
} catch {
|
|
567
|
-
}
|
|
587
|
+
} catch {}
|
|
568
588
|
return (0, _indexJs).lazyCssnano()(options);
|
|
569
589
|
})(),
|
|
570
590
|
].filter(Boolean);
|
|
@@ -619,11 +639,9 @@ async function build() {
|
|
|
619
639
|
if (!output) {
|
|
620
640
|
return process.stdout.write(result.css);
|
|
621
641
|
}
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
),
|
|
625
|
-
result.map && _fs.default.writeFile(output + '.map', result.map.toString(), ()=>true
|
|
626
|
-
),
|
|
642
|
+
return Promise.all([
|
|
643
|
+
outputFile(output, result.css),
|
|
644
|
+
result.map && outputFile(output + '.map', result.map.toString()),
|
|
627
645
|
].filter(Boolean));
|
|
628
646
|
}).then(()=>{
|
|
629
647
|
let end = process.hrtime.bigint();
|
|
@@ -636,7 +654,18 @@ async function build() {
|
|
|
636
654
|
}
|
|
637
655
|
});
|
|
638
656
|
}
|
|
639
|
-
let css2 =
|
|
657
|
+
let css2 = await (()=>{
|
|
658
|
+
// Piping in data, let's drain the stdin
|
|
659
|
+
if (input === '-') {
|
|
660
|
+
return drainStdin();
|
|
661
|
+
}
|
|
662
|
+
// Input file has been provided
|
|
663
|
+
if (input) {
|
|
664
|
+
return _fs.default.readFileSync(_path.default.resolve(input), 'utf8');
|
|
665
|
+
}
|
|
666
|
+
// No input file provided, fallback to default atrules
|
|
667
|
+
return '@tailwind base; @tailwind components; @tailwind utilities';
|
|
668
|
+
})();
|
|
640
669
|
let result1 = await processCSS(css2);
|
|
641
670
|
env.DEBUG && console.timeEnd('Finished in');
|
|
642
671
|
return result1;
|