tailwindcss 0.0.0-insiders.fda68f7 → 0.0.0-oxide.6bf5e56

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 (195) hide show
  1. package/CHANGELOG.md +603 -2
  2. package/LICENSE +1 -2
  3. package/README.md +14 -6
  4. package/colors.d.ts +3 -0
  5. package/colors.js +2 -304
  6. package/defaultConfig.d.ts +3 -0
  7. package/defaultConfig.js +2 -4
  8. package/defaultTheme.d.ts +4 -0
  9. package/defaultTheme.js +2 -4
  10. package/lib/cli/build/deps.js +54 -0
  11. package/lib/cli/build/index.js +48 -0
  12. package/lib/cli/build/plugin.js +367 -0
  13. package/lib/cli/build/utils.js +78 -0
  14. package/lib/cli/build/watching.js +178 -0
  15. package/lib/cli/help/index.js +71 -0
  16. package/lib/cli/index.js +18 -0
  17. package/lib/cli/init/index.js +46 -0
  18. package/lib/cli/shared.js +13 -0
  19. package/lib/cli-peer-dependencies.js +22 -14
  20. package/lib/cli.js +217 -743
  21. package/lib/constants.js +41 -34
  22. package/lib/corePluginList.js +178 -5
  23. package/lib/corePlugins.js +3879 -2941
  24. package/lib/css/preflight.css +22 -9
  25. package/lib/featureFlags.js +61 -50
  26. package/lib/index.js +45 -28
  27. package/lib/lib/cacheInvalidation.js +90 -0
  28. package/lib/lib/collapseAdjacentRules.js +52 -36
  29. package/lib/lib/collapseDuplicateDeclarations.js +83 -0
  30. package/lib/lib/content.js +176 -0
  31. package/lib/lib/defaultExtractor.js +236 -0
  32. package/lib/lib/detectNesting.js +37 -0
  33. package/lib/lib/evaluateTailwindFunctions.js +203 -161
  34. package/lib/lib/expandApplyAtRules.js +502 -221
  35. package/lib/lib/expandTailwindAtRules.js +258 -243
  36. package/lib/lib/findAtConfigPath.js +44 -0
  37. package/lib/lib/generateRules.js +775 -320
  38. package/lib/lib/getModuleDependencies.js +44 -46
  39. package/lib/lib/normalizeTailwindDirectives.js +79 -60
  40. package/lib/lib/offsets.js +217 -0
  41. package/lib/lib/partitionApplyAtRules.js +56 -0
  42. package/lib/lib/regex.js +60 -0
  43. package/lib/lib/resolveDefaultsAtRules.js +150 -94
  44. package/lib/lib/setupContextUtils.js +1146 -599
  45. package/lib/lib/setupTrackingContext.js +129 -177
  46. package/lib/lib/sharedState.js +53 -21
  47. package/lib/lib/substituteScreenAtRules.js +26 -28
  48. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  49. package/lib/postcss-plugins/nesting/index.js +19 -0
  50. package/lib/postcss-plugins/nesting/plugin.js +87 -0
  51. package/lib/processTailwindFeatures.js +58 -53
  52. package/lib/public/colors.js +331 -0
  53. package/lib/public/create-plugin.js +15 -0
  54. package/lib/public/default-config.js +16 -0
  55. package/lib/public/default-theme.js +16 -0
  56. package/lib/public/resolve-config.js +22 -0
  57. package/lib/util/bigSign.js +7 -6
  58. package/lib/util/buildMediaQuery.js +21 -32
  59. package/lib/util/cloneDeep.js +16 -14
  60. package/lib/util/cloneNodes.js +29 -15
  61. package/lib/util/color.js +90 -66
  62. package/lib/util/configurePlugins.js +17 -15
  63. package/lib/util/createPlugin.js +23 -26
  64. package/lib/util/createUtilityPlugin.js +46 -46
  65. package/lib/util/dataTypes.js +242 -0
  66. package/lib/util/defaults.js +20 -15
  67. package/lib/util/escapeClassName.js +18 -17
  68. package/lib/util/escapeCommas.js +7 -6
  69. package/lib/util/flattenColorPalette.js +13 -12
  70. package/lib/util/formatVariantSelector.js +285 -0
  71. package/lib/util/getAllConfigs.js +44 -18
  72. package/lib/util/hashConfig.js +15 -12
  73. package/lib/util/isKeyframeRule.js +7 -6
  74. package/lib/util/isPlainObject.js +11 -11
  75. package/lib/util/isSyntacticallyValidPropertyValue.js +72 -0
  76. package/lib/util/log.js +52 -33
  77. package/lib/util/nameClass.js +37 -26
  78. package/lib/util/negateValue.js +31 -17
  79. package/lib/util/normalizeConfig.js +281 -0
  80. package/lib/util/normalizeScreens.js +170 -0
  81. package/lib/util/parseAnimationValue.js +85 -54
  82. package/lib/util/parseBoxShadowValue.js +84 -0
  83. package/lib/util/parseDependency.js +41 -70
  84. package/lib/util/parseGlob.js +34 -0
  85. package/lib/util/parseObjectStyles.js +30 -24
  86. package/lib/util/pluginUtils.js +252 -287
  87. package/lib/util/prefixSelector.js +20 -20
  88. package/lib/util/removeAlphaVariables.js +29 -0
  89. package/lib/util/resolveConfig.js +221 -256
  90. package/lib/util/resolveConfigPath.js +43 -48
  91. package/lib/util/responsive.js +18 -14
  92. package/lib/util/splitAtTopLevelOnly.js +43 -0
  93. package/lib/util/tap.js +8 -7
  94. package/lib/util/toColorValue.js +7 -6
  95. package/lib/util/toPath.js +27 -8
  96. package/lib/util/transformThemeValue.js +67 -28
  97. package/lib/util/validateConfig.js +24 -0
  98. package/lib/util/validateFormalSyntax.js +24 -0
  99. package/lib/util/withAlphaVariable.js +67 -57
  100. package/nesting/index.js +2 -12
  101. package/package.json +60 -65
  102. package/peers/index.js +76445 -84221
  103. package/plugin.d.ts +11 -0
  104. package/plugin.js +1 -2
  105. package/resolveConfig.d.ts +12 -0
  106. package/resolveConfig.js +2 -7
  107. package/scripts/create-plugin-list.js +2 -2
  108. package/scripts/generate-types.js +105 -0
  109. package/scripts/release-channel.js +18 -0
  110. package/scripts/release-notes.js +21 -0
  111. package/scripts/type-utils.js +27 -0
  112. package/src/cli/build/deps.js +56 -0
  113. package/src/cli/build/index.js +49 -0
  114. package/src/cli/build/plugin.js +439 -0
  115. package/src/cli/build/utils.js +76 -0
  116. package/src/cli/build/watching.js +227 -0
  117. package/src/cli/help/index.js +70 -0
  118. package/src/cli/index.js +3 -0
  119. package/src/cli/init/index.js +50 -0
  120. package/src/cli/shared.js +6 -0
  121. package/src/cli-peer-dependencies.js +7 -1
  122. package/src/cli.js +50 -575
  123. package/src/corePluginList.js +1 -1
  124. package/src/corePlugins.js +2405 -1948
  125. package/src/css/preflight.css +22 -9
  126. package/src/featureFlags.js +26 -10
  127. package/src/index.js +19 -6
  128. package/src/lib/cacheInvalidation.js +52 -0
  129. package/src/lib/collapseAdjacentRules.js +21 -2
  130. package/src/lib/collapseDuplicateDeclarations.js +93 -0
  131. package/src/lib/content.js +212 -0
  132. package/src/lib/defaultExtractor.js +211 -0
  133. package/src/lib/detectNesting.js +39 -0
  134. package/src/lib/evaluateTailwindFunctions.js +84 -10
  135. package/src/lib/expandApplyAtRules.js +508 -153
  136. package/src/lib/expandTailwindAtRules.js +130 -104
  137. package/src/lib/findAtConfigPath.js +48 -0
  138. package/src/lib/generateRules.js +596 -70
  139. package/src/lib/normalizeTailwindDirectives.js +10 -3
  140. package/src/lib/offsets.js +270 -0
  141. package/src/lib/partitionApplyAtRules.js +52 -0
  142. package/src/lib/regex.js +74 -0
  143. package/src/lib/resolveDefaultsAtRules.js +105 -47
  144. package/src/lib/setupContextUtils.js +828 -196
  145. package/src/lib/setupTrackingContext.js +19 -54
  146. package/src/lib/sharedState.js +45 -7
  147. package/src/lib/substituteScreenAtRules.js +6 -3
  148. package/src/postcss-plugins/nesting/README.md +42 -0
  149. package/src/postcss-plugins/nesting/index.js +13 -0
  150. package/src/postcss-plugins/nesting/plugin.js +80 -0
  151. package/src/processTailwindFeatures.js +19 -2
  152. package/src/public/colors.js +300 -0
  153. package/src/public/create-plugin.js +2 -0
  154. package/src/public/default-config.js +4 -0
  155. package/src/public/default-theme.js +4 -0
  156. package/src/public/resolve-config.js +7 -0
  157. package/src/util/buildMediaQuery.js +14 -16
  158. package/src/util/cloneNodes.js +19 -2
  159. package/src/util/color.js +31 -14
  160. package/src/util/createUtilityPlugin.js +2 -11
  161. package/src/util/dataTypes.js +256 -0
  162. package/src/util/defaults.js +6 -0
  163. package/src/util/formatVariantSelector.js +319 -0
  164. package/src/util/getAllConfigs.js +19 -0
  165. package/src/util/isSyntacticallyValidPropertyValue.js +61 -0
  166. package/src/util/log.js +23 -22
  167. package/src/util/nameClass.js +14 -6
  168. package/src/util/negateValue.js +15 -5
  169. package/src/util/normalizeConfig.js +300 -0
  170. package/src/util/normalizeScreens.js +140 -0
  171. package/src/util/parseAnimationValue.js +7 -1
  172. package/src/util/parseBoxShadowValue.js +72 -0
  173. package/src/util/parseDependency.js +37 -38
  174. package/src/util/parseGlob.js +24 -0
  175. package/src/util/pluginUtils.js +216 -197
  176. package/src/util/prefixSelector.js +7 -8
  177. package/src/util/removeAlphaVariables.js +24 -0
  178. package/src/util/resolveConfig.js +86 -91
  179. package/src/util/splitAtTopLevelOnly.js +45 -0
  180. package/src/util/toPath.js +23 -1
  181. package/src/util/transformThemeValue.js +33 -8
  182. package/src/util/validateConfig.js +13 -0
  183. package/src/util/validateFormalSyntax.js +34 -0
  184. package/src/util/withAlphaVariable.js +14 -9
  185. package/stubs/defaultConfig.stub.js +186 -117
  186. package/stubs/simpleConfig.stub.js +1 -1
  187. package/types/config.d.ts +362 -0
  188. package/types/generated/.gitkeep +0 -0
  189. package/types/generated/colors.d.ts +276 -0
  190. package/types/generated/corePluginList.d.ts +1 -0
  191. package/types/generated/default-theme.d.ts +342 -0
  192. package/types/index.d.ts +7 -0
  193. package/lib/lib/setupWatchingContext.js +0 -331
  194. package/nesting/plugin.js +0 -41
  195. package/src/lib/setupWatchingContext.js +0 -306
