forked from hplush/slowreader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpseudo-classes.cjs
More file actions
31 lines (27 loc) · 856 Bytes
/
Copy pathpseudo-classes.cjs
File metadata and controls
31 lines (27 loc) · 856 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// PostCSS plugin to add .is-pseudo-active for each :active and so on
// for other pseudo-classes (:hover, :active, :focus-visible).
// We are then using these classes in Storybook and KeyUX.
const PSEUDO = [':focus', ':hover', ':active', ':focus-visible']
/**
* @type {import('postcss').Plugin}
*/
module.exports = {
postcssPlugin: 'pseudo-classes',
Rule(rule) {
if (!rule.selector.includes(':')) return
let extra = []
for (let selector of rule.selectors) {
for (let pseudo of PSEUDO) {
if (selector.includes(pseudo)) {
extra.push(
selector.replaceAll(pseudo, `.is-pseudo-${pseudo.slice(1)}`)
)
}
}
}
extra = extra.filter(selector => !rule.selectors.includes(selector))
if (extra.length > 0) {
rule.selectors = rule.selectors.concat(...extra)
}
}
}