tailwindcss 0.0.0-insiders.ed61821 → 0.0.0-insiders.ed8ff92

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 (222) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +15 -7
  3. package/colors.d.ts +3 -0
  4. package/colors.js +2 -304
  5. package/defaultConfig.d.ts +3 -0
  6. package/defaultConfig.js +2 -4
  7. package/defaultTheme.d.ts +4 -0
  8. package/defaultTheme.js +2 -4
  9. package/lib/cli/build/deps.js +54 -0
  10. package/lib/cli/build/index.js +48 -0
  11. package/lib/cli/build/plugin.js +367 -0
  12. package/lib/cli/build/utils.js +78 -0
  13. package/lib/cli/build/watching.js +178 -0
  14. package/lib/cli/help/index.js +71 -0
  15. package/lib/cli/index.js +239 -0
  16. package/lib/cli/init/index.js +46 -0
  17. package/lib/cli-peer-dependencies.js +20 -7
  18. package/lib/cli.js +4 -702
  19. package/lib/constants.js +27 -20
  20. package/lib/corePluginList.js +22 -4
  21. package/lib/corePlugins.js +2558 -1744
  22. package/lib/css/preflight.css +22 -9
  23. package/lib/featureFlags.js +39 -25
  24. package/lib/index.js +4 -30
  25. package/lib/lib/cacheInvalidation.js +90 -0
  26. package/lib/lib/collapseAdjacentRules.js +28 -10
  27. package/lib/lib/collapseDuplicateDeclarations.js +83 -0
  28. package/lib/lib/content.js +177 -0
  29. package/lib/lib/defaultExtractor.js +241 -0
  30. package/lib/lib/detectNesting.js +27 -3
  31. package/lib/lib/evaluateTailwindFunctions.js +117 -50
  32. package/lib/lib/expandApplyAtRules.js +457 -159
  33. package/lib/lib/expandTailwindAtRules.js +169 -153
  34. package/lib/lib/findAtConfigPath.js +44 -0
  35. package/lib/lib/generateRules.js +621 -105
  36. package/lib/lib/getModuleDependencies.js +11 -8
  37. package/lib/lib/normalizeTailwindDirectives.js +45 -33
  38. package/lib/lib/offsets.js +299 -0
  39. package/lib/lib/partitionApplyAtRules.js +56 -0
  40. package/lib/lib/regex.js +60 -0
  41. package/lib/lib/remap-bitfield.js +87 -0
  42. package/lib/lib/resolveDefaultsAtRules.js +114 -81
  43. package/lib/lib/setupContextUtils.js +839 -364
  44. package/lib/lib/setupTrackingContext.js +67 -71
  45. package/lib/lib/sharedState.js +63 -14
  46. package/lib/lib/substituteScreenAtRules.js +13 -8
  47. package/lib/oxide/cli/build/deps.js +81 -0
  48. package/lib/oxide/cli/build/index.js +47 -0
  49. package/lib/oxide/cli/build/plugin.js +364 -0
  50. package/lib/oxide/cli/build/utils.js +77 -0
  51. package/lib/oxide/cli/build/watching.js +177 -0
  52. package/lib/oxide/cli/help/index.js +70 -0
  53. package/lib/oxide/cli/index.js +220 -0
  54. package/lib/oxide/cli/init/index.js +35 -0
  55. package/lib/oxide/cli.js +5 -0
  56. package/lib/oxide/postcss-plugin.js +2 -0
  57. package/lib/plugin.js +48 -0
  58. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  59. package/lib/postcss-plugins/nesting/index.js +19 -0
  60. package/lib/postcss-plugins/nesting/plugin.js +87 -0
  61. package/lib/processTailwindFeatures.js +36 -21
  62. package/lib/public/colors.js +331 -0
  63. package/lib/public/create-plugin.js +15 -0
  64. package/lib/public/default-config.js +16 -0
  65. package/lib/public/default-theme.js +16 -0
  66. package/lib/public/resolve-config.js +22 -0
  67. package/lib/util/bigSign.js +4 -1
  68. package/lib/util/buildMediaQuery.js +18 -24
  69. package/lib/util/cloneDeep.js +7 -6
  70. package/lib/util/cloneNodes.js +21 -3
  71. package/lib/util/color.js +54 -40
  72. package/lib/util/configurePlugins.js +5 -2
  73. package/lib/util/createPlugin.js +6 -6
  74. package/lib/util/createUtilityPlugin.js +12 -14
  75. package/lib/util/dataTypes.js +164 -100
  76. package/lib/util/defaults.js +12 -3
  77. package/lib/util/escapeClassName.js +9 -6
  78. package/lib/util/escapeCommas.js +5 -2
  79. package/lib/util/flattenColorPalette.js +9 -12
  80. package/lib/util/formatVariantSelector.js +351 -0
  81. package/lib/util/getAllConfigs.js +29 -10
  82. package/lib/util/hashConfig.js +6 -3
  83. package/lib/util/isKeyframeRule.js +5 -2
  84. package/lib/util/isPlainObject.js +5 -2
  85. package/lib/util/isSyntacticallyValidPropertyValue.js +72 -0
  86. package/lib/util/log.js +44 -22
  87. package/lib/util/nameClass.js +20 -8
  88. package/lib/util/negateValue.js +24 -7
  89. package/lib/util/normalizeConfig.js +281 -0
  90. package/lib/util/normalizeScreens.js +170 -0
  91. package/lib/util/parseAnimationValue.js +47 -39
  92. package/lib/util/parseBoxShadowValue.js +84 -0
  93. package/lib/util/parseDependency.js +38 -53
  94. package/lib/util/parseGlob.js +34 -0
  95. package/lib/util/parseObjectStyles.js +11 -8
  96. package/lib/util/pluginUtils.js +186 -181
  97. package/lib/util/prefixSelector.js +27 -13
  98. package/lib/util/removeAlphaVariables.js +29 -0
  99. package/lib/util/resolveConfig.js +98 -137
  100. package/lib/util/resolveConfigPath.js +11 -9
  101. package/lib/util/responsive.js +8 -5
  102. package/lib/util/splitAtTopLevelOnly.js +43 -0
  103. package/lib/util/tap.js +4 -1
  104. package/lib/util/toColorValue.js +5 -3
  105. package/lib/util/toPath.js +24 -3
  106. package/lib/util/transformThemeValue.js +49 -31
  107. package/lib/util/validateConfig.js +24 -0
  108. package/lib/util/validateFormalSyntax.js +24 -0
  109. package/lib/util/withAlphaVariable.js +47 -24
  110. package/nesting/index.js +2 -12
  111. package/oxide-node-api-shim/index.js +21 -0
  112. package/oxide-node-api-shim/package.json +5 -0
  113. package/package.json +61 -52
  114. package/peers/index.js +76301 -84138
  115. package/plugin.d.ts +11 -0
  116. package/plugin.js +1 -2
  117. package/resolveConfig.d.ts +12 -0
  118. package/resolveConfig.js +2 -7
  119. package/scripts/create-plugin-list.js +2 -2
  120. package/scripts/generate-types.js +105 -0
  121. package/scripts/release-channel.js +18 -0
  122. package/scripts/release-notes.js +21 -0
  123. package/scripts/swap-engines.js +40 -0
  124. package/scripts/type-utils.js +27 -0
  125. package/src/cli/build/deps.js +56 -0
  126. package/src/cli/build/index.js +49 -0
  127. package/src/cli/build/plugin.js +439 -0
  128. package/src/cli/build/utils.js +76 -0
  129. package/src/cli/build/watching.js +227 -0
  130. package/src/cli/help/index.js +70 -0
  131. package/src/cli/index.js +234 -0
  132. package/src/cli/init/index.js +50 -0
  133. package/src/cli-peer-dependencies.js +7 -1
  134. package/src/cli.js +4 -756
  135. package/src/corePluginList.js +1 -1
  136. package/src/corePlugins.js +1087 -590
  137. package/src/css/preflight.css +22 -9
  138. package/src/featureFlags.js +26 -10
  139. package/src/index.js +4 -33
  140. package/src/lib/cacheInvalidation.js +52 -0
  141. package/src/lib/collapseAdjacentRules.js +21 -2
  142. package/src/lib/collapseDuplicateDeclarations.js +93 -0
  143. package/src/lib/content.js +208 -0
  144. package/src/lib/defaultExtractor.js +217 -0
  145. package/src/lib/detectNesting.js +30 -3
  146. package/src/lib/evaluateTailwindFunctions.js +84 -10
  147. package/src/lib/expandApplyAtRules.js +508 -153
  148. package/src/lib/expandTailwindAtRules.js +127 -108
  149. package/src/lib/findAtConfigPath.js +48 -0
  150. package/src/lib/generateRules.js +648 -69
  151. package/src/lib/normalizeTailwindDirectives.js +10 -3
  152. package/src/lib/offsets.js +367 -0
  153. package/src/lib/partitionApplyAtRules.js +52 -0
  154. package/src/lib/regex.js +74 -0
  155. package/src/lib/remap-bitfield.js +82 -0
  156. package/src/lib/resolveDefaultsAtRules.js +98 -60
  157. package/src/lib/setupContextUtils.js +814 -246
  158. package/src/lib/setupTrackingContext.js +50 -61
  159. package/src/lib/sharedState.js +60 -6
  160. package/src/lib/substituteScreenAtRules.js +6 -3
  161. package/src/oxide/cli/build/deps.ts +91 -0
  162. package/src/oxide/cli/build/index.ts +47 -0
  163. package/src/oxide/cli/build/plugin.ts +436 -0
  164. package/src/oxide/cli/build/utils.ts +74 -0
  165. package/src/oxide/cli/build/watching.ts +225 -0
  166. package/src/oxide/cli/help/index.ts +69 -0
  167. package/src/oxide/cli/index.ts +212 -0
  168. package/src/oxide/cli/init/index.ts +32 -0
  169. package/src/oxide/cli.ts +1 -0
  170. package/src/oxide/postcss-plugin.ts +1 -0
  171. package/src/plugin.js +47 -0
  172. package/src/postcss-plugins/nesting/README.md +42 -0
  173. package/src/postcss-plugins/nesting/index.js +13 -0
  174. package/src/postcss-plugins/nesting/plugin.js +80 -0
  175. package/src/processTailwindFeatures.js +18 -3
  176. package/src/public/colors.js +300 -0
  177. package/src/public/create-plugin.js +2 -0
  178. package/src/public/default-config.js +4 -0
  179. package/src/public/default-theme.js +4 -0
  180. package/src/public/resolve-config.js +7 -0
  181. package/src/util/buildMediaQuery.js +14 -16
  182. package/src/util/cloneNodes.js +19 -2
  183. package/src/util/color.js +31 -14
  184. package/src/util/createUtilityPlugin.js +2 -2
  185. package/src/util/dataTypes.js +86 -21
  186. package/src/util/defaults.js +6 -0
  187. package/src/util/formatVariantSelector.js +412 -0
  188. package/src/util/getAllConfigs.js +19 -0
  189. package/src/util/isSyntacticallyValidPropertyValue.js +61 -0
  190. package/src/util/log.js +23 -22
  191. package/src/util/nameClass.js +6 -2
  192. package/src/util/negateValue.js +15 -5
  193. package/src/util/normalizeConfig.js +300 -0
  194. package/src/util/normalizeScreens.js +140 -0
  195. package/src/util/parseAnimationValue.js +7 -1
  196. package/src/util/parseBoxShadowValue.js +72 -0
  197. package/src/util/parseDependency.js +37 -38
  198. package/src/util/parseGlob.js +24 -0
  199. package/src/util/pluginUtils.js +177 -143
  200. package/src/util/prefixSelector.js +30 -13
  201. package/src/util/removeAlphaVariables.js +24 -0
  202. package/src/util/resolveConfig.js +86 -91
  203. package/src/util/splitAtTopLevelOnly.js +45 -0
  204. package/src/util/toPath.js +23 -1
  205. package/src/util/transformThemeValue.js +33 -8
  206. package/src/util/validateConfig.js +13 -0
  207. package/src/util/validateFormalSyntax.js +34 -0
  208. package/src/util/withAlphaVariable.js +14 -9
  209. package/stubs/defaultConfig.stub.js +313 -241
  210. package/stubs/simpleConfig.stub.js +1 -1
  211. package/types/config.d.ts +367 -0
  212. package/types/generated/.gitkeep +0 -0
  213. package/types/generated/colors.d.ts +276 -0
  214. package/types/generated/corePluginList.d.ts +1 -0
  215. package/types/generated/default-theme.d.ts +345 -0
  216. package/types/index.d.ts +7 -0
  217. package/CHANGELOG.md +0 -1744
  218. package/lib/lib/setupWatchingContext.js +0 -284
  219. package/nesting/plugin.js +0 -41
  220. package/scripts/install-integrations.js +0 -27
  221. package/scripts/rebuildFixtures.js +0 -68
  222. package/src/lib/setupWatchingContext.js +0 -307
