tailwindcss 0.0.0-insiders.d77b9ce → 0.0.0-insiders.d86fd0b

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 (218) hide show
  1. package/README.md +7 -6
  2. package/lib/cli/build/deps.js +17 -9
  3. package/lib/cli/build/index.js +20 -10
  4. package/lib/cli/build/plugin.js +133 -72
  5. package/lib/cli/build/utils.js +18 -8
  6. package/lib/cli/build/watching.js +92 -23
  7. package/lib/cli/help/index.js +6 -4
  8. package/lib/cli/index.js +222 -10
  9. package/lib/cli/init/index.js +29 -12
  10. package/lib/cli-peer-dependencies.js +12 -4
  11. package/lib/cli.js +4 -226
  12. package/lib/corePluginList.js +12 -2
  13. package/lib/corePlugins.js +792 -144
  14. package/lib/css/preflight.css +28 -8
  15. package/lib/featureFlags.js +31 -18
  16. package/lib/index.js +1 -47
  17. package/lib/lib/cacheInvalidation.js +7 -5
  18. package/lib/lib/collapseAdjacentRules.js +5 -3
  19. package/lib/lib/collapseDuplicateDeclarations.js +12 -10
  20. package/lib/lib/content.js +73 -21
  21. package/lib/lib/defaultExtractor.js +59 -39
  22. package/lib/lib/detectNesting.js +12 -4
  23. package/lib/lib/evaluateTailwindFunctions.js +25 -21
  24. package/lib/lib/expandApplyAtRules.js +80 -47
  25. package/lib/lib/expandTailwindAtRules.js +66 -22
  26. package/lib/lib/findAtConfigPath.js +13 -11
  27. package/lib/lib/generateRules.js +308 -136
  28. package/lib/lib/getModuleDependencies.js +85 -37
  29. package/lib/lib/load-config.js +53 -0
  30. package/lib/lib/normalizeTailwindDirectives.js +6 -4
  31. package/lib/lib/offsets.js +165 -9
  32. package/lib/lib/partitionApplyAtRules.js +3 -1
  33. package/lib/lib/regex.js +22 -8
  34. package/lib/lib/remap-bitfield.js +89 -0
  35. package/lib/lib/resolveDefaultsAtRules.js +31 -25
  36. package/lib/lib/setupContextUtils.js +502 -183
  37. package/lib/lib/setupTrackingContext.js +50 -26
  38. package/lib/lib/sharedState.js +38 -9
  39. package/lib/lib/substituteScreenAtRules.js +5 -3
  40. package/lib/oxide/cli/build/deps.js +89 -0
  41. package/lib/oxide/cli/build/index.js +53 -0
  42. package/lib/oxide/cli/build/plugin.js +375 -0
  43. package/lib/oxide/cli/build/utils.js +87 -0
  44. package/lib/oxide/cli/build/watching.js +179 -0
  45. package/lib/oxide/cli/help/index.js +72 -0
  46. package/lib/oxide/cli/index.js +214 -0
  47. package/lib/oxide/cli/init/index.js +52 -0
  48. package/lib/oxide/cli.js +5 -0
  49. package/lib/oxide/postcss-plugin.js +2 -0
  50. package/lib/plugin.js +98 -0
  51. package/lib/postcss-plugins/nesting/index.js +3 -1
  52. package/lib/postcss-plugins/nesting/plugin.js +10 -8
  53. package/lib/processTailwindFeatures.js +16 -14
  54. package/lib/public/colors.js +50 -26
  55. package/lib/public/create-plugin.js +5 -3
  56. package/lib/public/default-config.js +6 -4
  57. package/lib/public/default-theme.js +6 -4
  58. package/lib/public/load-config.js +12 -0
  59. package/lib/public/resolve-config.js +6 -4
  60. package/lib/util/applyImportantSelector.js +36 -0
  61. package/lib/util/bigSign.js +3 -1
  62. package/lib/util/buildMediaQuery.js +9 -4
  63. package/lib/util/cloneDeep.js +3 -1
  64. package/lib/util/cloneNodes.js +36 -14
  65. package/lib/util/color.js +31 -13
  66. package/lib/util/colorNames.js +752 -0
  67. package/lib/util/configurePlugins.js +4 -2
  68. package/lib/util/createPlugin.js +3 -1
  69. package/lib/util/createUtilityPlugin.js +7 -5
  70. package/lib/util/dataTypes.js +210 -34
  71. package/lib/util/defaults.js +9 -7
  72. package/lib/util/escapeClassName.js +10 -8
  73. package/lib/util/escapeCommas.js +3 -1
  74. package/lib/util/flattenColorPalette.js +3 -1
  75. package/lib/util/formatVariantSelector.js +147 -162
  76. package/lib/util/getAllConfigs.js +8 -6
  77. package/lib/util/hashConfig.js +6 -4
  78. package/lib/util/isKeyframeRule.js +3 -1
  79. package/lib/util/isPlainObject.js +4 -2
  80. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +5 -3
  81. package/lib/util/log.js +8 -4
  82. package/lib/util/nameClass.js +15 -6
  83. package/lib/util/negateValue.js +4 -2
  84. package/lib/util/normalizeConfig.js +44 -29
  85. package/lib/util/normalizeScreens.js +108 -3
  86. package/lib/util/parseAnimationValue.js +4 -2
  87. package/lib/util/parseBoxShadowValue.js +6 -2
  88. package/lib/util/parseDependency.js +6 -4
  89. package/lib/util/parseGlob.js +6 -4
  90. package/lib/util/parseObjectStyles.js +10 -8
  91. package/lib/util/pluginUtils.js +136 -42
  92. package/lib/util/prefixSelector.js +27 -11
  93. package/lib/util/pseudoElements.js +212 -0
  94. package/lib/util/removeAlphaVariables.js +3 -1
  95. package/lib/util/resolveConfig.js +22 -25
  96. package/lib/util/resolveConfigPath.js +26 -10
  97. package/lib/util/responsive.js +6 -4
  98. package/lib/util/splitAtTopLevelOnly.js +10 -2
  99. package/lib/util/tap.js +3 -1
  100. package/lib/util/toColorValue.js +3 -1
  101. package/lib/util/toPath.js +3 -1
  102. package/lib/util/transformThemeValue.js +7 -5
  103. package/lib/util/validateConfig.js +17 -4
  104. package/lib/util/validateFormalSyntax.js +26 -0
  105. package/lib/util/withAlphaVariable.js +6 -2
  106. package/lib/value-parser/LICENSE +22 -0
  107. package/lib/value-parser/README.md +3 -0
  108. package/lib/value-parser/index.d.js +2 -0
  109. package/lib/value-parser/index.js +22 -0
  110. package/lib/value-parser/parse.js +259 -0
  111. package/lib/value-parser/stringify.js +38 -0
  112. package/lib/value-parser/unit.js +86 -0
  113. package/lib/value-parser/walk.js +16 -0
  114. package/loadConfig.d.ts +4 -0
  115. package/loadConfig.js +2 -0
  116. package/nesting/index.d.ts +4 -0
  117. package/package.json +49 -41
  118. package/peers/index.js +63334 -46265
  119. package/plugin.d.ts +3 -3
  120. package/resolveConfig.d.ts +30 -2
  121. package/scripts/generate-types.js +1 -2
  122. package/scripts/release-channel.js +18 -0
  123. package/scripts/release-notes.js +21 -0
  124. package/scripts/swap-engines.js +40 -0
  125. package/src/cli/build/index.js +13 -9
  126. package/src/cli/build/plugin.js +114 -42
  127. package/src/cli/build/watching.js +109 -14
  128. package/src/cli/index.js +216 -3
  129. package/src/cli/init/index.js +37 -8
  130. package/src/cli.js +4 -220
  131. package/src/corePluginList.js +1 -1
  132. package/src/corePlugins.js +591 -68
  133. package/src/css/preflight.css +28 -8
  134. package/src/featureFlags.js +8 -5
  135. package/src/index.js +1 -47
  136. package/src/lib/content.js +63 -13
  137. package/src/lib/defaultExtractor.js +41 -19
  138. package/src/lib/detectNesting.js +9 -1
  139. package/src/lib/evaluateTailwindFunctions.js +4 -1
  140. package/src/lib/expandApplyAtRules.js +50 -16
  141. package/src/lib/expandTailwindAtRules.js +54 -8
  142. package/src/lib/findAtConfigPath.js +4 -6
  143. package/src/lib/generateRules.js +333 -109
  144. package/src/lib/getModuleDependencies.js +70 -30
  145. package/src/lib/load-config.ts +39 -0
  146. package/src/lib/offsets.js +198 -5
  147. package/src/lib/remap-bitfield.js +82 -0
  148. package/src/lib/resolveDefaultsAtRules.js +5 -1
  149. package/src/lib/setupContextUtils.js +451 -108
  150. package/src/lib/setupTrackingContext.js +37 -14
  151. package/src/lib/sharedState.js +17 -4
  152. package/src/oxide/cli/build/deps.ts +91 -0
  153. package/src/oxide/cli/build/index.ts +47 -0
  154. package/src/oxide/cli/build/plugin.ts +442 -0
  155. package/src/oxide/cli/build/utils.ts +74 -0
  156. package/src/oxide/cli/build/watching.ts +225 -0
  157. package/src/oxide/cli/help/index.ts +69 -0
  158. package/src/oxide/cli/index.ts +204 -0
  159. package/src/oxide/cli/init/index.ts +59 -0
  160. package/src/oxide/cli.ts +1 -0
  161. package/src/oxide/postcss-plugin.ts +1 -0
  162. package/src/plugin.js +107 -0
  163. package/src/processTailwindFeatures.js +3 -2
  164. package/src/public/colors.js +22 -0
  165. package/src/public/default-config.js +1 -1
  166. package/src/public/default-theme.js +2 -2
  167. package/src/public/load-config.js +2 -0
  168. package/src/util/applyImportantSelector.js +27 -0
  169. package/src/util/buildMediaQuery.js +5 -3
  170. package/src/util/cloneNodes.js +35 -14
  171. package/src/util/color.js +19 -4
  172. package/src/util/colorNames.js +150 -0
  173. package/src/util/dataTypes.js +176 -22
  174. package/src/util/formatVariantSelector.js +170 -165
  175. package/src/util/getAllConfigs.js +2 -2
  176. package/src/util/isPlainObject.js +1 -1
  177. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  178. package/src/util/nameClass.js +4 -0
  179. package/src/util/negateValue.js +1 -1
  180. package/src/util/normalizeConfig.js +20 -1
  181. package/src/util/normalizeScreens.js +99 -4
  182. package/src/util/pluginUtils.js +126 -23
  183. package/src/util/prefixSelector.js +29 -10
  184. package/src/util/pseudoElements.js +171 -0
  185. package/src/util/resolveConfig.js +3 -9
  186. package/src/util/resolveConfigPath.js +12 -1
  187. package/src/util/splitAtTopLevelOnly.js +8 -1
  188. package/src/util/validateConfig.js +13 -0
  189. package/src/util/validateFormalSyntax.js +34 -0
  190. package/src/value-parser/LICENSE +22 -0
  191. package/src/value-parser/README.md +3 -0
  192. package/src/value-parser/index.d.ts +177 -0
  193. package/src/value-parser/index.js +28 -0
  194. package/src/value-parser/parse.js +303 -0
  195. package/src/value-parser/stringify.js +41 -0
  196. package/src/value-parser/unit.js +118 -0
  197. package/src/value-parser/walk.js +18 -0
  198. package/stubs/.gitignore +1 -0
  199. package/stubs/.prettierrc.json +6 -0
  200. package/stubs/{defaultConfig.stub.js → config.full.js} +281 -179
  201. package/stubs/{simpleConfig.stub.js → config.simple.js} +0 -1
  202. package/stubs/postcss.config.js +6 -0
  203. package/stubs/tailwind.config.cjs +2 -0
  204. package/stubs/tailwind.config.js +2 -0
  205. package/stubs/tailwind.config.ts +3 -0
  206. package/types/config.d.ts +59 -23
  207. package/types/generated/colors.d.ts +22 -0
  208. package/types/generated/corePluginList.d.ts +1 -1
  209. package/types/generated/default-theme.d.ts +152 -86
  210. package/types/index.d.ts +7 -3
  211. package/CHANGELOG.md +0 -2261
  212. package/lib/cli/shared.js +0 -12
  213. package/lib/constants.js +0 -44
  214. package/scripts/install-integrations.js +0 -27
  215. package/scripts/rebuildFixtures.js +0 -68
  216. package/src/cli/shared.js +0 -5
  217. package/src/constants.js +0 -17
  218. /package/stubs/{defaultPostCssConfig.stub.js → postcss.config.cjs} +0 -0
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  <p align="center">
2
- <a href="https://tailwindcss.com/#gh-light-mode-only" target="_blank">
3
- <img src="./.github/logo-light.svg" alt="Tailwind CSS" width="350" height="70">
4
- </a>
5
- <a href="https://tailwindcss.com/#gh-dark-mode-only" target="_blank">
6
- <img src="./.github/logo-dark.svg" alt="Tailwind CSS" width="350" height="70">
2
+ <a href="https://tailwindcss.com" target="_blank">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/tailwindlabs/tailwindcss/HEAD/.github/logo-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/tailwindlabs/tailwindcss/HEAD/.github/logo-light.svg">
6
+ <img alt="Tailwind CSS" src="https://raw.githubusercontent.com/tailwindlabs/tailwindcss/HEAD/.github/logo-light.svg" width="350" height="70" style="max-width: 100%;">
7
+ </picture>
7
8
  </a>