@@ -1,192 +1,234 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
5
4
  });
6
- exports.default = _default;
7
-
8
- var _dlv = _interopRequireDefault(require("dlv"));
9
-
10
- var _didyoumean = _interopRequireDefault(require("didyoumean"));
11
-
12
- var _transformThemeValue = _interopRequireDefault(require("../util/transformThemeValue"));
13
-
14
- var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
15
-
16
- var _buildMediaQuery = _interopRequireDefault(require("../util/buildMediaQuery"));
17
-
18
- var _toPath = require("../util/toPath");
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: ()=>_default
8
+ });
9
+ const _dlv = /*#__PURE__*/ _interopRequireDefault(require("dlv"));
10
+ const _didyoumean = /*#__PURE__*/ _interopRequireDefault(require("didyoumean"));
11
+ const _transformThemeValue = /*#__PURE__*/ _interopRequireDefault(require("../util/transformThemeValue"));
12
+ const _postcssValueParser = /*#__PURE__*/ _interopRequireDefault(require("postcss-value-parser"));
13
+ const _normalizeScreens = require("../util/normalizeScreens");
14
+ const _buildMediaQuery = /*#__PURE__*/ _interopRequireDefault(require("../util/buildMediaQuery"));
15
+ const _toPath = require("../util/toPath");
16
+ const _withAlphaVariable = require("../util/withAlphaVariable");
17
+ const _pluginUtils = require("../util/pluginUtils");
18
+ const _log = /*#__PURE__*/ _interopRequireDefault(require("../util/log"));
19
+ function _interopRequireDefault(obj) {
20
+ return obj && obj.__esModule ? obj : {
21
+ default: obj
22
+ };
23
+ }
22
24
  function isObject(input) {
23
- return typeof input === 'object' && input !== null;
25
+ return typeof input === "object" && input !== null;
24
26
  }
