tailwindcss 3.1.0 → 3.1.1

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,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  - Nothing yet!
11
11
 
12
+ ## [3.1.1] - 2022-06-09
13
+
14
+ ### Fixed
15
+
16
+ - Fix candidate extractor regression ([#8558](https://github.com/tailwindlabs/tailwindcss/pull/8558))
17
+ - Split `::backdrop` into separate defaults group ([#8567](https://github.com/tailwindlabs/tailwindcss/pull/8567))
18
+ - Fix postcss plugin type ([#8564](https://github.com/tailwindlabs/tailwindcss/pull/8564))
19
+ - Fix class detection in markdown code fences and slim templates ([#8569](https://github.com/tailwindlabs/tailwindcss/pull/8569))
20
+
12
21
  ## [3.1.0] - 2022-06-08
13
22
 
14
23
  ### Fixed
@@ -1952,7 +1961,8 @@ No release notes
1952
1961
 
1953
1962
  - Everything!
1954
1963
 
1955
- [unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.1.0...HEAD
1964
+ [unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.1.1...HEAD
1965
+ [3.1.1]: https://github.com/tailwindlabs/tailwindcss/compare/v3.1.0...v3.1.1
1956
1966
  [3.1.0]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.24...v3.1.0
1957
1967
  [3.0.24]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.23...v3.0.24
1958
1968
  [3.0.23]: https://github.com/tailwindlabs/tailwindcss/compare/v3.0.22...v3.0.23
@@ -62,7 +62,7 @@ function* buildRegExps(context) {
62
62
  let variantGroupingEnabled = (0, _featureFlagsJs).flagEnabled(context.tailwindConfig, "variantGrouping");
63
63
  let utility = regex.any([
64
64
  // Arbitrary properties
65
- /\[[^\s:'"]+:[^\s\]]+\]/,
65
+ /\[[^\s:'"`]+:[^\s\]]+\]/,
66
66
  // Utilities
67
67
  regex.pattern([
68
68
  // Utility Name / Group Name
@@ -75,7 +75,7 @@ function* buildRegExps(context) {
75
75
  // Not immediately followed by an `{[(`
76
76
  /(?![{([]])/,
77
77
  // optionally followed by an opacity modifier
78
- /(?:\/[^\s'"\\$]*)?/,
78
+ /(?:\/[^\s'"`\\><$]*)?/,
79
79
  ]),
80
80
  regex.pattern([
81
81
  // Arbitrary values
@@ -83,10 +83,10 @@ function* buildRegExps(context) {
83
83
  // Not immediately followed by an `{[(`
84
84
  /(?![{([]])/,
85
85
  // optionally followed by an opacity modifier
86
- /(?:\/[^\s'"\\$]*)?/,
86
+ /(?:\/[^\s'"`\\$]*)?/,
87
87
  ]),
88
88
  // Normal values w/o quotes — may include an opacity modifier
89
- /[-\/][^\s'"\\$={]*/,
89
+ /[-\/][^\s'"`\\$={><]*/,
90
90
  ])),
91
91
  ]),
92
92
  ]);
@@ -95,11 +95,11 @@ function* buildRegExps(context) {
95
95
  "((?=((",
96
96
  regex.any([
97
97
  regex.pattern([
98
- /([^\s"'\[\\]+-)?\[[^\s"'\\]+\]/,
98
+ /([^\s"'`\[\\]+-)?\[[^\s"'`\\]+\]/,
99
99
  separator
100
100
  ]),
101
101
  regex.pattern([
102
- /[^\s"'\[\\]+/,
102
+ /[^\s"'`\[\\]+/,
103
103
  separator
104
104
  ]),
105
105
  ], true),
@@ -121,8 +121,8 @@ function* buildRegExps(context) {
121
121
  utility,
122
122
  ]) : utility,
123
123
  ]);
124
- // 5. Inner matches
125
- // yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
124
+ // 5. Inner matches
125
+ yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g;
126
126
  }
127
127
  // We want to capture any "special" characters
128
128
  // AND the characters immediately following them (if there is one)
@@ -140,7 +140,7 @@ let nodeTypePropertyMap = {
140
140
  function _default({ tailwindConfig: config }) {
141
141
  let functions = {
142
142
  theme: (node, path, ...defaultValue)=>{
143
- let matches = path.match(/^([^\/\s]+)(?:\s*\/\s*([^\/\s]+))$/);
143
+ let matches = path.match(/^([^\s]+)(?![^\[]*\])(?:\s*\/\s*([^\/\s]+))$/);
144
144
  let alpha = undefined;
145
145
  if (matches) {
146
146
  path = matches[1];
@@ -23,52 +23,66 @@ function resolveDefaultsAtRules({ tailwindConfig }) {
23
23
  variableNodeMap.get(variable).add(rule.parent);
24
24
  rule.remove();
25
25
  });
26
- for (let universal of universals){
27
- /** @type {Map<string, Set<string>>} */ let selectorGroups = new Map();
28
- var ref;
29
- let rules = (ref = variableNodeMap.get(universal.params)) !== null && ref !== void 0 ? ref : [];
30
- for (let rule of rules){
31
- for (let selector of extractElementSelector(rule.selector)){
32
- // If selector contains a vendor prefix after a pseudo element or class,
33
- // we consider them separately because merging the declarations into
34
- // a single rule will cause browsers that do not understand the
35
- // vendor prefix to throw out the whole rule
36
- let selectorGroupName = selector.includes(":-") || selector.includes("::-") ? selector : "__DEFAULT__";
37
- var ref1;
38
- let selectors = (ref1 = selectorGroups.get(selectorGroupName)) !== null && ref1 !== void 0 ? ref1 : new Set();
39
- selectorGroups.set(selectorGroupName, selectors);
40
- selectors.add(selector);
26
+ if ((0, _featureFlags).flagEnabled(tailwindConfig, "optimizeUniversalDefaults")) {
27
+ for (let universal of universals){
28
+ /** @type {Map<string, Set<string>>} */ let selectorGroups = new Map();
29
+ var ref;
30
+ let rules = (ref = variableNodeMap.get(universal.params)) !== null && ref !== void 0 ? ref : [];
31
+ for (let rule of rules){
32
+ for (let selector of extractElementSelector(rule.selector)){
33
+ // If selector contains a vendor prefix after a pseudo element or class,
34
+ // we consider them separately because merging the declarations into
35
+ // a single rule will cause browsers that do not understand the
36
+ // vendor prefix to throw out the whole rule
37
+ let selectorGroupName = selector.includes(":-") || selector.includes("::-") ? selector : "__DEFAULT__";
38
+ var ref1;
39
+ let selectors = (ref1 = selectorGroups.get(selectorGroupName)) !== null && ref1 !== void 0 ? ref1 : new Set();
40
+ selectorGroups.set(selectorGroupName, selectors);
41
+ selectors.add(selector);
42
+ }
41
43
  }
42
- }
43
- if ((0, _featureFlags).flagEnabled(tailwindConfig, "optimizeUniversalDefaults")) {
44
- if (selectorGroups.size === 0) {
45
- universal.remove();
46
- continue;
47
- }
48
- for (let [, selectors] of selectorGroups){
49
- let universalRule = _postcss.default.rule({
50
- source: universal.source
51
- });
52
- universalRule.selectors = [
53
- ...selectors
54
- ];
55
- universalRule.append(universal.nodes.map((node)=>node.clone()));
56
- universal.before(universalRule);
44
+ if ((0, _featureFlags).flagEnabled(tailwindConfig, "optimizeUniversalDefaults")) {
45
+ if (selectorGroups.size === 0) {
46
+ universal.remove();
47
+ continue;
48
+ }
49
+ for (let [, selectors] of selectorGroups){
50
+ let universalRule = _postcss.default.rule({
51
+ source: universal.source
52
+ });
53
+ universalRule.selectors = [
54
+ ...selectors
55
+ ];
56
+ universalRule.append(universal.nodes.map((node)=>node.clone()));
57
+ universal.before(universalRule);
58
+ }
57
59
  }
58
- } else {
59
- let universalRule = _postcss.default.rule({
60
- source: universal.source
61
- });
62
- universalRule.selectors = [
60
+ universal.remove();
61
+ }
62
+ } else if (universals.size) {
63
+ let universalRule = _postcss.default.rule({
64
+ selectors: [
63
65
  "*",
64
66
  "::before",
65
- "::after",
66
- "::backdrop"
67
- ];
67
+ "::after"
68
+ ]
69
+ });
70
+ for (let universal of universals){
68
71
  universalRule.append(universal.nodes);
69
- universal.before(universalRule);
72
+ if (!universalRule.parent) {
73
+ universal.before(universalRule);
74
+ }
75
+ if (!universalRule.source) {
76
+ universalRule.source = universal.source;
77
+ }
78
+ universal.remove();
70
79
  }
71
- universal.remove();
80
+ let backdropRule = universalRule.clone({
81
+ selectors: [
82
+ "::backdrop"
83
+ ]
84
+ });
85
+ universalRule.after(backdropRule);
72
86
  }
73
87
  };
74
88
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwindcss",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -25,7 +25,7 @@ function* buildRegExps(context) {
25
25
 
26
26
  let utility = regex.any([
27
27
  // Arbitrary properties
28
- /\[[^\s:'"]+:[^\s\]]+\]/,
28
+ /\[[^\s:'"`]+:[^\s\]]+\]/,
29
29
 
30
30
  // Utilities
31
31
  regex.pattern([
@@ -43,7 +43,7 @@ function* buildRegExps(context) {
43
43
  /(?![{([]])/,
44
44
 
45
45
  // optionally followed by an opacity modifier
46
- /(?:\/[^\s'"\\$]*)?/,
46
+ /(?:\/[^\s'"`\\><$]*)?/,
47
47
  ]),
48
48
 
49
49
  regex.pattern([
@@ -54,11 +54,11 @@ function* buildRegExps(context) {
54
54
  /(?![{([]])/,
55
55
 
56
56
  // optionally followed by an opacity modifier
57
- /(?:\/[^\s'"\\$]*)?/,
57
+ /(?:\/[^\s'"`\\$]*)?/,
58
58
  ]),
59
59
 
60
60
  // Normal values w/o quotes — may include an opacity modifier
61
- /[-\/][^\s'"\\$={]*/,
61
+ /[-\/][^\s'"`\\$={><]*/,
62
62
  ])
63
63
  ),
64
64
  ]),
@@ -69,8 +69,8 @@ function* buildRegExps(context) {
69
69
  '((?=((',
70
70
  regex.any(
71
71
  [
72
- regex.pattern([/([^\s"'\[\\]+-)?\[[^\s"'\\]+\]/, separator]),
73
- regex.pattern([/[^\s"'\[\\]+/, separator]),
72
+ regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`\\]+\]/, separator]),
73
+ regex.pattern([/[^\s"'`\[\\]+/, separator]),
74
74
  ],
75
75
  true
76
76
  ),
@@ -91,7 +91,7 @@ function* buildRegExps(context) {
91
91
  ])
92
92
 
93
93
  // 5. Inner matches
94
- // yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
94
+ yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
95
95
  }
96
96
 
97
97
  // We want to capture any "special" characters
@@ -162,7 +162,7 @@ let nodeTypePropertyMap = {
162
162
  export default function ({ tailwindConfig: config }) {
163
163
  let functions = {
164
164
  theme: (node, path, ...defaultValue) => {
165
- let matches = path.match(/^([^\/\s]+)(?:\s*\/\s*([^\/\s]+))$/)
165
+ let matches = path.match(/^([^\s]+)(?![^\[]*\])(?:\s*\/\s*([^\/\s]+))$/)
166
166
  let alpha = undefined
167
167
 
168
168
  if (matches) {
@@ -91,56 +91,73 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
91
91
  rule.remove()
92
92
  })
93
93
 
94
- for (let universal of universals) {
95
- /** @type {Map<string, Set<string>>} */
96
- let selectorGroups = new Map()
94
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
95
+ for (let universal of universals) {
96
+ /** @type {Map<string, Set<string>>} */
97
+ let selectorGroups = new Map()
98
+
99
+ let rules = variableNodeMap.get(universal.params) ?? []
100
+
101
+ for (let rule of rules) {
102
+ for (let selector of extractElementSelector(rule.selector)) {
103
+ // If selector contains a vendor prefix after a pseudo element or class,
104
+ // we consider them separately because merging the declarations into
105
+ // a single rule will cause browsers that do not understand the
106
+ // vendor prefix to throw out the whole rule
107
+ let selectorGroupName =
108
+ selector.includes(':-') || selector.includes('::-') ? selector : '__DEFAULT__'
109
+
110
+ let selectors = selectorGroups.get(selectorGroupName) ?? new Set()
111
+ selectorGroups.set(selectorGroupName, selectors)
112
+
113
+ selectors.add(selector)
114
+ }
115
+ }
97
116
 
98
- let rules = variableNodeMap.get(universal.params) ?? []
117
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
118
+ if (selectorGroups.size === 0) {
119
+ universal.remove()
120
+ continue
121
+ }
99
122
 
100
- for (let rule of rules) {
101
- for (let selector of extractElementSelector(rule.selector)) {
102
- // If selector contains a vendor prefix after a pseudo element or class,
103
- // we consider them separately because merging the declarations into
104
- // a single rule will cause browsers that do not understand the
105
- // vendor prefix to throw out the whole rule
106
- let selectorGroupName =
107
- selector.includes(':-') || selector.includes('::-') ? selector : '__DEFAULT__'
123
+ for (let [, selectors] of selectorGroups) {
124
+ let universalRule = postcss.rule({
125
+ source: universal.source,
126
+ })
108
127
 
109
- let selectors = selectorGroups.get(selectorGroupName) ?? new Set()
110
- selectorGroups.set(selectorGroupName, selectors)
128
+ universalRule.selectors = [...selectors]
111
129
 
112
- selectors.add(selector)
130
+ universalRule.append(universal.nodes.map((node) => node.clone()))
131
+ universal.before(universalRule)
132
+ }
113
133
  }
114
- }
115
134
 
116
- if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
117
- if (selectorGroups.size === 0) {
118
- universal.remove()
119
- continue
120
- }
121
-
122
- for (let [, selectors] of selectorGroups) {
123
- let universalRule = postcss.rule({
124
- source: universal.source,
125
- })
135
+ universal.remove()
136
+ }
137
+ } else if (universals.size) {
138
+ let universalRule = postcss.rule({
139
+ selectors: ['*', '::before', '::after'],
140
+ })
126
141
 
127
- universalRule.selectors = [...selectors]
142
+ for (let universal of universals) {
143
+ universalRule.append(universal.nodes)
128
144
 
129
- universalRule.append(universal.nodes.map((node) => node.clone()))
145
+ if (!universalRule.parent) {
130
146
  universal.before(universalRule)
131
147
  }
132
- } else {
133
- let universalRule = postcss.rule({
134
- source: universal.source,
135
- })
136
148
 
137
- universalRule.selectors = ['*', '::before', '::after', '::backdrop']
149
+ if (!universalRule.source) {
150
+ universalRule.source = universal.source
151
+ }
138
152
 
139
- universalRule.append(universal.nodes)
140
- universal.before(universalRule)
153
+ universal.remove()
141
154
  }
142
155
 
143
- universal.remove()
156
+ let backdropRule = universalRule.clone({
157
+ selectors: ['::backdrop'],
158
+ })
159
+
160
+ universalRule.after(backdropRule)
144
161
  }
145
162
  }
146
163
  }
package/types/index.d.ts CHANGED
@@ -1 +1,7 @@
1
- export type { Config } from './config.d'
1
+ import { PluginCreator } from 'postcss'
2
+ import type { Config } from './config.d'
3
+
4
+ declare const plugin: PluginCreator<string | Config | { config: string | Config }>
5
+
6
+ export { Config }
7
+ export default plugin