tailwindcss 0.0.0-insiders.de00a62 → 0.0.0-insiders.deb33a9

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 (302) hide show
  1. package/README.md +5 -6
  2. package/dist/chunk-AZANAYY2.mjs +1 -0
  3. package/dist/chunk-V2K3XTS4.mjs +1 -0
  4. package/dist/chunk-WZA4AHDT.mjs +1 -0
  5. package/dist/colors-b_6i0Oi7.d.ts +295 -0
  6. package/dist/colors.d.mts +295 -0
  7. package/dist/colors.d.ts +5 -0
  8. package/dist/colors.js +1 -0
  9. package/dist/colors.mjs +1 -0
  10. package/dist/default-theme.d.mts +1147 -0
  11. package/dist/default-theme.d.ts +1147 -0
  12. package/dist/default-theme.js +1 -0
  13. package/dist/default-theme.mjs +1 -0
  14. package/dist/flatten-color-palette.d.mts +6 -0
  15. package/dist/flatten-color-palette.d.ts +6 -0
  16. package/dist/flatten-color-palette.js +1 -0
  17. package/dist/flatten-color-palette.mjs +1 -0
  18. package/dist/lib.d.mts +256 -0
  19. package/dist/lib.d.ts +3 -0
  20. package/dist/lib.js +33 -0
  21. package/dist/lib.mjs +33 -0
  22. package/dist/plugin.d.mts +10 -0
  23. package/dist/plugin.d.ts +104 -0
  24. package/dist/plugin.js +1 -0
  25. package/dist/plugin.mjs +1 -0
  26. package/dist/resolve-config-BIFUA2FY.d.ts +29 -0
  27. package/dist/resolve-config-QUZ9b-Gn.d.mts +190 -0
  28. package/dist/types-BTRmm49E.d.mts +98 -0
  29. package/index.css +863 -0
  30. package/package.json +69 -108
  31. package/preflight.css +383 -0
  32. package/theme.css +451 -0
  33. package/base.css +0 -1
  34. package/colors.d.ts +0 -3
  35. package/colors.js +0 -2
  36. package/components.css +0 -1
  37. package/defaultConfig.d.ts +0 -3
  38. package/defaultConfig.js +0 -2
  39. package/defaultTheme.d.ts +0 -4
  40. package/defaultTheme.js +0 -2
  41. package/lib/cli/build/deps.js +0 -62
  42. package/lib/cli/build/index.js +0 -54
  43. package/lib/cli/build/plugin.js +0 -378
  44. package/lib/cli/build/utils.js +0 -88
  45. package/lib/cli/build/watching.js +0 -182
  46. package/lib/cli/help/index.js +0 -73
  47. package/lib/cli/index.js +0 -230
  48. package/lib/cli/init/index.js +0 -63
  49. package/lib/cli-peer-dependencies.js +0 -36
  50. package/lib/cli.js +0 -7
  51. package/lib/corePluginList.js +0 -191
  52. package/lib/corePlugins.js +0 -4330
  53. package/lib/css/LICENSE +0 -25
  54. package/lib/css/preflight.css +0 -385
  55. package/lib/featureFlags.js +0 -83
  56. package/lib/index.js +0 -2
  57. package/lib/lib/cacheInvalidation.js +0 -92
  58. package/lib/lib/collapseAdjacentRules.js +0 -61
  59. package/lib/lib/collapseDuplicateDeclarations.js +0 -85
  60. package/lib/lib/content.js +0 -214
  61. package/lib/lib/defaultExtractor.js +0 -251
  62. package/lib/lib/detectNesting.js +0 -45
  63. package/lib/lib/evaluateTailwindFunctions.js +0 -238
  64. package/lib/lib/expandApplyAtRules.js +0 -540
  65. package/lib/lib/expandTailwindAtRules.js +0 -291
  66. package/lib/lib/findAtConfigPath.js +0 -46
  67. package/lib/lib/generateRules.js +0 -904
  68. package/lib/lib/getModuleDependencies.js +0 -99
  69. package/lib/lib/load-config.js +0 -53
  70. package/lib/lib/normalizeTailwindDirectives.js +0 -89
  71. package/lib/lib/offsets.js +0 -355
  72. package/lib/lib/partitionApplyAtRules.js +0 -58
  73. package/lib/lib/regex.js +0 -74
  74. package/lib/lib/remap-bitfield.js +0 -89
  75. package/lib/lib/resolveDefaultsAtRules.js +0 -167
  76. package/lib/lib/setupContextUtils.js +0 -1294
  77. package/lib/lib/setupTrackingContext.js +0 -166
  78. package/lib/lib/sharedState.js +0 -87
  79. package/lib/lib/substituteScreenAtRules.js +0 -31
  80. package/lib/oxide/cli/build/deps.js +0 -89
  81. package/lib/oxide/cli/build/index.js +0 -53
  82. package/lib/oxide/cli/build/plugin.js +0 -375
  83. package/lib/oxide/cli/build/utils.js +0 -87
  84. package/lib/oxide/cli/build/watching.js +0 -179
  85. package/lib/oxide/cli/help/index.js +0 -72
  86. package/lib/oxide/cli/index.js +0 -214
  87. package/lib/oxide/cli/init/index.js +0 -52
  88. package/lib/oxide/cli.js +0 -5
  89. package/lib/oxide/postcss-plugin.js +0 -2
  90. package/lib/plugin.js +0 -98
  91. package/lib/postcss-plugins/nesting/README.md +0 -42
  92. package/lib/postcss-plugins/nesting/index.js +0 -21
  93. package/lib/postcss-plugins/nesting/plugin.js +0 -89
  94. package/lib/processTailwindFeatures.js +0 -64
  95. package/lib/public/colors.js +0 -355
  96. package/lib/public/create-plugin.js +0 -17
  97. package/lib/public/default-config.js +0 -18
  98. package/lib/public/default-theme.js +0 -18
  99. package/lib/public/load-config.js +0 -12
  100. package/lib/public/resolve-config.js +0 -24
  101. package/lib/util/applyImportantSelector.js +0 -36
  102. package/lib/util/bigSign.js +0 -13
  103. package/lib/util/buildMediaQuery.js +0 -27
  104. package/lib/util/cloneDeep.js +0 -22
  105. package/lib/util/cloneNodes.js +0 -54
  106. package/lib/util/color.js +0 -116
  107. package/lib/util/colorNames.js +0 -752
  108. package/lib/util/configurePlugins.js +0 -23
  109. package/lib/util/createPlugin.js +0 -32
  110. package/lib/util/createUtilityPlugin.js +0 -53
  111. package/lib/util/dataTypes.js +0 -415
  112. package/lib/util/defaults.js +0 -27
  113. package/lib/util/escapeClassName.js +0 -24
  114. package/lib/util/escapeCommas.js +0 -13
  115. package/lib/util/flattenColorPalette.js +0 -18
  116. package/lib/util/formatVariantSelector.js +0 -270
  117. package/lib/util/getAllConfigs.js +0 -50
  118. package/lib/util/hashConfig.js +0 -21
  119. package/lib/util/isKeyframeRule.js +0 -13
  120. package/lib/util/isPlainObject.js +0 -17
  121. package/lib/util/isSyntacticallyValidPropertyValue.js +0 -74
  122. package/lib/util/log.js +0 -61
  123. package/lib/util/nameClass.js +0 -49
  124. package/lib/util/negateValue.js +0 -36
  125. package/lib/util/normalizeConfig.js +0 -282
  126. package/lib/util/normalizeScreens.js +0 -178
  127. package/lib/util/parseAnimationValue.js +0 -93
  128. package/lib/util/parseBoxShadowValue.js +0 -88
  129. package/lib/util/parseDependency.js +0 -47
  130. package/lib/util/parseGlob.js +0 -36
  131. package/lib/util/parseObjectStyles.js +0 -36
  132. package/lib/util/pluginUtils.js +0 -289
  133. package/lib/util/prefixSelector.js +0 -39
  134. package/lib/util/pseudoElements.js +0 -212
  135. package/lib/util/removeAlphaVariables.js +0 -31
  136. package/lib/util/resolveConfig.js +0 -256
  137. package/lib/util/resolveConfigPath.js +0 -70
  138. package/lib/util/responsive.js +0 -24
  139. package/lib/util/splitAtTopLevelOnly.js +0 -51
  140. package/lib/util/tap.js +0 -14
  141. package/lib/util/toColorValue.js +0 -13
  142. package/lib/util/toPath.js +0 -32
  143. package/lib/util/transformThemeValue.js +0 -73
  144. package/lib/util/validateConfig.js +0 -37
  145. package/lib/util/validateFormalSyntax.js +0 -26
  146. package/lib/util/withAlphaVariable.js +0 -79
  147. package/lib/value-parser/LICENSE +0 -22
  148. package/lib/value-parser/README.md +0 -3
  149. package/lib/value-parser/index.d.js +0 -2
  150. package/lib/value-parser/index.js +0 -22
  151. package/lib/value-parser/parse.js +0 -259
  152. package/lib/value-parser/stringify.js +0 -38
  153. package/lib/value-parser/unit.js +0 -86
  154. package/lib/value-parser/walk.js +0 -16
  155. package/loadConfig.d.ts +0 -4
  156. package/loadConfig.js +0 -2
  157. package/nesting/index.d.ts +0 -4
  158. package/nesting/index.js +0 -2
  159. package/peers/index.js +0 -96503
  160. package/plugin.d.ts +0 -11
  161. package/plugin.js +0 -2
  162. package/prettier.config.js +0 -19
  163. package/resolveConfig.d.ts +0 -31
  164. package/resolveConfig.js +0 -2
  165. package/screens.css +0 -1
  166. package/scripts/create-plugin-list.js +0 -10
  167. package/scripts/generate-types.js +0 -104
  168. package/scripts/release-channel.js +0 -18
  169. package/scripts/release-notes.js +0 -21
  170. package/scripts/swap-engines.js +0 -40
  171. package/scripts/type-utils.js +0 -27
  172. package/src/cli/build/deps.js +0 -56
  173. package/src/cli/build/index.js +0 -49
  174. package/src/cli/build/plugin.js +0 -444
  175. package/src/cli/build/utils.js +0 -76
  176. package/src/cli/build/watching.js +0 -229
  177. package/src/cli/help/index.js +0 -70
  178. package/src/cli/index.js +0 -216
  179. package/src/cli/init/index.js +0 -79
  180. package/src/cli-peer-dependencies.js +0 -15
  181. package/src/cli.js +0 -7
  182. package/src/corePluginList.js +0 -1
  183. package/src/corePlugins.js +0 -2986
  184. package/src/css/LICENSE +0 -25
  185. package/src/css/preflight.css +0 -385
  186. package/src/featureFlags.js +0 -66
  187. package/src/index.js +0 -1
  188. package/src/lib/cacheInvalidation.js +0 -52
  189. package/src/lib/collapseAdjacentRules.js +0 -58
  190. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  191. package/src/lib/content.js +0 -249
  192. package/src/lib/defaultExtractor.js +0 -230
  193. package/src/lib/detectNesting.js +0 -47
  194. package/src/lib/evaluateTailwindFunctions.js +0 -272
  195. package/src/lib/expandApplyAtRules.js +0 -620
  196. package/src/lib/expandTailwindAtRules.js +0 -300
  197. package/src/lib/findAtConfigPath.js +0 -48
  198. package/src/lib/generateRules.js +0 -951
  199. package/src/lib/getModuleDependencies.js +0 -79
  200. package/src/lib/load-config.ts +0 -39
  201. package/src/lib/normalizeTailwindDirectives.js +0 -84
  202. package/src/lib/offsets.js +0 -432
  203. package/src/lib/partitionApplyAtRules.js +0 -52
  204. package/src/lib/regex.js +0 -74
  205. package/src/lib/remap-bitfield.js +0 -82
  206. package/src/lib/resolveDefaultsAtRules.js +0 -167
  207. package/src/lib/setupContextUtils.js +0 -1366
  208. package/src/lib/setupTrackingContext.js +0 -169
  209. package/src/lib/sharedState.js +0 -61
  210. package/src/lib/substituteScreenAtRules.js +0 -19
  211. package/src/oxide/cli/build/deps.ts +0 -91
  212. package/src/oxide/cli/build/index.ts +0 -47
  213. package/src/oxide/cli/build/plugin.ts +0 -442
  214. package/src/oxide/cli/build/utils.ts +0 -74
  215. package/src/oxide/cli/build/watching.ts +0 -225
  216. package/src/oxide/cli/help/index.ts +0 -69
  217. package/src/oxide/cli/index.ts +0 -204
  218. package/src/oxide/cli/init/index.ts +0 -59
  219. package/src/oxide/cli.ts +0 -1
  220. package/src/oxide/postcss-plugin.ts +0 -1
  221. package/src/plugin.js +0 -107
  222. package/src/postcss-plugins/nesting/README.md +0 -42
  223. package/src/postcss-plugins/nesting/index.js +0 -13
  224. package/src/postcss-plugins/nesting/plugin.js +0 -80
  225. package/src/processTailwindFeatures.js +0 -59
  226. package/src/public/colors.js +0 -322
  227. package/src/public/create-plugin.js +0 -2
  228. package/src/public/default-config.js +0 -4
  229. package/src/public/default-theme.js +0 -4
  230. package/src/public/load-config.js +0 -2
  231. package/src/public/resolve-config.js +0 -7
  232. package/src/util/applyImportantSelector.js +0 -27
  233. package/src/util/bigSign.js +0 -3
  234. package/src/util/buildMediaQuery.js +0 -22
  235. package/src/util/cloneDeep.js +0 -11
  236. package/src/util/cloneNodes.js +0 -49
  237. package/src/util/color.js +0 -88
  238. package/src/util/colorNames.js +0 -150
  239. package/src/util/configurePlugins.js +0 -23
  240. package/src/util/createPlugin.js +0 -27
  241. package/src/util/createUtilityPlugin.js +0 -37
  242. package/src/util/dataTypes.js +0 -406
  243. package/src/util/defaults.js +0 -17
  244. package/src/util/escapeClassName.js +0 -8
  245. package/src/util/escapeCommas.js +0 -3
  246. package/src/util/flattenColorPalette.js +0 -13
  247. package/src/util/formatVariantSelector.js +0 -324
  248. package/src/util/getAllConfigs.js +0 -38
  249. package/src/util/hashConfig.js +0 -5
  250. package/src/util/isKeyframeRule.js +0 -3
  251. package/src/util/isPlainObject.js +0 -8
  252. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  253. package/src/util/log.js +0 -29
  254. package/src/util/nameClass.js +0 -30
  255. package/src/util/negateValue.js +0 -24
  256. package/src/util/normalizeConfig.js +0 -301
  257. package/src/util/normalizeScreens.js +0 -140
  258. package/src/util/parseAnimationValue.js +0 -68
  259. package/src/util/parseBoxShadowValue.js +0 -72
  260. package/src/util/parseDependency.js +0 -44
  261. package/src/util/parseGlob.js +0 -24
  262. package/src/util/parseObjectStyles.js +0 -19
  263. package/src/util/pluginUtils.js +0 -307
  264. package/src/util/prefixSelector.js +0 -33
  265. package/src/util/pseudoElements.js +0 -171
  266. package/src/util/removeAlphaVariables.js +0 -24
  267. package/src/util/resolveConfig.js +0 -277
  268. package/src/util/resolveConfigPath.js +0 -66
  269. package/src/util/responsive.js +0 -10
  270. package/src/util/splitAtTopLevelOnly.js +0 -52
  271. package/src/util/tap.js +0 -4
  272. package/src/util/toColorValue.js +0 -3
  273. package/src/util/toPath.js +0 -26
  274. package/src/util/transformThemeValue.js +0 -62
  275. package/src/util/validateConfig.js +0 -26
  276. package/src/util/validateFormalSyntax.js +0 -34
  277. package/src/util/withAlphaVariable.js +0 -49
  278. package/src/value-parser/LICENSE +0 -22
  279. package/src/value-parser/README.md +0 -3
  280. package/src/value-parser/index.d.ts +0 -177
  281. package/src/value-parser/index.js +0 -28
  282. package/src/value-parser/parse.js +0 -303
  283. package/src/value-parser/stringify.js +0 -41
  284. package/src/value-parser/unit.js +0 -118
  285. package/src/value-parser/walk.js +0 -18
  286. package/stubs/.gitignore +0 -1
  287. package/stubs/.prettierrc.json +0 -6
  288. package/stubs/config.full.js +0 -1062
  289. package/stubs/config.simple.js +0 -7
  290. package/stubs/postcss.config.cjs +0 -6
  291. package/stubs/postcss.config.js +0 -6
  292. package/stubs/tailwind.config.cjs +0 -2
  293. package/stubs/tailwind.config.js +0 -2
  294. package/stubs/tailwind.config.ts +0 -3
  295. package/tailwind.css +0 -5
  296. package/types/config.d.ts +0 -376
  297. package/types/generated/.gitkeep +0 -0
  298. package/types/generated/colors.d.ts +0 -298
  299. package/types/generated/corePluginList.d.ts +0 -1
  300. package/types/generated/default-theme.d.ts +0 -397
  301. package/types/index.d.ts +0 -11
  302. package/variants.css +0 -1
