tailwindcss 3.4.4 → 3.4.5
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 +12 -1
- package/lib/corePlugins.js +14 -3
- package/lib/lib/defaultExtractor.js +22 -2
- package/lib/lib/load-config.js +4 -0
- package/lib/util/dataTypes.js +7 -1
- package/lib/util/normalizeConfig.js +1 -2
- package/lib/util/parseAnimationValue.js +1 -1
- package/lib/util/parseGlob.js +1 -2
- package/lib/util/resolveConfigPath.js +3 -1
- package/lib/util/splitAtTopLevelOnly.js +1 -5
- package/package.json +1 -1
- package/src/corePlugins.js +17 -4
- package/src/lib/defaultExtractor.js +25 -3
- package/src/lib/load-config.ts +11 -0
- package/src/util/dataTypes.js +6 -0
- package/src/util/normalizeConfig.js +1 -3
- package/src/util/parseAnimationValue.js +1 -1
- package/src/util/parseGlob.js +1 -2
- package/src/util/resolveConfigPath.js +2 -0
- package/src/util/splitAtTopLevelOnly.js +1 -5
- package/stubs/config.full.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
- Nothing yet!
|
|
11
11
|
|
|
12
|
+
## [3.4.5] - 2024-07-15
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Disable automatic `var()` injection for anchor properties ([#13826](https://github.com/tailwindlabs/tailwindcss/pull/13826))
|
|
17
|
+
- Use no value instead of `blur(0px)` for `backdrop-blur-none` and `blur-none` utilities ([#13830](https://github.com/tailwindlabs/tailwindcss/pull/13830))
|
|
18
|
+
- Add `.mts` and `.cts` config file detection ([#13940](https://github.com/tailwindlabs/tailwindcss/pull/13940))
|
|
19
|
+
- Don't generate utilities like `px-1` unnecessarily when using utilities like `px-1.5` ([#13959](https://github.com/tailwindlabs/tailwindcss/pull/13959))
|
|
20
|
+
- Always generate `-webkit-backdrop-filter` for `backdrop-*` utilities ([#13997](https://github.com/tailwindlabs/tailwindcss/pull/13997))
|
|
21
|
+
|
|
12
22
|
## [3.4.4] - 2024-06-05
|
|
13
23
|
|
|
14
24
|
### Fixed
|
|
@@ -2385,7 +2395,8 @@ No release notes
|
|
|
2385
2395
|
|
|
2386
2396
|
- Everything!
|
|
2387
2397
|
|
|
2388
|
-
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.
|
|
2398
|
+
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.5...HEAD
|
|
2399
|
+
[3.4.5]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.4...v3.4.5
|
|
2389
2400
|
[3.4.4]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.3...v3.4.4
|
|
2390
2401
|
[3.4.3]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.2...v3.4.3
|
|
2391
2402
|
[3.4.2]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.1...v3.4.2
|
package/lib/corePlugins.js
CHANGED
|
@@ -443,7 +443,7 @@ let variantPlugins = {
|
|
|
443
443
|
matchVariant("supports", (value = "")=>{
|
|
444
444
|
let check = (0, _dataTypes.normalize)(value);
|
|
445
445
|
let isRaw = /^\w*\s*\(/.test(check);
|
|
446
|
-
// Chrome has a bug where `(
|
|
446
|
+
// Chrome has a bug where `(condition1)or(condition2)` is not valid
|
|
447
447
|
// But `(condition1) or (condition2)` is supported.
|
|
448
448
|
check = isRaw ? check.replace(/\b(and|or|not)\b/g, " $1 ") : check;
|
|
449
449
|
if (isRaw) {
|
|
@@ -3929,7 +3929,7 @@ let corePlugins = {
|
|
|
3929
3929
|
matchUtilities({
|
|
3930
3930
|
blur: (value)=>{
|
|
3931
3931
|
return {
|
|
3932
|
-
"--tw-blur": `blur(${value})`,
|
|
3932
|
+
"--tw-blur": value.trim() === "" ? " " : `blur(${value})`,
|
|
3933
3933
|
"@defaults filter": {},
|
|
3934
3934
|
filter: cssFilterValue
|
|
3935
3935
|
};
|
|
@@ -4069,8 +4069,9 @@ let corePlugins = {
|
|
|
4069
4069
|
matchUtilities({
|
|
4070
4070
|
"backdrop-blur": (value)=>{
|
|
4071
4071
|
return {
|
|
4072
|
-
"--tw-backdrop-blur": `blur(${value})`,
|
|
4072
|
+
"--tw-backdrop-blur": value.trim() === "" ? " " : `blur(${value})`,
|
|
4073
4073
|
"@defaults backdrop-filter": {},
|
|
4074
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4074
4075
|
"backdrop-filter": cssBackdropFilterValue
|
|
4075
4076
|
};
|
|
4076
4077
|
}
|
|
@@ -4084,6 +4085,7 @@ let corePlugins = {
|
|
|
4084
4085
|
return {
|
|
4085
4086
|
"--tw-backdrop-brightness": `brightness(${value})`,
|
|
4086
4087
|
"@defaults backdrop-filter": {},
|
|
4088
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4087
4089
|
"backdrop-filter": cssBackdropFilterValue
|
|
4088
4090
|
};
|
|
4089
4091
|
}
|
|
@@ -4097,6 +4099,7 @@ let corePlugins = {
|
|
|
4097
4099
|
return {
|
|
4098
4100
|
"--tw-backdrop-contrast": `contrast(${value})`,
|
|
4099
4101
|
"@defaults backdrop-filter": {},
|
|
4102
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4100
4103
|
"backdrop-filter": cssBackdropFilterValue
|
|
4101
4104
|
};
|
|
4102
4105
|
}
|
|
@@ -4110,6 +4113,7 @@ let corePlugins = {
|
|
|
4110
4113
|
return {
|
|
4111
4114
|
"--tw-backdrop-grayscale": `grayscale(${value})`,
|
|
4112
4115
|
"@defaults backdrop-filter": {},
|
|
4116
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4113
4117
|
"backdrop-filter": cssBackdropFilterValue
|
|
4114
4118
|
};
|
|
4115
4119
|
}
|
|
@@ -4123,6 +4127,7 @@ let corePlugins = {
|
|
|
4123
4127
|
return {
|
|
4124
4128
|
"--tw-backdrop-hue-rotate": `hue-rotate(${value})`,
|
|
4125
4129
|
"@defaults backdrop-filter": {},
|
|
4130
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4126
4131
|
"backdrop-filter": cssBackdropFilterValue
|
|
4127
4132
|
};
|
|
4128
4133
|
}
|
|
@@ -4137,6 +4142,7 @@ let corePlugins = {
|
|
|
4137
4142
|
return {
|
|
4138
4143
|
"--tw-backdrop-invert": `invert(${value})`,
|
|
4139
4144
|
"@defaults backdrop-filter": {},
|
|
4145
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4140
4146
|
"backdrop-filter": cssBackdropFilterValue
|
|
4141
4147
|
};
|
|
4142
4148
|
}
|
|
@@ -4150,6 +4156,7 @@ let corePlugins = {
|
|
|
4150
4156
|
return {
|
|
4151
4157
|
"--tw-backdrop-opacity": `opacity(${value})`,
|
|
4152
4158
|
"@defaults backdrop-filter": {},
|
|
4159
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4153
4160
|
"backdrop-filter": cssBackdropFilterValue
|
|
4154
4161
|
};
|
|
4155
4162
|
}
|
|
@@ -4163,6 +4170,7 @@ let corePlugins = {
|
|
|
4163
4170
|
return {
|
|
4164
4171
|
"--tw-backdrop-saturate": `saturate(${value})`,
|
|
4165
4172
|
"@defaults backdrop-filter": {},
|
|
4173
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4166
4174
|
"backdrop-filter": cssBackdropFilterValue
|
|
4167
4175
|
};
|
|
4168
4176
|
}
|
|
@@ -4176,6 +4184,7 @@ let corePlugins = {
|
|
|
4176
4184
|
return {
|
|
4177
4185
|
"--tw-backdrop-sepia": `sepia(${value})`,
|
|
4178
4186
|
"@defaults backdrop-filter": {},
|
|
4187
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4179
4188
|
"backdrop-filter": cssBackdropFilterValue
|
|
4180
4189
|
};
|
|
4181
4190
|
}
|
|
@@ -4198,9 +4207,11 @@ let corePlugins = {
|
|
|
4198
4207
|
addUtilities({
|
|
4199
4208
|
".backdrop-filter": {
|
|
4200
4209
|
"@defaults backdrop-filter": {},
|
|
4210
|
+
"-webkit-backdrop-filter": cssBackdropFilterValue,
|
|
4201
4211
|
"backdrop-filter": cssBackdropFilterValue
|
|
4202
4212
|
},
|
|
4203
4213
|
".backdrop-filter-none": {
|
|
4214
|
+
"-webkit-backdrop-filter": "none",
|
|
4204
4215
|
"backdrop-filter": "none"
|
|
4205
4216
|
}
|
|
4206
4217
|
});
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "defaultExtractor", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _regex = /*#__PURE__*/ _interop_require_wildcard(require("./regex"));
|
|
12
|
+
const _splitAtTopLevelOnly = require("../util/splitAtTopLevelOnly");
|
|
12
13
|
function _getRequireWildcardCache(nodeInterop) {
|
|
13
14
|
if (typeof WeakMap !== "function") return null;
|
|
14
15
|
var cacheBabelInterop = new WeakMap();
|
|
@@ -60,6 +61,27 @@ function defaultExtractor(context) {
|
|
|
60
61
|
results.push(clipAtBalancedParens(result));
|
|
61
62
|
}
|
|
62
63
|
}
|
|
64
|
+
// Extract any subclasses from languages like Slim and Pug, eg:
|
|
65
|
+
// div.flex.px-5.underline
|
|
66
|
+
for (let result of results.slice()){
|
|
67
|
+
let segments = (0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(result, ".");
|
|
68
|
+
for(let idx = 0; idx < segments.length; idx++){
|
|
69
|
+
let segment = segments[idx];
|
|
70
|
+
if (idx >= segments.length - 1) {
|
|
71
|
+
results.push(segment);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// If the next segment is a number, discard both, for example seeing
|
|
75
|
+
// `px-1` and `5` means the real candidate was `px-1.5` which is already
|
|
76
|
+
// captured.
|
|
77
|
+
let next = parseInt(segments[idx + 1]);
|
|
78
|
+
if (isNaN(next)) {
|
|
79
|
+
results.push(segment);
|
|
80
|
+
} else {
|
|
81
|
+
idx++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
63
85
|
return results;
|
|
64
86
|
};
|
|
65
87
|
}
|
|
@@ -169,8 +191,6 @@ function* buildRegExps(context) {
|
|
|
169
191
|
utility
|
|
170
192
|
]);
|
|
171
193
|
}
|
|
172
|
-
// 5. Inner matches
|
|
173
|
-
yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g;
|
|
174
194
|
}
|
|
175
195
|
// We want to capture any "special" characters
|
|
176
196
|
// AND the characters immediately following them (if there is one)
|
package/lib/lib/load-config.js
CHANGED
|
@@ -46,6 +46,10 @@ function lazyJiti() {
|
|
|
46
46
|
}
|
|
47
47
|
function loadConfig(path) {
|
|
48
48
|
let config = function() {
|
|
49
|
+
// Always use jiti for ESM or TS files
|
|
50
|
+
if (path && (path.endsWith(".mjs") || path.endsWith(".ts") || path.endsWith(".cts") || path.endsWith(".mts"))) {
|
|
51
|
+
return lazyJiti()(path);
|
|
52
|
+
}
|
|
49
53
|
try {
|
|
50
54
|
return path ? require(path) : {};
|
|
51
55
|
} catch {
|
package/lib/util/dataTypes.js
CHANGED
|
@@ -77,6 +77,7 @@ function isCSSFunction(value) {
|
|
|
77
77
|
// More info:
|
|
78
78
|
// - https://drafts.csswg.org/scroll-animations/#propdef-timeline-scope
|
|
79
79
|
// - https://developer.mozilla.org/en-US/docs/Web/CSS/timeline-scope#dashed-ident
|
|
80
|
+
// - https://www.w3.org/TR/css-anchor-position-1
|
|
80
81
|
//
|
|
81
82
|
const AUTO_VAR_INJECTION_EXCEPTIONS = new Set([
|
|
82
83
|
// Concrete properties
|
|
@@ -84,10 +85,15 @@ const AUTO_VAR_INJECTION_EXCEPTIONS = new Set([
|
|
|
84
85
|
"timeline-scope",
|
|
85
86
|
"view-timeline-name",
|
|
86
87
|
"font-palette",
|
|
88
|
+
"anchor-name",
|
|
89
|
+
"anchor-scope",
|
|
90
|
+
"position-anchor",
|
|
91
|
+
"position-try-options",
|
|
87
92
|
// Shorthand properties
|
|
88
93
|
"scroll-timeline",
|
|
89
94
|
"animation-timeline",
|
|
90
|
-
"view-timeline"
|
|
95
|
+
"view-timeline",
|
|
96
|
+
"position-try"
|
|
91
97
|
]);
|
|
92
98
|
function normalize(value, context = null, isRoot = true) {
|
|
93
99
|
let isVarException = context && AUTO_VAR_INJECTION_EXCEPTIONS.has(context.property);
|
|
@@ -260,8 +260,7 @@ function normalizeConfig(config) {
|
|
|
260
260
|
let transformers = {};
|
|
261
261
|
if (typeof transform === "function") {
|
|
262
262
|
transformers.DEFAULT = transform;
|
|
263
|
-
}
|
|
264
|
-
if (typeof transform === "object" && transform !== null) {
|
|
263
|
+
} else if (typeof transform === "object" && transform !== null) {
|
|
265
264
|
Object.assign(transformers, transform);
|
|
266
265
|
}
|
|
267
266
|
return transformers;
|
|
@@ -40,7 +40,7 @@ const TIMING_FNS = [
|
|
|
40
40
|
"cubic-bezier",
|
|
41
41
|
"steps"
|
|
42
42
|
];
|
|
43
|
-
const COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `
|
|
43
|
+
const COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `cubic-bezier(a, b, c)` these don't count.
|
|
44
44
|
;
|
|
45
45
|
const SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
|
|
46
46
|
;
|
package/lib/util/parseGlob.js
CHANGED
|
@@ -27,7 +27,9 @@ const defaultConfigFiles = [
|
|
|
27
27
|
"./tailwind.config.js",
|
|
28
28
|
"./tailwind.config.cjs",
|
|
29
29
|
"./tailwind.config.mjs",
|
|
30
|
-
"./tailwind.config.ts"
|
|
30
|
+
"./tailwind.config.ts",
|
|
31
|
+
"./tailwind.config.cts",
|
|
32
|
+
"./tailwind.config.mts"
|
|
31
33
|
];
|
|
32
34
|
function isObject(value) {
|
|
33
35
|
return typeof value === "object" && value !== null;
|
|
@@ -35,11 +35,7 @@ function splitAtTopLevelOnly(input, separator) {
|
|
|
35
35
|
lastPos = idx + separator.length;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
isEscaped = false;
|
|
40
|
-
} else if (char === "\\") {
|
|
41
|
-
isEscaped = true;
|
|
42
|
-
}
|
|
38
|
+
isEscaped = isEscaped ? false : char === "\\";
|
|
43
39
|
if (char === "(" || char === "[" || char === "{") {
|
|
44
40
|
stack.push(char);
|
|
45
41
|
} else if (char === ")" && stack[stack.length - 1] === "(" || char === "]" && stack[stack.length - 1] === "[" || char === "}" && stack[stack.length - 1] === "{") {
|
package/package.json
CHANGED
package/src/corePlugins.js
CHANGED
|
@@ -412,7 +412,7 @@ export let variantPlugins = {
|
|
|
412
412
|
let check = normalize(value)
|
|
413
413
|
let isRaw = /^\w*\s*\(/.test(check)
|
|
414
414
|
|
|
415
|
-
// Chrome has a bug where `(
|
|
415
|
+
// Chrome has a bug where `(condition1)or(condition2)` is not valid
|
|
416
416
|
// But `(condition1) or (condition2)` is supported.
|
|
417
417
|
check = isRaw ? check.replace(/\b(and|or|not)\b/g, ' $1 ') : check
|
|
418
418
|
|
|
@@ -2596,7 +2596,7 @@ export let corePlugins = {
|
|
|
2596
2596
|
{
|
|
2597
2597
|
blur: (value) => {
|
|
2598
2598
|
return {
|
|
2599
|
-
'--tw-blur': `blur(${value})`,
|
|
2599
|
+
'--tw-blur': value.trim() === '' ? ' ' : `blur(${value})`,
|
|
2600
2600
|
'@defaults filter': {},
|
|
2601
2601
|
filter: cssFilterValue,
|
|
2602
2602
|
}
|
|
@@ -2751,8 +2751,9 @@ export let corePlugins = {
|
|
|
2751
2751
|
{
|
|
2752
2752
|
'backdrop-blur': (value) => {
|
|
2753
2753
|
return {
|
|
2754
|
-
'--tw-backdrop-blur': `blur(${value})`,
|
|
2754
|
+
'--tw-backdrop-blur': value.trim() === '' ? ' ' : `blur(${value})`,
|
|
2755
2755
|
'@defaults backdrop-filter': {},
|
|
2756
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2756
2757
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2757
2758
|
}
|
|
2758
2759
|
},
|
|
@@ -2768,6 +2769,7 @@ export let corePlugins = {
|
|
|
2768
2769
|
return {
|
|
2769
2770
|
'--tw-backdrop-brightness': `brightness(${value})`,
|
|
2770
2771
|
'@defaults backdrop-filter': {},
|
|
2772
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2771
2773
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2772
2774
|
}
|
|
2773
2775
|
},
|
|
@@ -2783,6 +2785,7 @@ export let corePlugins = {
|
|
|
2783
2785
|
return {
|
|
2784
2786
|
'--tw-backdrop-contrast': `contrast(${value})`,
|
|
2785
2787
|
'@defaults backdrop-filter': {},
|
|
2788
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2786
2789
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2787
2790
|
}
|
|
2788
2791
|
},
|
|
@@ -2798,6 +2801,7 @@ export let corePlugins = {
|
|
|
2798
2801
|
return {
|
|
2799
2802
|
'--tw-backdrop-grayscale': `grayscale(${value})`,
|
|
2800
2803
|
'@defaults backdrop-filter': {},
|
|
2804
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2801
2805
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2802
2806
|
}
|
|
2803
2807
|
},
|
|
@@ -2813,6 +2817,7 @@ export let corePlugins = {
|
|
|
2813
2817
|
return {
|
|
2814
2818
|
'--tw-backdrop-hue-rotate': `hue-rotate(${value})`,
|
|
2815
2819
|
'@defaults backdrop-filter': {},
|
|
2820
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2816
2821
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2817
2822
|
}
|
|
2818
2823
|
},
|
|
@@ -2828,6 +2833,7 @@ export let corePlugins = {
|
|
|
2828
2833
|
return {
|
|
2829
2834
|
'--tw-backdrop-invert': `invert(${value})`,
|
|
2830
2835
|
'@defaults backdrop-filter': {},
|
|
2836
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2831
2837
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2832
2838
|
}
|
|
2833
2839
|
},
|
|
@@ -2843,6 +2849,7 @@ export let corePlugins = {
|
|
|
2843
2849
|
return {
|
|
2844
2850
|
'--tw-backdrop-opacity': `opacity(${value})`,
|
|
2845
2851
|
'@defaults backdrop-filter': {},
|
|
2852
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2846
2853
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2847
2854
|
}
|
|
2848
2855
|
},
|
|
@@ -2858,6 +2865,7 @@ export let corePlugins = {
|
|
|
2858
2865
|
return {
|
|
2859
2866
|
'--tw-backdrop-saturate': `saturate(${value})`,
|
|
2860
2867
|
'@defaults backdrop-filter': {},
|
|
2868
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2861
2869
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2862
2870
|
}
|
|
2863
2871
|
},
|
|
@@ -2873,6 +2881,7 @@ export let corePlugins = {
|
|
|
2873
2881
|
return {
|
|
2874
2882
|
'--tw-backdrop-sepia': `sepia(${value})`,
|
|
2875
2883
|
'@defaults backdrop-filter': {},
|
|
2884
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2876
2885
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2877
2886
|
}
|
|
2878
2887
|
},
|
|
@@ -2896,9 +2905,13 @@ export let corePlugins = {
|
|
|
2896
2905
|
addUtilities({
|
|
2897
2906
|
'.backdrop-filter': {
|
|
2898
2907
|
'@defaults backdrop-filter': {},
|
|
2908
|
+
'-webkit-backdrop-filter': cssBackdropFilterValue,
|
|
2899
2909
|
'backdrop-filter': cssBackdropFilterValue,
|
|
2900
2910
|
},
|
|
2901
|
-
'.backdrop-filter-none': {
|
|
2911
|
+
'.backdrop-filter-none': {
|
|
2912
|
+
'-webkit-backdrop-filter': 'none',
|
|
2913
|
+
'backdrop-filter': 'none',
|
|
2914
|
+
},
|
|
2902
2915
|
})
|
|
2903
2916
|
},
|
|
2904
2917
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as regex from './regex'
|
|
2
|
+
import { splitAtTopLevelOnly } from '../util/splitAtTopLevelOnly'
|
|
2
3
|
|
|
3
4
|
export function defaultExtractor(context) {
|
|
4
5
|
let patterns = Array.from(buildRegExps(context))
|
|
@@ -16,6 +17,30 @@ export function defaultExtractor(context) {
|
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
|
|
20
|
+
// Extract any subclasses from languages like Slim and Pug, eg:
|
|
21
|
+
// div.flex.px-5.underline
|
|
22
|
+
for (let result of results.slice()) {
|
|
23
|
+
let segments = splitAtTopLevelOnly(result, '.')
|
|
24
|
+
|
|
25
|
+
for (let idx = 0; idx < segments.length; idx++) {
|
|
26
|
+
let segment = segments[idx]
|
|
27
|
+
if (idx >= segments.length - 1) {
|
|
28
|
+
results.push(segment)
|
|
29
|
+
continue
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// If the next segment is a number, discard both, for example seeing
|
|
33
|
+
// `px-1` and `5` means the real candidate was `px-1.5` which is already
|
|
34
|
+
// captured.
|
|
35
|
+
let next = parseInt(segments[idx + 1])
|
|
36
|
+
if (isNaN(next)) {
|
|
37
|
+
results.push(segment)
|
|
38
|
+
} else {
|
|
39
|
+
idx++
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
19
44
|
return results
|
|
20
45
|
}
|
|
21
46
|
}
|
|
@@ -127,9 +152,6 @@ function* buildRegExps(context) {
|
|
|
127
152
|
utility,
|
|
128
153
|
])
|
|
129
154
|
}
|
|
130
|
-
|
|
131
|
-
// 5. Inner matches
|
|
132
|
-
yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
|
|
133
155
|
}
|
|
134
156
|
|
|
135
157
|
// We want to capture any "special" characters
|
package/src/lib/load-config.ts
CHANGED
|
@@ -33,6 +33,17 @@ function lazyJiti() {
|
|
|
33
33
|
|
|
34
34
|
export function loadConfig(path: string): Config {
|
|
35
35
|
let config = (function () {
|
|
36
|
+
// Always use jiti for ESM or TS files
|
|
37
|
+
if (
|
|
38
|
+
path &&
|
|
39
|
+
(path.endsWith('.mjs') ||
|
|
40
|
+
path.endsWith('.ts') ||
|
|
41
|
+
path.endsWith('.cts') ||
|
|
42
|
+
path.endsWith('.mts'))
|
|
43
|
+
) {
|
|
44
|
+
return lazyJiti()(path)
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
try {
|
|
37
48
|
return path ? require(path) : {}
|
|
38
49
|
} catch {
|
package/src/util/dataTypes.js
CHANGED
|
@@ -19,6 +19,7 @@ function isCSSFunction(value) {
|
|
|
19
19
|
// More info:
|
|
20
20
|
// - https://drafts.csswg.org/scroll-animations/#propdef-timeline-scope
|
|
21
21
|
// - https://developer.mozilla.org/en-US/docs/Web/CSS/timeline-scope#dashed-ident
|
|
22
|
+
// - https://www.w3.org/TR/css-anchor-position-1
|
|
22
23
|
//
|
|
23
24
|
const AUTO_VAR_INJECTION_EXCEPTIONS = new Set([
|
|
24
25
|
// Concrete properties
|
|
@@ -26,11 +27,16 @@ const AUTO_VAR_INJECTION_EXCEPTIONS = new Set([
|
|
|
26
27
|
'timeline-scope',
|
|
27
28
|
'view-timeline-name',
|
|
28
29
|
'font-palette',
|
|
30
|
+
'anchor-name',
|
|
31
|
+
'anchor-scope',
|
|
32
|
+
'position-anchor',
|
|
33
|
+
'position-try-options',
|
|
29
34
|
|
|
30
35
|
// Shorthand properties
|
|
31
36
|
'scroll-timeline',
|
|
32
37
|
'animation-timeline',
|
|
33
38
|
'view-timeline',
|
|
39
|
+
'position-try',
|
|
34
40
|
])
|
|
35
41
|
|
|
36
42
|
// This is not a data type, but rather a function that can normalize the
|
|
@@ -274,9 +274,7 @@ export function normalizeConfig(config) {
|
|
|
274
274
|
|
|
275
275
|
if (typeof transform === 'function') {
|
|
276
276
|
transformers.DEFAULT = transform
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (typeof transform === 'object' && transform !== null) {
|
|
277
|
+
} else if (typeof transform === 'object' && transform !== null) {
|
|
280
278
|
Object.assign(transformers, transform)
|
|
281
279
|
}
|
|
282
280
|
|
|
@@ -13,7 +13,7 @@ const TIMINGS = new Set([
|
|
|
13
13
|
])
|
|
14
14
|
const TIMING_FNS = ['cubic-bezier', 'steps']
|
|
15
15
|
|
|
16
|
-
const COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `
|
|
16
|
+
const COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `cubic-bezier(a, b, c)` these don't count.
|
|
17
17
|
const SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
|
|
18
18
|
const TIME = /^(-?[\d.]+m?s)$/
|
|
19
19
|
const DIGIT = /^(\d+)$/
|
package/src/util/parseGlob.js
CHANGED
|
@@ -29,11 +29,7 @@ export function splitAtTopLevelOnly(input, separator) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
isEscaped = false
|
|
34
|
-
} else if (char === '\\') {
|
|
35
|
-
isEscaped = true
|
|
36
|
-
}
|
|
32
|
+
isEscaped = isEscaped ? false : char === '\\'
|
|
37
33
|
|
|
38
34
|
if (char === '(' || char === '[' || char === '{') {
|
|
39
35
|
stack.push(char)
|