forked from hplush/slowreader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpseudo-classes.ts
More file actions
30 lines (25 loc) · 876 Bytes
/
pseudo-classes.ts
File metadata and controls
30 lines (25 loc) · 876 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
// 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.
import type { Plugin } from 'postcss'
const PSEUDO = [':focus', ':hover', ':active', ':focus-visible']
export default {
postcssPlugin: 'pseudo-classes',
Rule(rule) {
if (!rule.selector.includes(':')) return
let extra: string[] = []
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)
}
}
} satisfies Plugin