8
9
  </p>
9
10
 
@@ -13,7 +14,7 @@
13
14
 
14
15
 
15
16
  <p align="center">
16
- <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/workflow/status/tailwindlabs/tailwindcss/Node.js%20CI" alt="Build Status"></a>
17
+ <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci-stable.yml?branch=master" alt="Build Status"></a>
17
18
  <a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
18
19
  <a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
19
20
  <a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
@@ -10,25 +10,33 @@ function _export(target, all) {
10
10
  });
11
11
  }
12
12
  _export(exports, {
13
- loadPostcss: ()=>loadPostcss,
14
- loadPostcssImport: ()=>loadPostcssImport,
15
- loadCssNano: ()=>loadCssNano,
16
- loadAutoprefixer: ()=>loadAutoprefixer
13
+ loadPostcss: function() {
14
+ return loadPostcss;
15
+ },
16
+ loadPostcssImport: function() {
17
+ return loadPostcssImport;
18
+ },
19
+ loadCssNano: function() {
20
+ return loadCssNano;
21
+ },
22
+ loadAutoprefixer: function() {
23
+ return loadAutoprefixer;
24
+ }
17
25
  });
18
- const _indexJs = require("../../../peers/index.js");
26
+ const _index = require("../../../peers/index.js");
19
27
  function loadPostcss() {
20
28
  // Try to load a local `postcss` version first
21
29
  try {
22
30
  return require("postcss");
23
31
  } catch {}
24
- return (0, _indexJs.lazyPostcss)();
32
+ return (0, _index.lazyPostcss)();
25
33
  }
