UNPKG

1.91 kBJavaScriptView Raw
1import fs from 'fs'
2
3export const buildPropsStylesheet = ({filename,props}, {selector,prefix}) => {
4 const file = fs.createWriteStream("../src/" + filename)
5
6 let appendedMeta = ''
7
8 if (filename.includes('shadows') || filename.includes('animations')) {
9 file.write(`@import 'props.media.css';\n\n`)
10 }
11
12 if (filename.includes('shadows')) {
13 let dark_propsMeta = ``
14 let dark_props = Object.entries(props)
15 .filter(([prop, val]) =>
16 prop.includes('-@media:dark'))
17
18 dark_props.forEach(([prop, val], index) => {
19 let v = props[prop]
20 let extract = prop.slice(2, prop.length-('-@media:dark'.length))
21 let p = prefix && prefix !== "''"
22 ? `--${prefix}-` + extract
23 : `--${extract}`
24
25 dark_propsMeta += ` ${p}: ${val};${index !== dark_props.length-1 ? '\n' : ''}`
26 })
27 appendedMeta += `
28@media (--OSdark) {
29 ${selector} {
30${dark_propsMeta}
31 }
32}`
33 }
34
35 file.write(`${selector} {\n`)
36
37 Object.entries(props).forEach(([prop, val]) => {
38 if (prop.includes('-@'))
39 return
40
41 if (prop.includes('animation')) {
42 let keyframes = props[`${prop}-@`]
43 appendedMeta += keyframes
44 }
45
46 if (prefix && prefix !== "''") {
47 prop = `--${prefix}-` + prop.slice(2)
48 if (typeof(val) == "string" && val.includes("var(--"))
49 val = val.replace(/var\(--/g, `var(--${prefix}-`)
50 }
51
52 file.write(` ${prop}: ${val};\n`)
53 })
54
55 if (filename.includes('animations')) {
56 let dark_props = Object.entries(props)
57 .filter(([prop, val]) =>
58 prop.includes('-@media:dark'))
59
60 dark_props.forEach(([prop, val], index) => {
61 let hasDarkKeyframe = prop.endsWith('-@media:dark') && val.trim().startsWith('@keyframe')
62 if (hasDarkKeyframe) {
63 appendedMeta += `
64@media (--OSdark) {
65 ${val.trim().replace(/\n/g, '\n ')}
66}`
67 }
68 })
69 }
70
71 file.write('}\n')
72 file.end(appendedMeta)
73}
\No newline at end of file