tailwindcss 0.0.0-insiders.bda8421 → 0.0.0-insiders.bdcd708

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 (279) hide show
  1. package/README.md +7 -11
  2. package/dist/chunk-5JIJA4QV.mjs +1 -0
  3. package/dist/chunk-C2OYBFIH.mjs +1 -0
  4. package/dist/chunk-DCG7AFIE.mjs +1 -0
  5. package/dist/colors-C__qRT83.d.ts +347 -0
  6. package/dist/colors.d.mts +347 -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 +1199 -0
  11. package/dist/default-theme.d.ts +1199 -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 +379 -0
  19. package/dist/lib.d.ts +3 -0
  20. package/dist/lib.js +38 -0
  21. package/dist/lib.mjs +38 -0
  22. package/dist/plugin.d.mts +11 -0
  23. package/dist/plugin.d.ts +134 -0
  24. package/dist/plugin.js +1 -0
  25. package/dist/plugin.mjs +1 -0
  26. package/dist/resolve-config-B4yBzhca.d.ts +29 -0
  27. package/dist/resolve-config-QUZ9b-Gn.d.mts +190 -0
  28. package/dist/types-DWdTiksJ.d.mts +128 -0
  29. package/index.css +950 -0
  30. package/package.json +76 -105
  31. package/preflight.css +398 -0
  32. package/theme.css +510 -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 -371
  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 -3
  51. package/lib/corePluginList.js +0 -191
  52. package/lib/corePlugins.js +0 -4311
  53. package/lib/css/LICENSE +0 -25
  54. package/lib/css/preflight.css +0 -386
  55. package/lib/featureFlags.js +0 -79
  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/evaluateTailwindFunctions.js +0 -238
  63. package/lib/lib/expandApplyAtRules.js +0 -553
  64. package/lib/lib/expandTailwindAtRules.js +0 -279
  65. package/lib/lib/findAtConfigPath.js +0 -46
  66. package/lib/lib/generateRules.js +0 -904
  67. package/lib/lib/getModuleDependencies.js +0 -99
  68. package/lib/lib/load-config.js +0 -57
  69. package/lib/lib/normalizeTailwindDirectives.js +0 -89
  70. package/lib/lib/offsets.js +0 -355
  71. package/lib/lib/partitionApplyAtRules.js +0 -58
  72. package/lib/lib/regex.js +0 -74
  73. package/lib/lib/remap-bitfield.js +0 -89
  74. package/lib/lib/resolveDefaultsAtRules.js +0 -167
  75. package/lib/lib/setupContextUtils.js +0 -1298
  76. package/lib/lib/setupTrackingContext.js +0 -166
  77. package/lib/lib/sharedState.js +0 -79
  78. package/lib/lib/substituteScreenAtRules.js +0 -31
  79. package/lib/plugin.js +0 -48
  80. package/lib/postcss-plugins/nesting/README.md +0 -42
  81. package/lib/postcss-plugins/nesting/index.js +0 -21
  82. package/lib/postcss-plugins/nesting/plugin.js +0 -89
  83. package/lib/processTailwindFeatures.js +0 -62
  84. package/lib/public/colors.js +0 -355
  85. package/lib/public/create-plugin.js +0 -17
  86. package/lib/public/default-config.js +0 -18
  87. package/lib/public/default-theme.js +0 -18
  88. package/lib/public/load-config.js +0 -12
  89. package/lib/public/resolve-config.js +0 -24
  90. package/lib/util/applyImportantSelector.js +0 -36
  91. package/lib/util/bigSign.js +0 -13
  92. package/lib/util/buildMediaQuery.js +0 -27
  93. package/lib/util/cloneDeep.js +0 -22
  94. package/lib/util/cloneNodes.js +0 -54
  95. package/lib/util/color.js +0 -116
  96. package/lib/util/colorNames.js +0 -752
  97. package/lib/util/configurePlugins.js +0 -23
  98. package/lib/util/createPlugin.js +0 -32
  99. package/lib/util/createUtilityPlugin.js +0 -53
  100. package/lib/util/dataTypes.js +0 -415
  101. package/lib/util/defaults.js +0 -27
  102. package/lib/util/escapeClassName.js +0 -24
  103. package/lib/util/escapeCommas.js +0 -13
  104. package/lib/util/flattenColorPalette.js +0 -18
  105. package/lib/util/formatVariantSelector.js +0 -270
  106. package/lib/util/getAllConfigs.js +0 -50
  107. package/lib/util/hashConfig.js +0 -21
  108. package/lib/util/isKeyframeRule.js +0 -13
  109. package/lib/util/isPlainObject.js +0 -17
  110. package/lib/util/isSyntacticallyValidPropertyValue.js +0 -74
  111. package/lib/util/log.js +0 -61
  112. package/lib/util/nameClass.js +0 -49
  113. package/lib/util/negateValue.js +0 -36
  114. package/lib/util/normalizeConfig.js +0 -282
  115. package/lib/util/normalizeScreens.js +0 -178
  116. package/lib/util/parseAnimationValue.js +0 -93
  117. package/lib/util/parseBoxShadowValue.js +0 -88
  118. package/lib/util/parseDependency.js +0 -47
  119. package/lib/util/parseGlob.js +0 -36
  120. package/lib/util/parseObjectStyles.js +0 -36
  121. package/lib/util/pluginUtils.js +0 -289
  122. package/lib/util/prefixSelector.js +0 -39
  123. package/lib/util/pseudoElements.js +0 -212
  124. package/lib/util/removeAlphaVariables.js +0 -31
  125. package/lib/util/resolveConfig.js +0 -256
  126. package/lib/util/resolveConfigPath.js +0 -70
  127. package/lib/util/responsive.js +0 -24
  128. package/lib/util/splitAtTopLevelOnly.js +0 -51
  129. package/lib/util/tap.js +0 -14
  130. package/lib/util/toColorValue.js +0 -13
  131. package/lib/util/toPath.js +0 -32
  132. package/lib/util/transformThemeValue.js +0 -73
  133. package/lib/util/validateConfig.js +0 -37
  134. package/lib/util/validateFormalSyntax.js +0 -26
  135. package/lib/util/withAlphaVariable.js +0 -79
  136. package/lib/value-parser/LICENSE +0 -22
  137. package/lib/value-parser/README.md +0 -3
  138. package/lib/value-parser/index.d.js +0 -2
  139. package/lib/value-parser/index.js +0 -22
  140. package/lib/value-parser/parse.js +0 -259
  141. package/lib/value-parser/stringify.js +0 -38
  142. package/lib/value-parser/unit.js +0 -86
  143. package/lib/value-parser/walk.js +0 -16
  144. package/loadConfig.d.ts +0 -4
  145. package/loadConfig.js +0 -2
  146. package/nesting/index.d.ts +0 -4
  147. package/nesting/index.js +0 -2
  148. package/peers/index.js +0 -96503
  149. package/plugin.d.ts +0 -11
  150. package/plugin.js +0 -2
  151. package/prettier.config.js +0 -19
  152. package/resolveConfig.d.ts +0 -31
  153. package/resolveConfig.js +0 -2
  154. package/screens.css +0 -1
  155. package/scripts/create-plugin-list.js +0 -10
  156. package/scripts/generate-types.js +0 -104
  157. package/scripts/release-channel.js +0 -18
  158. package/scripts/release-notes.js +0 -21
  159. package/scripts/type-utils.js +0 -27
  160. package/src/cli/build/deps.js +0 -56
  161. package/src/cli/build/index.js +0 -49
  162. package/src/cli/build/plugin.js +0 -437
  163. package/src/cli/build/utils.js +0 -76
  164. package/src/cli/build/watching.js +0 -229
  165. package/src/cli/help/index.js +0 -70
  166. package/src/cli/index.js +0 -216
  167. package/src/cli/init/index.js +0 -79
  168. package/src/cli-peer-dependencies.js +0 -15
  169. package/src/cli.js +0 -3
  170. package/src/corePluginList.js +0 -1
  171. package/src/corePlugins.js +0 -2965
  172. package/src/css/LICENSE +0 -25
  173. package/src/css/preflight.css +0 -386
  174. package/src/featureFlags.js +0 -62
  175. package/src/index.js +0 -1
  176. package/src/lib/cacheInvalidation.js +0 -52
  177. package/src/lib/collapseAdjacentRules.js +0 -58
  178. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  179. package/src/lib/content.js +0 -249
  180. package/src/lib/defaultExtractor.js +0 -230
  181. package/src/lib/evaluateTailwindFunctions.js +0 -272
  182. package/src/lib/expandApplyAtRules.js +0 -637
  183. package/src/lib/expandTailwindAtRules.js +0 -282
  184. package/src/lib/findAtConfigPath.js +0 -48
  185. package/src/lib/generateRules.js +0 -951
  186. package/src/lib/getModuleDependencies.js +0 -79
  187. package/src/lib/load-config.ts +0 -44
  188. package/src/lib/normalizeTailwindDirectives.js +0 -84
  189. package/src/lib/offsets.js +0 -432
  190. package/src/lib/partitionApplyAtRules.js +0 -52
  191. package/src/lib/regex.js +0 -74
  192. package/src/lib/remap-bitfield.js +0 -82
  193. package/src/lib/resolveDefaultsAtRules.js +0 -167
  194. package/src/lib/setupContextUtils.js +0 -1371
  195. package/src/lib/setupTrackingContext.js +0 -169
  196. package/src/lib/sharedState.js +0 -57
  197. package/src/lib/substituteScreenAtRules.js +0 -19
  198. package/src/plugin.js +0 -47
  199. package/src/postcss-plugins/nesting/README.md +0 -42
  200. package/src/postcss-plugins/nesting/index.js +0 -13
  201. package/src/postcss-plugins/nesting/plugin.js +0 -80
  202. package/src/processTailwindFeatures.js +0 -56
  203. package/src/public/colors.js +0 -322
  204. package/src/public/create-plugin.js +0 -2
  205. package/src/public/default-config.js +0 -4
  206. package/src/public/default-theme.js +0 -4
  207. package/src/public/load-config.js +0 -2
  208. package/src/public/resolve-config.js +0 -7
  209. package/src/util/applyImportantSelector.js +0 -27
  210. package/src/util/bigSign.js +0 -3
  211. package/src/util/buildMediaQuery.js +0 -22
  212. package/src/util/cloneDeep.js +0 -11
  213. package/src/util/cloneNodes.js +0 -49
  214. package/src/util/color.js +0 -88
  215. package/src/util/colorNames.js +0 -150
  216. package/src/util/configurePlugins.js +0 -23
  217. package/src/util/createPlugin.js +0 -27
  218. package/src/util/createUtilityPlugin.js +0 -37
  219. package/src/util/dataTypes.js +0 -406
  220. package/src/util/defaults.js +0 -17
  221. package/src/util/escapeClassName.js +0 -8
  222. package/src/util/escapeCommas.js +0 -3
  223. package/src/util/flattenColorPalette.js +0 -13
  224. package/src/util/formatVariantSelector.js +0 -324
  225. package/src/util/getAllConfigs.js +0 -38
  226. package/src/util/hashConfig.js +0 -5
  227. package/src/util/isKeyframeRule.js +0 -3
  228. package/src/util/isPlainObject.js +0 -8
  229. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  230. package/src/util/log.js +0 -29
  231. package/src/util/nameClass.js +0 -30
  232. package/src/util/negateValue.js +0 -24
  233. package/src/util/normalizeConfig.js +0 -301
  234. package/src/util/normalizeScreens.js +0 -140
  235. package/src/util/parseAnimationValue.js +0 -68
  236. package/src/util/parseBoxShadowValue.js +0 -72
  237. package/src/util/parseDependency.js +0 -44
  238. package/src/util/parseGlob.js +0 -24
  239. package/src/util/parseObjectStyles.js +0 -19
  240. package/src/util/pluginUtils.js +0 -307
  241. package/src/util/prefixSelector.js +0 -33
  242. package/src/util/pseudoElements.js +0 -171
  243. package/src/util/removeAlphaVariables.js +0 -24
  244. package/src/util/resolveConfig.js +0 -277
  245. package/src/util/resolveConfigPath.js +0 -66
  246. package/src/util/responsive.js +0 -10
  247. package/src/util/splitAtTopLevelOnly.js +0 -52
  248. package/src/util/tap.js +0 -4
  249. package/src/util/toColorValue.js +0 -3
  250. package/src/util/toPath.js +0 -26
  251. package/src/util/transformThemeValue.js +0 -62
  252. package/src/util/validateConfig.js +0 -26
  253. package/src/util/validateFormalSyntax.js +0 -34
  254. package/src/util/withAlphaVariable.js +0 -49
  255. package/src/value-parser/LICENSE +0 -22
  256. package/src/value-parser/README.md +0 -3
  257. package/src/value-parser/index.d.ts +0 -177
  258. package/src/value-parser/index.js +0 -28
  259. package/src/value-parser/parse.js +0 -303
  260. package/src/value-parser/stringify.js +0 -41
  261. package/src/value-parser/unit.js +0 -118
  262. package/src/value-parser/walk.js +0 -18
  263. package/stubs/.gitignore +0 -1
  264. package/stubs/.prettierrc.json +0 -6
  265. package/stubs/config.full.js +0 -1062
  266. package/stubs/config.simple.js +0 -7
  267. package/stubs/postcss.config.cjs +0 -6
  268. package/stubs/postcss.config.js +0 -6
  269. package/stubs/tailwind.config.cjs +0 -2
  270. package/stubs/tailwind.config.js +0 -2
  271. package/stubs/tailwind.config.ts +0 -3
  272. package/tailwind.css +0 -5
  273. package/types/config.d.ts +0 -376
  274. package/types/generated/.gitkeep +0 -0
  275. package/types/generated/colors.d.ts +0 -298
  276. package/types/generated/corePluginList.d.ts +0 -1
  277. package/types/generated/default-theme.d.ts +0 -397
  278. package/types/index.d.ts +0 -11
  279. 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}]