tailwindcss 0.0.0-insiders.d2bb6f1 → 0.0.0-insiders.d2fdddf

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 (278) hide show
  1. package/README.md +5 -6
  2. package/dist/chunk-G32FJCSR.mjs +1 -0
  3. package/dist/chunk-HTB5LLOP.mjs +1 -0
  4. package/dist/chunk-IPWY7FQ4.mjs +35 -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 +3 -0
  17. package/dist/flatten-color-palette.mjs +1 -0
  18. package/dist/lib.d.mts +377 -0
  19. package/dist/lib.d.ts +3 -0
  20. package/dist/lib.js +35 -0
  21. package/dist/lib.mjs +1 -0
  22. package/dist/plugin.d.mts +11 -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-B254mqw1.d.mts +98 -0
  29. package/index.css +886 -3
  30. package/package.json +76 -101
  31. package/preflight.css +385 -0
  32. package/theme.css +462 -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/index.js +0 -57
  42. package/lib/cli/build/plugin.js +0 -429
  43. package/lib/cli/build/utils.js +0 -88
  44. package/lib/cli/build/watching.js +0 -182
  45. package/lib/cli/help/index.js +0 -73
  46. package/lib/cli/index.js +0 -231
  47. package/lib/cli/init/index.js +0 -63
  48. package/lib/cli.js +0 -3
  49. package/lib/corePluginList.js +0 -190
  50. package/lib/corePlugins.js +0 -4237
  51. package/lib/css/LICENSE +0 -25
  52. package/lib/css/preflight.css +0 -386
  53. package/lib/featureFlags.js +0 -84
  54. package/lib/index.js +0 -2
  55. package/lib/lib/cacheInvalidation.js +0 -94
  56. package/lib/lib/collapseAdjacentRules.js +0 -63
  57. package/lib/lib/collapseDuplicateDeclarations.js +0 -85
  58. package/lib/lib/content.js +0 -207
  59. package/lib/lib/defaultExtractor.js +0 -249
  60. package/lib/lib/detectNesting.js +0 -45
  61. package/lib/lib/evaluateTailwindFunctions.js +0 -238
  62. package/lib/lib/expandApplyAtRules.js +0 -540
  63. package/lib/lib/expandTailwindAtRules.js +0 -316
  64. package/lib/lib/findAtConfigPath.js +0 -46
  65. package/lib/lib/generateRules.js +0 -896
  66. package/lib/lib/getModuleDependencies.js +0 -99
  67. package/lib/lib/handleImportAtRules.js +0 -50
  68. package/lib/lib/load-config.js +0 -53
  69. package/lib/lib/normalizeTailwindDirectives.js +0 -74
  70. package/lib/lib/offsets.js +0 -306
  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 -165
  75. package/lib/lib/setupContextUtils.js +0 -1268
  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 -166
  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 -64
  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 -407
  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 -78
  112. package/lib/util/nameClass.js +0 -49
  113. package/lib/util/negateValue.js +0 -36
  114. package/lib/util/normalizeConfig.js +0 -310
  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 -287
  122. package/lib/util/prefixSelector.js +0 -39
  123. package/lib/util/pseudoElements.js +0 -209
  124. package/lib/util/removeAlphaVariables.js +0 -31
  125. package/lib/util/resolveConfig.js +0 -263
  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 -48
  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/plugin.d.ts +0 -11
  149. package/plugin.js +0 -2
  150. package/prettier.config.js +0 -19
  151. package/resolveConfig.d.ts +0 -31
  152. package/resolveConfig.js +0 -2
  153. package/screens.css +0 -1
  154. package/scripts/create-plugin-list.js +0 -10
  155. package/scripts/generate-types.js +0 -104
  156. package/scripts/release-channel.js +0 -18
  157. package/scripts/release-notes.js +0 -21
  158. package/scripts/type-utils.js +0 -27
  159. package/src/cli/build/index.js +0 -53
  160. package/src/cli/build/plugin.js +0 -466
  161. package/src/cli/build/utils.js +0 -76
  162. package/src/cli/build/watching.js +0 -229
  163. package/src/cli/help/index.js +0 -70
  164. package/src/cli/index.js +0 -217
  165. package/src/cli/init/index.js +0 -79
  166. package/src/cli.js +0 -3
  167. package/src/corePluginList.js +0 -1
  168. package/src/corePlugins.js +0 -2895
  169. package/src/css/LICENSE +0 -25
  170. package/src/css/preflight.css +0 -386
  171. package/src/featureFlags.js +0 -64
  172. package/src/index.js +0 -1
  173. package/src/lib/cacheInvalidation.js +0 -52
  174. package/src/lib/collapseAdjacentRules.js +0 -58
  175. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  176. package/src/lib/content.js +0 -240
  177. package/src/lib/defaultExtractor.js +0 -225
  178. package/src/lib/detectNesting.js +0 -47
  179. package/src/lib/evaluateTailwindFunctions.js +0 -272
  180. package/src/lib/expandApplyAtRules.js +0 -620
  181. package/src/lib/expandTailwindAtRules.js +0 -326
  182. package/src/lib/findAtConfigPath.js +0 -48
  183. package/src/lib/generateRules.js +0 -936
  184. package/src/lib/getModuleDependencies.js +0 -79
  185. package/src/lib/handleImportAtRules.js +0 -34
  186. package/src/lib/load-config.ts +0 -39
  187. package/src/lib/normalizeTailwindDirectives.js +0 -57
  188. package/src/lib/offsets.js +0 -373
  189. package/src/lib/partitionApplyAtRules.js +0 -52
  190. package/src/lib/regex.js +0 -74
  191. package/src/lib/remap-bitfield.js +0 -82
  192. package/src/lib/resolveDefaultsAtRules.js +0 -163
  193. package/src/lib/setupContextUtils.js +0 -1334
  194. package/src/lib/setupTrackingContext.js +0 -169
  195. package/src/lib/sharedState.js +0 -57
  196. package/src/lib/substituteScreenAtRules.js +0 -19
  197. package/src/plugin.js +0 -133
  198. package/src/postcss-plugins/nesting/README.md +0 -42
  199. package/src/postcss-plugins/nesting/index.js +0 -13
  200. package/src/postcss-plugins/nesting/plugin.js +0 -80
  201. package/src/processTailwindFeatures.js +0 -59
  202. package/src/public/colors.js +0 -322
  203. package/src/public/create-plugin.js +0 -2
  204. package/src/public/default-config.js +0 -4
  205. package/src/public/default-theme.js +0 -4
  206. package/src/public/load-config.js +0 -2
  207. package/src/public/resolve-config.js +0 -7
  208. package/src/util/applyImportantSelector.js +0 -27
  209. package/src/util/bigSign.js +0 -3
  210. package/src/util/buildMediaQuery.js +0 -22
  211. package/src/util/cloneDeep.js +0 -11
  212. package/src/util/cloneNodes.js +0 -49
  213. package/src/util/color.js +0 -88
  214. package/src/util/colorNames.js +0 -150
  215. package/src/util/configurePlugins.js +0 -23
  216. package/src/util/createPlugin.js +0 -27
  217. package/src/util/createUtilityPlugin.js +0 -37
  218. package/src/util/dataTypes.js +0 -392
  219. package/src/util/defaults.js +0 -17
  220. package/src/util/escapeClassName.js +0 -8
  221. package/src/util/escapeCommas.js +0 -3
  222. package/src/util/flattenColorPalette.js +0 -13
  223. package/src/util/formatVariantSelector.js +0 -324
  224. package/src/util/getAllConfigs.js +0 -38
  225. package/src/util/hashConfig.js +0 -5
  226. package/src/util/isKeyframeRule.js +0 -3
  227. package/src/util/isPlainObject.js +0 -8
  228. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  229. package/src/util/log.js +0 -53
  230. package/src/util/nameClass.js +0 -30
  231. package/src/util/negateValue.js +0 -24
  232. package/src/util/normalizeConfig.js +0 -328
  233. package/src/util/normalizeScreens.js +0 -140
  234. package/src/util/parseAnimationValue.js +0 -68
  235. package/src/util/parseBoxShadowValue.js +0 -72
  236. package/src/util/parseDependency.js +0 -44
  237. package/src/util/parseGlob.js +0 -24
  238. package/src/util/parseObjectStyles.js +0 -19
  239. package/src/util/pluginUtils.js +0 -303
  240. package/src/util/prefixSelector.js +0 -33
  241. package/src/util/pseudoElements.js +0 -167
  242. package/src/util/removeAlphaVariables.js +0 -24
  243. package/src/util/resolveConfig.js +0 -295
  244. package/src/util/resolveConfigPath.js +0 -66
  245. package/src/util/responsive.js +0 -10
  246. package/src/util/splitAtTopLevelOnly.js +0 -52
  247. package/src/util/tap.js +0 -4
  248. package/src/util/toColorValue.js +0 -3
  249. package/src/util/toPath.js +0 -26
  250. package/src/util/transformThemeValue.js +0 -62
  251. package/src/util/validateConfig.js +0 -36
  252. package/src/util/validateFormalSyntax.js +0 -34
  253. package/src/util/withAlphaVariable.js +0 -49
  254. package/src/value-parser/LICENSE +0 -22
  255. package/src/value-parser/README.md +0 -3
  256. package/src/value-parser/index.d.ts +0 -177
  257. package/src/value-parser/index.js +0 -28
  258. package/src/value-parser/parse.js +0 -303
  259. package/src/value-parser/stringify.js +0 -41
  260. package/src/value-parser/unit.js +0 -118
  261. package/src/value-parser/walk.js +0 -18
  262. package/stubs/.gitignore +0 -1
  263. package/stubs/.prettierrc.json +0 -6
  264. package/stubs/config.full.js +0 -1062
  265. package/stubs/config.simple.js +0 -7
  266. package/stubs/postcss.config.cjs +0 -5
  267. package/stubs/postcss.config.js +0 -5
  268. package/stubs/tailwind.config.cjs +0 -2
  269. package/stubs/tailwind.config.js +0 -2
  270. package/stubs/tailwind.config.ts +0 -3
  271. package/tailwind.css +0 -5
  272. package/types/config.d.ts +0 -372
  273. package/types/generated/.gitkeep +0 -0
  274. package/types/generated/colors.d.ts +0 -298
  275. package/types/generated/corePluginList.d.ts +0 -1
  276. package/types/generated/default-theme.d.ts +0 -397
  277. package/types/index.d.ts +0 -11
  278. package/variants.css +0 -1
