tailwindcss 0.0.0-insiders.ea80db2 → 0.0.0-insiders.ea90d3a

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 (214) hide show
  1. package/README.md +13 -10
  2. package/defaultTheme.d.ts +2 -1
  3. package/lib/cli/build/deps.js +62 -0
  4. package/lib/cli/build/index.js +54 -0
  5. package/lib/cli/build/plugin.js +371 -0
  6. package/lib/cli/build/utils.js +88 -0
  7. package/lib/cli/build/watching.js +182 -0
  8. package/lib/cli/help/index.js +73 -0
  9. package/lib/cli/index.js +230 -0
  10. package/lib/cli/init/index.js +63 -0
  11. package/lib/cli-peer-dependencies.js +28 -7
  12. package/lib/cli.js +1 -759
  13. package/lib/corePluginList.js +16 -4
  14. package/lib/corePlugins.js +2421 -1738
  15. package/lib/css/preflight.css +31 -12
  16. package/lib/featureFlags.js +45 -25
  17. package/lib/index.js +1 -40
  18. package/lib/lib/cacheInvalidation.js +48 -25
  19. package/lib/lib/collapseAdjacentRules.js +17 -10
  20. package/lib/lib/collapseDuplicateDeclarations.js +13 -8
  21. package/lib/lib/content.js +214 -0
  22. package/lib/lib/defaultExtractor.js +240 -33
  23. package/lib/lib/detectNesting.js +21 -10
  24. package/lib/lib/evaluateTailwindFunctions.js +117 -50
  25. package/lib/lib/expandApplyAtRules.js +322 -215
  26. package/lib/lib/expandTailwindAtRules.js +132 -115
  27. package/lib/lib/findAtConfigPath.js +46 -0
  28. package/lib/lib/generateRules.js +466 -208
  29. package/lib/lib/getModuleDependencies.js +88 -37
  30. package/lib/lib/load-config.js +57 -0
  31. package/lib/lib/normalizeTailwindDirectives.js +38 -33
  32. package/lib/lib/offsets.js +355 -0
  33. package/lib/lib/partitionApplyAtRules.js +13 -8
  34. package/lib/lib/regex.js +74 -0
  35. package/lib/lib/remap-bitfield.js +89 -0
  36. package/lib/lib/resolveDefaultsAtRules.js +98 -74
  37. package/lib/lib/setupContextUtils.js +744 -319
  38. package/lib/lib/setupTrackingContext.js +63 -68
  39. package/lib/lib/sharedState.js +44 -17
  40. package/lib/lib/substituteScreenAtRules.js +14 -10
  41. package/lib/plugin.js +48 -0
  42. package/lib/postcss-plugins/nesting/README.md +2 -2
  43. package/lib/postcss-plugins/nesting/index.js +10 -6
  44. package/lib/postcss-plugins/nesting/plugin.js +24 -20
  45. package/lib/processTailwindFeatures.js +35 -30
  46. package/lib/public/colors.js +272 -246
  47. package/lib/public/create-plugin.js +9 -5
  48. package/lib/public/default-config.js +10 -6
  49. package/lib/public/default-theme.js +10 -6
  50. package/lib/public/load-config.js +12 -0
  51. package/lib/public/resolve-config.js +11 -6
  52. package/lib/util/applyImportantSelector.js +36 -0
  53. package/lib/util/bigSign.js +6 -1
  54. package/lib/util/buildMediaQuery.js +13 -6
  55. package/lib/util/cloneDeep.js +9 -6
  56. package/lib/util/cloneNodes.js +39 -10
  57. package/lib/util/color.js +67 -51
  58. package/lib/util/colorNames.js +752 -0
  59. package/lib/util/configurePlugins.js +7 -2
  60. package/lib/util/createPlugin.js +8 -5
  61. package/lib/util/createUtilityPlugin.js +13 -9
  62. package/lib/util/dataTypes.js +295 -113
  63. package/lib/util/defaults.js +12 -7
  64. package/lib/util/escapeClassName.js +13 -8
  65. package/lib/util/escapeCommas.js +7 -2
  66. package/lib/util/flattenColorPalette.js +11 -10
  67. package/lib/util/formatVariantSelector.js +235 -151
  68. package/lib/util/getAllConfigs.js +33 -12
  69. package/lib/util/hashConfig.js +9 -4
  70. package/lib/util/isKeyframeRule.js +7 -2
  71. package/lib/util/isPlainObject.js +8 -3
  72. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +25 -15
  73. package/lib/util/log.js +23 -13
  74. package/lib/util/nameClass.js +27 -10
  75. package/lib/util/negateValue.js +25 -8
  76. package/lib/util/normalizeConfig.js +124 -82
  77. package/lib/util/normalizeScreens.js +127 -8
  78. package/lib/util/parseAnimationValue.js +44 -40
  79. package/lib/util/parseBoxShadowValue.js +33 -62
  80. package/lib/util/parseDependency.js +39 -55
  81. package/lib/util/parseGlob.js +36 -0
  82. package/lib/util/parseObjectStyles.js +15 -10
  83. package/lib/util/pluginUtils.js +169 -59
  84. package/lib/util/prefixSelector.js +29 -10
  85. package/lib/util/pseudoElements.js +212 -0
  86. package/lib/util/removeAlphaVariables.js +31 -0
  87. package/lib/util/resolveConfig.js +96 -95
  88. package/lib/util/resolveConfigPath.js +29 -10
  89. package/lib/util/responsive.js +11 -6
  90. package/lib/util/splitAtTopLevelOnly.js +51 -0
  91. package/lib/util/tap.js +6 -1
  92. package/lib/util/toColorValue.js +7 -2
  93. package/lib/util/toPath.js +22 -4
  94. package/lib/util/transformThemeValue.js +40 -26
  95. package/lib/util/validateConfig.js +37 -0
  96. package/lib/util/validateFormalSyntax.js +26 -0
  97. package/lib/util/withAlphaVariable.js +27 -15
  98. package/lib/value-parser/LICENSE +22 -0
  99. package/lib/value-parser/README.md +3 -0
  100. package/lib/value-parser/index.d.js +2 -0
  101. package/lib/value-parser/index.js +22 -0
  102. package/lib/value-parser/parse.js +259 -0
  103. package/lib/value-parser/stringify.js +38 -0
  104. package/lib/value-parser/unit.js +86 -0
  105. package/lib/value-parser/walk.js +16 -0
  106. package/loadConfig.d.ts +4 -0
  107. package/loadConfig.js +2 -0
  108. package/nesting/index.d.ts +4 -0
  109. package/package.json +50 -43
  110. package/peers/index.js +72234 -50887
  111. package/plugin.d.ts +10 -5
  112. package/resolveConfig.d.ts +31 -0
  113. package/scripts/generate-types.js +52 -0
  114. package/scripts/release-channel.js +18 -0
  115. package/scripts/release-notes.js +21 -0
  116. package/scripts/type-utils.js +27 -0
  117. package/src/cli/build/deps.js +56 -0
  118. package/src/cli/build/index.js +49 -0
  119. package/src/cli/build/plugin.js +437 -0
  120. package/src/cli/build/utils.js +76 -0
  121. package/src/cli/build/watching.js +229 -0
  122. package/src/cli/help/index.js +70 -0
  123. package/src/cli/index.js +216 -0
  124. package/src/cli/init/index.js +79 -0
  125. package/src/cli-peer-dependencies.js +7 -1
  126. package/src/cli.js +1 -836
  127. package/src/corePluginList.js +1 -1
  128. package/src/corePlugins.js +665 -107
  129. package/src/css/preflight.css +31 -12
  130. package/src/featureFlags.js +10 -2
  131. package/src/index.js +1 -42
  132. package/src/lib/collapseAdjacentRules.js +5 -1
  133. package/src/lib/content.js +249 -0
  134. package/src/lib/defaultExtractor.js +215 -35
  135. package/src/lib/detectNesting.js +9 -1
  136. package/src/lib/evaluateTailwindFunctions.js +82 -8
  137. package/src/lib/expandApplyAtRules.js +329 -189
  138. package/src/lib/expandTailwindAtRules.js +46 -56
  139. package/src/lib/findAtConfigPath.js +48 -0
  140. package/src/lib/generateRules.js +439 -130
  141. package/src/lib/getModuleDependencies.js +70 -30
  142. package/src/lib/load-config.ts +44 -0
  143. package/src/lib/offsets.js +432 -0
  144. package/src/lib/regex.js +74 -0
  145. package/src/lib/remap-bitfield.js +82 -0
  146. package/src/lib/resolveDefaultsAtRules.js +57 -36
  147. package/src/lib/setupContextUtils.js +654 -182
  148. package/src/lib/setupTrackingContext.js +44 -58
  149. package/src/lib/sharedState.js +13 -4
  150. package/src/plugin.js +47 -0
  151. package/src/postcss-plugins/nesting/README.md +2 -2
  152. package/src/processTailwindFeatures.js +3 -2
  153. package/src/public/colors.js +22 -0
  154. package/src/public/default-config.js +1 -1
  155. package/src/public/default-theme.js +2 -2
  156. package/src/public/load-config.js +2 -0
  157. package/src/util/applyImportantSelector.js +27 -0
  158. package/src/util/buildMediaQuery.js +5 -3
  159. package/src/util/cloneNodes.js +35 -10
  160. package/src/util/color.js +35 -18
  161. package/src/util/colorNames.js +150 -0
  162. package/src/util/dataTypes.js +183 -25
  163. package/src/util/formatVariantSelector.js +272 -144
  164. package/src/util/getAllConfigs.js +21 -2
  165. package/src/util/isPlainObject.js +1 -1
  166. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  167. package/src/util/log.js +1 -1
  168. package/src/util/nameClass.js +4 -0
  169. package/src/util/negateValue.js +11 -3
  170. package/src/util/normalizeConfig.js +41 -10
  171. package/src/util/normalizeScreens.js +99 -4
  172. package/src/util/parseBoxShadowValue.js +3 -50
  173. package/src/util/parseDependency.js +37 -42
  174. package/src/util/parseGlob.js +24 -0
  175. package/src/util/pluginUtils.js +139 -24
  176. package/src/util/prefixSelector.js +29 -10
  177. package/src/util/pseudoElements.js +171 -0
  178. package/src/util/removeAlphaVariables.js +24 -0
  179. package/src/util/resolveConfig.js +70 -62
  180. package/src/util/resolveConfigPath.js +12 -1
  181. package/src/util/splitAtTopLevelOnly.js +52 -0
  182. package/src/util/toPath.js +1 -1
  183. package/src/util/transformThemeValue.js +13 -3
  184. package/src/util/validateConfig.js +26 -0
  185. package/src/util/validateFormalSyntax.js +34 -0
  186. package/src/util/withAlphaVariable.js +1 -1
  187. package/src/value-parser/LICENSE +22 -0
  188. package/src/value-parser/README.md +3 -0
  189. package/src/value-parser/index.d.ts +177 -0
  190. package/src/value-parser/index.js +28 -0
  191. package/src/value-parser/parse.js +303 -0
  192. package/src/value-parser/stringify.js +41 -0
  193. package/src/value-parser/unit.js +118 -0
  194. package/src/value-parser/walk.js +18 -0
  195. package/stubs/.gitignore +1 -0
  196. package/stubs/.prettierrc.json +6 -0
  197. package/stubs/{defaultConfig.stub.js → config.full.js} +287 -178
  198. package/stubs/postcss.config.js +6 -0
  199. package/stubs/tailwind.config.cjs +2 -0
  200. package/stubs/tailwind.config.js +2 -0
  201. package/stubs/tailwind.config.ts +3 -0
  202. package/types/config.d.ts +113 -60
  203. package/types/generated/colors.d.ts +22 -0
  204. package/types/generated/corePluginList.d.ts +1 -1
  205. package/types/generated/default-theme.d.ts +397 -0
  206. package/types/index.d.ts +11 -1
  207. package/CHANGELOG.md +0 -2099
  208. package/lib/constants.js +0 -37
  209. package/scripts/install-integrations.js +0 -27
  210. package/scripts/rebuildFixtures.js +0 -68
  211. package/src/constants.js +0 -17
  212. package/types.d.ts +0 -1
  213. /package/stubs/{simpleConfig.stub.js → config.simple.js} +0 -0
  214. /package/stubs/{defaultPostCssConfig.stub.js → postcss.config.cjs} +0 -0
