tailwindcss 0.0.0-insiders.ea139f2 → 0.0.0-insiders.ea4e1cd

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 (236) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +15 -7
  3. package/colors.d.ts +3 -0
  4. package/colors.js +2 -1
  5. package/defaultConfig.d.ts +3 -0
  6. package/defaultConfig.js +2 -1
  7. package/defaultTheme.d.ts +4 -0
  8. package/defaultTheme.js +2 -1
  9. package/lib/cli/build/deps.js +62 -0
  10. package/lib/cli/build/index.js +54 -0
  11. package/lib/cli/build/plugin.js +378 -0
  12. package/lib/cli/build/utils.js +88 -0
  13. package/lib/cli/build/watching.js +182 -0
  14. package/lib/cli/help/index.js +73 -0
  15. package/lib/cli/index.js +230 -0
  16. package/lib/cli/init/index.js +63 -0
  17. package/lib/cli-peer-dependencies.js +28 -7
  18. package/lib/cli.js +4 -703
  19. package/lib/corePluginList.js +12 -3
  20. package/lib/corePlugins.js +2373 -1863
  21. package/lib/css/preflight.css +10 -8
  22. package/lib/featureFlags.js +49 -26
  23. package/lib/index.js +1 -31
  24. package/lib/lib/cacheInvalidation.js +92 -0
  25. package/lib/lib/collapseAdjacentRules.js +30 -10
  26. package/lib/lib/collapseDuplicateDeclarations.js +60 -4
  27. package/lib/lib/content.js +181 -0
  28. package/lib/lib/defaultExtractor.js +243 -0
  29. package/lib/lib/detectNesting.js +21 -10
  30. package/lib/lib/evaluateTailwindFunctions.js +115 -50
  31. package/lib/lib/expandApplyAtRules.js +467 -161
  32. package/lib/lib/expandTailwindAtRules.js +160 -133
  33. package/lib/lib/findAtConfigPath.js +46 -0
  34. package/lib/lib/generateRules.js +553 -200
  35. package/lib/lib/getModuleDependencies.js +88 -37
  36. package/lib/lib/load-config.js +42 -0
  37. package/lib/lib/normalizeTailwindDirectives.js +46 -33
  38. package/lib/lib/offsets.js +306 -0
  39. package/lib/lib/partitionApplyAtRules.js +58 -0
  40. package/lib/lib/regex.js +74 -0
  41. package/lib/lib/remap-bitfield.js +89 -0
  42. package/lib/lib/resolveDefaultsAtRules.js +98 -58
  43. package/lib/lib/setupContextUtils.js +773 -321
  44. package/lib/lib/setupTrackingContext.js +70 -75
  45. package/lib/lib/sharedState.js +78 -10
  46. package/lib/lib/substituteScreenAtRules.js +14 -10
  47. package/lib/oxide/cli/build/deps.js +89 -0
  48. package/lib/oxide/cli/build/index.js +53 -0
  49. package/lib/oxide/cli/build/plugin.js +375 -0
  50. package/lib/oxide/cli/build/utils.js +87 -0
  51. package/lib/oxide/cli/build/watching.js +179 -0
  52. package/lib/oxide/cli/help/index.js +72 -0
  53. package/lib/oxide/cli/index.js +214 -0
  54. package/lib/oxide/cli/init/index.js +52 -0
  55. package/lib/oxide/cli.js +5 -0
  56. package/lib/oxide/postcss-plugin.js +2 -0
  57. package/lib/plugin.js +98 -0
  58. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  59. package/lib/postcss-plugins/nesting/index.js +21 -0
  60. package/lib/postcss-plugins/nesting/plugin.js +89 -0
  61. package/lib/processTailwindFeatures.js +39 -26
  62. package/lib/public/colors.js +272 -246
  63. package/lib/public/create-plugin.js +9 -5
  64. package/lib/public/default-config.js +10 -6
  65. package/lib/public/default-theme.js +10 -6
  66. package/lib/public/load-config.js +12 -0
  67. package/lib/public/resolve-config.js +11 -6
  68. package/lib/util/applyImportantSelector.js +36 -0
  69. package/lib/util/bigSign.js +6 -1
  70. package/lib/util/buildMediaQuery.js +13 -6
  71. package/lib/util/cloneDeep.js +9 -6
  72. package/lib/util/cloneNodes.js +23 -3
  73. package/lib/util/color.js +70 -38
  74. package/lib/util/colorNames.js +752 -0
  75. package/lib/util/configurePlugins.js +7 -2
  76. package/lib/util/createPlugin.js +8 -6
  77. package/lib/util/createUtilityPlugin.js +16 -16
  78. package/lib/util/dataTypes.js +173 -108
  79. package/lib/util/defaults.js +14 -3
  80. package/lib/util/escapeClassName.js +13 -8
  81. package/lib/util/escapeCommas.js +7 -2
  82. package/lib/util/flattenColorPalette.js +11 -12
  83. package/lib/util/formatVariantSelector.js +228 -151
  84. package/lib/util/getAllConfigs.js +33 -12
  85. package/lib/util/hashConfig.js +9 -4
  86. package/lib/util/isKeyframeRule.js +7 -2
  87. package/lib/util/isPlainObject.js +7 -2
  88. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +25 -15
  89. package/lib/util/log.js +27 -13
  90. package/lib/util/nameClass.js +27 -10
  91. package/lib/util/negateValue.js +25 -8
  92. package/lib/util/normalizeConfig.js +139 -65
  93. package/lib/util/normalizeScreens.js +131 -11
  94. package/lib/util/parseAnimationValue.js +44 -40
  95. package/lib/util/parseBoxShadowValue.js +34 -23
  96. package/lib/util/parseDependency.js +39 -55
  97. package/lib/util/parseGlob.js +36 -0
  98. package/lib/util/parseObjectStyles.js +15 -10
  99. package/lib/util/pluginUtils.js +159 -69
  100. package/lib/util/prefixSelector.js +30 -12
  101. package/lib/util/pseudoElements.js +229 -0
  102. package/lib/util/removeAlphaVariables.js +31 -0
  103. package/lib/util/resolveConfig.js +97 -75
  104. package/lib/util/resolveConfigPath.js +30 -12
  105. package/lib/util/responsive.js +11 -6
  106. package/lib/util/splitAtTopLevelOnly.js +51 -0
  107. package/lib/util/tap.js +6 -1
  108. package/lib/util/toColorValue.js +7 -3
  109. package/lib/util/toPath.js +26 -3
  110. package/lib/util/transformThemeValue.js +40 -30
  111. package/lib/util/validateConfig.js +37 -0
  112. package/lib/util/validateFormalSyntax.js +26 -0
  113. package/lib/util/withAlphaVariable.js +27 -15
  114. package/loadConfig.d.ts +4 -0
  115. package/loadConfig.js +2 -0
  116. package/nesting/index.js +2 -12
  117. package/package.json +66 -57
  118. package/peers/index.js +75964 -55560
  119. package/plugin.d.ts +11 -0
  120. package/plugin.js +2 -1
  121. package/resolveConfig.d.ts +12 -0
  122. package/resolveConfig.js +2 -1
  123. package/scripts/generate-types.js +105 -0
  124. package/scripts/release-channel.js +18 -0
  125. package/scripts/release-notes.js +21 -0
  126. package/scripts/swap-engines.js +40 -0
  127. package/scripts/type-utils.js +27 -0
  128. package/src/cli/build/deps.js +56 -0
  129. package/src/cli/build/index.js +49 -0
  130. package/src/cli/build/plugin.js +444 -0
  131. package/src/cli/build/utils.js +76 -0
  132. package/src/cli/build/watching.js +229 -0
  133. package/src/cli/help/index.js +70 -0
  134. package/src/cli/index.js +216 -0
  135. package/src/cli/init/index.js +79 -0
  136. package/src/cli-peer-dependencies.js +7 -1
  137. package/src/cli.js +4 -765
  138. package/src/corePluginList.js +1 -1
  139. package/src/corePlugins.js +786 -306
  140. package/src/css/preflight.css +10 -8
  141. package/src/featureFlags.js +21 -5
  142. package/src/index.js +1 -34
  143. package/src/lib/cacheInvalidation.js +52 -0
  144. package/src/lib/collapseAdjacentRules.js +21 -2
  145. package/src/lib/collapseDuplicateDeclarations.js +66 -1
  146. package/src/lib/content.js +208 -0
  147. package/src/lib/defaultExtractor.js +217 -0
  148. package/src/lib/detectNesting.js +9 -1
  149. package/src/lib/evaluateTailwindFunctions.js +79 -8
  150. package/src/lib/expandApplyAtRules.js +515 -153
  151. package/src/lib/expandTailwindAtRules.js +115 -86
  152. package/src/lib/findAtConfigPath.js +48 -0
  153. package/src/lib/generateRules.js +545 -147
  154. package/src/lib/getModuleDependencies.js +70 -30
  155. package/src/lib/load-config.ts +31 -0
  156. package/src/lib/normalizeTailwindDirectives.js +7 -1
  157. package/src/lib/offsets.js +373 -0
  158. package/src/lib/partitionApplyAtRules.js +52 -0
  159. package/src/lib/regex.js +74 -0
  160. package/src/lib/remap-bitfield.js +82 -0
  161. package/src/lib/resolveDefaultsAtRules.js +59 -17
  162. package/src/lib/setupContextUtils.js +701 -175
  163. package/src/lib/setupTrackingContext.js +51 -62
  164. package/src/lib/sharedState.js +58 -7
  165. package/src/oxide/cli/build/deps.ts +91 -0
  166. package/src/oxide/cli/build/index.ts +47 -0
  167. package/src/oxide/cli/build/plugin.ts +442 -0
  168. package/src/oxide/cli/build/utils.ts +74 -0
  169. package/src/oxide/cli/build/watching.ts +225 -0
  170. package/src/oxide/cli/help/index.ts +69 -0
  171. package/src/oxide/cli/index.ts +204 -0
  172. package/src/oxide/cli/init/index.ts +59 -0
  173. package/src/oxide/cli.ts +1 -0
  174. package/src/oxide/postcss-plugin.ts +1 -0
  175. package/src/plugin.js +107 -0
  176. package/src/postcss-plugins/nesting/README.md +42 -0
  177. package/src/postcss-plugins/nesting/index.js +13 -0
  178. package/src/postcss-plugins/nesting/plugin.js +80 -0
  179. package/src/processTailwindFeatures.js +12 -2
  180. package/src/public/colors.js +22 -0
  181. package/src/public/default-config.js +1 -1
  182. package/src/public/default-theme.js +2 -2
  183. package/src/public/load-config.js +2 -0
  184. package/src/util/applyImportantSelector.js +27 -0
  185. package/src/util/buildMediaQuery.js +5 -3
  186. package/src/util/cloneNodes.js +19 -2
  187. package/src/util/color.js +44 -12
  188. package/src/util/colorNames.js +150 -0
  189. package/src/util/dataTypes.js +51 -16
  190. package/src/util/defaults.js +6 -0
  191. package/src/util/formatVariantSelector.js +264 -144
  192. package/src/util/getAllConfigs.js +21 -2
  193. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  194. package/src/util/log.js +11 -7
  195. package/src/util/nameClass.js +4 -0
  196. package/src/util/negateValue.js +11 -3
  197. package/src/util/normalizeConfig.js +57 -5
  198. package/src/util/normalizeScreens.js +105 -7
  199. package/src/util/parseBoxShadowValue.js +4 -3
  200. package/src/util/parseDependency.js +37 -42
  201. package/src/util/parseGlob.js +24 -0
  202. package/src/util/pluginUtils.js +123 -24
  203. package/src/util/prefixSelector.js +30 -10
  204. package/src/util/pseudoElements.js +170 -0
  205. package/src/util/removeAlphaVariables.js +24 -0
  206. package/src/util/resolveConfig.js +74 -26
  207. package/src/util/resolveConfigPath.js +12 -1
  208. package/src/util/splitAtTopLevelOnly.js +52 -0
  209. package/src/util/toPath.js +23 -1
  210. package/src/util/transformThemeValue.js +13 -3
  211. package/src/util/validateConfig.js +26 -0
  212. package/src/util/validateFormalSyntax.js +34 -0
  213. package/src/util/withAlphaVariable.js +1 -1
  214. package/stubs/.gitignore +1 -0
  215. package/stubs/.prettierrc.json +6 -0
  216. package/stubs/{defaultConfig.stub.js → config.full.js} +206 -166
  217. package/stubs/postcss.config.js +6 -0
  218. package/stubs/tailwind.config.cjs +2 -0
  219. package/stubs/tailwind.config.js +2 -0
  220. package/stubs/tailwind.config.ts +3 -0
  221. package/types/config.d.ts +368 -0
  222. package/types/generated/.gitkeep +0 -0
  223. package/types/generated/colors.d.ts +298 -0
  224. package/types/generated/corePluginList.d.ts +1 -0
  225. package/types/generated/default-theme.d.ts +371 -0
  226. package/types/index.d.ts +7 -0
  227. package/CHANGELOG.md +0 -1843
  228. package/lib/constants.js +0 -37
  229. package/lib/lib/setupWatchingContext.js +0 -288
  230. package/nesting/plugin.js +0 -41
  231. package/scripts/install-integrations.js +0 -27
  232. package/scripts/rebuildFixtures.js +0 -68
  233. package/src/constants.js +0 -17
  234. package/src/lib/setupWatchingContext.js +0 -311
  235. /package/stubs/{simpleConfig.stub.js → config.simple.js} +0 -0
  236. /package/stubs/{defaultPostCssConfig.stub.js → postcss.config.cjs} +0 -0
