tailwindcss 0.0.0-insiders.26cab53 → 0.0.0-insiders.2702cfc

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 (201) hide show
  1. package/README.md +10 -10
  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 +125 -69
  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 +1 -227
  12. package/lib/corePluginList.js +12 -2
  13. package/lib/corePlugins.js +808 -151
  14. package/lib/css/preflight.css +30 -9
  15. package/lib/featureFlags.js +27 -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 +106 -21
  21. package/lib/lib/defaultExtractor.js +82 -40
  22. package/lib/lib/evaluateTailwindFunctions.js +25 -21
  23. package/lib/lib/expandApplyAtRules.js +93 -47
  24. package/lib/lib/expandTailwindAtRules.js +56 -24
  25. package/lib/lib/findAtConfigPath.js +13 -11
  26. package/lib/lib/generateRules.js +312 -139
  27. package/lib/lib/getModuleDependencies.js +85 -37
  28. package/lib/lib/load-config.js +61 -0
  29. package/lib/lib/normalizeTailwindDirectives.js +6 -4
  30. package/lib/lib/offsets.js +151 -7
  31. package/lib/lib/partitionApplyAtRules.js +3 -1
  32. package/lib/lib/regex.js +22 -8
  33. package/lib/lib/remap-bitfield.js +89 -0
  34. package/lib/lib/resolveDefaultsAtRules.js +42 -38
  35. package/lib/lib/setupContextUtils.js +500 -189
  36. package/lib/lib/setupTrackingContext.js +50 -26
  37. package/lib/lib/sharedState.js +29 -8
  38. package/lib/lib/substituteScreenAtRules.js +5 -3
  39. package/lib/plugin.js +48 -0
  40. package/lib/postcss-plugins/nesting/index.js +3 -1
  41. package/lib/postcss-plugins/nesting/plugin.js +10 -8
  42. package/lib/processTailwindFeatures.js +15 -15
  43. package/lib/public/colors.js +50 -26
  44. package/lib/public/create-plugin.js +5 -3
  45. package/lib/public/default-config.js +6 -4
  46. package/lib/public/default-theme.js +6 -4
  47. package/lib/public/load-config.js +12 -0
  48. package/lib/public/resolve-config.js +6 -4
  49. package/lib/util/applyImportantSelector.js +38 -0
  50. package/lib/util/bigSign.js +3 -1
  51. package/lib/util/buildMediaQuery.js +9 -4
  52. package/lib/util/cloneDeep.js +3 -1
  53. package/lib/util/cloneNodes.js +36 -14
  54. package/lib/util/color.js +31 -13
  55. package/lib/util/colorNames.js +752 -0
  56. package/lib/util/configurePlugins.js +4 -2
  57. package/lib/util/createPlugin.js +3 -1
  58. package/lib/util/createUtilityPlugin.js +7 -5
  59. package/lib/util/dataTypes.js +240 -35
  60. package/lib/util/defaults.js +9 -7
  61. package/lib/util/escapeClassName.js +10 -8
  62. package/lib/util/escapeCommas.js +3 -1
  63. package/lib/util/flattenColorPalette.js +3 -1
  64. package/lib/util/formatVariantSelector.js +147 -162
  65. package/lib/util/getAllConfigs.js +8 -6
  66. package/lib/util/hashConfig.js +6 -4
  67. package/lib/util/isKeyframeRule.js +3 -1
  68. package/lib/util/isPlainObject.js +4 -2
  69. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +5 -3
  70. package/lib/util/log.js +8 -4
  71. package/lib/util/nameClass.js +15 -6
  72. package/lib/util/negateValue.js +4 -2
  73. package/lib/util/normalizeConfig.js +45 -31
  74. package/lib/util/normalizeScreens.js +108 -3
  75. package/lib/util/parseAnimationValue.js +5 -3
  76. package/lib/util/parseBoxShadowValue.js +6 -2
  77. package/lib/util/parseDependency.js +6 -4
  78. package/lib/util/parseGlob.js +7 -6
  79. package/lib/util/parseObjectStyles.js +10 -8
  80. package/lib/util/pluginUtils.js +137 -43
  81. package/lib/util/prefixSelector.js +27 -11
  82. package/lib/util/pseudoElements.js +212 -0
  83. package/lib/util/removeAlphaVariables.js +5 -1
  84. package/lib/util/resolveConfig.js +22 -25
  85. package/lib/util/resolveConfigPath.js +28 -10
  86. package/lib/util/responsive.js +6 -4
  87. package/lib/util/splitAtTopLevelOnly.js +6 -2
  88. package/lib/util/tap.js +3 -1
  89. package/lib/util/toColorValue.js +3 -1
  90. package/lib/util/toPath.js +3 -1
  91. package/lib/util/transformThemeValue.js +7 -5
  92. package/lib/util/validateConfig.js +17 -4
  93. package/lib/util/validateFormalSyntax.js +26 -0
  94. package/lib/util/withAlphaVariable.js +8 -4
  95. package/lib/value-parser/LICENSE +22 -0
  96. package/lib/value-parser/README.md +3 -0
  97. package/lib/value-parser/index.d.js +2 -0
  98. package/lib/value-parser/index.js +22 -0
  99. package/lib/value-parser/parse.js +259 -0
  100. package/lib/value-parser/stringify.js +38 -0
  101. package/lib/value-parser/unit.js +86 -0
  102. package/lib/value-parser/walk.js +16 -0
  103. package/loadConfig.d.ts +4 -0
  104. package/loadConfig.js +2 -0
  105. package/nesting/index.d.ts +4 -0
  106. package/package.json +49 -44
  107. package/peers/index.js +71553 -53118
  108. package/plugin.d.ts +3 -3
  109. package/resolveConfig.d.ts +30 -2
  110. package/scripts/generate-types.js +1 -2
  111. package/scripts/release-channel.js +18 -0
  112. package/scripts/release-notes.js +21 -0
  113. package/src/cli/build/index.js +13 -9
  114. package/src/cli/build/plugin.js +109 -40
  115. package/src/cli/build/watching.js +109 -14
  116. package/src/cli/index.js +216 -3
  117. package/src/cli/init/index.js +37 -8
  118. package/src/cli.js +1 -221
  119. package/src/corePluginList.js +1 -1
  120. package/src/corePlugins.js +620 -76
  121. package/src/css/preflight.css +30 -9
  122. package/src/featureFlags.js +4 -5
  123. package/src/index.js +1 -47
  124. package/src/lib/content.js +108 -12
  125. package/src/lib/defaultExtractor.js +67 -20
  126. package/src/lib/evaluateTailwindFunctions.js +4 -1
  127. package/src/lib/expandApplyAtRules.js +67 -16
  128. package/src/lib/expandTailwindAtRules.js +37 -9
  129. package/src/lib/findAtConfigPath.js +4 -6
  130. package/src/lib/generateRules.js +330 -110
  131. package/src/lib/getModuleDependencies.js +70 -30
  132. package/src/lib/load-config.ts +55 -0
  133. package/src/lib/offsets.js +177 -5
  134. package/src/lib/remap-bitfield.js +82 -0
  135. package/src/lib/resolveDefaultsAtRules.js +16 -14
  136. package/src/lib/setupContextUtils.js +453 -110
  137. package/src/lib/setupTrackingContext.js +37 -14
  138. package/src/lib/sharedState.js +13 -4
  139. package/src/plugin.js +47 -0
  140. package/src/processTailwindFeatures.js +3 -5
  141. package/src/public/colors.js +22 -0
  142. package/src/public/default-config.js +1 -1
  143. package/src/public/default-theme.js +2 -2
  144. package/src/public/load-config.js +2 -0
  145. package/src/util/applyImportantSelector.js +26 -0
  146. package/src/util/buildMediaQuery.js +5 -3
  147. package/src/util/cloneNodes.js +35 -14
  148. package/src/util/color.js +19 -4
  149. package/src/util/colorNames.js +150 -0
  150. package/src/util/dataTypes.js +213 -23
  151. package/src/util/formatVariantSelector.js +170 -165
  152. package/src/util/getAllConfigs.js +2 -2
  153. package/src/util/isPlainObject.js +1 -1
  154. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  155. package/src/util/nameClass.js +4 -0
  156. package/src/util/negateValue.js +1 -1
  157. package/src/util/normalizeConfig.js +21 -4
  158. package/src/util/normalizeScreens.js +99 -4
  159. package/src/util/parseAnimationValue.js +1 -1
  160. package/src/util/parseGlob.js +1 -2
  161. package/src/util/pluginUtils.js +127 -24
  162. package/src/util/prefixSelector.js +29 -10
  163. package/src/util/pseudoElements.js +171 -0
  164. package/src/util/removeAlphaVariables.js +2 -0
  165. package/src/util/resolveConfig.js +3 -9
  166. package/src/util/resolveConfigPath.js +14 -1
  167. package/src/util/splitAtTopLevelOnly.js +4 -1
  168. package/src/util/validateConfig.js +13 -0
  169. package/src/util/validateFormalSyntax.js +34 -0
  170. package/src/util/withAlphaVariable.js +2 -2
  171. package/src/value-parser/LICENSE +22 -0
  172. package/src/value-parser/README.md +3 -0
  173. package/src/value-parser/index.d.ts +177 -0
  174. package/src/value-parser/index.js +28 -0
  175. package/src/value-parser/parse.js +303 -0
  176. package/src/value-parser/stringify.js +41 -0
  177. package/src/value-parser/unit.js +118 -0
  178. package/src/value-parser/walk.js +18 -0
  179. package/stubs/.gitignore +1 -0
  180. package/stubs/.prettierrc.json +6 -0
  181. package/stubs/{defaultConfig.stub.js → config.full.js} +282 -180
  182. package/stubs/{simpleConfig.stub.js → config.simple.js} +0 -1
  183. package/stubs/postcss.config.js +6 -0
  184. package/stubs/tailwind.config.cjs +2 -0
  185. package/stubs/tailwind.config.js +2 -0
  186. package/stubs/tailwind.config.ts +3 -0
  187. package/types/config.d.ts +63 -24
  188. package/types/generated/colors.d.ts +22 -0
  189. package/types/generated/corePluginList.d.ts +1 -1
  190. package/types/generated/default-theme.d.ts +152 -86
  191. package/types/index.d.ts +7 -3
  192. package/CHANGELOG.md +0 -2263
  193. package/lib/cli/shared.js +0 -12
  194. package/lib/constants.js +0 -44
  195. package/lib/lib/detectNesting.js +0 -37
  196. package/scripts/install-integrations.js +0 -27
  197. package/scripts/rebuildFixtures.js +0 -68
  198. package/src/cli/shared.js +0 -5
  199. package/src/constants.js +0 -17
  200. package/src/lib/detectNesting.js +0 -39
  201. /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
 
