tailwindcss 3.0.15 → 3.0.19
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 +38 -2
- package/LICENSE +1 -2
- package/lib/cli.js +9 -3
- package/lib/corePlugins.js +2 -1
- package/lib/css/preflight.css +1 -1
- package/lib/lib/expandTailwindAtRules.js +2 -1
- package/lib/lib/generateRules.js +66 -27
- package/lib/lib/normalizeTailwindDirectives.js +2 -1
- package/lib/lib/setupContextUtils.js +18 -3
- package/{nesting → lib/postcss-plugins/nesting}/README.md +0 -0
- package/lib/postcss-plugins/nesting/index.js +17 -0
- package/lib/postcss-plugins/nesting/plugin.js +53 -0
- package/lib/processTailwindFeatures.js +5 -0
- package/lib/util/normalizeConfig.js +9 -5
- package/lib/util/parseBoxShadowValue.js +1 -1
- package/lib/util/prefixSelector.js +4 -5
- package/nesting/index.js +2 -12
- package/package.json +10 -15
- package/peers/index.js +951 -1143
- package/src/cli.js +5 -3
- package/src/corePlugins.js +1 -0
- package/src/css/preflight.css +1 -1
- package/src/lib/expandTailwindAtRules.js +2 -1
- package/src/lib/generateRules.js +73 -22
- package/src/lib/normalizeTailwindDirectives.js +1 -0
- package/src/lib/setupContextUtils.js +18 -4
- package/src/postcss-plugins/nesting/README.md +42 -0
- package/src/postcss-plugins/nesting/index.js +13 -0
- package/{nesting → src/postcss-plugins/nesting}/plugin.js +4 -4
- package/src/processTailwindFeatures.js +6 -0
- package/src/util/normalizeConfig.js +7 -5
- package/src/util/parseBoxShadowValue.js +1 -1
- package/src/util/prefixSelector.js +7 -5
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Nothing yet!
|
|
11
|
+
|
|
12
|
+
## [3.0.19] - 2022-02-07
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Fix preflight border color fallback ([#7288](https://github.com/tailwindlabs/tailwindcss/pull/7288))
|
|
17
|
+
- Correctly parse shadow lengths without a leading zero ([#7289](https://github.com/tailwindlabs/tailwindcss/pull/7289))
|
|
18
|
+
- Don't crash when scanning extremely long class candidates ([#7331](https://github.com/tailwindlabs/tailwindcss/pull/7331))
|
|
19
|
+
- Use less hacky fix for URLs detected as custom properties ([#7275](https://github.com/tailwindlabs/tailwindcss/pull/7275))
|
|
20
|
+
- Correctly generate negative utilities when dash is before the prefix ([#7295](https://github.com/tailwindlabs/tailwindcss/pull/7295))
|
|
21
|
+
- Detect prefixed negative utilities in the safelist ([#7295](https://github.com/tailwindlabs/tailwindcss/pull/7295))
|
|
22
|
+
|
|
23
|
+
## [3.0.18] - 2022-01-28
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Fix `@apply` order regression (in `addComponents`, `addUtilities`, ...) ([#7232](https://github.com/tailwindlabs/tailwindcss/pull/7232))
|
|
28
|
+
- Quick fix for incorrect arbitrary properties when using URLs ([#7252](https://github.com/tailwindlabs/tailwindcss/pull/7252))
|
|
29
|
+
|
|
30
|
+
## [3.0.17] - 2022-01-26
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- Remove false positive warning in CLI when using the `--content` option ([#7220](https://github.com/tailwindlabs/tailwindcss/pull/7220))
|
|
35
|
+
|
|
36
|
+
## [3.0.16] - 2022-01-24
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- Ensure to transpile the PostCSS Nesting plugin (tailwindcss/nesting) ([#7080](https://github.com/tailwindlabs/tailwindcss/pull/7080))
|
|
41
|
+
- Improve various warnings ([#7118](https://github.com/tailwindlabs/tailwindcss/pull/7118))
|
|
42
|
+
- Fix grammatical mistake ([cca5a38](https://github.com/tailwindlabs/tailwindcss/commit/cca5a3804e1d3ee0214491921e1aec35bf62a813))
|
|
11
43
|
|
|
12
44
|
## [3.0.15] - 2022-01-15
|
|
13
45
|
|
|
@@ -1815,7 +1847,11 @@ No release notes
|
|
|
1815
1847
|
|
|
1816
1848
|
- Everything!
|
|
1817
1849
|
|
|
1818
|
-
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.
|
|
1850
|
+
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.19...HEAD
|
|
1851
|
+
[3.0.19]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.18...v3.0.19
|
|
1852
|
+
[3.0.18]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.17...v3.0.18
|
|
1853
|
+
[3.0.17]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.16...v3.0.17
|
|
1854
|
+
[3.0.16]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.15...v3.0.16
|
|
1819
1855
|
[3.0.15]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.14...v3.0.15
|
|
1820
1856
|
[3.0.14]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.13...v3.0.14
|
|
1821
1857
|
[3.0.13]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.12...v3.0.13
|
package/LICENSE
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
4
|
-
Copyright (c) Jonathan Reinink <jonathan@reinink.ca>
|
|
3
|
+
Copyright (c) Tailwind Labs, Inc.
|
|
5
4
|
|
|
6
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/lib/cli.js
CHANGED
|
@@ -400,7 +400,6 @@ async function build() {
|
|
|
400
400
|
}
|
|
401
401
|
function resolveConfig() {
|
|
402
402
|
let config = configPath ? require(configPath) : {};
|
|
403
|
-
let resolvedConfig = (0, _resolveConfig).default(config);
|
|
404
403
|
if (args['--purge']) {
|
|
405
404
|
_log.default.warn('purge-flag-deprecated', [
|
|
406
405
|
'The `--purge` flag has been deprecated.',
|
|
@@ -411,9 +410,16 @@ async function build() {
|
|
|
411
410
|
}
|
|
412
411
|
}
|
|
413
412
|
if (args['--content']) {
|
|
414
|
-
|
|
413
|
+
let files = args['--content'].split(/(?<!{[^}]+),/);
|
|
414
|
+
let resolvedConfig = (0, _resolveConfig).default(config, {
|
|
415
|
+
content: {
|
|
416
|
+
files
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
resolvedConfig.content.files = files;
|
|
420
|
+
return resolvedConfig;
|
|
415
421
|
}
|
|
416
|
-
return
|
|
422
|
+
return (0, _resolveConfig).default(config);
|
|
417
423
|
}
|
|
418
424
|
function extractFileGlobs(config) {
|
|
419
425
|
return config.content.files.filter((file)=>{
|
package/lib/corePlugins.js
CHANGED
|
@@ -184,7 +184,8 @@ let variantPlugins = {
|
|
|
184
184
|
mode = 'media';
|
|
185
185
|
_log.default.warn('darkmode-false', [
|
|
186
186
|
'The `darkMode` option in your Tailwind CSS configuration is set to `false`, which now behaves the same as `media`.',
|
|
187
|
-
'Change `darkMode` to `media` or remove it entirely.',
|
|
187
|
+
'Change `darkMode` to `media` or remove it entirely.',
|
|
188
|
+
'https://tailwindcss.com/docs/upgrade-guide#remove-dark-mode-configuration',
|
|
188
189
|
]);
|
|
189
190
|
}
|
|
190
191
|
if (mode === 'class') {
|
package/lib/css/preflight.css
CHANGED
|
@@ -231,7 +231,8 @@ function expandTailwindAtRules(context) {
|
|
|
231
231
|
});
|
|
232
232
|
if (layerNodes.utilities && utilityNodes.size === 0 && !hasUtilityVariants) {
|
|
233
233
|
_log.default.warn('content-problems', [
|
|
234
|
-
'No
|
|
234
|
+
'No utility classes were detected in your source files. If this is unexpected, double-check the `content` option in your Tailwind CSS configuration.',
|
|
235
|
+
'https://tailwindcss.com/docs/content-configuration',
|
|
235
236
|
]);
|
|
236
237
|
}
|
|
237
238
|
// ---
|
package/lib/lib/generateRules.js
CHANGED
|
@@ -33,32 +33,32 @@ function getClassNameFromSelector(selector) {
|
|
|
33
33
|
// Example with dynamic classes:
|
|
34
34
|
// ['grid-cols', '[[linename],1fr,auto]']
|
|
35
35
|
// ['grid', 'cols-[[linename],1fr,auto]']
|
|
36
|
-
function* candidatePermutations(candidate
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
function* candidatePermutations(candidate) {
|
|
37
|
+
let lastIndex = Infinity;
|
|
38
|
+
while(lastIndex >= 0){
|
|
39
|
+
let dashIdx;
|
|
40
|
+
if (lastIndex === Infinity && candidate.endsWith(']')) {
|
|
41
|
+
let bracketIdx = candidate.indexOf('[');
|
|
42
|
+
// If character before `[` isn't a dash or a slash, this isn't a dynamic class
|
|
43
|
+
// eg. string[]
|
|
44
|
+
dashIdx = [
|
|
45
|
+
'-',
|
|
46
|
+
'/'
|
|
47
|
+
].includes(candidate[bracketIdx - 1]) ? bracketIdx - 1 : -1;
|
|
48
|
+
} else {
|
|
49
|
+
dashIdx = candidate.lastIndexOf('-', lastIndex);
|
|
50
|
+
}
|
|
51
|
+
if (dashIdx < 0) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
let prefix = candidate.slice(0, dashIdx);
|
|
55
|
+
let modifier = candidate.slice(dashIdx + 1);
|
|
56
|
+
yield [
|
|
57
|
+
prefix,
|
|
58
|
+
modifier
|
|
59
|
+
];
|
|
60
|
+
lastIndex = dashIdx - 1;
|
|
54
61
|
}
|
|
55
|
-
let prefix = candidate.slice(0, dashIdx);
|
|
56
|
-
let modifier = candidate.slice(dashIdx + 1);
|
|
57
|
-
yield [
|
|
58
|
-
prefix,
|
|
59
|
-
modifier
|
|
60
|
-
];
|
|
61
|
-
yield* candidatePermutations(candidate, dashIdx - 1);
|
|
62
62
|
}
|
|
63
63
|
function applyPrefix(matches, context) {
|
|
64
64
|
if (matches.length === 0 || context.tailwindConfig.prefix === '') {
|
|
@@ -72,8 +72,14 @@ function applyPrefix(matches, context) {
|
|
|
72
72
|
match[1].clone()
|
|
73
73
|
]
|
|
74
74
|
});
|
|
75
|
+
let classCandidate = match[1].raws.tailwind.classCandidate;
|
|
75
76
|
container.walkRules((r)=>{
|
|
76
|
-
|
|
77
|
+
// If this is a negative utility with a dash *before* the prefix we
|
|
78
|
+
// have to ensure that the generated selector matches the candidate
|
|
79
|
+
// Not doing this will cause `-tw-top-1` to generate the class `.tw--top-1`
|
|
80
|
+
// The disconnect between candidate <-> class can cause @apply to hard crash.
|
|
81
|
+
let shouldPrependNegative = classCandidate.startsWith('-');
|
|
82
|
+
r.selector = (0, _prefixSelector).default(context.tailwindConfig.prefix, r.selector, shouldPrependNegative);
|
|
77
83
|
});
|
|
78
84
|
match[1] = container.nodes[0];
|
|
79
85
|
}
|
|
@@ -267,7 +273,30 @@ const IS_VALID_PROPERTY_NAME = /^[a-z_-]/;
|
|
|
267
273
|
function isValidPropName(name) {
|
|
268
274
|
return IS_VALID_PROPERTY_NAME.test(name);
|
|
269
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* @param {string} declaration
|
|
278
|
+
* @returns {boolean}
|
|
279
|
+
*/ function looksLikeUri(declaration) {
|
|
280
|
+
// Quick bailout for obvious non-urls
|
|
281
|
+
// This doesn't support schemes that don't use a leading // but that's unlikely to be a problem
|
|
282
|
+
if (!declaration.includes('://')) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
try {
|
|
286
|
+
const url = new URL(declaration);
|
|
287
|
+
return url.scheme !== '' && url.host !== '';
|
|
288
|
+
} catch (err) {
|
|
289
|
+
// Definitely not a valid url
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
270
293
|
function isParsableCssValue(property, value) {
|
|
294
|
+
// We don't want to to treat [https://example.com] as a custom property
|
|
295
|
+
// Even though, according to the CSS grammar, it's a totally valid CSS declaration
|
|
296
|
+
// So we short-circuit here by checking if the custom property looks like a url
|
|
297
|
+
if (looksLikeUri(`${property}:${value}`)) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
271
300
|
try {
|
|
272
301
|
_postcss.default.parse(`a{${property}:${value}}`).toResult();
|
|
273
302
|
return true;
|
|
@@ -347,6 +376,14 @@ function* resolveMatchedPlugins(classCandidate, context) {
|
|
|
347
376
|
function splitWithSeparator(input, separator) {
|
|
348
377
|
return input.split(new RegExp(`\\${separator}(?![^[]*\\])`, 'g'));
|
|
349
378
|
}
|
|
379
|
+
function* recordCandidates(matches, classCandidate) {
|
|
380
|
+
for (const match of matches){
|
|
381
|
+
match[1].raws.tailwind = {
|
|
382
|
+
classCandidate
|
|
383
|
+
};
|
|
384
|
+
yield match;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
350
387
|
function* resolveMatches(candidate, context) {
|
|
351
388
|
let separator = context.tailwindConfig.separator;
|
|
352
389
|
let [classCandidate, ...variants] = splitWithSeparator(candidate, separator).reverse();
|
|
@@ -456,7 +493,9 @@ function* resolveMatches(candidate, context) {
|
|
|
456
493
|
]);
|
|
457
494
|
continue;
|
|
458
495
|
}
|
|
459
|
-
matches =
|
|
496
|
+
matches = matches.flat();
|
|
497
|
+
matches = Array.from(recordCandidates(matches, classCandidate));
|
|
498
|
+
matches = applyPrefix(matches, context);
|
|
460
499
|
if (important) {
|
|
461
500
|
matches = applyImportant(matches, context);
|
|
462
501
|
}
|
|
@@ -49,7 +49,8 @@ function normalizeTailwindDirectives(root) {
|
|
|
49
49
|
].includes(atRule.name)) {
|
|
50
50
|
_log.default.warn(`${atRule.name}-at-rule-deprecated`, [
|
|
51
51
|
`The \`@${atRule.name}\` directive has been deprecated in Tailwind CSS v3.0.`,
|
|
52
|
-
`Use \`@layer utilities\` or \`@layer components\` instead.`,
|
|
52
|
+
`Use \`@layer utilities\` or \`@layer components\` instead.`,
|
|
53
|
+
'https://tailwindcss.com/docs/upgrade-guide#replace-variants-with-layer',
|
|
53
54
|
]);
|
|
54
55
|
}
|
|
55
56
|
layerDirectives.add(atRule);
|
|
@@ -664,7 +664,8 @@ function registerPlugins(plugins, context) {
|
|
|
664
664
|
if (value1 instanceof RegExp) {
|
|
665
665
|
_log.default.warn('root-regex', [
|
|
666
666
|
'Regular expressions in `safelist` work differently in Tailwind CSS v3.0.',
|
|
667
|
-
'Update your `safelist` configuration to eliminate this warning.'
|
|
667
|
+
'Update your `safelist` configuration to eliminate this warning.',
|
|
668
|
+
'https://tailwindcss.com/docs/content-configuration#safelisting-classes',
|
|
668
669
|
]);
|
|
669
670
|
continue;
|
|
670
671
|
}
|
|
@@ -672,18 +673,31 @@ function registerPlugins(plugins, context) {
|
|
|
672
673
|
}
|
|
673
674
|
if (checks.length > 0) {
|
|
674
675
|
let patternMatchingCount = new Map();
|
|
676
|
+
let prefixLength = context.tailwindConfig.prefix.length;
|
|
675
677
|
for (let util of classList){
|
|
676
678
|
let utils = Array.isArray(util) ? (()=>{
|
|
677
679
|
let [utilName, options] = util;
|
|
678
680
|
var ref;
|
|
679
|
-
let
|
|
681
|
+
let values = Object.keys((ref = options === null || options === void 0 ? void 0 : options.values) !== null && ref !== void 0 ? ref : {});
|
|
682
|
+
let classes = values.map((value)=>(0, _nameClass).formatClass(utilName, value)
|
|
680
683
|
);
|
|
681
684
|
if (options === null || options === void 0 ? void 0 : options.supportsNegativeValues) {
|
|
685
|
+
// This is the normal negated version
|
|
686
|
+
// e.g. `-inset-1` or `-tw-inset-1`
|
|
682
687
|
classes = [
|
|
683
688
|
...classes,
|
|
684
689
|
...classes.map((cls)=>'-' + cls
|
|
685
690
|
)
|
|
686
691
|
];
|
|
692
|
+
// This is the negated version *after* the prefix
|
|
693
|
+
// e.g. `tw--inset-1`
|
|
694
|
+
// The prefix is already attached to util name
|
|
695
|
+
// So we add the negative after the prefix
|
|
696
|
+
classes = [
|
|
697
|
+
...classes,
|
|
698
|
+
...classes.map((cls)=>cls.slice(0, prefixLength) + '-' + cls.slice(prefixLength)
|
|
699
|
+
),
|
|
700
|
+
];
|
|
687
701
|
}
|
|
688
702
|
return classes;
|
|
689
703
|
})() : [
|
|
@@ -716,7 +730,8 @@ function registerPlugins(plugins, context) {
|
|
|
716
730
|
if (count !== 0) continue;
|
|
717
731
|
_log.default.warn([
|
|
718
732
|
`The safelist pattern \`${regex}\` doesn't match any Tailwind CSS classes.`,
|
|
719
|
-
'Fix this pattern or remove it from your `safelist` configuration.',
|
|
733
|
+
'Fix this pattern or remove it from your `safelist` configuration.',
|
|
734
|
+
'https://tailwindcss.com/docs/content-configuration#safelisting-classes',
|
|
720
735
|
]);
|
|
721
736
|
}
|
|
722
737
|
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _plugin = require("./plugin");
|
|
7
|
+
var _default = Object.assign(function(opts) {
|
|
8
|
+
return {
|
|
9
|
+
postcssPlugin: 'tailwindcss/nesting',
|
|
10
|
+
Once (root, { result }) {
|
|
11
|
+
return (0, _plugin).nesting(opts)(root, result);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}, {
|
|
15
|
+
postcss: true
|
|
16
|
+
});
|
|
17
|
+
exports.default = _default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.nesting = nesting;
|
|
6
|
+
var _postcss = _interopRequireDefault(require("postcss"));
|
|
7
|
+
var _postcssNested = _interopRequireDefault(require("postcss-nested"));
|
|
8
|
+
function _interopRequireDefault(obj) {
|
|
9
|
+
return obj && obj.__esModule ? obj : {
|
|
10
|
+
default: obj
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function nesting(opts = _postcssNested.default) {
|
|
14
|
+
return (root, result)=>{
|
|
15
|
+
root.walkAtRules('screen', (rule)=>{
|
|
16
|
+
rule.name = 'media';
|
|
17
|
+
rule.params = `screen(${rule.params})`;
|
|
18
|
+
});
|
|
19
|
+
root.walkAtRules('apply', (rule)=>{
|
|
20
|
+
rule.before(_postcss.default.decl({
|
|
21
|
+
prop: '__apply',
|
|
22
|
+
value: rule.params,
|
|
23
|
+
source: rule.source
|
|
24
|
+
}));
|
|
25
|
+
rule.remove();
|
|
26
|
+
});
|
|
27
|
+
let plugin = (()=>{
|
|
28
|
+
var ref;
|
|
29
|
+
if (typeof opts === 'function' || typeof opts === 'object' && (opts === null || opts === void 0 ? void 0 : (ref = opts.hasOwnProperty) === null || ref === void 0 ? void 0 : ref.call(opts, 'postcssPlugin'))) {
|
|
30
|
+
return opts;
|
|
31
|
+
}
|
|
32
|
+
if (typeof opts === 'string') {
|
|
33
|
+
return require(opts);
|
|
34
|
+
}
|
|
35
|
+
if (Object.keys(opts).length <= 0) {
|
|
36
|
+
return _postcssNested.default;
|
|
37
|
+
}
|
|
38
|
+
throw new Error('tailwindcss/nesting should be loaded with a nesting plugin.');
|
|
39
|
+
})();
|
|
40
|
+
(0, _postcss).default([
|
|
41
|
+
plugin
|
|
42
|
+
]).process(root, result.opts).sync();
|
|
43
|
+
root.walkDecls('__apply', (decl)=>{
|
|
44
|
+
decl.before(_postcss.default.atRule({
|
|
45
|
+
name: 'apply',
|
|
46
|
+
params: decl.value,
|
|
47
|
+
source: decl.source
|
|
48
|
+
}));
|
|
49
|
+
decl.remove();
|
|
50
|
+
});
|
|
51
|
+
return root;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
@@ -24,6 +24,8 @@ function processTailwindFeatures(setupContext) {
|
|
|
24
24
|
return function(root, result) {
|
|
25
25
|
let { tailwindDirectives , applyDirectives } = (0, _normalizeTailwindDirectives).default(root);
|
|
26
26
|
(0, _detectNesting).default()(root, result);
|
|
27
|
+
// Partition apply rules that are found in the css
|
|
28
|
+
// itself.
|
|
27
29
|
(0, _partitionApplyAtRules).default()(root, result);
|
|
28
30
|
let context = setupContext({
|
|
29
31
|
tailwindDirectives,
|
|
@@ -44,6 +46,9 @@ function processTailwindFeatures(setupContext) {
|
|
|
44
46
|
}
|
|
45
47
|
(0, _featureFlags).issueFlagNotices(context.tailwindConfig);
|
|
46
48
|
(0, _expandTailwindAtRules).default(context)(root, result);
|
|
49
|
+
// Partition apply rules that are generated by
|
|
50
|
+
// addComponents, addUtilities and so on.
|
|
51
|
+
(0, _partitionApplyAtRules).default()(root, result);
|
|
47
52
|
(0, _expandApplyAtRules).default(context)(root, result);
|
|
48
53
|
(0, _evaluateTailwindFunctions).default(context)(root, result);
|
|
49
54
|
(0, _substituteScreenAtRules).default(context)(root, result);
|
|
@@ -123,7 +123,8 @@ function normalizeConfig(config) {
|
|
|
123
123
|
if (!valid) {
|
|
124
124
|
_log.default.warn('purge-deprecation', [
|
|
125
125
|
'The `purge`/`content` options have changed in Tailwind CSS v3.0.',
|
|
126
|
-
'Update your configuration file to eliminate this warning.'
|
|
126
|
+
'Update your configuration file to eliminate this warning.',
|
|
127
|
+
'https://tailwindcss.com/docs/upgrade-guide#configure-content-sources',
|
|
127
128
|
]);
|
|
128
129
|
}
|
|
129
130
|
// Normalize the `safelist`
|
|
@@ -140,7 +141,8 @@ function normalizeConfig(config) {
|
|
|
140
141
|
if (typeof config.prefix === 'function') {
|
|
141
142
|
_log.default.warn('prefix-function', [
|
|
142
143
|
'As of Tailwind CSS v3.0, `prefix` cannot be a function.',
|
|
143
|
-
'Update `prefix` in your configuration to be a string to eliminate this warning.'
|
|
144
|
+
'Update `prefix` in your configuration to be a string to eliminate this warning.',
|
|
145
|
+
'https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function',
|
|
144
146
|
]);
|
|
145
147
|
config.prefix = '';
|
|
146
148
|
} else {
|
|
@@ -221,15 +223,17 @@ function normalizeConfig(config) {
|
|
|
221
223
|
for (let file of config.content.files){
|
|
222
224
|
if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) {
|
|
223
225
|
_log.default.warn('invalid-glob-braces', [
|
|
224
|
-
`The glob pattern ${(0, _log).dim(file)} in your
|
|
225
|
-
`
|
|
226
|
+
`The glob pattern ${(0, _log).dim(file)} in your Tailwind CSS configuration is invalid.`,
|
|
227
|
+
`Update it to ${(0, _log).dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`
|
|
226
228
|
]);
|
|
227
229
|
break;
|
|
228
230
|
}
|
|
229
231
|
}
|
|
230
232
|
if (config.content.files.length === 0) {
|
|
231
233
|
_log.default.warn('content-problems', [
|
|
232
|
-
'The `content`
|
|
234
|
+
'The `content` option in your Tailwind CSS configuration is missing or empty.',
|
|
235
|
+
'Configure your content sources or your generated CSS will be missing styles.',
|
|
236
|
+
'https://tailwindcss.com/docs/content-configuration',
|
|
233
237
|
]);
|
|
234
238
|
}
|
|
235
239
|
return config;
|
|
@@ -15,7 +15,7 @@ let COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brac
|
|
|
15
15
|
;
|
|
16
16
|
let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
|
|
17
17
|
;
|
|
18
|
-
let LENGTH = /^-?(\d+)(.*?)$/g;
|
|
18
|
+
let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g;
|
|
19
19
|
function parseBoxShadowValue(input) {
|
|
20
20
|
let shadows = input.split(COMMA);
|
|
21
21
|
return shadows.map((shadow)=>{
|
|
@@ -4,18 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.default = _default;
|
|
6
6
|
var _postcssSelectorParser = _interopRequireDefault(require("postcss-selector-parser"));
|
|
7
|
-
var _tap = require("./tap");
|
|
8
7
|
function _interopRequireDefault(obj) {
|
|
9
8
|
return obj && obj.__esModule ? obj : {
|
|
10
9
|
default: obj
|
|
11
10
|
};
|
|
12
11
|
}
|
|
13
|
-
function _default(prefix, selector) {
|
|
12
|
+
function _default(prefix, selector, prependNegative = false) {
|
|
14
13
|
return (0, _postcssSelectorParser).default((selectors)=>{
|
|
15
14
|
selectors.walkClasses((classSelector)=>{
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
})
|
|
15
|
+
let baseClass = classSelector.value;
|
|
16
|
+
let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-');
|
|
17
|
+
classSelector.value = shouldPlaceNegativeBeforePrefix ? `-${prefix}${baseClass.slice(1)}` : `${prefix}${baseClass}`;
|
|
19
18
|
});
|
|
20
19
|
}).processSync(selector);
|
|
21
20
|
}
|
package/nesting/index.js
CHANGED
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
let nesting = require('
|
|
2
|
-
|
|
3
|
-
module.exports = (opts) => {
|
|
4
|
-
return {
|
|
5
|
-
postcssPlugin: 'tailwindcss/nesting',
|
|
6
|
-
Once(root, { result }) {
|
|
7
|
-
return nesting(opts)(root, result)
|
|
8
|
-
},
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
module.exports.postcss = true
|
|
1
|
+
let nesting = require('../lib/postcss-plugins/nesting')
|
|
2
|
+
module.exports = (nesting.__esModule ? nesting : { default: nesting }).default
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tailwindcss",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.19",
|
|
4
4
|
"description": "A utility-first CSS framework for rapidly building custom user interfaces.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -12,11 +12,6 @@
|
|
|
12
12
|
"tailwind": "lib/cli.js",
|
|
13
13
|
"tailwindcss": "lib/cli.js"
|
|
14
14
|
},
|
|
15
|
-
"contributors": [
|
|
16
|
-
"Adam Wathan <adam.wathan@gmail.com>",
|
|
17
|
-
"Jonathan Reinink <jonathan@reinink.ca>",
|
|
18
|
-
"David Hemphill <davidlee.hemphill@gmail.com>"
|
|
19
|
-
],
|
|
20
15
|
"scripts": {
|
|
21
16
|
"preswcify": "npm run generate:plugin-list && rimraf lib",
|
|
22
17
|
"swcify": "swc src --out-dir lib --copy-files",
|
|
@@ -45,12 +40,12 @@
|
|
|
45
40
|
"devDependencies": {
|
|
46
41
|
"@swc/cli": "^0.1.55",
|
|
47
42
|
"@swc/core": "^1.2.127",
|
|
48
|
-
"@swc/jest": "^0.2.
|
|
49
|
-
"@swc/register": "^0.1.
|
|
50
|
-
"autoprefixer": "^10.4.
|
|
51
|
-
"cssnano": "^5.0.
|
|
43
|
+
"@swc/jest": "^0.2.17",
|
|
44
|
+
"@swc/register": "^0.1.10",
|
|
45
|
+
"autoprefixer": "^10.4.2",
|
|
46
|
+
"cssnano": "^5.0.16",
|
|
52
47
|
"esbuild": "^0.14.10",
|
|
53
|
-
"eslint": "^8.
|
|
48
|
+
"eslint": "^8.8.0",
|
|
54
49
|
"eslint-config-prettier": "^8.3.0",
|
|
55
50
|
"eslint-plugin-prettier": "^4.0.0",
|
|
56
51
|
"jest": "^27.4.7",
|
|
@@ -66,13 +61,13 @@
|
|
|
66
61
|
"dependencies": {
|
|
67
62
|
"arg": "^5.0.1",
|
|
68
63
|
"chalk": "^4.1.2",
|
|
69
|
-
"chokidar": "^3.5.
|
|
64
|
+
"chokidar": "^3.5.3",
|
|
70
65
|
"color-name": "^1.1.4",
|
|
71
66
|
"cosmiconfig": "^7.0.1",
|
|
72
67
|
"detective": "^5.2.0",
|
|
73
68
|
"didyoumean": "^1.2.2",
|
|
74
69
|
"dlv": "^1.1.3",
|
|
75
|
-
"fast-glob": "^3.2.
|
|
70
|
+
"fast-glob": "^3.2.11",
|
|
76
71
|
"glob-parent": "^6.0.2",
|
|
77
72
|
"is-glob": "^4.0.3",
|
|
78
73
|
"normalize-path": "^3.0.0",
|
|
@@ -80,10 +75,10 @@
|
|
|
80
75
|
"postcss-js": "^4.0.0",
|
|
81
76
|
"postcss-load-config": "^3.1.0",
|
|
82
77
|
"postcss-nested": "5.0.6",
|
|
83
|
-
"postcss-selector-parser": "^6.0.
|
|
78
|
+
"postcss-selector-parser": "^6.0.9",
|
|
84
79
|
"postcss-value-parser": "^4.2.0",
|
|
85
80
|
"quick-lru": "^5.1.1",
|
|
86
|
-
"resolve": "^1.
|
|
81
|
+
"resolve": "^1.22.0"
|
|
87
82
|
},
|
|
88
83
|
"browserslist": [
|
|
89
84
|
"> 1%",
|