@@ -0,0 +1,82 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * We must remap all the old bits to new bits for each set variant
5
+ * Only arbitrary variants are considered as those are the only
6
+ * ones that need to be re-sorted at this time
7
+ *
8
+ * An iterated process that removes and sets individual bits simultaneously
9
+ * will not work because we may have a new bit that is also a later old bit
10
+ * This means that we would be removing a previously set bit which we don't
11
+ * want to do
12
+ *
13
+ * For example (assume `bN` = `1<<N`)
14
+ * Given the "total" mapping `[[b1, b3], [b2, b4], [b3, b1], [b4, b2]]`
15
+ * The mapping is "total" because:
16
+ * 1. Every input and output is accounted for
17
+ * 2. All combinations are unique
18
+ * 3. No one input maps to multiple outputs and vice versa
19
+ * And, given an offset with all bits set:
20
+ * V = b1 | b2 | b3 | b4
21
+ *
22
+ * Let's explore the issue with removing and setting bits simultaneously:
23
+ * V & ~b1 | b3 = b2 | b3 | b4
24
+ * V & ~b2 | b4 = b3 | b4
25
+ * V & ~b3 | b1 = b1 | b4
26
+ * V & ~b4 | b2 = b1 | b2
27
+ *
28
+ * As you can see, we end up with the wrong result.
29
+ * This is because we're removing a bit that was previously set.
30
+ * And, thus the final result is missing b3 and b4.
31
+ *
32
+ * Now, let's explore the issue with removing the bits first:
33
+ * V & ~b1 = b2 | b3 | b4
34
+ * V & ~b2 = b3 | b4
35
+ * V & ~b3 = b4
36
+ * V & ~b4 = 0
37
+ *
38
+ * And then setting the bits:
39
+ * V | b3 = b3
40
+ * V | b4 = b3 | b4
41
+ * V | b1 = b1 | b3 | b4
42
+ * V | b2 = b1 | b2 | b3 | b4
43
+ *
44
+ * We get the correct result because we're not removing any bits that were
45
+ * previously set thus properly remapping the bits to the new order
46
+ *
47
+ * To collect this into a single operation that can be done simultaneously
48
+ * we must first create a mask for the old bits that are set and a mask for
49
+ * the new bits that are set. Then we can remove the old bits and set the new
50
+ * bits simultaneously in a "single" operation like so:
51
+ * OldMask = b1 | b2 | b3 | b4
52
+ * NewMask = b3 | b4 | b1 | b2
53
+ *
54
+ * So this:
55
+ * V & ~oldMask | newMask
56
+ *
57
+ * Expands to this:
58
+ * V & ~b1 & ~b2 & ~b3 & ~b4 | b3 | b4 | b1 | b2
59
+ *
60
+ * Which becomes this:
61
+ * b1 | b2 | b3 | b4
62
+ *
63
+ * Which is the correct result!
64
+ *
65
+ * @param {bigint} num
66
+ * @param {[bigint, bigint][]} mapping
67
+ */
68
+ export function remapBitfield(num, mapping) {
69
+ // Create masks for the old and new bits that are set
70
+ let oldMask = 0n
71
+ let newMask = 0n
72
+ for (let [oldBit, newBit] of mapping) {
73
+ if (num & oldBit) {
74
+ oldMask = oldMask | oldBit
75
+ newMask = newMask | newBit
76
+ }
77
+ }
78
+
79
+ // Remove all old bits
80
+ // Set all new bits
81
+ return (num & ~oldMask) | newMask
82
+ }
@@ -91,56 +91,77 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
91
91
  rule.remove()