@@ -11,15 +12,14 @@
11
12
  A utility-first CSS framework for rapidly building custom user interfaces.
12
13
  </p>
13
14
 
14
-
15
15
  <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>
16
+ <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=main" alt="Build Status"></a>
17
17
  <a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
18
18
  <a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
19
- <a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
19
+ <a href="https://github.com/tailwindcss/tailwindcss/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
20
20
  </p>
21
21
 
22
- ------
22
+ ---
23
23
 
24
24
  ## Documentation
25
25
 
@@ -37,4 +37,4 @@ For casual chit-chat with others using the framework:
37
37
 
38
38
  ## Contributing
39
39
 
40
- If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/master/.github/CONTRIBUTING.md) **before submitting a pull request**.
40
+ If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**.
@@ -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,38 +128,47 @@ 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)];
144
- }
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
- }
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;
150
155
  }
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);
169
+ let checkBroadPattern = (0, _content.createBroadPatternCheck)(this.contentPatterns.all);
158
170
  for (let file of files){
171
+ checkBroadPattern(file);
159
172
  content.push({
160
173
  content: _fs.default.readFileSync(_path.default.resolve(file), "utf8"),
161
174
  extension: _path.default.extname(file).slice(1)
@@ -165,61 +178,71 @@ let state = {
165
178
  let rawContent = this.config.content.files.filter((file)=>{
166
179
  return file !== null && typeof file === "object";
167
180
  });
168
- for (let { raw: content1 , extension ="html" } of rawContent){
169
- content1.push({
170
- content: content1,
181
+ for (let { raw: htmlContent , extension ="html" } of rawContent){
182
+ content.push({
183
+ content: htmlContent,
171
184
  extension
172
185
  });
173
186
  }
174
187
  return content;
175
188
  },
176
- getContext ({ createContext , cliConfigPath , root , result }) {
189
+ getContext ({ createContext , cliConfigPath , root , result , content }) {
190
+ _sharedState.env.DEBUG && console.time("Searching for config");
191
+ var _findAtConfigPath1;
192
+ let configPath = (_findAtConfigPath1 = (0, _findAtConfigPath.findAtConfigPath)(root, result)) !== null && _findAtConfigPath1 !== void 0 ? _findAtConfigPath1 : cliConfigPath;
193
+ _sharedState.env.DEBUG && console.timeEnd("Searching for config");
177
194
  if (this.context) {
178
195
  this.context.changedContent = this.changedContent.splice(0);
179
196
  return this.context;
180
197
  }
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");
198
+ _sharedState.env.DEBUG && console.time("Loading config");
199
+ let config = this.loadConfig(configPath, content);
200
+ _sharedState.env.DEBUG && console.timeEnd("Loading config");
201
+ _sharedState.env.DEBUG && console.time("Creating context");
189
202
  this.context = createContext(config, []);
190
203
  Object.assign(this.context, {
191
204
  userConfigPath: configPath
192
205
  });
193
- _shared.env.DEBUG && console.timeEnd("Creating context");
194
- _shared.env.DEBUG && console.time("Resolving content paths");
206
+ _sharedState.env.DEBUG && console.timeEnd("Creating context");
207
+ _sharedState.env.DEBUG && console.time("Resolving content paths");
195
208
  this.refreshContentPaths();
196
- _shared.env.DEBUG && console.timeEnd("Resolving content paths");
209
+ _sharedState.env.DEBUG && console.timeEnd("Resolving content paths");
197
210
  if (this.watcher) {
198
- _shared.env.DEBUG && console.time("Watch new files");
211
+ _sharedState.env.DEBUG && console.time("Watch new files");
199
212
  this.watcher.refreshWatchedFiles();
200
- _shared.env.DEBUG && console.timeEnd("Watch new files");
213
+ _sharedState.env.DEBUG && console.timeEnd("Watch new files");
201
214
  }
202
- _shared.env.DEBUG && console.time("Reading content files");
203
215
  for (let file of this.readContentPaths()){
204
216
  this.context.changedContent.push(file);
205
217
  }
206
- _shared.env.DEBUG && console.timeEnd("Reading content files");
207
218
  return this.context;
208
219
  }
209
220
  };
210
221
  async function createProcessor(args, cliConfigPath) {
222
+ var _args_content;
211
223
  let postcss = (0, _deps.loadPostcss)();
212
224
  let input = args["--input"];
213
225
  let output = args["--output"];
214
226
  let includePostCss = args["--postcss"];
215
227
  let customPostCssPath = typeof args["--postcss"] === "string" ? args["--postcss"] : undefined;
216
228
  let [beforePlugins, afterPlugins, postcssOptions] = includePostCss ? await loadPostCssPlugins(customPostCssPath) : loadBuiltinPostcssPlugins();
229
+ if (args["--purge"]) {
230
+ _log.default.warn("purge-flag-deprecated", [
231
+ "The `--purge` flag has been deprecated.",
232
+ "Please use `--content` instead."
233
+ ]);
234
+ if (!args["--content"]) {
235
+ args["--content"] = args["--purge"];
236
+ }
237
+ }
238
+ var _args_content_split;
239
+ 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
240
  let tailwindPlugin = ()=>{
218
241
  return {
219
242
  postcssPlugin: "tailwindcss",
220
- Once (root, { result }) {
221
- _shared.env.DEBUG && console.time("Compiling CSS");
222
- (0, _processTailwindFeatures.default)(({ createContext })=>{
243
+ async Once (root, { result }) {
244
+ _sharedState.env.DEBUG && console.time("Compiling CSS");
245
+ await (0, _processTailwindFeatures.default)(({ createContext })=>{
223
246
  console.error();
224
247
  console.error("Rebuilding...");
225
248
  return ()=>{
@@ -227,11 +250,12 @@ async function createProcessor(args, cliConfigPath) {
227
250
  createContext,
228
251
  cliConfigPath,
229
252
  root,
230
- result
253
+ result,
254
+ content
231
255
  });
232
256
  };
233
257
  })(root, result);
234
- _shared.env.DEBUG && console.timeEnd("Compiling CSS");
258
+ _sharedState.env.DEBUG && console.timeEnd("Compiling CSS");
235
259
  }
236
260
  };
237
261
  };
@@ -242,7 +266,7 @@ async function createProcessor(args, cliConfigPath) {
242
266
  !args["--minify"] && _utils.formatNodes,
243
267
  ...afterPlugins,
244
268
  !args["--no-autoprefixer"] && (0, _deps.loadAutoprefixer)(),
245
- args["--minify"] && (0, _deps.loadCssNano)(),
269
+ args["--minify"] && (0, _deps.loadCssNano)()
246
270
  ].filter(Boolean);
247
271
  /** @type {import('postcss').Processor} */ // @ts-ignore
248
272
  let processor = postcss(plugins);
@@ -255,7 +279,7 @@ async function createProcessor(args, cliConfigPath) {
255
279
  if (input) {
256
280
  return _fs.default.promises.readFile(_path.default.resolve(input), "utf8");
257
281
  }
258
- // No input file provided, fallback to default atrules
282
+ // No input file provided, fallback to default at-rules
259
283
  return "@tailwind base; @tailwind components; @tailwind utilities";
260
284
  }
261
285
  async function build() {
@@ -265,18 +289,49 @@ async function createProcessor(args, cliConfigPath) {
265
289
  from: input,
266
290
  to: output
267
291
  })).then((result)=>{
292
+ if (!state.watcher) {
293
+ return result;
294
+ }
295
+ _sharedState.env.DEBUG && console.time("Recording PostCSS dependencies");
296
+ for (let message of result.messages){
297
+ if (message.type === "dependency") {
298
+ state.contextDependencies.add(message.file);
299
+ }
300
+ }
301
+ _sharedState.env.DEBUG && console.timeEnd("Recording PostCSS dependencies");
302
+ // TODO: This needs to be in a different spot
303
+ _sharedState.env.DEBUG && console.time("Watch new files");
304
+ state.watcher.refreshWatchedFiles();
305
+ _sharedState.env.DEBUG && console.timeEnd("Watch new files");
306
+ return result;
307
+ }).then((result)=>{
268
308
  if (!output) {
269
309
  process.stdout.write(result.css);
270
310
  return;
271
311
  }
272
312
  return Promise.all([
273
- (0, _utils.outputFile)(output, result.css),
274
- result.map && (0, _utils.outputFile)(output + ".map", result.map.toString()),
313
+ (0, _utils.outputFile)(result.opts.to, result.css),
314
+ result.map && (0, _utils.outputFile)(result.opts.to + ".map", result.map.toString())
275
315
  ]);
276
316
  }).then(()=>{
277
317
  let end = process.hrtime.bigint();
278
318
  console.error();
279
319
  console.error("Done in", (end - start) / BigInt(1e6) + "ms.");
320
+ }).then(()=>{}, (err)=>{
321
+ // TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
322
+ // that were collected before the error occurred
323
+ // The result is not stored on the error so we have to store it externally
324
+ // and pull the messages off of it here somehow
325
+ // This results in a less than ideal DX because the watcher will not pick up
326
+ // changes to imported CSS if one of them caused an error during the initial build
327
+ // If you fix it and then save the main CSS file so there's no error
328
+ // The watcher will start watching the imported CSS files and will be
329
+ // resilient to future errors.
330
+ if (state.watcher) {
331
+ console.error(err);
332
+ } else {
333
+ return Promise.reject(err);
334
+ }
280
335
  });
281
336
  }
282
337
  /**
@@ -293,13 +348,14 @@ async function createProcessor(args, cliConfigPath) {
293
348
  return {
294
349
  build,
295
350
  watch: async ()=>{
296
- state.watcher = (0, _watchingJs.createWatcher)(args, {
351
+ state.watcher = (0, _watching.createWatcher)(args, {
297
352
  state,
298
353
  /**
299
354
  * @param {{file: string, content(): Promise<string>, extension: string}[]} changes
300
355
  */ async rebuild (changes) {
301
356
  let needsNewContext = changes.some((change)=>{
302
- return state.configDependencies.has(change.file) || state.contextDependencies.has(change.file);
357
+ var _state_configBag;
358
+ return ((_state_configBag = state.configBag) === null || _state_configBag === void 0 ? void 0 : _state_configBag.dependencies.has(change.file)) || state.contextDependencies.has(change.file);
303
359
  });
304
360
  if (needsNewContext) {
305
361
  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
  };