tailwindcss 3.3.2 → 3.3.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/lib/cli/build/plugin.js +2 -2
  3. package/lib/cli/build/watching.js +1 -1
  4. package/lib/corePlugins.js +11 -7
  5. package/lib/css/preflight.css +9 -0
  6. package/lib/lib/defaultExtractor.js +16 -22
  7. package/lib/lib/evaluateTailwindFunctions.js +5 -3
  8. package/lib/lib/expandApplyAtRules.js +6 -0
  9. package/lib/lib/expandTailwindAtRules.js +20 -6
  10. package/lib/lib/generateRules.js +34 -24
  11. package/lib/lib/setupContextUtils.js +53 -33
  12. package/lib/lib/setupTrackingContext.js +2 -1
  13. package/lib/oxide/cli/build/plugin.js +2 -2
  14. package/lib/plugin.js +3 -3
  15. package/lib/processTailwindFeatures.js +2 -2
  16. package/lib/util/color.js +1 -1
  17. package/lib/util/dataTypes.js +100 -16
  18. package/lib/util/formatVariantSelector.js +10 -3
  19. package/lib/util/isPlainObject.js +1 -1
  20. package/lib/util/prefixSelector.js +1 -1
  21. package/lib/util/pseudoElements.js +18 -34
  22. package/lib/value-parser/LICENSE +22 -0
  23. package/lib/value-parser/README.md +3 -0
  24. package/lib/value-parser/index.d.js +2 -0
  25. package/lib/value-parser/index.js +22 -0
  26. package/lib/value-parser/parse.js +259 -0
  27. package/lib/value-parser/stringify.js +38 -0
  28. package/lib/value-parser/unit.js +86 -0
  29. package/lib/value-parser/walk.js +16 -0
  30. package/nesting/index.d.ts +4 -0
  31. package/package.json +5 -6
  32. package/peers/index.js +701 -617
  33. package/src/cli/build/plugin.js +2 -2
  34. package/src/cli/build/watching.js +1 -1
  35. package/src/corePlugins.js +13 -7
  36. package/src/css/preflight.css +9 -0
  37. package/src/featureFlags.js +0 -1
  38. package/src/lib/defaultExtractor.js +12 -13
  39. package/src/lib/evaluateTailwindFunctions.js +4 -1
  40. package/src/lib/expandApplyAtRules.js +7 -0
  41. package/src/lib/expandTailwindAtRules.js +20 -6
  42. package/src/lib/generateRules.js +34 -25
  43. package/src/lib/setupContextUtils.js +50 -35
  44. package/src/lib/setupTrackingContext.js +1 -3
  45. package/src/oxide/cli/build/plugin.ts +2 -2
  46. package/src/plugin.js +3 -3
  47. package/src/processTailwindFeatures.js +3 -2
  48. package/src/util/color.js +1 -1
  49. package/src/util/dataTypes.js +101 -18
  50. package/src/util/formatVariantSelector.js +11 -3
  51. package/src/util/isPlainObject.js +1 -1
  52. package/src/util/prefixSelector.js +1 -0
  53. package/src/util/pseudoElements.js +14 -17
  54. package/src/value-parser/LICENSE +22 -0
  55. package/src/value-parser/README.md +3 -0
  56. package/src/value-parser/index.d.ts +177 -0
  57. package/src/value-parser/index.js +28 -0
  58. package/src/value-parser/parse.js +303 -0
  59. package/src/value-parser/stringify.js +41 -0
  60. package/src/value-parser/unit.js +118 -0
  61. package/src/value-parser/walk.js +18 -0
  62. package/stubs/config.full.js +1 -0
  63. package/types/config.d.ts +6 -6
  64. package/types/generated/default-theme.d.ts +1 -0
  65. package/types/index.d.ts +7 -3
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var openParentheses = "(".charCodeAt(0);
3
+ var closeParentheses = ")".charCodeAt(0);
4
+ var singleQuote = "'".charCodeAt(0);
5
+ var doubleQuote = '"'.charCodeAt(0);
6
+ var backslash = "\\".charCodeAt(0);
7
+ var slash = "/".charCodeAt(0);
8
+ var comma = ",".charCodeAt(0);
9
+ var colon = ":".charCodeAt(0);
10
+ var star = "*".charCodeAt(0);
11
+ var uLower = "u".charCodeAt(0);
12
+ var uUpper = "U".charCodeAt(0);
13
+ var plus = "+".charCodeAt(0);
14
+ var isUnicodeRange = /^[a-f0-9?-]+$/i;
15
+ module.exports = function(input) {
16
+ var tokens = [];
17
+ var value = input;
18
+ var next, quote, prev, token, escape, escapePos, whitespacePos, parenthesesOpenPos;
19
+ var pos = 0;
20
+ var code = value.charCodeAt(pos);
21
+ var max = value.length;
22
+ var stack = [
23
+ {
24
+ nodes: tokens
25
+ }
26
+ ];
27
+ var balanced = 0;
28
+ var parent;
29
+ var name = "";
30
+ var before = "";
31
+ var after = "";
32
+ while(pos < max){
33
+ // Whitespaces
34
+ if (code <= 32) {
35
+ next = pos;
36
+ do {
37
+ next += 1;
38
+ code = value.charCodeAt(next);
39
+ }while (code <= 32);
40
+ token = value.slice(pos, next);
41
+ prev = tokens[tokens.length - 1];
42
+ if (code === closeParentheses && balanced) {
43
+ after = token;
44
+ } else if (prev && prev.type === "div") {
45
+ prev.after = token;
46
+ prev.sourceEndIndex += token.length;
47
+ } else if (code === comma || code === colon || code === slash && value.charCodeAt(next + 1) !== star && (!parent || parent && parent.type === "function" && false)) {
48
+ before = token;
49
+ } else {
50
+ tokens.push({
51
+ type: "space",
52
+ sourceIndex: pos,
53
+ sourceEndIndex: next,
54
+ value: token
55
+ });
56
+ }
57
+ pos = next;
58
+ // Quotes
59
+ } else if (code === singleQuote || code === doubleQuote) {
60
+ next = pos;
61
+ quote = code === singleQuote ? "'" : '"';
62
+ token = {
63
+ type: "string",
64
+ sourceIndex: pos,
65
+ quote: quote
66
+ };
67
+ do {
68
+ escape = false;
69
+ next = value.indexOf(quote, next + 1);
70
+ if (~next) {
71
+ escapePos = next;
72
+ while(value.charCodeAt(escapePos - 1) === backslash){
73
+ escapePos -= 1;
74
+ escape = !escape;
75
+ }
76
+ } else {
77
+ value += quote;
78
+ next = value.length - 1;
79
+ token.unclosed = true;
80
+ }
81
+ }while (escape);
82
+ token.value = value.slice(pos + 1, next);
83
+ token.sourceEndIndex = token.unclosed ? next : next + 1;
84
+ tokens.push(token);
85
+ pos = next + 1;
86
+ code = value.charCodeAt(pos);
87
+ // Comments
88
+ } else if (code === slash && value.charCodeAt(pos + 1) === star) {
89
+ next = value.indexOf("*/", pos);
90
+ token = {
91
+ type: "comment",
92
+ sourceIndex: pos,
93
+ sourceEndIndex: next + 2
94
+ };
95
+ if (next === -1) {
96
+ token.unclosed = true;
97
+ next = value.length;
98
+ token.sourceEndIndex = next;
99
+ }
100
+ token.value = value.slice(pos + 2, next);
101
+ tokens.push(token);
102
+ pos = next + 2;
103
+ code = value.charCodeAt(pos);
104
+ // Operation within calc
105
+ } else if ((code === slash || code === star) && parent && parent.type === "function" && true) {
106
+ token = value[pos];
107
+ tokens.push({
108
+ type: "word",
109
+ sourceIndex: pos - before.length,
110
+ sourceEndIndex: pos + token.length,
111
+ value: token
112
+ });
113
+ pos += 1;
114
+ code = value.charCodeAt(pos);
115
+ // Dividers
116
+ } else if (code === slash || code === comma || code === colon) {
117
+ token = value[pos];
118
+ tokens.push({
119
+ type: "div",
120
+ sourceIndex: pos - before.length,
121
+ sourceEndIndex: pos + token.length,
122
+ value: token,
123
+ before: before,
124
+ after: ""
125
+ });
126
+ before = "";
127
+ pos += 1;
128
+ code = value.charCodeAt(pos);
129
+ // Open parentheses
130
+ } else if (openParentheses === code) {
131
+ // Whitespaces after open parentheses
132
+ next = pos;
133
+ do {
134
+ next += 1;
135
+ code = value.charCodeAt(next);
136
+ }while (code <= 32);
137
+ parenthesesOpenPos = pos;
138
+ token = {
139
+ type: "function",
140
+ sourceIndex: pos - name.length,
141
+ value: name,
142
+ before: value.slice(parenthesesOpenPos + 1, next)
143
+ };
144
+ pos = next;
145
+ if (name === "url" && code !== singleQuote && code !== doubleQuote) {
146
+ next -= 1;
147
+ do {
148
+ escape = false;
149
+ next = value.indexOf(")", next + 1);
150
+ if (~next) {
151
+ escapePos = next;
152
+ while(value.charCodeAt(escapePos - 1) === backslash){
153
+ escapePos -= 1;
154
+ escape = !escape;
155
+ }
156
+ } else {
157
+ value += ")";
158
+ next = value.length - 1;
159
+ token.unclosed = true;
160
+ }
161
+ }while (escape);
162
+ // Whitespaces before closed
163
+ whitespacePos = next;
164
+ do {
165
+ whitespacePos -= 1;
166
+ code = value.charCodeAt(whitespacePos);
167
+ }while (code <= 32);
168
+ if (parenthesesOpenPos < whitespacePos) {
169
+ if (pos !== whitespacePos + 1) {
170
+ token.nodes = [
171
+ {
172
+ type: "word",
173
+ sourceIndex: pos,
174
+ sourceEndIndex: whitespacePos + 1,
175
+ value: value.slice(pos, whitespacePos + 1)
176
+ }
177
+ ];
178
+ } else {
179
+ token.nodes = [];
180
+ }
181
+ if (token.unclosed && whitespacePos + 1 !== next) {
182
+ token.after = "";
183
+ token.nodes.push({
184
+ type: "space",
185
+ sourceIndex: whitespacePos + 1,
186
+ sourceEndIndex: next,
187
+ value: value.slice(whitespacePos + 1, next)
188
+ });
189
+ } else {
190
+ token.after = value.slice(whitespacePos + 1, next);
191
+ token.sourceEndIndex = next;
192
+ }
193
+ } else {
194
+ token.after = "";
195
+ token.nodes = [];
196
+ }
197
+ pos = next + 1;
198
+ token.sourceEndIndex = token.unclosed ? next : pos;
199
+ code = value.charCodeAt(pos);
200
+ tokens.push(token);
201
+ } else {
202
+ balanced += 1;
203
+ token.after = "";
204
+ token.sourceEndIndex = pos + 1;
205
+ tokens.push(token);
206
+ stack.push(token);
207
+ tokens = token.nodes = [];
208
+ parent = token;
209
+ }
210
+ name = "";
211
+ // Close parentheses
212
+ } else if (closeParentheses === code && balanced) {
213
+ pos += 1;
214
+ code = value.charCodeAt(pos);
215
+ parent.after = after;
216
+ parent.sourceEndIndex += after.length;
217
+ after = "";
218
+ balanced -= 1;
219
+ stack[stack.length - 1].sourceEndIndex = pos;
220
+ stack.pop();
221
+ parent = stack[balanced];
222
+ tokens = parent.nodes;
223
+ // Words
224
+ } else {
225
+ next = pos;
226
+ do {
227
+ if (code === backslash) {
228
+ next += 1;
229
+ }
230
+ next += 1;
231
+ code = value.charCodeAt(next);
232
+ }while (next < max && !(code <= 32 || code === singleQuote || code === doubleQuote || code === comma || code === colon || code === slash || code === openParentheses || code === star && parent && parent.type === "function" && true || code === slash && parent.type === "function" && true || code === closeParentheses && balanced));
233
+ token = value.slice(pos, next);
234
+ if (openParentheses === code) {
235
+ name = token;
236
+ } else if ((uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) && plus === token.charCodeAt(1) && isUnicodeRange.test(token.slice(2))) {
237
+ tokens.push({
238
+ type: "unicode-range",
239
+ sourceIndex: pos,
240
+ sourceEndIndex: next,
241
+ value: token
242
+ });
243
+ } else {
244
+ tokens.push({
245
+ type: "word",
246
+ sourceIndex: pos,
247
+ sourceEndIndex: next,
248
+ value: token
249
+ });
250
+ }
251
+ pos = next;
252
+ }
253
+ }
254
+ for(pos = stack.length - 1; pos; pos -= 1){
255
+ stack[pos].unclosed = true;
256
+ stack[pos].sourceEndIndex = value.length;
257
+ }
258
+ return stack[0].nodes;
259
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ function stringifyNode(node, custom) {
3
+ var type = node.type;
4
+ var value = node.value;
5
+ var buf;
6
+ var customResult;
7
+ if (custom && (customResult = custom(node)) !== undefined) {
8
+ return customResult;
9
+ } else if (type === "word" || type === "space") {
10
+ return value;
11
+ } else if (type === "string") {
12
+ buf = node.quote || "";
13
+ return buf + value + (node.unclosed ? "" : buf);
14
+ } else if (type === "comment") {
15
+ return "/*" + value + (node.unclosed ? "" : "*/");
16
+ } else if (type === "div") {
17
+ return (node.before || "") + value + (node.after || "");
18
+ } else if (Array.isArray(node.nodes)) {
19
+ buf = stringify(node.nodes, custom);
20
+ if (type !== "function") {
21
+ return buf;
22
+ }
23
+ return value + "(" + (node.before || "") + buf + (node.after || "") + (node.unclosed ? "" : ")");
24
+ }
25
+ return value;
26
+ }
27
+ function stringify(nodes, custom) {
28
+ var result, i;
29
+ if (Array.isArray(nodes)) {
30
+ result = "";
31
+ for(i = nodes.length - 1; ~i; i -= 1){
32
+ result = stringifyNode(nodes[i], custom) + result;
33
+ }
34
+ return result;
35
+ }
36
+ return stringifyNode(nodes, custom);
37
+ }
38
+ module.exports = stringify;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var minus = "-".charCodeAt(0);
3
+ var plus = "+".charCodeAt(0);
4
+ var dot = ".".charCodeAt(0);
5
+ var exp = "e".charCodeAt(0);
6
+ var EXP = "E".charCodeAt(0);
7
+ // Check if three code points would start a number
8
+ // https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
9
+ function likeNumber(value) {
10
+ var code = value.charCodeAt(0);
11
+ var nextCode;
12
+ if (code === plus || code === minus) {
13
+ nextCode = value.charCodeAt(1);
14
+ if (nextCode >= 48 && nextCode <= 57) {
15
+ return true;
16
+ }
17
+ var nextNextCode = value.charCodeAt(2);
18
+ if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ if (code === dot) {
24
+ nextCode = value.charCodeAt(1);
25
+ if (nextCode >= 48 && nextCode <= 57) {
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ if (code >= 48 && code <= 57) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ // Consume a number
36
+ // https://www.w3.org/TR/css-syntax-3/#consume-number
37
+ module.exports = function(value) {
38
+ var pos = 0;
39
+ var length = value.length;
40
+ var code;
41
+ var nextCode;
42
+ var nextNextCode;
43
+ if (length === 0 || !likeNumber(value)) {
44
+ return false;
45
+ }
46
+ code = value.charCodeAt(pos);
47
+ if (code === plus || code === minus) {
48
+ pos++;
49
+ }
50
+ while(pos < length){
51
+ code = value.charCodeAt(pos);
52
+ if (code < 48 || code > 57) {
53
+ break;
54
+ }
55
+ pos += 1;
56
+ }
57
+ code = value.charCodeAt(pos);
58
+ nextCode = value.charCodeAt(pos + 1);
59
+ if (code === dot && nextCode >= 48 && nextCode <= 57) {
60
+ pos += 2;
61
+ while(pos < length){
62
+ code = value.charCodeAt(pos);
63
+ if (code < 48 || code > 57) {
64
+ break;
65
+ }
66
+ pos += 1;
67
+ }
68
+ }
69
+ code = value.charCodeAt(pos);
70
+ nextCode = value.charCodeAt(pos + 1);
71
+ nextNextCode = value.charCodeAt(pos + 2);
72
+ if ((code === exp || code === EXP) && (nextCode >= 48 && nextCode <= 57 || (nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57)) {
73
+ pos += nextCode === plus || nextCode === minus ? 3 : 2;
74
+ while(pos < length){
75
+ code = value.charCodeAt(pos);
76
+ if (code < 48 || code > 57) {
77
+ break;
78
+ }
79
+ pos += 1;
80
+ }
81
+ }
82
+ return {
83
+ number: value.slice(0, pos),
84
+ unit: value.slice(pos)
85
+ };
86
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ module.exports = function walk(nodes, cb, bubble) {
3
+ var i, max, node, result;
4
+ for(i = 0, max = nodes.length; i < max; i += 1){
5
+ node = nodes[i];
6
+ if (!bubble) {
7
+ result = cb(node, i, nodes);
8
+ }
9
+ if (result !== false && node.type === "function" && Array.isArray(node.nodes)) {
10
+ walk(node.nodes, cb, bubble);
11
+ }
12
+ if (bubble) {
13
+ cb(node, i, nodes);
14
+ }
15
+ }
16
+ };
@@ -0,0 +1,4 @@
1
+ import type { AcceptedPlugin, PluginCreator } from 'postcss'
2
+
3
+ declare const plugin: PluginCreator<AcceptedPlugin | string | void>
4
+ export = plugin
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwindcss",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -58,8 +58,8 @@
58
58
  "eslint": "^8.39.0",
59
59
  "eslint-config-prettier": "^8.8.0",
60
60
  "eslint-plugin-prettier": "^4.2.1",
61
- "jest": "^29.5.0",
62
- "jest-diff": "^29.5.0",
61
+ "jest": "^29.6.0",
62
+ "jest-diff": "^29.6.0",
63
63
  "lightningcss": "1.18.0",
64
64
  "prettier": "^2.8.8",
65
65
  "rimraf": "^5.0.0",
@@ -72,10 +72,10 @@
72
72
  "chokidar": "^3.5.3",
73
73
  "didyoumean": "^1.2.2",
74
74
  "dlv": "^1.1.3",
75
- "fast-glob": "^3.2.12",
75
+ "fast-glob": "^3.3.0",
76
76
  "glob-parent": "^6.0.2",
77
77
  "is-glob": "^4.0.3",
78
- "jiti": "^1.18.2",
78
+ "jiti": "^1.19.1",
79
79
  "lilconfig": "^2.1.0",
80
80
  "micromatch": "^4.0.5",
81
81
  "normalize-path": "^3.0.0",
@@ -87,7 +87,6 @@
87
87
  "postcss-load-config": "^4.0.1",
88
88
  "postcss-nested": "^6.0.1",
89
89
  "postcss-selector-parser": "^6.0.11",
90
- "postcss-value-parser": "^4.2.0",
91
90
  "resolve": "^1.22.2",
92
91
  "sucrase": "^3.32.0"
93
92
  },