92
92
  })
93
93
 
94
- for (let universal of universals) {
95
- /** @type {Map<string, Set<string>>} */
96
- let selectorGroups = new Map()
94
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
95
+ for (let universal of universals) {
96
+ /** @type {Map<string, Set<string>>} */
97
+ let selectorGroups = new Map()
98
+
99
+ let rules = variableNodeMap.get(universal.params) ?? []
100
+
101
+ for (let rule of rules) {
102
+ for (let selector of extractElementSelector(rule.selector)) {
103
+ // If selector contains a vendor prefix after a pseudo element or class,
104
+ // we consider them separately because merging the declarations into
105
+ // a single rule will cause browsers that do not understand the
106
+ // vendor prefix to throw out the whole rule
107
+ // Additionally if a selector contains `:has` we also consider
108
+ // it separately because FF only recently gained support for it
109
+ let selectorGroupName =
110
+ selector.includes(':-') || selector.includes('::-') || selector.includes(':has')
111
+ ? selector
112
+ : '__DEFAULT__'
113
+
114
+ let selectors = selectorGroups.get(selectorGroupName) ?? new Set()
115
+ selectorGroups.set(selectorGroupName, selectors)
116
+
117
+ selectors.add(selector)
118
+ }
119
+ }
97
120
 
98
- let rules = variableNodeMap.get(universal.params) ?? []
121
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
122
+ if (selectorGroups.size === 0) {
123
+ universal.remove()
124
+ continue
125
+ }
99
126
 
100
- for (let rule of rules) {
101
- for (let selector of extractElementSelector(rule.selector)) {
102
- // If selector contains a vendor prefix after a pseudo element or class,
103
- // we consider them separately because merging the declarations into
104
- // a single rule will cause browsers that do not understand the
105
- // vendor prefix to throw out the whole rule
106
- let selectorGroupName =
107
- selector.includes(':-') || selector.includes('::-') ? selector : '__DEFAULT__'
127
+ for (let [, selectors] of selectorGroups) {
128
+ let universalRule = postcss.rule({
129
+ source: universal.source,
130
+ })
108
131
 
109
- let selectors = selectorGroups.get(selectorGroupName) ?? new Set()
110
- selectorGroups.set(selectorGroupName, selectors)
132
+ universalRule.selectors = [...selectors]
111
133
 
112
- selectors.add(selector)
134
+ universalRule.append(universal.nodes.map((node) => node.clone()))
135
+ universal.before(universalRule)
136
+ }
113
137
  }
114
- }
115
138
 
116
- if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
117
- if (selectorGroups.size === 0) {
118
- universal.remove()
119
- continue
120
- }
121
-
122
- for (let [, selectors] of selectorGroups) {
123
- let universalRule = postcss.rule({
124
- source: universal.source,
125
- })
139
+ universal.remove()
140
+ }
141
+ } else if (universals.size) {
142
+ let universalRule = postcss.rule({
143
+ selectors: ['*', '::before', '::after'],
144
+ })
126
145
 
127
- universalRule.selectors = [...selectors]
146
+ for (let universal of universals) {
147
+ universalRule.append(universal.nodes)
128
148
 
129
- universalRule.append(universal.nodes.map((node) => node.clone()))
149
+ if (!universalRule.parent) {
130
150
  universal.before(universalRule)
131
151
  }
132
- } else {
133
- let universalRule = postcss.rule({
134
- source: universal.source,
135
- })
136
152
 
137
- universalRule.selectors = ['*', '::before', '::after']
153
+ if (!universalRule.source) {
154
+ universalRule.source = universal.source
155
+ }
138
156
 
139
- universalRule.append(universal.nodes)
140
- universal.before(universalRule)
157
+ universal.remove()
141
158
  }
142
159
 
143
- universal.remove()
160
+ let backdropRule = universalRule.clone({
161
+ selectors: ['::backdrop'],
162
+ })
163
+
164
+ universalRule.after(backdropRule)
144
165
  }
145
166
  }
146
167
  }