Skip to content

Commit b5d4724

Browse files
committed
WIP
1 parent b7e0f11 commit b5d4724

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@
5656
"postcss-selector-parser": "^6.0.0",
5757
"pretty-hrtime": "^1.0.3",
5858
"reduce-css-calc": "^2.1.6",
59-
"resolve": "^1.14.2"
59+
"resolve": "^1.14.2",
60+
"specificity": "^0.4.1"
6061
},
6162
"browserslist": [
6263
"> 1%"

scripts/build.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ function buildDistFile(filename) {
3939
console.info('Building Tailwind!')
4040

4141
Promise.all([
42-
buildDistFile('base'),
43-
buildDistFile('components'),
42+
// buildDistFile('base'),
43+
// buildDistFile('components'),
4444
buildDistFile('utilities'),
45-
buildDistFile('tailwind'),
45+
// buildDistFile('tailwind'),
4646
]).then(() => {
4747
console.log('Finished Building Tailwind!')
4848
})

src/processTailwindFeatures.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import substituteClassApplyAtRules from './lib/substituteClassApplyAtRules'
1111
import corePlugins from './corePlugins'
1212
import processPlugins from './util/processPlugins'
1313

14+
import { calculate } from 'specificity'
15+
1416
export default function(getConfig) {
1517
return function(css) {
1618
const config = getConfig()
@@ -20,6 +22,34 @@ export default function(getConfig) {
2022
substituteTailwindAtRules(config, processedPlugins),
2123
evaluateTailwindFunctions(config),
2224
substituteVariantsAtRules(config, processedPlugins),
25+
function(css) {
26+
function buildSpecificityTable(css) {
27+
const classTable = {}
28+
29+
css.walkRules(rule => {
30+
rule.selectors.forEach(selector => {
31+
if (!_.has(classTable, selector)) {
32+
classTable[selector] = calculate(selector)[0].specificityArray[2]
33+
}
34+
})
35+
})
36+
37+
return classTable
38+
}
39+
40+
const specificityTable = buildSpecificityTable(css)
41+
const maxSpecificity = Math.max(
42+
...Object.entries(specificityTable).map(([key, value]) => value)
43+
)
44+
45+
css.walkRules(rule => {
46+
rule.selectors = rule.selectors.map(selector => {
47+
const multiplier = maxSpecificity - specificityTable[selector]
48+
49+
return `${':root'.repeat(multiplier)} ${selector}`.trim()
50+
})
51+
})
52+
},
2353
substituteResponsiveAtRules(config),
2454
substituteScreenAtRules(config),
2555
substituteClassApplyAtRules(config, processedPlugins.utilities),

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4803,6 +4803,11 @@ source-map@^0.7.3:
48034803
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
48044804
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
48054805

4806+
specificity@^0.4.1:
4807+
version "0.4.1"
4808+
resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
4809+
integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
4810+
48064811
split-string@^3.0.1, split-string@^3.0.2:
48074812
version "3.1.0"
48084813
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"

0 commit comments

Comments
 (0)