1 | import fs from 'fs'
|
2 |
|
3 | export 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 |