tailwindcss 3.0.0 → 3.0.4

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/colors.js CHANGED
@@ -1 +1,2 @@
1
- module.exports = require('./lib/public/colors').default
1
+ let colors = require('./lib/public/colors')
2
+ module.exports = (colors.__esModule ? colors : { default: colors }).default
package/defaultConfig.js CHANGED
@@ -1 +1,2 @@
1
- module.exports = require('./lib/public/default-config').default
1
+ let defaultConfig = require('./lib/public/default-config')
2
+ module.exports = (defaultConfig.__esModule ? defaultConfig : { default: defaultConfig }).default
package/defaultTheme.js CHANGED
@@ -1 +1,2 @@
1
- module.exports = require('./lib/public/default-theme').default
1
+ let defaultTheme = require('./lib/public/default-theme')
2
+ module.exports = (defaultTheme.__esModule ? defaultTheme : { default: defaultTheme }).default
@@ -914,26 +914,24 @@ let corePlugins = {
914
914
  ], {
915
915
  supportsNegativeValues: true
916
916
  }),
917
- transform: ({ addBase , addUtilities })=>{
918
- addBase({
919
- '@defaults transform': {
920
- '--tw-translate-x': '0',
921
- '--tw-translate-y': '0',
922
- '--tw-rotate': '0',
923
- '--tw-skew-x': '0',
924
- '--tw-skew-y': '0',
925
- '--tw-scale-x': '1',
926
- '--tw-scale-y': '1',
927
- '--tw-transform': [
928
- 'translateX(var(--tw-translate-x))',
929
- 'translateY(var(--tw-translate-y))',
930
- 'rotate(var(--tw-rotate))',
931
- 'skewX(var(--tw-skew-x))',
932
- 'skewY(var(--tw-skew-y))',
933
- 'scaleX(var(--tw-scale-x))',
934
- 'scaleY(var(--tw-scale-y))',
935
- ].join(' ')
936
- }
917
+ transform: ({ addDefaults , addUtilities })=>{
918
+ addDefaults('transform', {
919
+ '--tw-translate-x': '0',
920
+ '--tw-translate-y': '0',
921
+ '--tw-rotate': '0',
922
+ '--tw-skew-x': '0',
923
+ '--tw-skew-y': '0',
924
+ '--tw-scale-x': '1',
925
+ '--tw-scale-y': '1',
926
+ '--tw-transform': [
927
+ 'translateX(var(--tw-translate-x))',
928
+ 'translateY(var(--tw-translate-y))',
929
+ 'rotate(var(--tw-rotate))',
930
+ 'skewX(var(--tw-skew-x))',
931
+ 'skewY(var(--tw-skew-y))',
932
+ 'scaleX(var(--tw-scale-x))',
933
+ 'scaleY(var(--tw-scale-y))',
934
+ ].join(' ')
937
935
  });
938
936
  addUtilities({
939
937
  '.transform': {
@@ -1001,14 +999,12 @@ let corePlugins = {
1001
999
  });
1002
1000
  },
1003
1001
  cursor: (0, _createUtilityPlugin).default('cursor'),
1004
- touchAction: ({ addBase , addUtilities })=>{
1005
- addBase({
1006
- '@defaults touch-action': {
1007
- '--tw-pan-x': 'var(--tw-empty,/*!*/ /*!*/)',
1008
- '--tw-pan-y': 'var(--tw-empty,/*!*/ /*!*/)',
1009
- '--tw-pinch-zoom': 'var(--tw-empty,/*!*/ /*!*/)',
1010
- '--tw-touch-action': 'var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom)'
1011
- }
1002
+ touchAction: ({ addDefaults , addUtilities })=>{
1003
+ addDefaults('touch-action', {
1004
+ '--tw-pan-x': 'var(--tw-empty,/*!*/ /*!*/)',
1005
+ '--tw-pan-y': 'var(--tw-empty,/*!*/ /*!*/)',
1006
+ '--tw-pinch-zoom': 'var(--tw-empty,/*!*/ /*!*/)',
1007
+ '--tw-touch-action': 'var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom)'
1012
1008
  });
1013
1009
  addUtilities({
1014
1010
  '.touch-auto': {
@@ -1096,11 +1092,9 @@ let corePlugins = {
1096
1092
  }
1097
1093
  });
1098
1094
  },
1099
- scrollSnapType: ({ addUtilities , addBase })=>{
1100
- addBase({
1101
- '@defaults scroll-snap-type': {
1102
- '--tw-scroll-snap-strictness': 'proximity'
1103
- }
1095
+ scrollSnapType: ({ addDefaults , addUtilities })=>{
1096
+ addDefaults('scroll-snap-type', {
1097
+ '--tw-scroll-snap-strictness': 'proximity'
1104
1098
  });
1105
1099
  addUtilities({
1106
1100
  '.snap-none': {
@@ -2095,22 +2089,18 @@ let corePlugins = {
2095
2089
  }
2096
2090
  });
2097
2091
  },
2098
- borderColor: ({ addBase , matchUtilities , theme , corePlugins: corePlugins2 })=>{
2092
+ borderColor: ({ addDefaults , matchUtilities , theme , corePlugins: corePlugins2 })=>{
2099
2093
  if (!corePlugins2('borderOpacity')) {
2100
2094
  let value = theme('borderColor.DEFAULT', 'currentColor');
2101
- addBase({
2102
- '@defaults border-width': {
2103
- 'border-color': (0, _toColorValue).default(value)
2104
- }
2095
+ addDefaults('border-width', {
2096
+ 'border-color': (0, _toColorValue).default(value)
2105
2097
  });
2106
2098
  } else {
2107
- addBase({
2108
- '@defaults border-width': (0, _withAlphaVariable).default({
2109
- color: theme('borderColor.DEFAULT', 'currentColor'),
2110
- property: 'border-color',
2111
- variable: '--tw-border-opacity'
2112
- })
2113
- });
2099
+ addDefaults('border-width', (0, _withAlphaVariable).default({
2100
+ color: theme('borderColor.DEFAULT', 'currentColor'),
2101
+ property: 'border-color',
2102
+ variable: '--tw-border-opacity'
2103
+ }));
2114
2104
  }
2115
2105
  matchUtilities({
2116
2106
  border: (value)=>{
@@ -2792,16 +2782,16 @@ let corePlugins = {
2792
2782
  textDecoration: ({ addUtilities })=>{
2793
2783
  addUtilities({
2794
2784
  '.underline': {
2795
- 'text-decoration': 'underline'
2785
+ 'text-decoration-line': 'underline'
2796
2786
  },
2797
2787
  '.overline': {
2798
- 'text-decoration': 'overline'
2788
+ 'text-decoration-line': 'overline'
2799
2789
  },
2800
2790
  '.line-through': {
2801
- 'text-decoration': 'line-through'
2791
+ 'text-decoration-line': 'line-through'
2802
2792
  },
2803
2793
  '.no-underline': {
2804
- 'text-decoration': 'none'
2794
+ 'text-decoration-line': 'none'
2805
2795
  }
2806
2796
  });
2807
2797
  },
@@ -3064,14 +3054,12 @@ let corePlugins = {
3064
3054
  `var(--tw-ring-shadow, 0 0 #0000)`,
3065
3055
  `var(--tw-shadow)`,
3066
3056
  ].join(', ');
3067
- return function({ matchUtilities , addBase , theme }) {
3068
- addBase({
3069
- '@defaults box-shadow': {
3070
- '--tw-ring-offset-shadow': '0 0 #0000',
3071
- '--tw-ring-shadow': '0 0 #0000',
3072
- '--tw-shadow': '0 0 #0000',
3073
- '--tw-shadow-colored': '0 0 #0000'
3074
- }
3057
+ return function({ matchUtilities , addDefaults , theme }) {
3058
+ addDefaults(' box-shadow', {
3059
+ '--tw-ring-offset-shadow': '0 0 #0000',
3060
+ '--tw-ring-shadow': '0 0 #0000',
3061
+ '--tw-shadow': '0 0 #0000',
3062
+ '--tw-shadow-colored': '0 0 #0000'
3075
3063
  });
3076
3064
  matchUtilities({
3077
3065
  shadow: (value)=>{
@@ -3180,20 +3168,18 @@ let corePlugins = {
3180
3168
  ]
3181
3169
  });
3182
3170
  },
3183
- ringWidth: ({ matchUtilities , addBase , addUtilities , theme })=>{
3171
+ ringWidth: ({ matchUtilities , addDefaults , addUtilities , theme })=>{
3184
3172
  let ringOpacityDefault = theme('ringOpacity.DEFAULT', '0.5');
3185
3173
  let ringColorDefault = (0, _withAlphaVariable).withAlphaValue(theme('ringColor.DEFAULT'), ringOpacityDefault, `rgb(147 197 253 / ${ringOpacityDefault})`);
3186
- addBase({
3187
- '@defaults ring-width': {
3188
- '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)',
3189
- '--tw-ring-offset-width': theme('ringOffsetWidth.DEFAULT', '0px'),
3190
- '--tw-ring-offset-color': theme('ringOffsetColor.DEFAULT', '#fff'),
3191
- '--tw-ring-color': ringColorDefault,
3192
- '--tw-ring-offset-shadow': '0 0 #0000',
3193
- '--tw-ring-shadow': '0 0 #0000',
3194
- '--tw-shadow': '0 0 #0000',
3195
- '--tw-shadow-colored': '0 0 #0000'
3196
- }
3174
+ addDefaults('ring-width', {
3175
+ '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)',
3176
+ '--tw-ring-offset-width': theme('ringOffsetWidth.DEFAULT', '0px'),
3177
+ '--tw-ring-offset-color': theme('ringOffsetColor.DEFAULT', '#fff'),
3178
+ '--tw-ring-color': ringColorDefault,
3179
+ '--tw-ring-offset-shadow': '0 0 #0000',
3180
+ '--tw-ring-shadow': '0 0 #0000',
3181
+ '--tw-shadow': '0 0 #0000',
3182
+ '--tw-shadow-colored': '0 0 #0000'
3197
3183
  });
3198
3184
  matchUtilities({
3199
3185
  ring: (value)=>{
@@ -3396,30 +3382,28 @@ let corePlugins = {
3396
3382
  values: theme('sepia')
3397
3383
  });
3398
3384
  },
3399
- filter: ({ addBase , addUtilities })=>{
3400
- addBase({
3401
- '@defaults filter': {
3402
- '--tw-blur': 'var(--tw-empty,/*!*/ /*!*/)',
3403
- '--tw-brightness': 'var(--tw-empty,/*!*/ /*!*/)',
3404
- '--tw-contrast': 'var(--tw-empty,/*!*/ /*!*/)',
3405
- '--tw-grayscale': 'var(--tw-empty,/*!*/ /*!*/)',
3406
- '--tw-hue-rotate': 'var(--tw-empty,/*!*/ /*!*/)',
3407
- '--tw-invert': 'var(--tw-empty,/*!*/ /*!*/)',
3408
- '--tw-saturate': 'var(--tw-empty,/*!*/ /*!*/)',
3409
- '--tw-sepia': 'var(--tw-empty,/*!*/ /*!*/)',
3410
- '--tw-drop-shadow': 'var(--tw-empty,/*!*/ /*!*/)',
3411
- '--tw-filter': [
3412
- 'var(--tw-blur)',
3413
- 'var(--tw-brightness)',
3414
- 'var(--tw-contrast)',
3415
- 'var(--tw-grayscale)',
3416
- 'var(--tw-hue-rotate)',
3417
- 'var(--tw-invert)',
3418
- 'var(--tw-saturate)',
3419
- 'var(--tw-sepia)',
3420
- 'var(--tw-drop-shadow)',
3421
- ].join(' ')
3422
- }
3385
+ filter: ({ addDefaults , addUtilities })=>{
3386
+ addDefaults('filter', {
3387
+ '--tw-blur': 'var(--tw-empty,/*!*/ /*!*/)',
3388
+ '--tw-brightness': 'var(--tw-empty,/*!*/ /*!*/)',
3389
+ '--tw-contrast': 'var(--tw-empty,/*!*/ /*!*/)',
3390
+ '--tw-grayscale': 'var(--tw-empty,/*!*/ /*!*/)',
3391
+ '--tw-hue-rotate': 'var(--tw-empty,/*!*/ /*!*/)',
3392
+ '--tw-invert': 'var(--tw-empty,/*!*/ /*!*/)',
3393
+ '--tw-saturate': 'var(--tw-empty,/*!*/ /*!*/)',
3394
+ '--tw-sepia': 'var(--tw-empty,/*!*/ /*!*/)',
3395
+ '--tw-drop-shadow': 'var(--tw-empty,/*!*/ /*!*/)',
3396
+ '--tw-filter': [
3397
+ 'var(--tw-blur)',
3398
+ 'var(--tw-brightness)',
3399
+ 'var(--tw-contrast)',
3400
+ 'var(--tw-grayscale)',
3401
+ 'var(--tw-hue-rotate)',
3402
+ 'var(--tw-invert)',
3403
+ 'var(--tw-saturate)',
3404
+ 'var(--tw-sepia)',
3405
+ 'var(--tw-drop-shadow)',
3406
+ ].join(' ')
3423
3407
  });
3424
3408
  addUtilities({
3425
3409
  '.filter': {
@@ -3559,30 +3543,28 @@ let corePlugins = {
3559
3543
  values: theme('backdropSepia')
3560
3544
  });
3561
3545
  },
3562
- backdropFilter: ({ addBase , addUtilities })=>{
3563
- addBase({
3564
- '@defaults backdrop-filter': {
3565
- '--tw-backdrop-blur': 'var(--tw-empty,/*!*/ /*!*/)',
3566
- '--tw-backdrop-brightness': 'var(--tw-empty,/*!*/ /*!*/)',
3567
- '--tw-backdrop-contrast': 'var(--tw-empty,/*!*/ /*!*/)',
3568
- '--tw-backdrop-grayscale': 'var(--tw-empty,/*!*/ /*!*/)',
3569
- '--tw-backdrop-hue-rotate': 'var(--tw-empty,/*!*/ /*!*/)',
3570
- '--tw-backdrop-invert': 'var(--tw-empty,/*!*/ /*!*/)',
3571
- '--tw-backdrop-opacity': 'var(--tw-empty,/*!*/ /*!*/)',
3572
- '--tw-backdrop-saturate': 'var(--tw-empty,/*!*/ /*!*/)',
3573
- '--tw-backdrop-sepia': 'var(--tw-empty,/*!*/ /*!*/)',
3574
- '--tw-backdrop-filter': [
3575
- 'var(--tw-backdrop-blur)',
3576
- 'var(--tw-backdrop-brightness)',
3577
- 'var(--tw-backdrop-contrast)',
3578
- 'var(--tw-backdrop-grayscale)',
3579
- 'var(--tw-backdrop-hue-rotate)',
3580
- 'var(--tw-backdrop-invert)',
3581
- 'var(--tw-backdrop-opacity)',
3582
- 'var(--tw-backdrop-saturate)',
3583
- 'var(--tw-backdrop-sepia)',
3584
- ].join(' ')
3585
- }
3546
+ backdropFilter: ({ addDefaults , addUtilities })=>{
3547
+ addDefaults('backdrop-filter', {
3548
+ '--tw-backdrop-blur': 'var(--tw-empty,/*!*/ /*!*/)',
3549
+ '--tw-backdrop-brightness': 'var(--tw-empty,/*!*/ /*!*/)',
3550
+ '--tw-backdrop-contrast': 'var(--tw-empty,/*!*/ /*!*/)',
3551
+ '--tw-backdrop-grayscale': 'var(--tw-empty,/*!*/ /*!*/)',
3552
+ '--tw-backdrop-hue-rotate': 'var(--tw-empty,/*!*/ /*!*/)',
3553
+ '--tw-backdrop-invert': 'var(--tw-empty,/*!*/ /*!*/)',
3554
+ '--tw-backdrop-opacity': 'var(--tw-empty,/*!*/ /*!*/)',
3555
+ '--tw-backdrop-saturate': 'var(--tw-empty,/*!*/ /*!*/)',
3556
+ '--tw-backdrop-sepia': 'var(--tw-empty,/*!*/ /*!*/)',
3557
+ '--tw-backdrop-filter': [
3558
+ 'var(--tw-backdrop-blur)',
3559
+ 'var(--tw-backdrop-brightness)',
3560
+ 'var(--tw-backdrop-contrast)',
3561
+ 'var(--tw-backdrop-grayscale)',
3562
+ 'var(--tw-backdrop-hue-rotate)',
3563
+ 'var(--tw-backdrop-invert)',
3564
+ 'var(--tw-backdrop-opacity)',
3565
+ 'var(--tw-backdrop-saturate)',
3566
+ 'var(--tw-backdrop-sepia)',
3567
+ ].join(' ')
3586
3568
  });
3587
3569
  addUtilities({
3588
3570
  '.backdrop-filter': {
@@ -144,7 +144,7 @@ sup {
144
144
  table {
145
145
  text-indent: 0; /* 1 */
146
146
  border-color: inherit; /* 2 */
147
- border-collapse: collapse; /* 3 */
147
+ border-collapse: collapse; /* 3 */
148
148
  }
149
149
 
150
150
  /*
@@ -289,6 +289,7 @@ legend {
289
289
 
290
290
  ol,
291
291
  ul,
292
+ li,
292
293
  menu {
293
294
  list-style: none;
294
295
  margin: 0;
@@ -310,7 +311,7 @@ textarea {
310
311
 
311
312
  input::placeholder,
312
313
  textarea::placeholder {
313
- opacity: 1; /* 1 */
314
+ opacity: 1; /* 1 */
314
315
  color: theme('colors.gray.400', #9ca3af); /* 2 */
315
316
  }
316
317
 
@@ -13,7 +13,9 @@ function _interopRequireDefault(obj) {
13
13
  };
14
14
  }
15
15
  let defaults = {
16
- optimizeUniversalDefaults: true
16
+ // TODO: Drop this once we can safely rely on optimizeUniversalDefaults being
17
+ // the default.
18
+ optimizeUniversalDefaults: process.env.NODE_ENV === 'test' ? true : false
17
19
  };
18
20
  let featureFlags = {
19
21
  future: [],
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.default = expandApplyAtRules;
6
6
  var _postcss = _interopRequireDefault(require("postcss"));
7
+ var _postcssSelectorParser = _interopRequireDefault(require("postcss-selector-parser"));
7
8
  var _generateRules = require("./generateRules");
8
9
  var _bigSign = _interopRequireDefault(require("../util/bigSign"));
9
10
  var _escapeClassName = _interopRequireDefault(require("../util/escapeClassName"));
@@ -12,6 +13,18 @@ function _interopRequireDefault(obj) {
12
13
  default: obj
13
14
  };
14
15
  }
16
+ function containsBase(selector, classCandidateBase, separator) {
17
+ return (0, _postcssSelectorParser).default((selectors)=>{
18
+ let contains = false;
19
+ selectors.walkClasses((classSelector)=>{
20
+ if (classSelector.value.split(separator).pop() === classCandidateBase) {
21
+ contains = true;
22
+ return false;
23
+ }
24
+ });
25
+ return contains;
26
+ }).transformSync(selector);
27
+ }
15
28
  function prefix(context, selector) {
16
29
  let prefix1 = context.tailwindConfig.prefix;
17
30
  return typeof prefix1 === 'function' ? prefix1(selector) : prefix1 + selector;
@@ -127,8 +140,8 @@ function processApply(root, context) {
127
140
  */ // TODO: Should we use postcss-selector-parser for this instead?
128
141
  function replaceSelector(selector, utilitySelectors, candidate) {
129
142
  let needle = `.${(0, _escapeClassName).default(candidate)}`;
130
- let utilitySelectorsList = utilitySelectors.split(/\s*,\s*/g);
131
- return selector.split(/\s*,\s*/g).map((s)=>{
143
+ let utilitySelectorsList = utilitySelectors.split(/\s*\,(?![^(]*\))\s*/g);
144
+ return selector.split(/\s*\,(?![^(]*\))\s*/g).map((s)=>{
132
145
  let replaced = [];
133
146
  for (let utilitySelector of utilitySelectorsList){
134
147
  let replacedSelector = utilitySelector.replace(needle, s);
@@ -173,7 +186,11 @@ function processApply(root, context) {
173
186
  for (const [parent, candidates] of perParentApplies){
174
187
  let siblings = [];
175
188
  for (let [applyCandidate, important, rules] of candidates){
189
+ let base = applyCandidate.split(context.tailwindConfig.separator).pop();
176
190
  for (let [meta, node] of rules){
191
+ if (containsBase(parent.selector, base, context.tailwindConfig.separator) && containsBase(node.selector, base, context.tailwindConfig.separator)) {
192
+ throw node.error(`Circular dependency detected when using: \`@apply ${applyCandidate}\``);
193
+ }
177
194
  let root = _postcss.default.root({
178
195
  nodes: [
179
196
  node.clone()
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.default = expandTailwindAtRules;
6
+ exports.DEFAULTS_LAYER = void 0;
6
7
  var _quickLru = _interopRequireDefault(require("quick-lru"));
7
8
  var sharedState = _interopRequireWildcard(require("./sharedState"));
8
9
  var _generateRules = require("./generateRules");
@@ -112,6 +113,7 @@ function buildStylesheet(rules, context) {
112
113
  );
113
114
  let returnValue = {
114
115
  base: new Set(),
116
+ defaults: new Set(),
115
117
  components: new Set(),
116
118
  utilities: new Set(),
117
119
  variants: new Set(),
@@ -134,6 +136,10 @@ function buildStylesheet(rules, context) {
134
136
  returnValue.base.add(rule);
135
137
  continue;
136
138
  }
139
+ if (sort & context.layerOrder.defaults) {
140
+ returnValue.defaults.add(rule);
141
+ continue;
142
+ }
137
143
  if (sort & context.layerOrder.components) {
138
144
  returnValue.components.add(rule);
139
145
  continue;
@@ -149,6 +155,8 @@ function buildStylesheet(rules, context) {
149
155
  }
150
156
  return returnValue;
151
157
  }
158
+ const DEFAULTS_LAYER = Symbol('defaults-layer');
159
+ exports.DEFAULTS_LAYER = DEFAULTS_LAYER;
152
160
  function expandTailwindAtRules(context) {
153
161
  return (root)=>{
154
162
  let layerNodes = {
@@ -199,13 +207,29 @@ function expandTailwindAtRules(context) {
199
207
  ], context);
200
208
  }
201
209
  env.DEBUG && console.timeEnd('Build stylesheet');
202
- let { base: baseNodes , components: componentNodes , utilities: utilityNodes , variants: screenNodes , } = context.stylesheetCache;
210
+ let { defaults: defaultNodes , base: baseNodes , components: componentNodes , utilities: utilityNodes , variants: screenNodes , } = context.stylesheetCache;
203
211
  // ---
204
212
  // Replace any Tailwind directives with generated CSS
205
213
  if (layerNodes.base) {
206
214
  layerNodes.base.before((0, _cloneNodes).default([
207
215
  ...baseNodes
208
216
  ], layerNodes.base.source));
217
+ }
218
+ // @defaults rules are unconditionally added first to ensure that
219
+ // using any utility that relies on defaults will work even when
220
+ // compiled in an isolated environment like CSS modules
221
+ if (context.tailwindConfig[DEFAULTS_LAYER] !== false) {
222
+ if (layerNodes.base) {
223
+ layerNodes.base.after((0, _cloneNodes).default([
224
+ ...defaultNodes
225
+ ], root.source));
226
+ } else {
227
+ root.prepend((0, _cloneNodes).default([
228
+ ...defaultNodes
229
+ ], root.source));
230
+ }
231
+ }
232
+ if (layerNodes.base) {
209
233
  layerNodes.base.remove();
210
234
  }
211
235
  if (layerNodes.components) {
@@ -253,14 +253,32 @@ function parseRules(rule, cache, options = {
253
253
  options
254
254
  ];
255
255
  }
256
+ const IS_VALID_PROPERTY_NAME = /^[a-z_-]/;
257
+ function isValidPropName(name) {
258
+ return IS_VALID_PROPERTY_NAME.test(name);
259
+ }
260
+ function isParsableCssValue(property, value) {
261
+ try {
262
+ _postcss.default.parse(`a{${property}:${value}}`).toResult();
263
+ return true;
264
+ } catch (err) {
265
+ return false;
266
+ }
267
+ }
256
268
  function extractArbitraryProperty(classCandidate, context) {
257
269
  var ref;
258
270
  let [, property, value] = (ref = classCandidate.match(/^\[([a-zA-Z0-9-_]+):(\S+)\]$/)) !== null && ref !== void 0 ? ref : [];
259
271
  if (value === undefined) {
260
272
  return null;
261
273
  }
274
+ if (!isValidPropName(property)) {
275
+ return null;
276
+ }
277
+ if (!(0, _isValidArbitraryValue).default(value)) {
278
+ return null;
279
+ }
262
280
  let normalized = (0, _dataTypes).normalize(value);
263
- if (!(0, _isValidArbitraryValue).default(normalized)) {
281
+ if (!isParsableCssValue(property, normalized)) {
264
282
  return null;
265
283
  }
266
284
  return [
@@ -79,7 +79,7 @@ function extractElementSelector(selector) {
79
79
  function resolveDefaultsAtRules({ tailwindConfig }) {
80
80
  return (root)=>{
81
81
  let variableNodeMap = new Map();
82
- let universals = new Set();
82
+ /** @type {Set<import('postcss').AtRule>} */ let universals = new Set();
83
83
  root.walkAtRules('defaults', (rule)=>{
84
84
  if (rule.nodes && rule.nodes.length > 0) {
85
85
  universals.add(rule);
@@ -93,32 +93,46 @@ function resolveDefaultsAtRules({ tailwindConfig }) {
93
93
  rule.remove();
94
94
  });
95
95
  for (let universal of universals){
96
- let selectors = new Set();
96
+ /** @type {Map<string, Set<string>>} */ let selectorGroups = new Map();
97
97
  var ref;
98
98
  let rules = (ref = variableNodeMap.get(universal.params)) !== null && ref !== void 0 ? ref : [];
99
99
  for (let rule of rules){
100
100
  for (let selector of extractElementSelector(rule.selector)){
101
+ // If selector contains a vendor prefix after a pseudo element or class,
102
+ // we consider them separately because merging the declarations into
103
+ // a single rule will cause browsers that do not understand the
104
+ // vendor prefix to throw out the whole rule
105
+ let selectorGroupName = selector.includes(':-') || selector.includes('::-') ? selector : '__DEFAULT__';
106
+ var ref1;
107
+ let selectors = (ref1 = selectorGroups.get(selectorGroupName)) !== null && ref1 !== void 0 ? ref1 : new Set();
108
+ selectorGroups.set(selectorGroupName, selectors);
101
109
  selectors.add(selector);
102
110
  }
103
111
  }
104
- if (selectors.size === 0) {
112
+ if (selectorGroups.size === 0) {
105
113
  universal.remove();
106
114
  continue;
107
115
  }
108
- let universalRule = _postcss.default.rule();
109
116
  if ((0, _featureFlags).flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
110
- universalRule.selectors = [
111
- ...selectors
112
- ];
117
+ for (let [, selectors] of selectorGroups){
118
+ let universalRule = _postcss.default.rule();
119
+ universalRule.selectors = [
120
+ ...selectors
121
+ ];
122
+ universalRule.append(universal.nodes.map((node)=>node.clone()
123
+ ));
124
+ universal.before(universalRule);
125
+ }
113
126
  } else {
127
+ let universalRule = _postcss.default.rule();
114
128
  universalRule.selectors = [
115
129
  '*',
116
130
  '::before',
117
131
  '::after'
118
132
  ];
133
+ universalRule.append(universal.nodes);
134
+ universal.before(universalRule);
119
135
  }
120
- universalRule.append(universal.nodes);
121
- universal.before(universalRule);
122
136
  universal.remove();
123
137
  }
124
138
  };
@@ -271,6 +271,29 @@ function buildPluginApi(tailwindConfig, context, { variantList , variantMap , of
271
271
  ]);
272
272
  }
273
273
  },
274
+ /**
275
+ * @param {string} group
276
+ * @param {Record<string, string | string[]>} declarations
277
+ */ addDefaults (group, declarations) {
278
+ const groups = {
279
+ [`@defaults ${group}`]: declarations
280
+ };
281
+ for (let [identifier, rule] of withIdentifiers(groups)){
282
+ let prefixedIdentifier = prefixIdentifier(identifier, {
283
+ });
284
+ let offset = offsets.base++;
285
+ if (!context.candidateRuleMap.has(prefixedIdentifier)) {
286
+ context.candidateRuleMap.set(prefixedIdentifier, []);
287
+ }
288
+ context.candidateRuleMap.get(prefixedIdentifier).push([
289
+ {
290
+ sort: offset,
291
+ layer: 'defaults'
292
+ },
293
+ rule
294
+ ]);
295
+ }
296
+ },
274
297
  addComponents (components, options) {
275
298
  let defaultOptions = {
276
299
  respectPrefix: true,
@@ -562,6 +585,7 @@ function registerPlugins(plugins, context) {
562
585
  let variantList = [];
563
586
  let variantMap = new Map();
564
587
  let offsets = {
588
+ defaults: 0n,
565
589
  base: 0n,
566
590
  components: 0n,
567
591
  utilities: 0n,
@@ -587,6 +611,7 @@ function registerPlugins(plugins, context) {
587
611
  )
588
612
  )([
589
613
  offsets.base,
614
+ offsets.defaults,
590
615
  offsets.components,
591
616
  offsets.utilities,
592
617
  offsets.user,
@@ -596,12 +621,13 @@ function registerPlugins(plugins, context) {
596
621
  // so arbitrary properties are always sorted at the end.
597
622
  context.arbitraryPropertiesSort = (1n << reservedBits << 0n) - 1n;
598
623
  context.layerOrder = {
599
- base: 1n << reservedBits << 0n,
600
- components: 1n << reservedBits << 1n,
601
- utilities: 1n << reservedBits << 2n,
602
- user: 1n << reservedBits << 3n
624
+ defaults: 1n << reservedBits << 0n,
625
+ base: 1n << reservedBits << 1n,
626
+ components: 1n << reservedBits << 2n,
627
+ utilities: 1n << reservedBits << 3n,
628
+ user: 1n << reservedBits << 4n
603
629
  };
604
- reservedBits += 4n;
630
+ reservedBits += 5n;
605
631
  let offset = 0;
606
632
  context.variantOrder = new Map(variantList.map((variant, i)=>{
607
633
  let variantFunctions = variantMap.get(variant).length;
@@ -652,9 +678,17 @@ function registerPlugins(plugins, context) {
652
678
  let utils = Array.isArray(util) ? (()=>{
653
679
  let [utilName, options] = util;
654
680
  var ref;
655
- return Object.keys((ref = options === null || options === void 0 ? void 0 : options.values) !== null && ref !== void 0 ? ref : {
681
+ let classes = Object.keys((ref = options === null || options === void 0 ? void 0 : options.values) !== null && ref !== void 0 ? ref : {
656
682
  }).map((value)=>(0, _nameClass).formatClass(utilName, value)
657
683
  );
684
+ if (options === null || options === void 0 ? void 0 : options.supportsNegativeValues) {
685
+ classes = [
686
+ ...classes,
687
+ ...classes.map((cls)=>'-' + cls
688
+ )
689
+ ];
690
+ }
691
+ return classes;
658
692
  })() : [
659
693
  util
660
694
  ];