@@ -1,249 +0,0 @@
1
- // @ts-check
2
-
3
- import fs from 'fs'
4
- import path from 'path'
5
- import isGlob from 'is-glob'
6
- import fastGlob from 'fast-glob'
7
- import { parseGlob } from '../util/parseGlob'
8
- import { env } from './sharedState'
9
-
10
- /*!
11
- * Modified version of normalize-path, original license below
12
- *
13
- * normalize-path <https://github.com/jonschlinkert/normalize-path>
14
- *
15
- * Copyright (c) 2014-2018, Jon Schlinkert.
16
- * Released under the MIT License.
17
- */
18
-
19
- function normalizePath(path) {
20
- if (typeof path !== 'string') {
21
- throw new TypeError('expected path to be a string')
22
- }
23
-
24
- if (path === '\\' || path === '/') return '/'
25
-
26
- var len = path.length
27
- if (len <= 1) return path
28
-
29
- // ensure that win32 namespaces has two leading slashes, so that the path is
30
- // handled properly by the win32 version of path.parse() after being normalized
31
- // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces
32
- var prefix = ''
33
- if (len > 4 && path[3] === '\\') {
34
- var ch = path[2]
35
- if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') {
36
- path = path.slice(2)
37
- prefix = '//'
38
- }
39
- }
40
-
41
- // Modified part: instead of purely splitting on `\\` and `/`, we split on
42
- // `/` and `\\` that is _not_ followed by any of the following characters: ()[]
43
- // This is to ensure that we keep the escaping of brackets and parentheses
44
- let segs = path.split(/[/\\]+(?![\(\)\[\]])/)
45
- return prefix + segs.join('/')
46
- }
47
-
48
- /** @typedef {import('../../types/config.js').RawFile} RawFile */
49
- /** @typedef {import('../../types/config.js').FilePath} FilePath */
50
-
51
- /**
52
- * @typedef {object} ContentPath
53
- * @property {string} original
54
- * @property {string} base
55
- * @property {string | null} glob
56
- * @property {boolean} ignore
57
- * @property {string} pattern
58
- */
59
-
60
- /**
61
- * Turn a list of content paths (absolute or not; glob or not) into a list of
62
- * absolute file paths that exist on the filesystem
63
- *
64
- * If there are symlinks in the path then multiple paths will be returned
65
- * one for the symlink and one for the actual file
66
- *
67
- * @param {*} context
68
- * @param {import('tailwindcss').Config} tailwindConfig
69
- * @returns {ContentPath[]}
70
- */
71
- export function parseCandidateFiles(context, tailwindConfig) {
72
- let files = tailwindConfig.content.files
73
-
74
- // Normalize the file globs
75
- files = files.filter((filePath) => typeof filePath === 'string')
76
- files = files.map(normalizePath)
77
-
78
- // Split into included and excluded globs
79
- let tasks = fastGlob.generateTasks(files)
80
-
81
- /** @type {ContentPath[]} */
82
- let included = []
83
-
84
- /** @type {ContentPath[]} */
85
- let excluded = []
86
-
87
- for (const task of tasks) {
88
- included.push(...task.positive.map((filePath) => parseFilePath(filePath, false)))
89
- excluded.push(...task.negative.map((filePath) => parseFilePath(filePath, true)))
90
- }
91
-
92
- let paths = [...included, ...excluded]
93
-
94
- // Resolve paths relative to the config file or cwd
95
- paths = resolveRelativePaths(context, paths)
96
-
97
- // Resolve symlinks if possible
98
- paths = paths.flatMap(resolvePathSymlinks)
99
-
100
- // Update cached patterns
101
- paths = paths.map(resolveGlobPattern)
102
-
103
- return paths
104
- }
105
-
106
- /**
107
- *
108
- * @param {string} filePath
109
- * @param {boolean} ignore
110
- * @returns {ContentPath}
111
- */
112
- function parseFilePath(filePath, ignore) {
113
- // Escape special characters in the file path such as: ()[]
114
- // But only if the special character isn't already escaped
115
- filePath = filePath.replace(/(?<!\\)([\[\]\(\)])/g, '\\$1')
116
-
117
- let contentPath = {
118
- original: filePath,
119
- base: filePath,
120
- ignore,
121
- pattern: filePath,
122
- glob: null,
123
- }
124
-
125
- if (isGlob(filePath)) {
126
- Object.assign(contentPath, parseGlob(filePath))
127
- }
128
-
129
- return contentPath
130
- }
131
-
132
- /**
133
- *
134
- * @param {ContentPath} contentPath
135
- * @returns {ContentPath}
136
- */
137
- function resolveGlobPattern(contentPath) {
138
- // This is required for Windows support to properly pick up Glob paths.
139
- // Afaik, this technically shouldn't be needed but there's probably
140
- // some internal, direct path matching with a normalized path in
141
- // a package which can't handle mixed directory separators
142
- let base = normalizePath(contentPath.base)
143
-
144
- // If the user's file path contains any special characters (like parens) for instance fast-glob
145
- // is like "OOOH SHINY" and treats them as such. So we have to escape the base path to fix this
146
- base = fastGlob.escapePath(base)
147
-
148
- contentPath.pattern = contentPath.glob ? `${base}/${contentPath.glob}` : base
149
- contentPath.pattern = contentPath.ignore ? `!${contentPath.pattern}` : contentPath.pattern
150
-
151
- return contentPath
152
- }
153
-
154
- /**
155
- * Resolve each path relative to the config file (when possible) if the experimental flag is enabled
156
- * Otherwise, resolve relative to the current working directory
157
- *
158
- * @param {any} context
159
- * @param {ContentPath[]} contentPaths
160
- * @returns {ContentPath[]}
161
- */
162
- function resolveRelativePaths(context, contentPaths) {
163
- let resolveFrom = []
164
-
165
- // Resolve base paths relative to the config file (when possible) if the experimental flag is enabled
166
- if (context.userConfigPath && context.tailwindConfig.content.relative) {
167
- resolveFrom = [path.dirname(context.userConfigPath)]
168
- }
169
-
170
- return contentPaths.map((contentPath) => {
171
- contentPath.base = path.resolve(...resolveFrom, contentPath.base)
172
-
173
- return contentPath
174
- })
175
- }
176
-
177
- /**
178
- * Resolve the symlink for the base directory / file in each path
179
- * These are added as additional dependencies to watch for changes because
180
- * some tools (like webpack) will only watch the actual file or directory
181
- * but not the symlink itself even in projects that use monorepos.
182
- *
183
- * @param {ContentPath} contentPath
184
- * @returns {ContentPath[]}
185
- */
186
- function resolvePathSymlinks(contentPath) {
187
- let paths = [contentPath]
188
-
189
- try {
190
- let resolvedPath = fs.realpathSync(contentPath.base)
191
- if (resolvedPath !== contentPath.base) {
192
- paths.push({
193
- ...contentPath,
194
- base: resolvedPath,
195
- })
196
- }
197
- } catch {
198
- // TODO: log this?
199
- }
200
-
201
- return paths
202
- }
203
-
204
- /**
205
- * @param {any} context
206
- * @param {ContentPath[]} candidateFiles
207
- * @param {Map<string, number>} fileModifiedMap
208
- * @returns {[{ content: string, extension: string }[], Map<string, number>]}
209
- */
210
- export function resolvedChangedContent(context, candidateFiles, fileModifiedMap) {
211
- let changedContent = context.tailwindConfig.content.files
212
- .filter((item) => typeof item.raw === 'string')
213
- .map(({ raw, extension = 'html' }) => ({ content: raw, extension }))
214
-
215
- let [changedFiles, mTimesToCommit] = resolveChangedFiles(candidateFiles, fileModifiedMap)
216
-
217
- for (let changedFile of changedFiles) {
218
- let extension = path.extname(changedFile).slice(1)
219
- changedContent.push({ file: changedFile, extension })
220
- }
221
-
222
- return [changedContent, mTimesToCommit]
223
- }
224
-
225
- /**
226
- *
227
- * @param {ContentPath[]} candidateFiles
228
- * @param {Map<string, number>} fileModifiedMap
229
- * @returns {[Set<string>, Map<string, number>]}
230
- */
231
- function resolveChangedFiles(candidateFiles, fileModifiedMap) {
232
- let paths = candidateFiles.map((contentPath) => contentPath.pattern)
233
- let mTimesToCommit = new Map()
234
-
235
- let changedFiles = new Set()
236
- env.DEBUG && console.time('Finding changed files')
237
- let files = fastGlob.sync(paths, { absolute: true })
238
- for (let file of files) {
239
- let prevModified = fileModifiedMap.get(file) || -Infinity
240
- let modified = fs.statSync(file).mtimeMs
241
-
242
- if (modified > prevModified) {
243
- changedFiles.add(file)
244
- mTimesToCommit.set(file, modified)
245
- }
246
- }
247
- env.DEBUG && console.timeEnd('Finding changed files')
248
- return [changedFiles, mTimesToCommit]
249
- }
@@ -1,230 +0,0 @@
1
- import * as regex from './regex'
2
-
3
- export function defaultExtractor(context) {
4
- let patterns = Array.from(buildRegExps(context))
5
-
6
- /**
7
- * @param {string} content
8
- */
9
- return (content) => {
10
- /** @type {(string|string)[]} */
11
- let results = []
12
-
13
- for (let pattern of patterns) {
14
- for (let result of content.match(pattern) ?? []) {
15
- results.push(clipAtBalancedParens(result))
16
- }
17
- }
18
-
19
- return results
20
- }
21
- }
22
-
23
- function* buildRegExps(context) {
24
- let separator = context.tailwindConfig.separator
25
- let prefix =
26
- context.tailwindConfig.prefix !== ''
27
- ? regex.optional(regex.pattern([/-?/, regex.escape(context.tailwindConfig.prefix)]))
28
- : ''
29
-
30
- let utility = regex.any([
31
- // Arbitrary properties (without square brackets)
32
- /\[[^\s:'"`]+:[^\s\[\]]+\]/,
33
-
34
- // Arbitrary properties with balanced square brackets
35
- // This is a targeted fix to continue to allow theme()
36
- // with square brackets to work in arbitrary properties
37
- // while fixing a problem with the regex matching too much
38
- /\[[^\s:'"`\]]+:[^\s]+?\[[^\s]+\][^\s]+?\]/,
39
-
40
- // Utilities
41
- regex.pattern([
42
- // Utility Name / Group Name
43
- regex.any([
44
- /-?(?:\w+)/,
45
-
46
- // This is here to make sure @container supports everything that other utilities do
47
- /@(?:\w+)/,
48
- ]),
49
-
50
- // Normal/Arbitrary values
51
- regex.optional(
52
- regex.any([
53
- regex.pattern([
54
- // Arbitrary values
55
- regex.any([
56
- /-(?:\w+-)*\['[^\s]+'\]/,
57
- /-(?:\w+-)*\["[^\s]+"\]/,
58
- /-(?:\w+-)*\[`[^\s]+`\]/,
59
- /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s:\[\]]+\]/,
60
- ]),
61
-
62
- // Not immediately followed by an `{[(`
63
- /(?![{([]])/,
64
-
65
- // optionally followed by an opacity modifier
66
- /(?:\/[^\s'"`\\><$]*)?/,
67
- ]),
68
-
69
- regex.pattern([
70
- // Arbitrary values
71
- regex.any([
72
- /-(?:\w+-)*\['[^\s]+'\]/,
73
- /-(?:\w+-)*\["[^\s]+"\]/,
74
- /-(?:\w+-)*\[`[^\s]+`\]/,
75
- /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s\[\]]+\]/,
76
- ]),
77
-
78
- // Not immediately followed by an `{[(`
79
- /(?![{([]])/,
80
-
81
- // optionally followed by an opacity modifier
82
- /(?:\/[^\s'"`\\$]*)?/,
83
- ]),
84
-
85
- // Normal values w/o quotes — may include an opacity modifier
86
- /[-\/][^\s'"`\\$={><]*/,
87
- ])
88
- ),
89
- ]),
90
- ])
91
-
92
- let variantPatterns = [
93
- // Without quotes
94
- regex.any([
95
- // This is here to provide special support for the `@` variant
96
- regex.pattern([/@\[[^\s"'`]+\](\/[^\s"'`]+)?/, separator]),
97
-
98
- // With variant modifier (e.g.: group-[..]/modifier)
99
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]\/\w+/, separator]),
100
-
101
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]/, separator]),
102
- regex.pattern([/[^\s"'`\[\\]+/, separator]),
103
- ]),
104
-
105
- // With quotes allowed
106
- regex.any([
107
- // With variant modifier (e.g.: group-[..]/modifier)
108
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]\/\w+/, separator]),
109
-
110
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]/, separator]),
111
- regex.pattern([/[^\s`\[\\]+/, separator]),
112
- ]),
113
- ]
114
-
115
- for (const variantPattern of variantPatterns) {
116
- yield regex.pattern([
117
- // Variants
118
- '((?=((',
119
- variantPattern,
120
- ')+))\\2)?',
121
-
122
- // Important (optional)
123
- /!?/,
124
-
125
- prefix,
126
-
127
- utility,
128
- ])
129
- }
130
-
131
- // 5. Inner matches
132
- yield /[^<>"'`\s.(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
133
- }
134
-
135
- // We want to capture any "special" characters
136
- // AND the characters immediately following them (if there is one)
137
- let SPECIALS = /([\[\]'"`])([^\[\]'"`])?/g
138
- let ALLOWED_CLASS_CHARACTERS = /[^"'`\s<>\]]+/
139
-
140
- /**
141
- * Clips a string ensuring that parentheses, quotes, etc… are balanced
142
- * Used for arbitrary values only
143
- *
144
- * We will go past the end of the balanced parens until we find a non-class character
145
- *
146
- * Depth matching behavior:
147
- * w-[calc(100%-theme('spacing[some_key][1.5]'))]']
148
- * ┬ ┬ ┬┬ ┬ ┬┬ ┬┬┬┬┬┬┬
149
- * 1 2 3 4 34 3 210 END
150
- * ╰────┴──────────┴────────┴────────┴┴───┴─┴┴┴
151
- *
152
- * @param {string} input
153
- */
154
- function clipAtBalancedParens(input) {
155
- // We are care about this for arbitrary values
156
- if (!input.includes('-[')) {
157
- return input
158
- }
159
-
160
- let depth = 0
161
- let openStringTypes = []
162
-
163
- // Find all parens, brackets, quotes, etc
164
- // Stop when we end at a balanced pair
165
- // This is naive and will treat mismatched parens as balanced
166
- // This shouldn't be a problem in practice though
167
- let matches = input.matchAll(SPECIALS)
168
-
169
- // We can't use lookbehind assertions because we have to support Safari
170
- // So, instead, we've emulated it using capture groups and we'll re-work the matches to accommodate
171
- matches = Array.from(matches).flatMap((match) => {
172
- const [, ...groups] = match
173
-
174
- return groups.map((group, idx) =>
175
- Object.assign([], match, {
176
- index: match.index + idx,
177
- 0: group,
178
- })
179
- )
180
- })
181
-
182
- for (let match of matches) {
183
- let char = match[0]
184
- let inStringType = openStringTypes[openStringTypes.length - 1]
185
-
186
- if (char === inStringType) {
187
- openStringTypes.pop()
188
- } else if (char === "'" || char === '"' || char === '`') {
189
- openStringTypes.push(char)
190
- }
191
-
192
- if (inStringType) {
193
- continue
194
- } else if (char === '[') {
195
- depth++
196
- continue
197
- } else if (char === ']') {
198
- depth--
199
- continue
200
- }
201
-
202
- // We've gone one character past the point where we should stop
203
- // This means that there was an extra closing `]`
204
- // We'll clip to just before it
205
- if (depth < 0) {
206
- return input.substring(0, match.index - 1)
207
- }
208
-
209
- // We've finished balancing the brackets but there still may be characters that can be included
210
- // For example in the class `text-[#336699]/[.35]`
211
- // The depth goes to `0` at the closing `]` but goes up again at the `[`
212
-
213
- // If we're at zero and encounter a non-class character then we clip the class there
214
- if (depth === 0 && !ALLOWED_CLASS_CHARACTERS.test(char)) {
215
- return input.substring(0, match.index)
216
- }
217
- }
218
-
219
- return input
220
- }
221
-
222
- // Regular utilities
223
- // {{modifier}:}*{namespace}{-{suffix}}*{/{opacityModifier}}?
224
-
225
- // Arbitrary values
226
- // {{modifier}:}*{namespace}-[{arbitraryValue}]{/{opacityModifier}}?
227
- // arbitraryValue: no whitespace, balanced quotes unless within quotes, balanced brackets unless within quotes
228
-
229
- // Arbitrary properties
230
- // {{modifier}:}*[{validCssPropertyName}:{arbitraryValue}]
@@ -1,47 +0,0 @@
1
- function isRoot(node) {
2
- return node.type === 'root'
3
- }
4
-
5
- function isAtLayer(node) {
6
- return node.type === 'atrule' && node.name === 'layer'
7
- }
8
-
9
- export default function (_context) {
10
- return (root, result) => {
11
- let found = false
12
-
13
- root.walkAtRules('tailwind', (node) => {
14
- if (found) return false
15
-
16
- if (node.parent && !(isRoot(node.parent) || isAtLayer(node.parent))) {
17
- found = true
18
- node.warn(
19
- result,
20
- [
21
- 'Nested @tailwind rules were detected, but are not supported.',
22
- "Consider using a prefix to scope Tailwind's classes: https://tailwindcss.com/docs/configuration#prefix",
23
- 'Alternatively, use the important selector strategy: https://tailwindcss.com/docs/configuration#selector-strategy',
24
- ].join('\n')
25
- )
26
- return false
27
- }
28
- })
29
-
30
- root.walkRules((rule) => {
31
- if (found) return false
32
-
33
- rule.walkRules((nestedRule) => {
34
- found = true
35
- nestedRule.warn(
36
- result,
37
- [
38
- 'Nested CSS was detected, but CSS nesting has not been configured correctly.',
39
- 'Please enable a CSS nesting plugin *before* Tailwind in your configuration.',
40
- 'See how here: https://tailwindcss.com/docs/using-with-preprocessors#nesting',
41
- ].join('\n')
42
- )
43
- return false
44
- })
45
- })
46
- }
47
- }