25
-
26
27
  function findClosestExistingPath(theme, path) {
27
- let parts = (0, _toPath.toPath)(path);
28
-
29
- do {
30
- parts.pop();
31
- if ((0, _dlv.default)(theme, parts) !== undefined) break;
32
- } while (parts.length);
33
-
34
- return parts.length ? parts : undefined;
28
+ let parts = (0, _toPath.toPath)(path);
29
+ do {
30
+ parts.pop();
31
+ if ((0, _dlv.default)(theme, parts) !== undefined) break;
32
+ }while (parts.length);
33
+ return parts.length ? parts : undefined;
35
34
  }
36
-
37
35
  function pathToString(path) {
38
- if (typeof path === 'string') return path;
39
- return path.reduce((acc, cur, i) => {
40
- if (cur.includes('.')) return `${acc}[${cur}]`;
41
- return i === 0 ? cur : `${acc}.${cur}`;
42
- }, '');
36
+ if (typeof path === "string") return path;
37
+ return path.reduce((acc, cur, i)=>{
38
+ if (cur.includes(".")) return `${acc}[${cur}]`;
39
+ return i === 0 ? cur : `${acc}.${cur}`;
40
+ }, "");
43
41
  }
44
-
45
42
  function list(items) {
46
- return items.map(key => `'${key}'`).join(', ');
43
+ return items.map((key)=>`'${key}'`).join(", ");
47
44
  }