package/lib/util/log.js CHANGED
@@ -2,25 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.default = void 0;
6
- var _chalk = _interopRequireDefault(require("chalk"));
7
- function _interopRequireDefault(obj) {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ dim: function() {
13
+ return dim;
14
+ },
15
+ default: function() {
16
+ return _default;
17
+ }
18
+ });
19
+ const _picocolors = /*#__PURE__*/ _interop_require_default(require("picocolors"));
20
+ function _interop_require_default(obj) {
8
21
  return obj && obj.__esModule ? obj : {
9
22
  default: obj
10
23
  };
11
24
  }
12
25
  let alreadyShown = new Set();
13
- function log(chalk, messages, key) {
14
- if (process.env.JEST_WORKER_ID !== undefined) return;
26
+ function log(type, messages, key) {
27
+ if (typeof process !== "undefined" && process.env.JEST_WORKER_ID) return;
15
28
  if (key && alreadyShown.has(key)) return;
16
29
  if (key) alreadyShown.add(key);
17
- console.warn('');
18
- messages.forEach((message)=>console.warn(chalk, '-', message)
19
- );
30
+ console.warn("");
31
+ messages.forEach((message)=>console.warn(type, "-", message));
32
+ }
33
+ function dim(input) {
34
+ return _picocolors.default.dim(input);
20
35
  }
21
- var _default = {
36
+ const _default = {
22
37
  info (key, messages) {
23
- log(_chalk.default.bold.cyan('info'), ...Array.isArray(key) ? [
38
+ log(_picocolors.default.bold(_picocolors.default.cyan("info")), ...Array.isArray(key) ? [
24
39
  key
25
40
  ] : [
26
41
  messages,
@@ -28,7 +43,7 @@ var _default = {
28
43
  ]);
29
44
  },
30
45
  warn (key, messages) {
31
- log(_chalk.default.bold.yellow('warn'), ...Array.isArray(key) ? [
46
+ log(_picocolors.default.bold(_picocolors.default.yellow("warn")), ...Array.isArray(key) ? [
32
47
  key
33
48
  ] : [
34
49
  messages,
@@ -36,7 +51,7 @@ var _default = {
36
51
  ]);
37
52
  },
38
53
  risk (key, messages) {
39
- log(_chalk.default.bold.magenta('risk'), ...Array.isArray(key) ? [
54
+ log(_picocolors.default.bold(_picocolors.default.magenta("risk")), ...Array.isArray(key) ? [
40
55
  key
41
56
  ] : [
42
57
  messages,
@@ -44,4 +59,3 @@ var _default = {
44
59
  ]);
45
60
  }
46
61
  };
47
- exports.default = _default;
@@ -2,31 +2,48 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.asClass = asClass;
6
- exports.default = nameClass;
7
- exports.formatClass = formatClass;
8
- var _escapeClassName = _interopRequireDefault(require("./escapeClassName"));
9
- var _escapeCommas = _interopRequireDefault(require("./escapeCommas"));
10
- function _interopRequireDefault(obj) {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ asClass: function() {
13
+ return asClass;
14
+ },
15
+ default: function() {
16
+ return nameClass;
17
+ },
18
+ formatClass: function() {
19
+ return formatClass;
20
+ }
21
+ });
22
+ const _escapeClassName = /*#__PURE__*/ _interop_require_default(require("./escapeClassName"));
23
+ const _escapeCommas = /*#__PURE__*/ _interop_require_default(require("./escapeCommas"));
24
+ function _interop_require_default(obj) {
11
25
  return obj && obj.__esModule ? obj : {
12
26
  default: obj
13
27
  };
14
28
  }
15
29
  function asClass(name) {
16
- return (0, _escapeCommas).default(`.${(0, _escapeClassName).default(name)}`);
30
+ return (0, _escapeCommas.default)(`.${(0, _escapeClassName.default)(name)}`);
17
31
  }
18
32
  function nameClass(classPrefix, key) {
19
33
  return asClass(formatClass(classPrefix, key));
20
34
  }
21
35
  function formatClass(classPrefix, key) {
22
- if (key === 'DEFAULT') {
36
+ if (key === "DEFAULT") {
23
37
  return classPrefix;
24
38
  }
25
- if (key === '-' || key === '-DEFAULT') {
39
+ if (key === "-" || key === "-DEFAULT") {
26
40
  return `-${classPrefix}`;
27
41
  }
28
- if (key.startsWith('-')) {
42
+ if (key.startsWith("-")) {
29
43
  return `-${classPrefix}${key}`;
30
44
  }
45
+ if (key.startsWith("/")) {
46
+ return `${classPrefix}${key}`;
47
+ }
31
48
  return `${classPrefix}-${key}`;
32
49
  }
@@ -2,18 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.default = _default;
6
- function _default(value) {
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return negateValue;
9
+ }
10
+ });
11
+ function negateValue(value) {
7
12
  value = `${value}`;
8
- if (value === '0') {
9
- return '0';
13
+ if (value === "0") {
14
+ return "0";
10
15
  }
11
16
  // Flip sign of numbers
12
17
  if (/^[+-]?(\d+|\d*\.\d+)(e[+-]?\d+)?(%|\w+)?$/.test(value)) {
13
- return value.replace(/^[+-]?/, (sign)=>sign === '-' ? '' : '-'
14
- );
18
+ return value.replace(/^[+-]?/, (sign)=>sign === "-" ? "" : "-");
15
19
  }
16
- if (value.includes('var(') || value.includes('calc(')) {
17
- return `calc(${value} * -1)`;
20
+ // What functions we support negating numeric values for
21
+ // var() isn't inherently a numeric function but we support it anyway
22
+ // The trigonometric functions are omitted because you'll need to use calc(…) with them _anyway_
23
+ // to produce generally useful results and that will be covered already
24
+ let numericFunctions = [
25
+ "var",
26
+ "calc",
27
+ "min",
28
+ "max",
29
+ "clamp"
30
+ ];
31
+ for (const fn of numericFunctions){
32
+ if (value.includes(`${fn}(`)) {
33
+ return `calc(${value} * -1)`;
34
+ }
18
35
  }
19
36
  }
@@ -2,12 +2,52 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.normalizeConfig = normalizeConfig;
6
- var _log = _interopRequireDefault(require("./log"));
7
- function _interopRequireDefault(obj) {
8
- return obj && obj.__esModule ? obj : {
9
- default: obj
10
- };
5
+ Object.defineProperty(exports, "normalizeConfig", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return normalizeConfig;
9
+ }
10
+ });
11
+ const _featureFlags = require("../featureFlags");
12
+ const _log = /*#__PURE__*/ _interop_require_wildcard(require("./log"));
13
+ function _getRequireWildcardCache(nodeInterop) {
14
+ if (typeof WeakMap !== "function") return null;
15
+ var cacheBabelInterop = new WeakMap();
16
+ var cacheNodeInterop = new WeakMap();
17
+ return (_getRequireWildcardCache = function(nodeInterop) {
18
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
19
+ })(nodeInterop);
20
+ }
21
+ function _interop_require_wildcard(obj, nodeInterop) {
22
+ if (!nodeInterop && obj && obj.__esModule) {
23
+ return obj;
24
+ }
25
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
26
+ return {
27
+ default: obj
28
+ };
29
+ }
30
+ var cache = _getRequireWildcardCache(nodeInterop);
31
+ if (cache && cache.has(obj)) {
32
+ return cache.get(obj);
33
+ }
34
+ var newObj = {};
35
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
36
+ for(var key in obj){
37
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
38
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
39
+ if (desc && (desc.get || desc.set)) {
40
+ Object.defineProperty(newObj, key, desc);
41
+ } else {
42
+ newObj[key] = obj[key];
43
+ }
44
+ }
45
+ }
46
+ newObj.default = obj;
47
+ if (cache) {
48
+ cache.set(obj, newObj);
49
+ }
50
+ return newObj;
11
51
  }
12
52
  function normalizeConfig(config) {
13
53
  // Quick structure validation
@@ -34,45 +74,45 @@ function normalizeConfig(config) {
34
74
  return false;
35
75
  }
36
76
  // `config.content` should be an object or an array
37
- if (!Array.isArray(config.content) && !(typeof config.content === 'object' && config.content !== null)) {
77
+ if (!Array.isArray(config.content) && !(typeof config.content === "object" && config.content !== null)) {
38
78
  return false;
39
79
  }
40
80
  // When `config.content` is an array, it should consist of FilePaths or RawFiles
41
81
  if (Array.isArray(config.content)) {
42
82
  return config.content.every((path)=>{
43
83
  // `path` can be a string
44
- if (typeof path === 'string') return true;
84
+ if (typeof path === "string") return true;
45
85
  // `path` can be an object { raw: string, extension?: string }
46
86
  // `raw` must be a string
47
- if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== 'string') return false;
87
+ if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== "string") return false;
48
88
  // `extension` (if provided) should also be a string
49
- if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== 'string') {
89
+ if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== "string") {
50
90
  return false;
51
91
  }
52
92
  return true;
53
93
  });
54
94
  }
55
95
  // When `config.content` is an object
56
- if (typeof config.content === 'object' && config.content !== null) {
57
- // Only `files`, `extract` and `transform` can exist in `config.content`
96
+ if (typeof config.content === "object" && config.content !== null) {
97
+ // Only `files`, `relative`, `extract`, and `transform` can exist in `config.content`
58
98
  if (Object.keys(config.content).some((key)=>![
59
- 'files',
60
- 'extract',
61
- 'transform'
62
- ].includes(key)
63
- )) {
99
+ "files",
100
+ "relative",
101
+ "extract",
102
+ "transform"
103
+ ].includes(key))) {
64
104
  return false;
65
105
  }
66
106
  // `config.content.files` should exist of FilePaths or RawFiles
67
107
  if (Array.isArray(config.content.files)) {
68
108
  if (!config.content.files.every((path)=>{
69
109
  // `path` can be a string
70
- if (typeof path === 'string') return true;
110
+ if (typeof path === "string") return true;
71
111
  // `path` can be an object { raw: string, extension?: string }
72
112
  // `raw` must be a string
73
- if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== 'string') return false;
113
+ if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== "string") return false;
74
114
  // `extension` (if provided) should also be a string
75
- if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== 'string') {
115
+ if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== "string") {
76
116
  return false;
77
117
  }
78
118
  return true;
@@ -80,23 +120,27 @@ function normalizeConfig(config) {
80
120
  return false;
81
121
  }
82
122
  // `config.content.extract` is optional, and can be a Function or a Record<String, Function>
83
- if (typeof config.content.extract === 'object') {
123
+ if (typeof config.content.extract === "object") {
84
124
  for (let value of Object.values(config.content.extract)){
85
- if (typeof value !== 'function') {
125
+ if (typeof value !== "function") {
86
126
  return false;
87
127
  }
88
128
  }
89
- } else if (!(config.content.extract === undefined || typeof config.content.extract === 'function')) {
129
+ } else if (!(config.content.extract === undefined || typeof config.content.extract === "function")) {
90
130
  return false;
91
131
  }
92
132
  // `config.content.transform` is optional, and can be a Function or a Record<String, Function>
93
- if (typeof config.content.transform === 'object') {
133
+ if (typeof config.content.transform === "object") {
94
134
  for (let value of Object.values(config.content.transform)){
95
- if (typeof value !== 'function') {
135
+ if (typeof value !== "function") {
96
136
  return false;
97
137
  }
98
138
  }
99
- } else if (!(config.content.transform === undefined || typeof config.content.transform === 'function')) {
139
+ } else if (!(config.content.transform === undefined || typeof config.content.transform === "function")) {
140
+ return false;
141
+ }
142
+ // `config.content.relative` is optional and can be a boolean
143
+ if (typeof config.content.relative !== "boolean" && typeof config.content.relative !== "undefined") {
100
144
  return false;
101
145
  }
102
146
  }
@@ -105,34 +149,57 @@ function normalizeConfig(config) {
105
149
  return false;
106
150
  })();
107
151
  if (!valid) {
108
- _log.default.warn('purge-deprecation', [
109
- 'The `purge`/`content` options have changed in Tailwind CSS v3.0.',
110
- 'Update your configuration file to eliminate this warning.'
152
+ _log.default.warn("purge-deprecation", [
153
+ "The `purge`/`content` options have changed in Tailwind CSS v3.0.",
154
+ "Update your configuration file to eliminate this warning.",
155
+ "https://tailwindcss.com/docs/upgrade-guide#configure-content-sources"
111
156
  ]);
112
157
  }
113
158
  // Normalize the `safelist`
114
159
  config.safelist = (()=>{
115
- var ref;
160
+ var _purge_options;
116
161
  let { content , purge , safelist } = config;
117
162
  if (Array.isArray(safelist)) return safelist;
118
163
  if (Array.isArray(content === null || content === void 0 ? void 0 : content.safelist)) return content.safelist;
119
164
  if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.safelist)) return purge.safelist;
120
- if (Array.isArray(purge === null || purge === void 0 ? void 0 : (ref = purge.options) === null || ref === void 0 ? void 0 : ref.safelist)) return purge.options.safelist;
165
+ if (Array.isArray(purge === null || purge === void 0 ? void 0 : (_purge_options = purge.options) === null || _purge_options === void 0 ? void 0 : _purge_options.safelist)) return purge.options.safelist;
166
+ return [];
167
+ })();
168
+ // Normalize the `blocklist`
169
+ config.blocklist = (()=>{
170
+ let { blocklist } = config;
171
+ if (Array.isArray(blocklist)) {
172
+ if (blocklist.every((item)=>typeof item === "string")) {
173
+ return blocklist;
174
+ }
175
+ _log.default.warn("blocklist-invalid", [
176
+ "The `blocklist` option must be an array of strings.",
177
+ "https://tailwindcss.com/docs/content-configuration#discarding-classes"
178
+ ]);
179
+ }
121
180
  return [];
122
181
  })();
123
182
  // Normalize prefix option
124
- if (typeof config.prefix === 'function') {
125
- _log.default.warn('prefix-function', [
126
- 'As of Tailwind CSS v3.0, `prefix` cannot be a function.',
127
- 'Update `prefix` in your configuration to be a string to eliminate this warning.'
183
+ if (typeof config.prefix === "function") {
184
+ _log.default.warn("prefix-function", [
185
+ "As of Tailwind CSS v3.0, `prefix` cannot be a function.",
186
+ "Update `prefix` in your configuration to be a string to eliminate this warning.",
187
+ "https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function"
128
188
  ]);
129
- config.prefix = '';
189
+ config.prefix = "";
130
190
  } else {
131
- var _prefix;
132
- config.prefix = (_prefix = config.prefix) !== null && _prefix !== void 0 ? _prefix : '';
191
+ var _config_prefix;
192
+ config.prefix = (_config_prefix = config.prefix) !== null && _config_prefix !== void 0 ? _config_prefix : "";
133
193
  }
134
194
  // Normalize the `content`
135
195
  config.content = {
196
+ relative: (()=>{
197
+ let { content } = config;
198
+ if (content === null || content === void 0 ? void 0 : content.relative) {
199
+ return content.relative;
200
+ }
201
+ return (0, _featureFlags.flagEnabled)(config, "relativeContentPathsByDefault");
202
+ })(),
136
203
  files: (()=>{
137
204
  let { content , purge } = config;
138
205
  if (Array.isArray(purge)) return purge;
@@ -144,24 +211,22 @@ function normalizeConfig(config) {
144
211
  })(),
145
212
  extract: (()=>{
146
213
  let extract = (()=>{
147
- var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;
148
- if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.extract) return config.purge.extract;
149
- if ((ref1 = config.content) === null || ref1 === void 0 ? void 0 : ref1.extract) return config.content.extract;
150
- if ((ref2 = config.purge) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.extract) === null || ref3 === void 0 ? void 0 : ref3.DEFAULT) return config.purge.extract.DEFAULT;
151
- if ((ref4 = config.content) === null || ref4 === void 0 ? void 0 : (ref5 = ref4.extract) === null || ref5 === void 0 ? void 0 : ref5.DEFAULT) return config.content.extract.DEFAULT;
152
- if ((ref6 = config.purge) === null || ref6 === void 0 ? void 0 : (ref7 = ref6.options) === null || ref7 === void 0 ? void 0 : ref7.extractors) return config.purge.options.extractors;
153
- if ((ref8 = config.content) === null || ref8 === void 0 ? void 0 : (ref9 = ref8.options) === null || ref9 === void 0 ? void 0 : ref9.extractors) return config.content.options.extractors;
154
- return {
155
- };
214
+ var _config_purge, _config_content, _config_purge1, _config_purge_extract, _config_content1, _config_content_extract, _config_purge2, _config_purge_options, _config_content2, _config_content_options;
215
+ if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : _config_purge.extract) return config.purge.extract;
216
+ if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : _config_content.extract) return config.content.extract;
217
+ if ((_config_purge1 = config.purge) === null || _config_purge1 === void 0 ? void 0 : (_config_purge_extract = _config_purge1.extract) === null || _config_purge_extract === void 0 ? void 0 : _config_purge_extract.DEFAULT) return config.purge.extract.DEFAULT;
218
+ if ((_config_content1 = config.content) === null || _config_content1 === void 0 ? void 0 : (_config_content_extract = _config_content1.extract) === null || _config_content_extract === void 0 ? void 0 : _config_content_extract.DEFAULT) return config.content.extract.DEFAULT;
219
+ if ((_config_purge2 = config.purge) === null || _config_purge2 === void 0 ? void 0 : (_config_purge_options = _config_purge2.options) === null || _config_purge_options === void 0 ? void 0 : _config_purge_options.extractors) return config.purge.options.extractors;
220
+ if ((_config_content2 = config.content) === null || _config_content2 === void 0 ? void 0 : (_config_content_options = _config_content2.options) === null || _config_content_options === void 0 ? void 0 : _config_content_options.extractors) return config.content.options.extractors;
221
+ return {};
156
222
  })();
157
- let extractors = {
158
- };
223
+ let extractors = {};
159
224
  let defaultExtractor = (()=>{
160
- var ref, ref10, ref11, ref12;
161
- if ((ref = config.purge) === null || ref === void 0 ? void 0 : (ref10 = ref.options) === null || ref10 === void 0 ? void 0 : ref10.defaultExtractor) {
225
+ var _config_purge, _config_purge_options, _config_content, _config_content_options;
226
+ if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : (_config_purge_options = _config_purge.options) === null || _config_purge_options === void 0 ? void 0 : _config_purge_options.defaultExtractor) {
162
227
  return config.purge.options.defaultExtractor;
163
228
  }
164
- if ((ref11 = config.content) === null || ref11 === void 0 ? void 0 : (ref12 = ref11.options) === null || ref12 === void 0 ? void 0 : ref12.defaultExtractor) {
229
+ if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : (_config_content_options = _config_content.options) === null || _config_content_options === void 0 ? void 0 : _config_content_options.defaultExtractor) {
165
230
  return config.content.options.defaultExtractor;
166
231
  }
167
232
  return undefined;
@@ -170,7 +235,7 @@ function normalizeConfig(config) {
170
235
  extractors.DEFAULT = defaultExtractor;
171
236
  }
172
237
  // Functions
173
- if (typeof extract === 'function') {
238
+ if (typeof extract === "function") {
174
239
  extractors.DEFAULT = extract;
175
240
  } else if (Array.isArray(extract)) {
176
241
  for (let { extensions , extractor } of extract !== null && extract !== void 0 ? extract : []){
@@ -178,31 +243,40 @@ function normalizeConfig(config) {
178
243
  extractors[extension] = extractor;
179
244
  }
180
245
  }
181
- } else if (typeof extract === 'object' && extract !== null) {
246
+ } else if (typeof extract === "object" && extract !== null) {
182
247
  Object.assign(extractors, extract);
183
248
  }
184
249
  return extractors;
185
250
  })(),
186
251
  transform: (()=>{
187
252
  let transform = (()=>{
188
- var ref, ref13, ref14, ref15, ref16, ref17;
189
- if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.transform) return config.purge.transform;
190
- if ((ref13 = config.content) === null || ref13 === void 0 ? void 0 : ref13.transform) return config.content.transform;
191
- if ((ref14 = config.purge) === null || ref14 === void 0 ? void 0 : (ref15 = ref14.transform) === null || ref15 === void 0 ? void 0 : ref15.DEFAULT) return config.purge.transform.DEFAULT;
192
- if ((ref16 = config.content) === null || ref16 === void 0 ? void 0 : (ref17 = ref16.transform) === null || ref17 === void 0 ? void 0 : ref17.DEFAULT) return config.content.transform.DEFAULT;
193
- return {
194
- };
253
+ var _config_purge, _config_content, _config_purge1, _config_purge_transform, _config_content1, _config_content_transform;
254
+ if ((_config_purge = config.purge) === null || _config_purge === void 0 ? void 0 : _config_purge.transform) return config.purge.transform;
255
+ if ((_config_content = config.content) === null || _config_content === void 0 ? void 0 : _config_content.transform) return config.content.transform;
256
+ if ((_config_purge1 = config.purge) === null || _config_purge1 === void 0 ? void 0 : (_config_purge_transform = _config_purge1.transform) === null || _config_purge_transform === void 0 ? void 0 : _config_purge_transform.DEFAULT) return config.purge.transform.DEFAULT;
257
+ if ((_config_content1 = config.content) === null || _config_content1 === void 0 ? void 0 : (_config_content_transform = _config_content1.transform) === null || _config_content_transform === void 0 ? void 0 : _config_content_transform.DEFAULT) return config.content.transform.DEFAULT;
258
+ return {};
195
259
  })();
196
- let transformers = {
197
- };
198
- if (typeof transform === 'function') {
260
+ let transformers = {};
261
+ if (typeof transform === "function") {
199
262
  transformers.DEFAULT = transform;
200
263
  }
201
- if (typeof transform === 'object' && transform !== null) {
264
+ if (typeof transform === "object" && transform !== null) {
202
265
  Object.assign(transformers, transform);
203
266
  }
204
267
  return transformers;
205
268
  })()
206
269
  };
270
+ // Validate globs to prevent bogus globs.
271
+ // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`
272
+ for (let file of config.content.files){
273
+ if (typeof file === "string" && /{([^,]*?)}/g.test(file)) {
274
+ _log.default.warn("invalid-glob-braces", [
275
+ `The glob pattern ${(0, _log.dim)(file)} in your Tailwind CSS configuration is invalid.`,
276
+ `Update it to ${(0, _log.dim)(file.replace(/{([^,]*?)}/g, "$1"))} to silence this warning.`
277
+ ]);
278
+ break;
279
+ }
280
+ }
207
281
  return config;
208
282
  }