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 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.4...HEAD
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
@@ -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 `(condtion1)or(condition2)` is not valid
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)
@@ -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 {
@@ -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.: `cubiz-bezier(a, b, c)` these don't count.
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
  ;
@@ -25,8 +25,7 @@ function parseGlob(pattern) {
25
25
  }
26
26
  if (glob.substr(0, 2) === "./") {
27
27
  glob = glob.substr(2);
28
- }
29
- if (glob.charAt(0) === "/") {
28
+ } else if (glob.charAt(0) === "/") {
30
29
  glob = glob.substr(1);
31
30
  }
32
31
  return {
@@ -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
- if (isEscaped) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwindcss",
3
- "version": "3.4.4",
3
+ "version": "3.4.5",
4
4
  "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -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 `(condtion1)or(condition2)` is not valid
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': { '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
@@ -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 {
@@ -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.: `cubiz-bezier(a, b, c)` these don't count.
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+)$/
@@ -15,8 +15,7 @@ export function parseGlob(pattern) {
15
15
 
16
16
  if (glob.substr(0, 2) === './') {
17
17
  glob = glob.substr(2)
18
- }
19
- if (glob.charAt(0) === '/') {
18
+ } else if (glob.charAt(0) === '/') {
20
19
  glob = glob.substr(1)
21
20
  }
22
21
 
@@ -6,6 +6,8 @@ const defaultConfigFiles = [
6
6
  './tailwind.config.cjs',
7
7
  './tailwind.config.mjs',
8
8
  './tailwind.config.ts',
9
+ './tailwind.config.cts',
10
+ './tailwind.config.mts',
9
11
  ]
10
12
 
11
13
  function isObject(value) {
@@ -29,11 +29,7 @@ export function splitAtTopLevelOnly(input, separator) {
29
29
  }
30
30
  }
31
31
 
32
- if (isEscaped) {
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)
@@ -70,7 +70,7 @@ module.exports = {
70
70
  },
71
71
  blur: {
72
72
  0: '0',
73
- none: '0',
73
+ none: '',
74
74
  sm: '4px',
75
75
  DEFAULT: '8px',
76
76
  md: '12px',