@@ -1,303 +0,0 @@
1
- import escapeCommas from './escapeCommas'
2
- import { withAlphaValue } from './withAlphaVariable'
3
- import {
4
- normalize,
5
- length,
6
- number,
7
- percentage,
8
- url,
9
- color as validateColor,
10
- genericName,
11
- familyName,
12
- image,
13
- absoluteSize,
14
- relativeSize,
15
- position,
16
- lineWidth,
17
- shadow,
18
- } from './dataTypes'
19
- import negateValue from './negateValue'
20
- import { backgroundSize } from './validateFormalSyntax'
21
-
22
- /**
23
- * @param {import('postcss-selector-parser').Container} selectors
24
- * @param {(className: string) => string} updateClass
25
- * @returns {string}
26
- */
27
- export function updateAllClasses(selectors, updateClass) {
28
- selectors.walkClasses((sel) => {
29
- sel.value = updateClass(sel.value)
30
-
31
- if (sel.raws && sel.raws.value) {
32
- sel.raws.value = escapeCommas(sel.raws.value)
33
- }
34
- })
35
- }
36
-
37
- function resolveArbitraryValue(modifier, validate) {
38
- if (!isArbitraryValue(modifier)) {
39
- return undefined
40
- }
41
-
42
- let value = modifier.slice(1, -1)
43
-
44
- if (!validate(value)) {
45
- return undefined
46
- }
47
-
48
- return normalize(value)
49
- }
50
-
51
- function asNegativeValue(modifier, lookup = {}, validate) {
52
- let positiveValue = lookup[modifier]
53
-
54
- if (positiveValue !== undefined) {
55
- return negateValue(positiveValue)
56
- }
57
-
58
- if (isArbitraryValue(modifier)) {
59
- let resolved = resolveArbitraryValue(modifier, validate)
60
-
61
- if (resolved === undefined) {
62
- return undefined
63
- }
64
-
65
- return negateValue(resolved)
66
- }
67
- }
68
-
69
- export function asValue(modifier, options = {}, { validate = () => true } = {}) {
70
- let value = options.values?.[modifier]
71
-
72
- if (value !== undefined) {
73
- return value
74
- }
75
-
76
- if (options.supportsNegativeValues && modifier.startsWith('-')) {
77
- return asNegativeValue(modifier.slice(1), options.values, validate)
78
- }
79
-
80
- return resolveArbitraryValue(modifier, validate)
81
- }
82
-
83
- function isArbitraryValue(input) {
84
- return input.startsWith('[') && input.endsWith(']')
85
- }
86
-
87
- function splitUtilityModifier(modifier) {
88
- let slashIdx = modifier.lastIndexOf('/')
89
-
90
- // If the `/` is inside an arbitrary, we want to find the previous one if any
91
- // This logic probably isn't perfect but it should work for most cases
92
- let arbitraryStartIdx = modifier.lastIndexOf('[', slashIdx)
93
- let arbitraryEndIdx = modifier.indexOf(']', slashIdx)
94
-
95
- let isNextToArbitrary = modifier[slashIdx - 1] === ']' || modifier[slashIdx + 1] === '['
96
-
97
- // Backtrack to the previous `/` if the one we found was inside an arbitrary
98
- if (!isNextToArbitrary) {
99
- if (arbitraryStartIdx !== -1 && arbitraryEndIdx !== -1) {
100
- if (arbitraryStartIdx < slashIdx && slashIdx < arbitraryEndIdx) {
101
- slashIdx = modifier.lastIndexOf('/', arbitraryStartIdx)
102
- }
103
- }
104
- }
105
-
106
- if (slashIdx === -1 || slashIdx === modifier.length - 1) {
107
- return [modifier, undefined]
108
- }
109
-
110
- let arbitrary = isArbitraryValue(modifier)
111
-
112
- // The modifier could be of the form `[foo]/[bar]`
113
- // We want to handle this case properly
114
- // without affecting `[foo/bar]`
115
- if (arbitrary && !modifier.includes(']/[')) {
116
- return [modifier, undefined]
117
- }
118
-
119
- return [modifier.slice(0, slashIdx), modifier.slice(slashIdx + 1)]
120
- }
121
-
122
- export function parseColorFormat(value) {
123
- if (typeof value === 'string' && value.includes('<alpha-value>')) {
124
- let oldValue = value
125
-
126
- return ({ opacityValue = 1 }) => oldValue.replace('<alpha-value>', opacityValue)
127
- }
128
-
129
- return value
130
- }
131
-
132
- function unwrapArbitraryModifier(modifier) {
133
- return normalize(modifier.slice(1, -1))
134
- }
135
-
136
- export function asColor(modifier, options = {}, { tailwindConfig = {} } = {}) {
137
- if (options.values?.[modifier] !== undefined) {
138
- return parseColorFormat(options.values?.[modifier])
139
- }
140
-
141
- // TODO: Hoist this up to getMatchingTypes or something
142
- // We do this here because we need the alpha value (if any)
143
- let [color, alpha] = splitUtilityModifier(modifier)
144
-
145
- if (alpha !== undefined) {
146
- let normalizedColor =
147
- options.values?.[color] ?? (isArbitraryValue(color) ? color.slice(1, -1) : undefined)
148
-
149
- if (normalizedColor === undefined) {
150
- return undefined
151
- }
152
-
153
- normalizedColor = parseColorFormat(normalizedColor)
154
-
155
- if (isArbitraryValue(alpha)) {
156
- return withAlphaValue(normalizedColor, unwrapArbitraryModifier(alpha))
157
- }
158
-
159
- if (tailwindConfig.theme?.opacity?.[alpha] === undefined) {
160
- return undefined
161
- }
162
-
163
- return withAlphaValue(normalizedColor, tailwindConfig.theme.opacity[alpha])
164
- }
165
-
166
- return asValue(modifier, options, { validate: validateColor })
167
- }
168
-
169
- export function asLookupValue(modifier, options = {}) {
170
- return options.values?.[modifier]
171
- }
172
-
173
- function guess(validate) {
174
- return (modifier, options) => {
175
- return asValue(modifier, options, { validate })
176
- }
177
- }
178
-
179
- export let typeMap = {
180
- any: asValue,
181
- color: asColor,
182
- url: guess(url),
183
- image: guess(image),
184
- length: guess(length),
185
- percentage: guess(percentage),
186
- position: guess(position),
187
- lookup: asLookupValue,
188
- 'generic-name': guess(genericName),
189
- 'family-name': guess(familyName),
190
- number: guess(number),
191
- 'line-width': guess(lineWidth),
192
- 'absolute-size': guess(absoluteSize),
193
- 'relative-size': guess(relativeSize),
194
- shadow: guess(shadow),
195
- size: guess(backgroundSize),
196
- }
197
-
198
- let supportedTypes = Object.keys(typeMap)
199
-
200
- function splitAtFirst(input, delim) {
201
- let idx = input.indexOf(delim)
202
- if (idx === -1) return [undefined, input]
203
- return [input.slice(0, idx), input.slice(idx + 1)]
204
- }
205
-
206
- export function coerceValue(types, modifier, options, tailwindConfig) {
207
- if (options.values && modifier in options.values) {
208
- for (let { type } of types ?? []) {
209
- let result = typeMap[type](modifier, options, {
210
- tailwindConfig,
211
- })
212
-
213
- if (result === undefined) {
214
- continue
215
- }
216
-
217
- return [result, type, null]
218
- }
219
- }
220
-
221
- if (isArbitraryValue(modifier)) {
222
- let arbitraryValue = modifier.slice(1, -1)
223
- let [explicitType, value] = splitAtFirst(arbitraryValue, ':')
224
-
225
- // It could be that this resolves to `url(https` which is not a valid
226
- // identifier. We currently only support "simple" words with dashes or
227
- // underscores. E.g.: family-name
228
- if (!/^[\w-_]+$/g.test(explicitType)) {
229
- value = arbitraryValue
230
- }
231
-
232
- //
233
- else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) {
234
- return []
235
- }
236
-
237
- if (value.length > 0 && supportedTypes.includes(explicitType)) {
238
- return [asValue(`[${value}]`, options), explicitType, null]
239
- }
240
- }
241
-
242
- let matches = getMatchingTypes(types, modifier, options, tailwindConfig)
243
-
244
- // Find first matching type
245
- for (let match of matches) {
246
- return match
247
- }
248
-
249
- return []
250
- }
251
-
252
- /**
253
- *
254
- * @param {{type: string}[]} types
255
- * @param {string} rawModifier
256
- * @param {any} options
257
- * @param {any} tailwindConfig
258
- * @returns {Iterator<[value: string, type: string, modifier: string | null]>}
259
- */
260
- export function* getMatchingTypes(types, rawModifier, options, tailwindConfig) {
261
- let [modifier, utilityModifier] = splitUtilityModifier(rawModifier)
262
-
263
- let canUseUtilityModifier =
264
- options.modifiers != null &&
265
- (options.modifiers === 'any' ||
266
- (typeof options.modifiers === 'object' &&
267
- ((utilityModifier && isArbitraryValue(utilityModifier)) ||
268
- utilityModifier in options.modifiers)))
269
-
270
- if (!canUseUtilityModifier) {
271
- modifier = rawModifier
272
- utilityModifier = undefined
273
- }
274
-
275
- if (utilityModifier !== undefined && modifier === '') {
276
- modifier = 'DEFAULT'
277
- }
278
-
279
- // Check the full value first
280
- // TODO: Move to asValue… somehow
281
- if (utilityModifier !== undefined) {
282
- if (typeof options.modifiers === 'object') {
283
- let configValue = options.modifiers?.[utilityModifier] ?? null
284
- if (configValue !== null) {
285
- utilityModifier = configValue
286
- } else if (isArbitraryValue(utilityModifier)) {
287
- utilityModifier = unwrapArbitraryModifier(utilityModifier)
288
- }
289
- }
290
- }
291
-
292
- for (let { type } of types ?? []) {
293
- let result = typeMap[type](modifier, options, {
294
- tailwindConfig,
295
- })
296
-
297
- if (result === undefined) {
298
- continue
299
- }
300
-
301
- yield [result, type, utilityModifier ?? null]
302
- }
303
- }
@@ -1,33 +0,0 @@
1
- import parser from 'postcss-selector-parser'
2
-
3
- /**
4
- * @template {string | import('postcss-selector-parser').Root} T
5
- *
6
- * Prefix all classes in the selector with the given prefix
7
- *
8
- * It can take either a string or a selector AST and will return the same type
9
- *
10
- * @param {string} prefix
11
- * @param {T} selector
12
- * @param {boolean} prependNegative
13
- * @returns {T}
14
- */
15
- export default function (prefix, selector, prependNegative = false) {
16
- if (prefix === '') {
17
- return selector
18
- }
19
-
20
- /** @type {import('postcss-selector-parser').Root} */
21
- let ast = typeof selector === 'string' ? parser().astSync(selector) : selector
22
-
23
- ast.walkClasses((classSelector) => {
24
- let baseClass = classSelector.value
25
- let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-')
26
-
27
- classSelector.value = shouldPlaceNegativeBeforePrefix
28
- ? `-${prefix}${baseClass.slice(1)}`
29
- : `${prefix}${baseClass}`
30
- })
31
-
32
- return typeof selector === 'string' ? ast.toString() : ast
33
- }
@@ -1,167 +0,0 @@
1
- /** @typedef {import('postcss-selector-parser').Root} Root */
2
- /** @typedef {import('postcss-selector-parser').Selector} Selector */
3
- /** @typedef {import('postcss-selector-parser').Pseudo} Pseudo */
4
- /** @typedef {import('postcss-selector-parser').Node} Node */
5
-
6
- // There are some pseudo-elements that may or may not be:
7
-
8
- // **Actionable**
9
- // Zero or more user-action pseudo-classes may be attached to the pseudo-element itself
10
- // structural-pseudo-classes are NOT allowed but we don't make
11
- // The spec is not clear on whether this is allowed or not — but in practice it is.
12
-
13
- // **Terminal**
14
- // It MUST be placed at the end of a selector
15
- //
16
- // This is the required in the spec. However, some pseudo elements are not "terminal" because
17
- // they represent a "boundary piercing" that is compiled out by a build step.
18
-
19
- // **Jumpable**
20
- // Any terminal element may "jump" over combinators when moving to the end of the selector
21
- //
22
- // This is a backwards-compat quirk of pseudo element variants from earlier versions of Tailwind CSS.
23
-
24
- /** @typedef {'terminal' | 'actionable' | 'jumpable'} PseudoProperty */
25
-
26
- /** @type {Record<string, PseudoProperty[]>} */
27
- let elementProperties = {
28
- // Pseudo elements from the spec
29
- '::after': ['terminal', 'jumpable'],
30
- '::backdrop': ['terminal', 'jumpable'],
31
- '::before': ['terminal', 'jumpable'],
32
- '::cue': ['terminal'],
33
- '::cue-region': ['terminal'],
34
- '::first-letter': ['terminal', 'jumpable'],
35
- '::first-line': ['terminal', 'jumpable'],
36
- '::grammar-error': ['terminal'],
37
- '::marker': ['terminal', 'jumpable'],
38
- '::part': ['terminal', 'actionable'],
39
- '::placeholder': ['terminal', 'jumpable'],
40
- '::selection': ['terminal', 'jumpable'],
41
- '::slotted': ['terminal'],
42
- '::spelling-error': ['terminal'],
43
- '::target-text': ['terminal'],
44
-
45
- // Pseudo elements from the spec with special rules
46
- '::file-selector-button': ['terminal', 'actionable'],
47
-
48
- // Library-specific pseudo elements used by component libraries
49
- // These are Shadow DOM-like
50
- '::deep': ['actionable'],
51
- '::v-deep': ['actionable'],
52
- '::ng-deep': ['actionable'],
53
-
54
- // Note: As a rule, double colons (::) should be used instead of a single colon
55
- // (:). This distinguishes pseudo-classes from pseudo-elements. However, since
56
- // this distinction was not present in older versions of the W3C spec, most
57
- // browsers support both syntaxes for the original pseudo-elements.
58
- ':after': ['terminal', 'jumpable'],
59
- ':before': ['terminal', 'jumpable'],
60
- ':first-letter': ['terminal', 'jumpable'],
61
- ':first-line': ['terminal', 'jumpable'],
62
-
63
- // The default value is used when the pseudo-element is not recognized
64
- // Because it's not recognized, we don't know if it's terminal or not
65
- // So we assume it can be moved AND can have user-action pseudo classes attached to it
66
- __default__: ['terminal', 'actionable'],
67
- }
68
-
69
- /**
70
- * @param {Selector} sel
71
- * @returns {Selector}
72
- */
73
- export function movePseudos(sel) {
74
- let [pseudos] = movablePseudos(sel)
75
-
76
- // Remove all pseudo elements from their respective selectors
77
- pseudos.forEach(([sel, pseudo]) => sel.removeChild(pseudo))
78
-
79
- // Re-add them to the end of the selector in the correct order.
80
- // This moves terminal pseudo elements to the end of the
81
- // selector otherwise the selector will not be valid.
82
- //
83
- // Examples:
84
- // - `before:hover:text-center` would result in `.before\:hover\:text-center:hover::before`
85
- // - `hover:before:text-center` would result in `.hover\:before\:text-center:hover::before`
86
- //
87
- // The selector `::before:hover` does not work but we
88
- // can make it work for you by flipping the order.
89
- sel.nodes.push(...pseudos.map(([, pseudo]) => pseudo))
90
-
91
- return sel
92
- }
93
-
94
- /** @typedef {[sel: Selector, pseudo: Pseudo, attachedTo: Pseudo | null]} MovablePseudo */
95
- /** @typedef {[pseudos: MovablePseudo[], lastSeenElement: Pseudo | null]} MovablePseudosResult */
96
-
97
- /**
98
- * @param {Selector} sel
99
- * @returns {MovablePseudosResult}
100
- */
101
- function movablePseudos(sel) {
102
- /** @type {MovablePseudo[]} */
103
- let buffer = []
104
-
105
- /** @type {Pseudo | null} */
106
- let lastSeenElement = null
107
-
108
- for (let node of sel.nodes) {
109
- if (node.type === 'combinator') {
110
- buffer = buffer.filter(([, node]) => propertiesForPseudo(node).includes('jumpable'))
111
- lastSeenElement = null
112
- } else if (node.type === 'pseudo') {
113
- if (isMovablePseudoElement(node)) {
114
- lastSeenElement = node
115
- buffer.push([sel, node, null])
116
- } else if (lastSeenElement && isAttachablePseudoClass(node, lastSeenElement)) {
117
- buffer.push([sel, node, lastSeenElement])
118
- } else {
119
- lastSeenElement = null
120
- }
121
-
122
- for (let sub of node.nodes ?? []) {
123
- let [movable, lastSeenElementInSub] = movablePseudos(sub)
124
- lastSeenElement = lastSeenElementInSub || lastSeenElement
125
- buffer.push(...movable)
126
- }
127
- }
128
- }
129
-
130
- return [buffer, lastSeenElement]
131
- }
132
-
133
- /**
134
- * @param {Node} node
135
- * @returns {boolean}
136
- */
137
- function isPseudoElement(node) {
138
- return node.value.startsWith('::') || elementProperties[node.value] !== undefined
139
- }
140
-
141
- /**
142
- * @param {Node} node
143
- * @returns {boolean}
144
- */
145
- function isMovablePseudoElement(node) {
146
- return isPseudoElement(node) && propertiesForPseudo(node).includes('terminal')
147
- }
148
-
149
- /**
150
- * @param {Node} node
151
- * @param {Pseudo} pseudo
152
- * @returns {boolean}
153
- */
154
- function isAttachablePseudoClass(node, pseudo) {
155
- if (node.type !== 'pseudo') return false
156
- if (isPseudoElement(node)) return false
157
-
158
- return propertiesForPseudo(pseudo).includes('actionable')
159
- }
160
-
161
- /**
162
- * @param {Pseudo} pseudo
163
- * @returns {PseudoProperty[]}
164
- */
165
- function propertiesForPseudo(pseudo) {
166
- return elementProperties[pseudo.value] ?? elementProperties.__default__
167
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * This function removes any uses of CSS variables used as an alpha channel
3
- *
4
- * This is required for selectors like `:visited` which do not allow
5
- * changes in opacity or external control using CSS variables.
6
- *
7
- * @param {import('postcss').Container} container
8
- * @param {string[]} toRemove
9
- */
10
- export function removeAlphaVariables(container, toRemove) {
11
- container.walkDecls((decl) => {
12
- if (toRemove.includes(decl.prop)) {
13
- decl.remove()
14
-
15
- return
16
- }
17
-
18
- for (let varName of toRemove) {
19
- if (decl.value.includes(`/ var(${varName})`)) {
20
- decl.value = decl.value.replace(`/ var(${varName})`, '')
21
- }
22
- }
23
- })
24
- }