@@ -2,60 +2,56 @@ import postcss from 'postcss'
2
2
  import selectorParser from 'postcss-selector-parser'
3
3
  import { flagEnabled } from '../featureFlags'
4
4
 
5
- function isPseudoElement(n) {
6
- if (n.type !== 'pseudo') {
7
- return false
8
- }
9
-
10
- return (
11
- n.value.startsWith('::') ||
12
- [':before', ':after', ':first-line', ':first-letter'].includes(n.value)
13
- )
5
+ let getNode = {
6
+ id(node) {
7
+ return selectorParser.attribute({
8
+ attribute: 'id',
9
+ operator: '=',
10
+ value: node.value,
11
+ quoteMark: '"',
12
+ })
13
+ },
14
14
  }
15
15
 
16
16
  function minimumImpactSelector(nodes) {
17
17
  let rest = nodes
18
- // Keep all pseudo & combinator types (:not([hidden]) ~ :not([hidden]))
19
- .filter((n) => n.type === 'pseudo' || n.type === 'combinator')
20
- // Remove leading pseudo's (:hover, :focus, ...)
21
- .filter((n, idx, all) => {
22
- // Keep pseudo elements
23
- if (isPseudoElement(n)) return true
18
+ .filter((node) => {
19
+ // Keep non-pseudo nodes
20
+ if (node.type !== 'pseudo') return true
21
+
22
+ // Keep pseudo nodes that have subnodes
23
+ // E.g.: `:not()` contains subnodes inside the parentheses
24
+ if (node.nodes.length > 0) return true
25
+
26
+ // Keep pseudo `elements`
27
+ // This implicitly means that we ignore pseudo `classes`
28
+ return (
29
+ node.value.startsWith('::') ||
30
+ [':before', ':after', ':first-line', ':first-letter'].includes(node.value)
31
+ )
32
+ })
33
+ .reverse()
24
34
 
25
- if (idx === 0 && n.type === 'pseudo') return false
26
- if (idx > 0 && n.type === 'pseudo' && all[idx - 1].type === 'pseudo') return false
35
+ let searchFor = new Set(['tag', 'class', 'id', 'attribute'])
27
36
 
28
- return true
29
- })
37
+ let splitPointIdx = rest.findIndex((n) => searchFor.has(n.type))
38
+ if (splitPointIdx === -1) return rest.reverse().join('').trim()
30
39
 
31
- let [bestNode] = nodes
32
-
33
- for (let [type, getNode = (n) => n] of [
34
- ['class'],
35
- [
36
- 'id',
37
- (n) =>
38
- selectorParser.attribute({
39
- attribute: 'id',
40
- operator: '=',
41
- value: n.value,
42
- quoteMark: '"',
43
- }),
44
- ],
45
- ['attribute'],
46
- ]) {
47
- let match = nodes.find((n) => n.type === type)
48
-
49
- if (match) {
50
- bestNode = getNode(match)
51
- break
52
- }
40
+ let node = rest[splitPointIdx]
41
+ let bestNode = getNode[node.type] ? getNode[node.type](node) : node
42
+
43
+ rest = rest.slice(0, splitPointIdx)
44
+
45
+ let combinatorIdx = rest.findIndex((n) => n.type === 'combinator' && n.value === '>')
46
+ if (combinatorIdx !== -1) {
47
+ rest.splice(0, combinatorIdx)
48
+ rest.unshift(selectorParser.universal())
53
49
  }
54
50
 
55
- return [bestNode, ...rest].join('').trim()
51
+ return [bestNode, ...rest.reverse()].join('').trim()
56
52
  }
57
53
 
58
- let elementSelectorParser = selectorParser((selectors) => {
54
+ export let elementSelectorParser = selectorParser((selectors) => {
59
55
  return selectors.map((s) => {
60
56
  let nodes = s.split((n) => n.type === 'combinator' && n.value === ' ').pop()
61
57
  return minimumImpactSelector(nodes)
@@ -75,6 +71,8 @@ function extractElementSelector(selector) {
75
71
  export default function resolveDefaultsAtRules({ tailwindConfig }) {
76
72
  return (root) => {
77
73
  let variableNodeMap = new Map()
74
+
75
+ /** @type {Set<import('postcss').AtRule>} */
78
76
  let universals = new Set()
79
77
 
80
78
  root.walkAtRules('defaults', (rule) => {
@@ -93,33 +91,73 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
93
91
  rule.remove()
94
92
  })
95
93
 
96
- for (let universal of universals) {
97
- let selectors = new Set()
94
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
95
+ for (let universal of universals) {
96
+ /** @type {Map<string, Set<string>>} */
97
+ let selectorGroups = new Map()
98
98
 
99
- let rules = variableNodeMap.get(universal.params) ?? []
99
+ let rules = variableNodeMap.get(universal.params) ?? []
100
100
 
101
- for (let rule of rules) {
102
- for (let selector of extractElementSelector(rule.selector)) {
103
- selectors.add(selector)
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
+ let selectorGroupName =
108
+ selector.includes(':-') || selector.includes('::-') ? selector : '__DEFAULT__'
109
+
110
+ let selectors = selectorGroups.get(selectorGroupName) ?? new Set()
111
+ selectorGroups.set(selectorGroupName, selectors)
112
+
113
+ selectors.add(selector)
114
+ }
115
+ }
116
+
117
+ if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
118
+ if (selectorGroups.size === 0) {
119
+ universal.remove()
120
+ continue
121
+ }
122
+
123
+ for (let [, selectors] of selectorGroups) {
124
+ let universalRule = postcss.rule({
125
+ source: universal.source,
126
+ })
127
+
128
+ universalRule.selectors = [...selectors]
129
+
130
+ universalRule.append(universal.nodes.map((node) => node.clone()))
131
+ universal.before(universalRule)
132
+ }
104
133
  }
105
- }
106
134
 
107
- if (selectors.size === 0) {
108
135
  universal.remove()
109
- continue
110
136
  }
137
+ } else if (universals.size) {
138
+ let universalRule = postcss.rule({
139
+ selectors: ['*', '::before', '::after'],
140
+ })
111
141
 
112
- let universalRule = postcss.rule()
142
+ for (let universal of universals) {
143
+ universalRule.append(universal.nodes)
113
144
 
114
- if (flagEnabled(tailwindConfig, 'optimizeUniversalDefaults')) {
115
- universalRule.selectors = [...selectors]
116
- } else {
117
- universalRule.selectors = ['*', '::before', '::after']
145
+ if (!universalRule.parent) {
146
+ universal.before(universalRule)
147
+ }
148
+
149
+ if (!universalRule.source) {
150
+ universalRule.source = universal.source
151
+ }
152
+
153
+ universal.remove()
118
154
  }
119
155
 
120
- universalRule.append(universal.nodes)
121
- universal.before(universalRule)
122
- universal.remove()
156
+ let backdropRule = universalRule.clone({
157
+ selectors: ['::backdrop'],
158
+ })
159
+
160
+ universalRule.after(backdropRule)
123
161
  }
124
162
  }
125
163
  }