48
-
49
45
  function listKeys(obj) {
50
- return list(Object.keys(obj));
46
+ return list(Object.keys(obj));
51
47
  }
52
-
53
- function validatePath(config, path, defaultValue) {
54
- const pathString = Array.isArray(path) ? pathToString(path) : path.replace(/^['"]+/g, '').replace(/['"]+$/g, '');
55
- const pathSegments = Array.isArray(path) ? path : (0, _toPath.toPath)(pathString);
56
- const value = (0, _dlv.default)(config.theme, pathString, defaultValue);
57
-
58
- if (value === undefined) {
59
- let error = `'${pathString}' does not exist in your theme config.`;
60
- const parentSegments = pathSegments.slice(0, -1);
61
- const parentValue = (0, _dlv.default)(config.theme, parentSegments);
62
-
63
- if (isObject(parentValue)) {
64
- const validKeys = Object.keys(parentValue).filter(key => validatePath(config, [...parentSegments, key]).isValid);
65
- const suggestion = (0, _didyoumean.default)(pathSegments[pathSegments.length - 1], validKeys);
66
-
67
- if (suggestion) {
68
- error += ` Did you mean '${pathToString([...parentSegments, suggestion])}'?`;
69
- } else if (validKeys.length > 0) {
70
- error += ` '${pathToString(parentSegments)}' has the following valid keys: ${list(validKeys)}`;
71
- }
72
- } else {
73
- const closestPath = findClosestExistingPath(config.theme, pathString);
74
-
75
- if (closestPath) {
76
- const closestValue = (0, _dlv.default)(config.theme, closestPath);
77
-
78
- if (isObject(closestValue)) {
79
- error += ` '${pathToString(closestPath)}' has the following keys: ${listKeys(closestValue)}`;
48
+ function validatePath(config, path, defaultValue, themeOpts = {}) {
49
+ const pathString = Array.isArray(path) ? pathToString(path) : path.replace(/^['"]+|['"]+$/g, "");
50
+ const pathSegments = Array.isArray(path) ? path : (0, _toPath.toPath)(pathString);
51
+ const value = (0, _dlv.default)(config.theme, pathSegments, defaultValue);
52
+ if (value === undefined) {
53
+ let error = `'${pathString}' does not exist in your theme config.`;
54
+ const parentSegments = pathSegments.slice(0, -1);
55
+ const parentValue = (0, _dlv.default)(config.theme, parentSegments);
56
+ if (isObject(parentValue)) {
57
+ const validKeys = Object.keys(parentValue).filter((key)=>validatePath(config, [
58
+ ...parentSegments,
59
+ key
60
+ ]).isValid);
61
+ const suggestion = (0, _didyoumean.default)(pathSegments[pathSegments.length - 1], validKeys);
62
+ if (suggestion) {
63
+ error += ` Did you mean '${pathToString([
64
+ ...parentSegments,
65
+ suggestion
66
+ ])}'?`;
67
+ } else if (validKeys.length > 0) {
68
+ error += ` '${pathToString(parentSegments)}' has the following valid keys: ${list(validKeys)}`;
69
+ }
80
70
  } else {
81
- error += ` '${pathToString(closestPath)}' is not an object.`;
71
+ const closestPath = findClosestExistingPath(config.theme, pathString);
72
+ if (closestPath) {
73
+ const closestValue = (0, _dlv.default)(config.theme, closestPath);
74
+ if (isObject(closestValue)) {
75
+ error += ` '${pathToString(closestPath)}' has the following keys: ${listKeys(closestValue)}`;
76
+ } else {
77
+ error += ` '${pathToString(closestPath)}' is not an object.`;
78
+ }
79
+ } else {
80
+ error += ` Your theme has the following top-level keys: ${listKeys(config.theme)}`;
81
+ }
82
82
  }
83
- } else {
84
- error += ` Your theme has the following top-level keys: ${listKeys(config.theme)}`;
85
- }
83
+ return {
84
+ isValid: false,
85
+ error
86
+ };
86
87
  }
87
-
88
- return {
89
- isValid: false,
90
- error
91
- };
92
- }
93
-
94
- if (!(typeof value === 'string' || typeof value === 'number' || typeof value === 'function' || value instanceof String || value instanceof Number || Array.isArray(value))) {
95
- let error = `'${pathString}' was found but does not resolve to a string.`;
96
-
97
- if (isObject(value)) {
98
- let validKeys = Object.keys(value).filter(key => validatePath(config, [...pathSegments, key]).isValid);
99
-
100
- if (validKeys.length) {
101
- error += ` Did you mean something like '${pathToString([...pathSegments, validKeys[0]])}'?`;
102
- }
88
+ if (!(typeof value === "string" || typeof value === "number" || typeof value === "function" || value instanceof String || value instanceof Number || Array.isArray(value))) {
89
+ let error1 = `'${pathString}' was found but does not resolve to a string.`;
90
+ if (isObject(value)) {
91
+ let validKeys1 = Object.keys(value).filter((key)=>validatePath(config, [
92
+ ...pathSegments,
93
+ key
94
+ ]).isValid);
95
+ if (validKeys1.length) {
96
+ error1 += ` Did you mean something like '${pathToString([
97
+ ...pathSegments,
98
+ validKeys1[0]
99
+ ])}'?`;
100
+ }
101
+ }
102
+ return {
103
+ isValid: false,
104
+ error: error1
105
+ };
103
106
  }
104
-
107
+ const [themeSection] = pathSegments;
105
108
  return {
106
- isValid: false,
107
- error
109
+ isValid: true,
110
+ value: (0, _transformThemeValue.default)(themeSection)(value, themeOpts)
108
111
  };
109
- }
110
-
111
- const [themeSection] = pathSegments;
112
- return {
113
- isValid: true,
114
- value: (0, _transformThemeValue.default)(themeSection)(value)
115
- };
116
112
  }
117
-
118
113
  function extractArgs(node, vNodes, functions) {
119
- vNodes = vNodes.map(vNode => resolveVNode(node, vNode, functions));
120
- let args = [''];
121
-
122
- for (let vNode of vNodes) {
123
- if (vNode.type === 'div' && vNode.value === ',') {
124
- args.push('');
125
- } else {
126
- args[args.length - 1] += _postcssValueParser.default.stringify(vNode);
114
+ vNodes = vNodes.map((vNode)=>resolveVNode(node, vNode, functions));
115
+ let args = [
116
+ ""
117
+ ];
118
+ for (let vNode of vNodes){
119
+ if (vNode.type === "div" && vNode.value === ",") {
120
+ args.push("");
121
+ } else {
122
+ args[args.length - 1] += _postcssValueParser.default.stringify(vNode);
123
+ }
127
124
  }
128
- }
129
-
130
- return args;
125
+ return args;
131
126
  }
132
-
133
127
  function resolveVNode(node, vNode, functions) {
134
- if (vNode.type === 'function' && functions[vNode.value] !== undefined) {
135
- let args = extractArgs(node, vNode.nodes, functions);
136
- vNode.type = 'word';
137
- vNode.value = functions[vNode.value](node, ...args);
138
- }
139
-
140
- return vNode;
128
+ if (vNode.type === "function" && functions[vNode.value] !== undefined) {
129
+ let args = extractArgs(node, vNode.nodes, functions);
130
+ vNode.type = "word";
131
+ vNode.value = functions[vNode.value](node, ...args);
132
+ }
133
+ return vNode;
141
134
  }
142
-
143
135
  function resolveFunctions(node, input, functions) {
144
- return (0, _postcssValueParser.default)(input).walk(vNode => {
145
- resolveVNode(node, vNode, functions);
146
- }).toString();
136
+ return (0, _postcssValueParser.default)(input).walk((vNode)=>{
137
+ resolveVNode(node, vNode, functions);
138
+ }).toString();
147
139
  }
148
-
149
140
  let nodeTypePropertyMap = {
150
- atrule: 'params',
151
- decl: 'value'
141
+ atrule: "params",
142
+ decl: "value"
152
143
  };
153
-
154
- function _default({
155
- tailwindConfig: config
156
- }) {
157
- let functions = {
158
- theme: (node, path, ...defaultValue) => {
159
- const {
160
- isValid,
161
- value,
162
- error
163
- } = validatePath(config, path, defaultValue.length ? defaultValue : undefined);
164
-
165
- if (!isValid) {
166
- throw node.error(error);
167
- }
168
-
169
- return value;
170
- },
171
- screen: (node, screen) => {
172
- screen = screen.replace(/^['"]+/g, '').replace(/['"]+$/g, '');
173
-
174
- if (config.theme.screens[screen] === undefined) {
175
- throw node.error(`The '${screen}' screen does not exist in your theme.`);
176
- }
177
-
178
- return (0, _buildMediaQuery.default)(config.theme.screens[screen]);
144
+ /**
145
+ * @param {string} path
146
+ * @returns {Iterable<[path: string, alpha: string|undefined]>}
147
+ */ function* toPaths(path) {
148
+ // Strip quotes from beginning and end of string
149
+ // This allows the alpha value to be present inside of quotes
150
+ path = path.replace(/^['"]+|['"]+$/g, "");
151
+ let matches = path.match(/^([^\s]+)(?![^\[]*\])(?:\s*\/\s*([^\/\s]+))$/);
152
+ let alpha = undefined;
153
+ yield [
154
+ path,
155
+ undefined
156
+ ];
157
+ if (matches) {
158
+ path = matches[1];
159
+ alpha = matches[2];
160
+ yield [
161
+ path,
162
+ alpha
163
+ ];
179
164
  }
180
- };
181
- return root => {
182
- root.walk(node => {
183
- let property = nodeTypePropertyMap[node.type];
184
-
185
- if (property === undefined) {
186
- return;
187
- }
188
-
189
- node[property] = resolveFunctions(node, node[property], functions);
165
+ }
166
+ /**
167
+ *
168
+ * @param {any} config
169
+ * @param {string} path
170
+ * @param {any} defaultValue
171
+ */ function resolvePath(config, path, defaultValue) {
172
+ const results = Array.from(toPaths(path)).map(([path, alpha])=>{
173
+ return Object.assign(validatePath(config, path, defaultValue, {
174
+ opacityValue: alpha
175
+ }), {
176
+ resolvedPath: path,
177
+ alpha
178
+ });
190
179
  });
191
- };
192
- }
180
+ var ref;
181
+ return (ref = results.find((result)=>result.isValid)) !== null && ref !== void 0 ? ref : results[0];
182
+ }
183
+ function _default(context) {
184
+ let config = context.tailwindConfig;
185
+ let functions = {
186
+ theme: (node, path, ...defaultValue)=>{
187
+ let { isValid , value , error , alpha } = resolvePath(config, path, defaultValue.length ? defaultValue : undefined);
188
+ if (!isValid) {
189
+ var ref;
190
+ let parentNode = node.parent;
191
+ let candidate = (ref = parentNode === null || parentNode === void 0 ? void 0 : parentNode.raws.tailwind) === null || ref === void 0 ? void 0 : ref.candidate;
192
+ if (parentNode && candidate !== undefined) {
193
+ // Remove this utility from any caches
194
+ context.markInvalidUtilityNode(parentNode);
195
+ // Remove the CSS node from the markup
196
+ parentNode.remove();
197
+ // Show a warning
198
+ _log.default.warn("invalid-theme-key-in-class", [
199
+ `The utility \`${candidate}\` contains an invalid theme value and was not generated.`
200
+ ]);
201
+ return;
202
+ }
203
+ throw node.error(error);
204
+ }
205
+ let maybeColor = (0, _pluginUtils.parseColorFormat)(value);
206
+ let isColorFunction = maybeColor !== undefined && typeof maybeColor === "function";
207
+ if (alpha !== undefined || isColorFunction) {
208
+ if (alpha === undefined) {
209
+ alpha = 1.0;
210
+ }
211
+ value = (0, _withAlphaVariable.withAlphaValue)(maybeColor, alpha, maybeColor);
212
+ }
213
+ return value;
214
+ },
215
+ screen: (node, screen)=>{
216
+ screen = screen.replace(/^['"]+/g, "").replace(/['"]+$/g, "");
217
+ let screens = (0, _normalizeScreens.normalizeScreens)(config.theme.screens);
218
+ let screenDefinition = screens.find(({ name })=>name === screen);
219
+ if (!screenDefinition) {
220
+ throw node.error(`The '${screen}' screen does not exist in your theme.`);
221
+ }
222
+ return (0, _buildMediaQuery.default)(screenDefinition);
223
+ }
224
+ };
225
+ return (root)=>{
226
+ root.walk((node)=>{
227
+ let property = nodeTypePropertyMap[node.type];
228
+ if (property === undefined) {
229
+ return;
230
+ }
231
+ node[property] = resolveFunctions(node, node[property], functions);
232
+ });
233
+ };
234
+ }