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
@@ -2,75 +2,74 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.default = expandTailwindAtRules;
6
- var _quickLru = _interopRequireDefault(require("quick-lru"));
7
- var sharedState = _interopRequireWildcard(require("./sharedState"));
8
- var _generateRules = require("./generateRules");
9
- var _bigSign = _interopRequireDefault(require("../util/bigSign"));
10
- var _cloneNodes = _interopRequireDefault(require("../util/cloneNodes"));
11
- function _interopRequireDefault(obj) {
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return expandTailwindAtRules;
9
+ }
10
+ });
11
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
12
+ const _quicklru = /*#__PURE__*/ _interop_require_default(require("@alloc/quick-lru"));
13
+ const _sharedState = /*#__PURE__*/ _interop_require_wildcard(require("./sharedState"));
14
+ const _generateRules = require("./generateRules");
15
+ const _log = /*#__PURE__*/ _interop_require_default(require("../util/log"));
16
+ const _cloneNodes = /*#__PURE__*/ _interop_require_default(require("../util/cloneNodes"));
17
+ const _defaultExtractor = require("./defaultExtractor");
18
+ function _interop_require_default(obj) {
12
19
  return obj && obj.__esModule ? obj : {
13
20
  default: obj
14
21
  };
15
22
  }
16
- function _interopRequireWildcard(obj) {
17
- if (obj && obj.__esModule) {
23
+ function _getRequireWildcardCache(nodeInterop) {
24
+ if (typeof WeakMap !== "function") return null;
25
+ var cacheBabelInterop = new WeakMap();
26
+ var cacheNodeInterop = new WeakMap();
27
+ return (_getRequireWildcardCache = function(nodeInterop) {
28
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
29
+ })(nodeInterop);
30
+ }
31
+ function _interop_require_wildcard(obj, nodeInterop) {
32
+ if (!nodeInterop && obj && obj.__esModule) {
18
33
  return obj;
19
- } else {
20
- var newObj = {
34
+ }
35
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
36
+ return {
37
+ default: obj
21
38
  };
22
- if (obj != null) {
23
- for(var key in obj){
24
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
25
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {
26
- };
27
- if (desc.get || desc.set) {
28
- Object.defineProperty(newObj, key, desc);
29
- } else {
30
- newObj[key] = obj[key];
31
- }
32
- }
39
+ }
40
+ var cache = _getRequireWildcardCache(nodeInterop);
41
+ if (cache && cache.has(obj)) {
42
+ return cache.get(obj);
43
+ }
44
+ var newObj = {};
45
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
46
+ for(var key in obj){
47
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
48
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
49
+ if (desc && (desc.get || desc.set)) {
50
+ Object.defineProperty(newObj, key, desc);
51
+ } else {
52
+ newObj[key] = obj[key];
33
53
  }
34
54
  }
35
- newObj.default = obj;
36
- return newObj;
37
55
  }
56
+ newObj.default = obj;
57
+ if (cache) {
58
+ cache.set(obj, newObj);
59
+ }
60
+ return newObj;
38
61
  }
39
- let env = sharedState.env;
40
- const PATTERNS = [
41
- /([^<>"'`\s]*\[\w*'[^"`\s]*'?\])/.source,
42
- /([^<>"'`\s]*\[\w*"[^"`\s]*"?\])/.source,
43
- /([^<>"'`\s]*\[\w*\('[^"'`\s]*'\)\])/.source,
44
- /([^<>"'`\s]*\[\w*\("[^"'`\s]*"\)\])/.source,
45
- /([^<>"'`\s]*\[\w*\('[^"`\s]*'\)\])/.source,
46
- /([^<>"'`\s]*\[\w*\("[^'`\s]*"\)\])/.source,
47
- /([^<>"'`\s]*\['[^"'`\s]*'\])/.source,
48
- /([^<>"'`\s]*\["[^"'`\s]*"\])/.source,
49
- /([^<>"'`\s]*\[[^<>"'`\s]*:'[^"'`\s]*'\])/.source,
50
- /([^<>"'`\s]*\[[^<>"'`\s]*:"[^"'`\s]*"\])/.source,
51
- /([^<>"'`\s]*\[[^"'`\s]+\][^<>"'`\s]*)/.source,
52
- /([^<>"'`\s]*[^"'`\s:])/.source
53
- ].join('|');
54
- const BROAD_MATCH_GLOBAL_REGEXP = new RegExp(PATTERNS, 'g');
55
- const INNER_MATCH_GLOBAL_REGEXP = /[^<>"'`\s.(){}[\]#=%]*[^<>"'`\s.(){}[\]#=%:]/g;
62
+ let env = _sharedState.env;
56
63
  const builtInExtractors = {
57
- DEFAULT: (content)=>{
58
- let broadMatches = content.match(BROAD_MATCH_GLOBAL_REGEXP) || [];
59
- let innerMatches = content.match(INNER_MATCH_GLOBAL_REGEXP) || [];
60
- return [
61
- ...broadMatches,
62
- ...innerMatches
63
- ];
64
- }
64
+ DEFAULT: _defaultExtractor.defaultExtractor
65
65
  };
66
66
  const builtInTransformers = {
67
- DEFAULT: (content)=>content
68
- ,
69
- svelte: (content)=>content.replace(/(?:^|\s)class:/g, ' ')
67
+ DEFAULT: (content)=>content,
68
+ svelte: (content)=>content.replace(/(?:^|\s)class:/g, " ")
70
69
  };
71
- function getExtractor(tailwindConfig, fileExtension) {
72
- let extractors = tailwindConfig.content.extract;
73
- return extractors[fileExtension] || extractors.DEFAULT || builtInExtractors[fileExtension] || builtInExtractors.DEFAULT;
70
+ function getExtractor(context, fileExtension) {
71
+ let extractors = context.tailwindConfig.content.extract;
72
+ return extractors[fileExtension] || extractors.DEFAULT || builtInExtractors[fileExtension] || builtInExtractors.DEFAULT(context);
74
73
  }
75
74
  function getTransformer(tailwindConfig, fileExtension) {
76
75
  let transformers = tailwindConfig.content.transform;
@@ -82,11 +81,11 @@ let extractorCache = new WeakMap();
82
81
  // up these regexes by 50% that could cut initial build time by like 20%.
83
82
  function getClassCandidates(content, extractor, candidates, seen) {
84
83
  if (!extractorCache.has(extractor)) {
85
- extractorCache.set(extractor, new _quickLru.default({
84
+ extractorCache.set(extractor, new _quicklru.default({
86
85
  maxSize: 25000
87
86
  }));
88
87
  }
89
- for (let line of content.split('\n')){
88
+ for (let line of content.split("\n")){
90
89
  line = line.trim();
91
90
  if (seen.has(line)) {
92
91
  continue;
@@ -97,8 +96,7 @@ function getClassCandidates(content, extractor, candidates, seen) {
97
96
  candidates.add(match);
98
97
  }
99
98
  } else {
100
- let extractorMatches = extractor(line).filter((s)=>s !== '!*'
101
- );
99
+ let extractorMatches = extractor(line).filter((s)=>s !== "!*");
102
100
  let lineMatchesSet = new Set(extractorMatches);
103
101
  for (let match of lineMatchesSet){
104
102
  candidates.add(match);
@@ -107,45 +105,21 @@ function getClassCandidates(content, extractor, candidates, seen) {
107
105
  }
108
106
  }
109
107
  }
110
- function buildStylesheet(rules, context) {
111
- let sortedRules = rules.sort(([a], [z])=>(0, _bigSign).default(a - z)
112
- );
108
+ /**
109
+ *
110
+ * @param {[import('./offsets.js').RuleOffset, import('postcss').Node][]} rules
111
+ * @param {*} context
112
+ */ function buildStylesheet(rules, context) {
113
+ let sortedRules = context.offsets.sort(rules);
113
114
  let returnValue = {
114
115
  base: new Set(),
116
+ defaults: new Set(),
115
117
  components: new Set(),
116
118
  utilities: new Set(),
117
- variants: new Set(),
118
- // All the CSS that is not Tailwind related can be put in this bucket. This
119
- // will make it easier to later use this information when we want to
120
- // `@apply` for example. The main reason we do this here is because we
121
- // still need to make sure the order is correct. Last but not least, we
122
- // will make sure to always re-inject this section into the css, even if
123
- // certain rules were not used. This means that it will look like a no-op
124
- // from the user's perspective, but we gathered all the useful information
125
- // we need.
126
- user: new Set()
119
+ variants: new Set()
127
120
  };
128
121
  for (let [sort, rule] of sortedRules){
129
- if (sort >= context.minimumScreen) {
130
- returnValue.variants.add(rule);
131
- continue;
132
- }
133
- if (sort & context.layerOrder.base) {
134
- returnValue.base.add(rule);
135
- continue;
136
- }
137
- if (sort & context.layerOrder.components) {
138
- returnValue.components.add(rule);
139
- continue;
140
- }
141
- if (sort & context.layerOrder.utilities) {
142
- returnValue.utilities.add(rule);
143
- continue;
144
- }
145
- if (sort & context.layerOrder.user) {
146
- returnValue.user.add(rule);
147
- continue;
148
- }
122
+ returnValue[sort.layer].add(rule);
149
123
  }
150
124
  return returnValue;
151
125
  }
@@ -157,88 +131,141 @@ function expandTailwindAtRules(context) {
157
131
  utilities: null,
158
132
  variants: null
159
133
  };
160
- // Make sure this file contains Tailwind directives. If not, we can save
161
- // a lot of work and bail early. Also we don't have to register our touch
162
- // file as a dependency since the output of this CSS does not depend on
163
- // the source of any templates. Think Vue <style> blocks for example.
164
- root.walkAtRules('tailwind', (rule)=>{
165
- if (Object.keys(layerNodes).includes(rule.params)) {
166
- layerNodes[rule.params] = rule;
134
+ root.walkAtRules((rule)=>{
135
+ // Make sure this file contains Tailwind directives. If not, we can save
136
+ // a lot of work and bail early. Also we don't have to register our touch
137
+ // file as a dependency since the output of this CSS does not depend on
138
+ // the source of any templates. Think Vue <style> blocks for example.
139
+ if (rule.name === "tailwind") {
140
+ if (Object.keys(layerNodes).includes(rule.params)) {
141
+ layerNodes[rule.params] = rule;
142
+ }
167
143
  }
168
144
  });
169
- if (Object.values(layerNodes).every((n)=>n === null
170
- )) {
145
+ if (Object.values(layerNodes).every((n)=>n === null)) {
171
146
  return root;
172
147
  }
148
+ var _context_candidates;
173
149
  // ---
174
150
  // Find potential rules in changed files
175
151
  let candidates = new Set([
176
- '*'
152
+ ...(_context_candidates = context.candidates) !== null && _context_candidates !== void 0 ? _context_candidates : [],
153
+ _sharedState.NOT_ON_DEMAND
177
154
  ]);
178
155
  let seen = new Set();
179
- env.DEBUG && console.time('Reading changed files');
180
- for (let { content , extension } of context.changedContent){
181
- let transformer = getTransformer(context.tailwindConfig, extension);
182
- let extractor = getExtractor(context.tailwindConfig, extension);
183
- getClassCandidates(transformer(content), extractor, candidates, seen);
156
+ env.DEBUG && console.time("Reading changed files");
157
+ if (false) {
158
+ // TODO: Pass through or implement `extractor`
159
+ for (let candidate of require("@tailwindcss/oxide").parseCandidateStringsFromFiles(context.changedContent)){
160
+ candidates.add(candidate);
161
+ }
162
+ // for (let { file, content, extension } of context.changedContent) {
163
+ // let transformer = getTransformer(context.tailwindConfig, extension)
164
+ // let extractor = getExtractor(context, extension)
165
+ // getClassCandidatesOxide(file, transformer(content), extractor, candidates, seen)
166
+ // }
167
+ } else {
168
+ for (let { file , content , extension } of context.changedContent){
169
+ let transformer = getTransformer(context.tailwindConfig, extension);
170
+ let extractor = getExtractor(context, extension);
171
+ content = file ? _fs.default.readFileSync(file, "utf8") : content;
172
+ getClassCandidates(transformer(content), extractor, candidates, seen);
173
+ }
184
174
  }
175
+ env.DEBUG && console.timeEnd("Reading changed files");
185
176
  // ---
186
177
  // Generate the actual CSS
187
178
  let classCacheCount = context.classCache.size;
188
- env.DEBUG && console.time('Generate rules');
189
- let rules = (0, _generateRules).generateRules(candidates, context);
190
- env.DEBUG && console.timeEnd('Generate rules');
179
+ env.DEBUG && console.time("Generate rules");
180
+ env.DEBUG && console.time("Sorting candidates");
181
+ let sortedCandidates = false ? candidates : new Set([
182
+ ...candidates
183
+ ].sort((a, z)=>{
184
+ if (a === z) return 0;
185
+ if (a < z) return -1;
186
+ return 1;
187
+ }));
188
+ env.DEBUG && console.timeEnd("Sorting candidates");
189
+ (0, _generateRules.generateRules)(sortedCandidates, context);
190
+ env.DEBUG && console.timeEnd("Generate rules");
191
191
  // We only ever add to the classCache, so if it didn't grow, there is nothing new.
192
- env.DEBUG && console.time('Build stylesheet');
192
+ env.DEBUG && console.time("Build stylesheet");
193
193
  if (context.stylesheetCache === null || context.classCache.size !== classCacheCount) {
194
- for (let rule of rules){
195
- context.ruleCache.add(rule);
196
- }
197
194
  context.stylesheetCache = buildStylesheet([
198
195
  ...context.ruleCache
199
196
  ], context);
200
197
  }
201
- env.DEBUG && console.timeEnd('Build stylesheet');
202
- let { base: baseNodes , components: componentNodes , utilities: utilityNodes , variants: screenNodes , } = context.stylesheetCache;
198
+ env.DEBUG && console.timeEnd("Build stylesheet");
199
+ let { defaults: defaultNodes , base: baseNodes , components: componentNodes , utilities: utilityNodes , variants: screenNodes } = context.stylesheetCache;
203
200
  // ---
204
201
  // Replace any Tailwind directives with generated CSS
205
202
  if (layerNodes.base) {
206
- layerNodes.base.before((0, _cloneNodes).default([
207
- ...baseNodes
208
- ], layerNodes.base.source));
203
+ layerNodes.base.before((0, _cloneNodes.default)([
204
+ ...baseNodes,
205
+ ...defaultNodes
206
+ ], layerNodes.base.source, {
207
+ layer: "base"
208
+ }));
209
209
  layerNodes.base.remove();
210
210
  }
211
211
  if (layerNodes.components) {
212
- layerNodes.components.before((0, _cloneNodes).default([
212
+ layerNodes.components.before((0, _cloneNodes.default)([
213
213
  ...componentNodes
214
- ], layerNodes.components.source));
214
+ ], layerNodes.components.source, {
215
+ layer: "components"
216
+ }));
215
217
  layerNodes.components.remove();
216
218
  }
217
219
  if (layerNodes.utilities) {
218
- layerNodes.utilities.before((0, _cloneNodes).default([
220
+ layerNodes.utilities.before((0, _cloneNodes.default)([
219
221
  ...utilityNodes
220
- ], layerNodes.utilities.source));
222
+ ], layerNodes.utilities.source, {
223
+ layer: "utilities"
224
+ }));
221
225
  layerNodes.utilities.remove();
222
226
  }
227
+ // We do post-filtering to not alter the emitted order of the variants
228
+ const variantNodes = Array.from(screenNodes).filter((node)=>{
229
+ var _node_raws_tailwind;
230
+ const parentLayer = (_node_raws_tailwind = node.raws.tailwind) === null || _node_raws_tailwind === void 0 ? void 0 : _node_raws_tailwind.parentLayer;
231
+ if (parentLayer === "components") {
232
+ return layerNodes.components !== null;
233
+ }
234
+ if (parentLayer === "utilities") {
235
+ return layerNodes.utilities !== null;
236
+ }
237
+ return true;
238
+ });
223
239
  if (layerNodes.variants) {
224
- layerNodes.variants.before((0, _cloneNodes).default([
225
- ...screenNodes
226
- ], layerNodes.variants.source));
240
+ layerNodes.variants.before((0, _cloneNodes.default)(variantNodes, layerNodes.variants.source, {
241
+ layer: "variants"
242
+ }));
227
243
  layerNodes.variants.remove();
228
- } else {
229
- root.append((0, _cloneNodes).default([
230
- ...screenNodes
231
- ], root.source));
244
+ } else if (variantNodes.length > 0) {
245
+ root.append((0, _cloneNodes.default)(variantNodes, root.source, {
246
+ layer: "variants"
247
+ }));
248
+ }
249
+ // If we've got a utility layer and no utilities are generated there's likely something wrong
250
+ const hasUtilityVariants = variantNodes.some((node)=>{
251
+ var _node_raws_tailwind;
252
+ return ((_node_raws_tailwind = node.raws.tailwind) === null || _node_raws_tailwind === void 0 ? void 0 : _node_raws_tailwind.parentLayer) === "utilities";
253
+ });
254
+ if (layerNodes.utilities && utilityNodes.size === 0 && !hasUtilityVariants) {
255
+ _log.default.warn("content-problems", [
256
+ "No utility classes were detected in your source files. If this is unexpected, double-check the `content` option in your Tailwind CSS configuration.",
257
+ "https://tailwindcss.com/docs/content-configuration"
258
+ ]);
232
259
  }
233
260
  // ---
234
261
  if (env.DEBUG) {
235
- console.log('Potential classes: ', candidates.size);
236
- console.log('Active contexts: ', sharedState.contextSourcesMap.size);
262
+ console.log("Potential classes: ", candidates.size);
263
+ console.log("Active contexts: ", _sharedState.contextSourcesMap.size);
237
264
  }
238
265
  // Clear the cache for the changed files
239
266
  context.changedContent = [];
240
267
  // Cleanup any leftover @layer atrules
241
- root.walkAtRules('layer', (rule)=>{
268
+ root.walkAtRules("layer", (rule)=>{
242
269
  if (Object.keys(layerNodes).includes(rule.params)) {
243
270
  rule.remove();
244
271
  }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "findAtConfigPath", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return findAtConfigPath;
9
+ }
10
+ });
11
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
12
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ function findAtConfigPath(root, result) {
19
+ let configPath = null;
20
+ let relativeTo = null;
21
+ root.walkAtRules("config", (rule)=>{
22
+ var _rule_source;
23
+ var _rule_source_input_file, _ref;
24
+ relativeTo = (_ref = (_rule_source_input_file = (_rule_source = rule.source) === null || _rule_source === void 0 ? void 0 : _rule_source.input.file) !== null && _rule_source_input_file !== void 0 ? _rule_source_input_file : result.opts.from) !== null && _ref !== void 0 ? _ref : null;
25
+ if (relativeTo === null) {
26
+ throw rule.error("The `@config` directive cannot be used without setting `from` in your PostCSS config.");
27
+ }
28
+ if (configPath) {
29
+ throw rule.error("Only one `@config` directive is allowed per file.");
30
+ }
31
+ let matches = rule.params.match(/(['"])(.*?)\1/);
32
+ if (!matches) {
33
+ throw rule.error("A path is required when using the `@config` directive.");
34
+ }
35
+ let inputPath = matches[2];
36
+ if (_path.default.isAbsolute(inputPath)) {
37
+ throw rule.error("The `@config` directive cannot be used with an absolute path.");
38
+ }
39
+ configPath = _path.default.resolve(_path.default.dirname(relativeTo), inputPath);
40
+ if (!_fs.default.existsSync(configPath)) {
41
+ throw rule.error(`The config file at "${inputPath}" does not exist. Make sure the path is correct and the file exists.`);
42
+ }
43
+ rule.remove();
44
+ });
45
+ return configPath ? configPath : null;
46
+ }