26
34
  function loadPostcssImport() {
27
35
  // Try to load a local `postcss-import` version first
28
36
  try {
29
37
  return require("postcss-import");
30
38
  } catch {}
31
- return (0, _indexJs.lazyPostcssImport)();
39
+ return (0, _index.lazyPostcssImport)();
32
40
  }
33
41
  function loadCssNano() {
34
42
  let options = {
@@ -43,12 +51,12 @@ function loadCssNano() {
43
51
  try {
44
52
  return require("cssnano");
45
53
  } catch {}
46
- return (0, _indexJs.lazyCssnano)()(options);
54
+ return (0, _index.lazyCssnano)()(options);
47
55
  }
48
56
  function loadAutoprefixer() {
49
57
  // Try to load a local `autoprefixer` version first
50
58
  try {
51
59
  return require("autoprefixer");
52
60
  } catch {}
53
- return (0, _indexJs.lazyAutoprefixer)();
61
+ return (0, _index.lazyAutoprefixer)();
54
62
  }
@@ -5,17 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  Object.defineProperty(exports, "build", {
7
7
  enumerable: true,
8
- get: ()=>build
8
+ get: function() {
9
+ return build;
10
+ }
9
11
  });
10
- const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
11
- const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
12
- const _pluginJs = require("./plugin.js");
13
- function _interopRequireDefault(obj) {
12
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
13
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
+ const _resolveConfigPath = require("../../util/resolveConfigPath.js");
15
+ const _plugin = require("./plugin.js");
16
+ function _interop_require_default(obj) {
14
17
  return obj && obj.__esModule ? obj : {
15
18
  default: obj
16
19
  };
17
20
  }
18
- async function build(args, configs) {
21
+ async function build(args) {
19
22
  let input = args["--input"];
20
23
  let shouldWatch = args["--watch"];
21
24
  // TODO: Deprecate this in future versions
@@ -32,13 +35,20 @@ async function build(args, configs) {
32
35
  process.exit(9);
33
36
  }
34
37
  // TODO: Reference the @config path here if exists
35
- let configPath = args["--config"] ? args["--config"] : ((defaultPath)=>_fs.default.existsSync(defaultPath) ? defaultPath : null)(_path.default.resolve(`./${configs.tailwind}`));
36
- let processor = await (0, _pluginJs.createProcessor)(args, configPath);
38
+ let configPath = args["--config"] ? args["--config"] : (0, _resolveConfigPath.resolveDefaultConfigPath)();
39
+ let processor = await (0, _plugin.createProcessor)(args, configPath);
37
40
  if (shouldWatch) {
38
- /* Abort the watcher if stdin is closed to avoid zombie processes */ process.stdin.on("end", ()=>process.exit(0));
41
+ // Abort the watcher if stdin is closed to avoid zombie processes
42
+ // You can disable this behavior with --watch=always
43
+ if (args["--watch"] !== "always") {
44
+ process.stdin.on("end", ()=>process.exit(0));
45
+ }
39
46
  process.stdin.resume();
40
47
  await processor.watch();
41
48
  } else {
42
- await processor.build();
49
+ await processor.build().catch((e)=>{
50
+ console.error(e);
51
+ process.exit(1);
52
+ });
43
53
  }
44
54
  }
@@ -5,27 +5,31 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  Object.defineProperty(exports, "createProcessor", {
7
7
  enumerable: true,
8
- get: ()=>createProcessor
8
+ get: function() {
9
+ return createProcessor;
10
+ }
9
11
  });
10
- const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
11
- const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
12
- const _postcssLoadConfig = /*#__PURE__*/ _interopRequireDefault(require("postcss-load-config"));
12
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
13
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
14
+ const _postcssloadconfig = /*#__PURE__*/ _interop_require_default(require("postcss-load-config"));
13
15
  const _lilconfig = require("lilconfig");
14
- const _plugins = /*#__PURE__*/ _interopRequireDefault(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
16
+ const _plugins = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/plugins" // Little bit scary, looking at private/internal API
15
17
  ));
16
- const _options = /*#__PURE__*/ _interopRequireDefault(require("postcss-load-config/src/options" // Little bit scary, looking at private/internal API
18
+ const _options = /*#__PURE__*/ _interop_require_default(require("postcss-load-config/src/options" // Little bit scary, looking at private/internal API
17
19
  ));
18
- const _processTailwindFeatures = /*#__PURE__*/ _interopRequireDefault(require("../../processTailwindFeatures"));
20
+ const _processTailwindFeatures = /*#__PURE__*/ _interop_require_default(require("../../processTailwindFeatures"));
19
21
  const _deps = require("./deps");
20
22
  const _utils = require("./utils");
21
- const _shared = require("../shared");
22
- const _resolveConfigJs = /*#__PURE__*/ _interopRequireDefault(require("../../../resolveConfig.js"));
23
- const _getModuleDependenciesJs = /*#__PURE__*/ _interopRequireDefault(require("../../lib/getModuleDependencies.js"));
24
- const _contentJs = require("../../lib/content.js");
25
- const _watchingJs = require("./watching.js");
26
- const _fastGlob = /*#__PURE__*/ _interopRequireDefault(require("fast-glob"));
27
- const _findAtConfigPathJs = require("../../lib/findAtConfigPath.js");
28
- function _interopRequireDefault(obj) {
23
+ const _sharedState = require("../../lib/sharedState");
24
+ const _resolveConfig = /*#__PURE__*/ _interop_require_default(require("../../../resolveConfig.js"));
25
+ const _content = require("../../lib/content.js");
26
+ const _watching = require("./watching.js");
27
+ const _fastglob = /*#__PURE__*/ _interop_require_default(require("fast-glob"));
28
+ const _findAtConfigPath = require("../../lib/findAtConfigPath.js");
29
+ const _log = /*#__PURE__*/ _interop_require_default(require("../../util/log"));
30
+ const _loadconfig = require("../../lib/load-config");
31
+ const _getModuleDependencies = /*#__PURE__*/ _interop_require_default(require("../../lib/getModuleDependencies"));
32
+ function _interop_require_default(obj) {
29
33
  return obj && obj.__esModule ? obj : {
30
34
  default: obj
31
35
  };
@@ -53,7 +57,7 @@ function _interopRequireDefault(obj) {
53
57
  plugins: (0, _plugins.default)(config, file),
54
58
  options: (0, _options.default)(config, file)
55
59
  };
56
- })() : await (0, _postcssLoadConfig.default)();
60
+ })() : await (0, _postcssloadconfig.default)();
57
61
  let configPlugins = config.plugins;
58
62
  let configPluginTailwindIdx = configPlugins.findIndex((plugin)=>{
59
63
  if (typeof plugin === "function" && plugin.name === "tailwindcss") {
@@ -98,22 +102,22 @@ function loadBuiltinPostcssPlugins() {
98
102
  rule.remove();
99
103
  }
100
104
  });
101
- },
105
+ }
102
106
  ],
103
107
  [],
104
- {},
108
+ {}
105
109
  ];
