tailwindcss 0.0.0-insiders.bdc87ae → 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 -4339
  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 -181
  61. package/lib/lib/defaultExtractor.js +0 -273
  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 -907
  67. package/lib/lib/getModuleDependencies.js +0 -99
  68. package/lib/lib/load-config.js +0 -61
  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 -38
  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 -421
  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 -281
  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 -35
  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 -72
  127. package/lib/util/responsive.js +0 -24
  128. package/lib/util/splitAtTopLevelOnly.js +0 -47
  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 -96671
  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 -3003
  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 -208
  180. package/src/lib/defaultExtractor.js +0 -255
  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 -55
  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 -26
  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 -412
  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 -299
  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 -23
  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 -68
  246. package/src/util/responsive.js +0 -10
  247. package/src/util/splitAtTopLevelOnly.js +0 -48
  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,208 +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 normalizePath from 'normalize-path'
8
- import { parseGlob } from '../util/parseGlob'
9
- import { env } from './sharedState'
10
-
11
- /** @typedef {import('../../types/config.js').RawFile} RawFile */
12
- /** @typedef {import('../../types/config.js').FilePath} FilePath */
13
-
14
- /**
15
- * @typedef {object} ContentPath
16
- * @property {string} original
17
- * @property {string} base
18
- * @property {string | null} glob
19
- * @property {boolean} ignore
20
- * @property {string} pattern
21
- */
22
-
23
- /**
24
- * Turn a list of content paths (absolute or not; glob or not) into a list of
25
- * absolute file paths that exist on the filesystem
26
- *
27
- * If there are symlinks in the path then multiple paths will be returned
28
- * one for the symlink and one for the actual file
29
- *
30
- * @param {*} context
31
- * @param {import('tailwindcss').Config} tailwindConfig
32
- * @returns {ContentPath[]}
33
- */
34
- export function parseCandidateFiles(context, tailwindConfig) {
35
- let files = tailwindConfig.content.files
36
-
37
- // Normalize the file globs
38
- files = files.filter((filePath) => typeof filePath === 'string')
39
- files = files.map(normalizePath)
40
-
41
- // Split into included and excluded globs
42
- let tasks = fastGlob.generateTasks(files)
43
-
44
- /** @type {ContentPath[]} */
45
- let included = []
46
-
47
- /** @type {ContentPath[]} */
48
- let excluded = []
49
-
50
- for (const task of tasks) {
51
- included.push(...task.positive.map((filePath) => parseFilePath(filePath, false)))
52
- excluded.push(...task.negative.map((filePath) => parseFilePath(filePath, true)))
53
- }
54
-
55
- let paths = [...included, ...excluded]
56
-
57
- // Resolve paths relative to the config file or cwd
58
- paths = resolveRelativePaths(context, paths)
59
-
60
- // Resolve symlinks if possible
61
- paths = paths.flatMap(resolvePathSymlinks)
62
-
63
- // Update cached patterns
64
- paths = paths.map(resolveGlobPattern)
65
-
66
- return paths
67
- }
68
-
69
- /**
70
- *
71
- * @param {string} filePath
72
- * @param {boolean} ignore
73
- * @returns {ContentPath}
74
- */
75
- function parseFilePath(filePath, ignore) {
76
- let contentPath = {
77
- original: filePath,
78
- base: filePath,
79
- ignore,
80
- pattern: filePath,
81
- glob: null,
82
- }
83
-
84
- if (isGlob(filePath)) {
85
- Object.assign(contentPath, parseGlob(filePath))
86
- }
87
-
88
- return contentPath
89
- }
90
-
91
- /**
92
- *
93
- * @param {ContentPath} contentPath
94
- * @returns {ContentPath}
95
- */
96
- function resolveGlobPattern(contentPath) {
97
- // This is required for Windows support to properly pick up Glob paths.
98
- // Afaik, this technically shouldn't be needed but there's probably
99
- // some internal, direct path matching with a normalized path in
100
- // a package which can't handle mixed directory separators
101
- let base = normalizePath(contentPath.base)
102
-
103
- // If the user's file path contains any special characters (like parens) for instance fast-glob
104
- // is like "OOOH SHINY" and treats them as such. So we have to escape the base path to fix this
105
- base = fastGlob.escapePath(base)
106
-
107
- contentPath.pattern = contentPath.glob ? `${base}/${contentPath.glob}` : base
108
- contentPath.pattern = contentPath.ignore ? `!${contentPath.pattern}` : contentPath.pattern
109
-
110
- return contentPath
111
- }
112
-
113
- /**
114
- * Resolve each path relative to the config file (when possible) if the experimental flag is enabled
115
- * Otherwise, resolve relative to the current working directory
116
- *
117
- * @param {any} context
118
- * @param {ContentPath[]} contentPaths
119
- * @returns {ContentPath[]}
120
- */
121
- function resolveRelativePaths(context, contentPaths) {
122
- let resolveFrom = []
123
-
124
- // Resolve base paths relative to the config file (when possible) if the experimental flag is enabled
125
- if (context.userConfigPath && context.tailwindConfig.content.relative) {
126
- resolveFrom = [path.dirname(context.userConfigPath)]
127
- }
128
-
129
- return contentPaths.map((contentPath) => {
130
- contentPath.base = path.resolve(...resolveFrom, contentPath.base)
131
-
132
- return contentPath
133
- })
134
- }
135
-
136
- /**
137
- * Resolve the symlink for the base directory / file in each path
138
- * These are added as additional dependencies to watch for changes because
139
- * some tools (like webpack) will only watch the actual file or directory
140
- * but not the symlink itself even in projects that use monorepos.
141
- *
142
- * @param {ContentPath} contentPath
143
- * @returns {ContentPath[]}
144
- */
145
- function resolvePathSymlinks(contentPath) {
146
- let paths = [contentPath]
147
-
148
- try {
149
- let resolvedPath = fs.realpathSync(contentPath.base)
150
- if (resolvedPath !== contentPath.base) {
151
- paths.push({
152
- ...contentPath,
153
- base: resolvedPath,
154
- })
155
- }
156
- } catch {
157
- // TODO: log this?
158
- }
159
-
160
- return paths
161
- }
162
-
163
- /**
164
- * @param {any} context
165
- * @param {ContentPath[]} candidateFiles
166
- * @param {Map<string, number>} fileModifiedMap
167
- * @returns {[{ content: string, extension: string }[], Map<string, number>]}
168
- */
169
- export function resolvedChangedContent(context, candidateFiles, fileModifiedMap) {
170
- let changedContent = context.tailwindConfig.content.files
171
- .filter((item) => typeof item.raw === 'string')
172
- .map(({ raw, extension = 'html' }) => ({ content: raw, extension }))
173
-
174
- let [changedFiles, mTimesToCommit] = resolveChangedFiles(candidateFiles, fileModifiedMap)
175
-
176
- for (let changedFile of changedFiles) {
177
- let extension = path.extname(changedFile).slice(1)
178
- changedContent.push({ file: changedFile, extension })
179
- }
180
-
181
- return [changedContent, mTimesToCommit]
182
- }
183
-
184
- /**
185
- *
186
- * @param {ContentPath[]} candidateFiles
187
- * @param {Map<string, number>} fileModifiedMap
188
- * @returns {[Set<string>, Map<string, number>]}
189
- */
190
- function resolveChangedFiles(candidateFiles, fileModifiedMap) {
191
- let paths = candidateFiles.map((contentPath) => contentPath.pattern)
192
- let mTimesToCommit = new Map()
193
-
194
- let changedFiles = new Set()
195
- env.DEBUG && console.time('Finding changed files')
196
- let files = fastGlob.sync(paths, { absolute: true })
197
- for (let file of files) {
198
- let prevModified = fileModifiedMap.get(file) || -Infinity
199
- let modified = fs.statSync(file).mtimeMs
200
-
201
- if (modified > prevModified) {
202
- changedFiles.add(file)
203
- mTimesToCommit.set(file, modified)
204
- }
205
- }
206
- env.DEBUG && console.timeEnd('Finding changed files')
207
- return [changedFiles, mTimesToCommit]
208
- }
@@ -1,255 +0,0 @@
1
- import * as regex from './regex'
2
- import { splitAtTopLevelOnly } from '../util/splitAtTopLevelOnly'
3
-
4
- export function defaultExtractor(context) {
5
- let patterns = Array.from(buildRegExps(context))
6
-
7
- /**
8
- * @param {string} content
9
- */
10
- return (content) => {
11
- /** @type {(string|string)[]} */
12
- let results = []
13
-
14
- for (let pattern of patterns) {
15
- for (let result of content.match(pattern) ?? []) {
16
- results.push(clipAtBalancedParens(result))
17
- }
18
- }
19
-
20
- // Extract any subclasses from languages like Slim and Pug, eg:
21
- // div.flex.px-5.underline
22
- for (let result of results.slice()) {
23
- let segments = splitAtTopLevelOnly(result, '.')
24
-
25
- for (let idx = 0; idx < segments.length; idx++) {
26
- let segment = segments[idx]
27
- if (idx >= segments.length - 1) {
28
- results.push(segment)
29
- continue
30
- }
31
-
32
- // If the next segment is a number, discard both, for example seeing
33
- // `px-1` and `5` means the real candidate was `px-1.5` which is already
34
- // captured.
35
- let next = Number(segments[idx + 1])
36
- if (isNaN(next)) {
37
- results.push(segment)
38
- } else {
39
- idx++
40
- }
41
- }
42
- }
43
-
44
- return results
45
- }
46
- }
47
-
48
- function* buildRegExps(context) {
49
- let separator = context.tailwindConfig.separator
50
- let prefix =
51
- context.tailwindConfig.prefix !== ''
52
- ? regex.optional(regex.pattern([/-?/, regex.escape(context.tailwindConfig.prefix)]))
53
- : ''
54
-
55
- let utility = regex.any([
56
- // Arbitrary properties (without square brackets)
57
- /\[[^\s:'"`]+:[^\s\[\]]+\]/,
58
-
59
- // Arbitrary properties with balanced square brackets
60
- // This is a targeted fix to continue to allow theme()
61
- // with square brackets to work in arbitrary properties
62
- // while fixing a problem with the regex matching too much
63
- /\[[^\s:'"`\]]+:[^\s]+?\[[^\s]+\][^\s]+?\]/,
64
-
65
- // Utilities
66
- regex.pattern([
67
- // Utility Name / Group Name
68
- regex.any([
69
- /-?(?:\w+)/,
70
-
71
- // This is here to make sure @container supports everything that other utilities do
72
- /@(?:\w+)/,
73
- ]),
74
-
75
- // Normal/Arbitrary values
76
- regex.optional(
77
- regex.any([
78
- regex.pattern([
79
- // Arbitrary values
80
- regex.any([
81
- /-(?:\w+-)*\['[^\s]+'\]/,
82
- /-(?:\w+-)*\["[^\s]+"\]/,
83
- /-(?:\w+-)*\[`[^\s]+`\]/,
84
- /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s:\[\]]+\]/,
85
- ]),
86
-
87
- // Not immediately followed by an `{[(`
88
- /(?![{([]])/,
89
-
90
- // optionally followed by an opacity modifier
91
- /(?:\/[^\s'"`\\><$]*)?/,
92
- ]),
93
-
94
- regex.pattern([
95
- // Arbitrary values
96
- regex.any([
97
- /-(?:\w+-)*\['[^\s]+'\]/,
98
- /-(?:\w+-)*\["[^\s]+"\]/,
99
- /-(?:\w+-)*\[`[^\s]+`\]/,
100
- /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s\[\]]+\]/,
101
- ]),
102
-
103
- // Not immediately followed by an `{[(`
104
- /(?![{([]])/,
105
-
106
- // optionally followed by an opacity modifier
107
- /(?:\/[^\s'"`\\$]*)?/,
108
- ]),
109
-
110
- // Normal values w/o quotes — may include an opacity modifier
111
- /[-\/][^\s'"`\\$={><]*/,
112
- ])
113
- ),
114
- ]),
115
- ])
116
-
117
- let variantPatterns = [
118
- // Without quotes
119
- regex.any([
120
- // This is here to provide special support for the `@` variant
121
- regex.pattern([/@\[[^\s"'`]+\](\/[^\s"'`]+)?/, separator]),
122
-
123
- // With variant modifier (e.g.: group-[..]/modifier)
124
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]\/[\w_-]+/, separator]),
125
-
126
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]/, separator]),
127
- regex.pattern([/[^\s"'`\[\\]+/, separator]),
128
- ]),
129
-
130
- // With quotes allowed
131
- regex.any([
132
- // With variant modifier (e.g.: group-[..]/modifier)
133
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]\/[\w_-]+/, separator]),
134
-
135
- regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]/, separator]),
136
- regex.pattern([/[^\s`\[\\]+/, separator]),
137
- ]),
138
- ]
139
-
140
- for (const variantPattern of variantPatterns) {
141
- yield regex.pattern([
142
- // Variants
143
- '((?=((',
144
- variantPattern,
145
- ')+))\\2)?',
146
-
147
- // Important (optional)
148
- /!?/,
149
-
150
- prefix,
151
-
152
- utility,
153
- ])
154
- }
155
-
156
- // 5. Inner matches
157
- yield /[^<>"'`\s.(){}[\]#=%$][^<>"'`\s(){}[\]#=%$]*[^<>"'`\s.(){}[\]#=%:$]/g
158
- }
159
-
160
- // We want to capture any "special" characters
161
- // AND the characters immediately following them (if there is one)
162
- let SPECIALS = /([\[\]'"`])([^\[\]'"`])?/g
163
- let ALLOWED_CLASS_CHARACTERS = /[^"'`\s<>\]]+/
164
-
165
- /**
166
- * Clips a string ensuring that parentheses, quotes, etc… are balanced
167
- * Used for arbitrary values only
168
- *
169
- * We will go past the end of the balanced parens until we find a non-class character
170
- *
171
- * Depth matching behavior:
172
- * w-[calc(100%-theme('spacing[some_key][1.5]'))]']
173
- * ┬ ┬ ┬┬ ┬ ┬┬ ┬┬┬┬┬┬┬
174
- * 1 2 3 4 34 3 210 END
175
- * ╰────┴──────────┴────────┴────────┴┴───┴─┴┴┴
176
- *
177
- * @param {string} input
178
- */
179
- function clipAtBalancedParens(input) {
180
- // We are care about this for arbitrary values
181
- if (!input.includes('-[')) {
182
- return input
183
- }
184
-
185
- let depth = 0
186
- let openStringTypes = []
187
-
188
- // Find all parens, brackets, quotes, etc
189
- // Stop when we end at a balanced pair
190
- // This is naive and will treat mismatched parens as balanced
191
- // This shouldn't be a problem in practice though
192
- let matches = input.matchAll(SPECIALS)
193
-
194
- // We can't use lookbehind assertions because we have to support Safari
195
- // So, instead, we've emulated it using capture groups and we'll re-work the matches to accommodate
196
- matches = Array.from(matches).flatMap((match) => {
197
- const [, ...groups] = match
198
-
199
- return groups.map((group, idx) =>
200
- Object.assign([], match, {
201
- index: match.index + idx,
202
- 0: group,
203
- })
204
- )
205
- })
206
-
207
- for (let match of matches) {
208
- let char = match[0]
209
- let inStringType = openStringTypes[openStringTypes.length - 1]
210
-
211
- if (char === inStringType) {
212
- openStringTypes.pop()
213
- } else if (char === "'" || char === '"' || char === '`') {
214
- openStringTypes.push(char)
215
- }
216
-
217
- if (inStringType) {
218
- continue
219
- } else if (char === '[') {
220
- depth++
221
- continue
222
- } else if (char === ']') {
223
- depth--
224
- continue
225
- }
226
-
227
- // We've gone one character past the point where we should stop
228
- // This means that there was an extra closing `]`
229
- // We'll clip to just before it
230
- if (depth < 0) {
231
- return input.substring(0, match.index - 1)
232
- }
233
-
234
- // We've finished balancing the brackets but there still may be characters that can be included
235
- // For example in the class `text-[#336699]/[.35]`
236
- // The depth goes to `0` at the closing `]` but goes up again at the `[`
237
-
238
- // If we're at zero and encounter a non-class character then we clip the class there
239
- if (depth === 0 && !ALLOWED_CLASS_CHARACTERS.test(char)) {
240
- return input.substring(0, match.index)
241
- }
242
- }
243
-
244
- return input
245
- }
246
-
247
- // Regular utilities
248
- // {{modifier}:}*{namespace}{-{suffix}}*{/{opacityModifier}}?
249
-
250
- // Arbitrary values
251
- // {{modifier}:}*{namespace}-[{arbitraryValue}]{/{opacityModifier}}?
252
- // arbitraryValue: no whitespace, balanced quotes unless within quotes, balanced brackets unless within quotes
253
-
254
- // Arbitrary properties
255
- // {{modifier}:}*[{validCssPropertyName}:{arbitraryValue}]