106
110
  }
107
111
  let state = {
108
112
  /** @type {any} */ context: null,
109
113
  /** @type {ReturnType<typeof createWatcher> | null} */ watcher: null,
110
114
  /** @type {{content: string, extension: string}[]} */ changedContent: [],
111
- configDependencies: new Set(),
115
+ /** @type {ReturnType<typeof load> | null} */ configBag: null,
112
116
  contextDependencies: new Set(),
113
117
  /** @type {import('../../lib/content.js').ContentPath[]} */ contentPaths: [],
114
118
  refreshContentPaths () {
115
- var ref;
116
- this.contentPaths = (0, _contentJs.parseCandidateFiles)(this.context, (ref = this.context) === null || ref === void 0 ? void 0 : ref.tailwindConfig);
119
+ var _this_context;
120
+ this.contentPaths = (0, _content.parseCandidateFiles)(this.context, (_this_context = this.context) === null || _this_context === void 0 ? void 0 : _this_context.tailwindConfig);
117
121
  },
118
122
  get config () {
119
123
  return this.context.tailwindConfig;
@@ -124,102 +128,126 @@ let state = {
124
128
  dynamic: this.contentPaths.filter((contentPath)=>contentPath.glob !== undefined).map((contentPath)=>contentPath.pattern)
125
129
  };
126
130
  },
127
- loadConfig (configPath) {
131
+ loadConfig (configPath, content) {
128
132
  if (this.watcher && configPath) {
129
- this.refreshConfigDependencies(configPath);
133
+ this.refreshConfigDependencies();
130
134
  }
131
- let config = configPath ? require(configPath) : {};
135
+ let config = (0, _loadconfig.loadConfig)(configPath);
136
+ let dependencies = (0, _getModuleDependencies.default)(configPath);
137
+ this.configBag = {
138
+ config,
139
+ dependencies,
140
+ dispose () {
141
+ for (let file of dependencies){
142
+ delete require.cache[require.resolve(file)];
143
+ }
144
+ }
145
+ };
132
146
  // @ts-ignore
133
- config = (0, _resolveConfigJs.default)(config, {
147
+ this.configBag.config = (0, _resolveConfig.default)(this.configBag.config, {
134
148
  content: {
135
149
  files: []
136
150
  }
137
151
  });
138
- return config;
139
- },
140
- refreshConfigDependencies (configPath) {
141
- _shared.env.DEBUG && console.time("Module dependencies");
142
- for (let file of this.configDependencies){
143
- delete require.cache[require.resolve(file)];
152
+ // Override content files if `--content` has been passed explicitly
153
+ if ((content === null || content === void 0 ? void 0 : content.length) > 0) {
154
+ this.configBag.config.content.files = content;
144
155
  }
145
- if (configPath) {
146
- let deps = (0, _getModuleDependenciesJs.default)(configPath).map(({ file })=>file);
147
- for (let dependency of deps){
148
- this.configDependencies.add(dependency);
149
- }
150
- }
151
- _shared.env.DEBUG && console.timeEnd("Module dependencies");
156
+ return this.configBag.config;
157
+ },
158
+ refreshConfigDependencies () {
159
+ var _this_configBag;
160
+ _sharedState.env.DEBUG && console.time("Module dependencies");
161
+ (_this_configBag = this.configBag) === null || _this_configBag === void 0 ? void 0 : _this_configBag.dispose();
162
+ _sharedState.env.DEBUG && console.timeEnd("Module dependencies");
152
163
  },
153
164
  readContentPaths () {
154
165
  let content = [];
155
166
  // Resolve globs from the content config
156
167
  // TODO: When we make the postcss plugin async-capable this can become async
157
- let files = _fastGlob.default.sync(this.contentPatterns.all);
168
+ let files = _fastglob.default.sync(this.contentPatterns.all);
158
169
  for (let file of files){
159
- content.push({
160
- content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
161
- extension: _path.default.extname(file).slice(1)
162
- });
170
+ if (false) {
171
+ content.push({
172
+ file,
173
+ extension: _path.default.extname(file).slice(1)
174
+ });
175
+ } else {
176
+ content.push({
177
+ content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
178
+ extension: _path.default.extname(file).slice(1)
179
+ });
180
+ }
163
181
  }
164
182
  // Resolve raw content in the tailwind config
165
183
  let rawContent = this.config.content.files.filter((file)=>{
166
184
  return file !== null && typeof file === "object";
167
185
  });
168
- for (let { raw: content1 , extension ="html" } of rawContent){
169
- content1.push({
170
- content: content1,
186
+ for (let { raw: htmlContent , extension ="html" } of rawContent){
187
+ content.push({
188
+ content: htmlContent,
171
189
  extension
172
190
  });
173
191
  }
174
192
  return content;
175
193
  },
176
- getContext ({ createContext , cliConfigPath , root , result }) {
194
+ getContext ({ createContext , cliConfigPath , root , result , content }) {
195
+ _sharedState.env.DEBUG && console.time("Searching for config");
196
+ var _findAtConfigPath1;
197
+ let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
198
+ _sharedState.env.DEBUG && console.timeEnd("Searching for config");
177
199
  if (this.context) {
178
200
  this.context.changedContent = this.changedContent.splice(0);
179
201
  return this.context;
180
202
  }
181
- _shared.env.DEBUG && console.time("Searching for config");
182
- var ref;
183
- let configPath = (ref = (0, _findAtConfigPathJs.findAtConfigPath)(root, result)) !== null && ref !== void 0 ? ref : cliConfigPath;
184
- _shared.env.DEBUG && console.timeEnd("Searching for config");
185
- _shared.env.DEBUG && console.time("Loading config");
186
- let config = this.loadConfig(configPath);
187
- _shared.env.DEBUG && console.timeEnd("Loading config");
188
- _shared.env.DEBUG && console.time("Creating context");
203
+ _sharedState.env.DEBUG && console.time("Loading config");
204
+ let config = this.loadConfig(configPath, content);
205
+ _sharedState.env.DEBUG && console.timeEnd("Loading config");
206
+ _sharedState.env.DEBUG && console.time("Creating context");
189
207
  this.context = createContext(config, []);
190
208
  Object.assign(this.context, {
191
209
  userConfigPath: configPath
192
210
  });
193
- _shared.env.DEBUG && console.timeEnd("Creating context");
194
- _shared.env.DEBUG && console.time("Resolving content paths");
211
+ _sharedState.env.DEBUG && console.timeEnd("Creating context");
212
+ _sharedState.env.DEBUG && console.time("Resolving content paths");
195
213
  this.refreshContentPaths();
196
- _shared.env.DEBUG && console.timeEnd("Resolving content paths");
214
+ _sharedState.env.DEBUG && console.timeEnd("Resolving content paths");
197
215
  if (this.watcher) {
198
- _shared.env.DEBUG && console.time("Watch new files");
216
+ _sharedState.env.DEBUG && console.time("Watch new files");
199
217
  this.watcher.refreshWatchedFiles();
200
- _shared.env.DEBUG && console.timeEnd("Watch new files");
218
+ _sharedState.env.DEBUG && console.timeEnd("Watch new files");
201
219
  }
202
- _shared.env.DEBUG && console.time("Reading content files");
203
220
  for (let file of this.readContentPaths()){
204
221
  this.context.changedContent.push(file);
205
222
  }
206
- _shared.env.DEBUG && console.timeEnd("Reading content files");
207
223
  return this.context;
208
224
  }
209
225
  };
210
226
  async function createProcessor(args, cliConfigPath) {
227
+ var _args_content;
211
228
  let postcss = (0, _deps.loadPostcss)();
212
229
  let input = args["--input"];
213
230
  let output = args["--output"];
214
231
  let includePostCss = args["--postcss"];
215
232
  let customPostCssPath = typeof args["--postcss"] === "string" ? args["--postcss"] : undefined;
216
233
  let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : loadBuiltinPostcssPlugins();
234
+ if (args["--purge"]) {
235
+ _log.default.warn("purge-flag-deprecated", [
236
+ "The `--purge` flag has been deprecated.",
237
+ "Please use `--content` instead."
238
+ ]);
239
+ if (!args["--content"]) {
240
+ args["--content"] = args["--purge"];
241
+ }
242
+ }
243
+ var _args_content_split;
244
+ let content = (_args_content_split = (_args_content = args["--content"]) === null || _args_content === void 0 ? void 0 : _args_content.split(/(?<!{[^}]+),/)) !== null && _args_content_split !== void 0 ? _args_content_split : [];
217
245
  let tailwindPlugin = ()=>{
218
246
  return {
219
247
  postcssPlugin: "tailwindcss",
220
- Once (root, { result }) {
221
- _shared.env.DEBUG && console.time("Compiling CSS");
222
- (0, _processTailwindFeatures.default)(({ createContext })=>{
248
+ async Once (root, { result }) {
249
+ _sharedState.env.DEBUG && console.time("Compiling CSS");
250
+ await (0, _processTailwindFeatures.default)(({ createContext })=>{
223
251
  console.error();
224
252
  console.error("Rebuilding...");
225
253
  return ()=>{
@@ -227,11 +255,12 @@ async function createProcessor(args, cliConfigPath) {
227
255
  createContext,
228
256
  cliConfigPath,
229
257
  root,
230
- result
258
+ result,
259
+ content
231
260
  });
232
261
  };
233
262
  })(root, result);
234
- _shared.env.DEBUG && console.timeEnd("Compiling CSS");
263
+ _sharedState.env.DEBUG && console.timeEnd("Compiling CSS");
235
264
  }
236
265
  };
237
266
  };
@@ -242,7 +271,7 @@ async function createProcessor(args, cliConfigPath) {
242
271
  !args["--minify"] && _utils.formatNodes,
243
272
  ...afterPlugins,
244
273
  !args["--no-autoprefixer"] && (0, _deps.loadAutoprefixer)(),
245
- args["--minify"] && (0, _deps.loadCssNano)(),
274
+ args["--minify"] && (0, _deps.loadCssNano)()
246
275
  ].filter(Boolean);
247
276
  /** @type {import('postcss').Processor} */ // @ts-ignore
248
277
  let processor = postcss(plugins);
@@ -265,18 +294,49 @@ async function createProcessor(args, cliConfigPath) {
265
294
  from: input,
266
295
  to: output
267
296
  })).then((result)=>{
297
+ if (!state.watcher) {
298
+ return result;
299
+ }
300
+ _sharedState.env.DEBUG && console.time("Recording PostCSS dependencies");
301
+ for (let message of result.messages){
302
+ if (message.type === "dependency") {
303
+ state.contextDependencies.add(message.file);
304
+ }
305
+ }
306
+ _sharedState.env.DEBUG && console.timeEnd("Recording PostCSS dependencies");
307
+ // TODO: This needs to be in a different spot
308
+ _sharedState.env.DEBUG && console.time("Watch new files");
309
+ state.watcher.refreshWatchedFiles();
310
+ _sharedState.env.DEBUG && console.timeEnd("Watch new files");
311
+ return result;
312
+ }).then((result)=>{
268
313
  if (!output) {
269
314
  process.stdout.write(result.css);
270
315
  return;
271
316
  }
272
317
  return Promise.all([
273
- (0, _utils.outputFile)(output, result.css),
274
- result.map && (0, _utils.outputFile)(output + ".map", result.map.toString()),
318
+ (0, _utils.outputFile)(result.opts.to, result.css),
319
+ result.map && (0, _utils.outputFile)(result.opts.to + ".map", result.map.toString())
275
320
  ]);
276
321
  }).then(()=>{
277
322
  let end = process.hrtime.bigint();
278
323
  console.error();
279
324
  console.error("Done in", (end - start) / BigInt(1e6) + "ms.");
325
+ }).then(()=>{}, (err)=>{
326
+ // TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
327
+ // that were collected before the error occurred
328
+ // The result is not stored on the error so we have to store it externally
329
+ // and pull the messages off of it here somehow
330
+ // This results in a less than ideal DX because the watcher will not pick up
331
+ // changes to imported CSS if one of them caused an error during the initial build
332
+ // If you fix it and then save the main CSS file so there's no error
333
+ // The watcher will start watching the imported CSS files and will be
334
+ // resilient to future errors.
335
+ if (state.watcher) {
336
+ console.error(err);
337
+ } else {
338
+ return Promise.reject(err);
339
+ }
280
340
  });
281
341
  }
282
342
  /**
@@ -293,13 +353,14 @@ async function createProcessor(args, cliConfigPath) {
293
353
  return {
294
354
  build,
295
355
  watch: async ()=>{
296
- state.watcher = (0, _watchingJs.createWatcher)(args, {
356
+ state.watcher = (0, _watching.createWatcher)(args, {
297
357
  state,
298
358
  /**
299
359
  * @param {{file: string, content(): Promise<string>, extension: string}[]} changes
300
360
  */ async rebuild (changes) {
301
361
  let needsNewContext = changes.some((change)=>{
302
- return state.configDependencies.has(change.file) || state.contextDependencies.has(change.file);
362
+ var _state_configBag;
363
+ return ((_state_configBag = state.configBag) === null || _state_configBag === void 0 ? void 0 : _state_configBag.dependencies.has(change.file)) || state.contextDependencies.has(change.file);
303
364
  });
304
365
  if (needsNewContext) {
305
366
  state.context = null;
@@ -10,15 +10,25 @@ function _export(target, all) {
10
10
  });
11
11
  }
12
12
  _export(exports, {
13
- indentRecursive: ()=>indentRecursive,
14
- formatNodes: ()=>formatNodes,
15
- readFileWithRetries: ()=>readFileWithRetries,
16
- drainStdin: ()=>drainStdin,
17
- outputFile: ()=>outputFile
13
+ indentRecursive: function() {
14
+ return indentRecursive;
15
+ },
16
+ formatNodes: function() {
17
+ return formatNodes;
18
+ },
19
+ readFileWithRetries: function() {
20
+ return readFileWithRetries;
21
+ },
22
+ drainStdin: function() {
23
+ return drainStdin;
24
+ },
25
+ outputFile: function() {
26
+ return outputFile;
27
+ }
18
28
  });
19
- const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
20
- const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
21
- function _interopRequireDefault(obj) {
29
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
30
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
31
+ function _interop_require_default(obj) {
22
32
  return obj && obj.__esModule ? obj : {
23
33
  default: obj
24
34
  };