UNPKG

4.41 kBJavaScriptView Raw
1import fs from 'fs'
2
3import Animations from '../src/props.animations.js'
4import Sizes from '../src/props.sizes.js'
5import * as OpenColors from '../src/props.colors.js'
6import * as ColorsHSL from '../src/props.colors-hsl.js'
7import Fonts from '../src/props.fonts.js'
8import Borders from '../src/props.borders.js'
9import Aspects from '../src/props.aspects.js'
10import Easings from '../src/props.easing.js'
11import Gradients from '../src/props.gradients.js'
12import Shadows from '../src/props.shadows.js'
13import SVG from '../src/props.svg.js'
14import Zindex from '../src/props.zindex.js'
15import MaskEdges from '../src/props.masks.edges.js'
16import MaskCornerCuts from '../src/props.masks.corner-cuts.js'
17
18import {buildPropsStylesheet} from './to-stylesheet.js'
19import {toTokens} from './to-tokens.js'
20import {toFigmaTokens} from './to-figmatokens.js'
21
22const [,,prefix='',useWhere,customSubject='',filePrefix=''] = process.argv
23
24const subject = customSubject === '' ? 'html' : customSubject
25const selector = useWhere === 'true' ? `:where(${subject})` : subject
26const pfx = filePrefix ? filePrefix + '.' : ''
27
28const mainbundle = {
29 [`${pfx}props.fonts.css`]: Fonts,
30 [`${pfx}props.sizes.css`]: Sizes,
31 [`${pfx}props.easing.css`]: Easings,
32 [`${pfx}props.zindex.css`]: Zindex,
33 [`${pfx}props.shadows.css`]: Shadows,
34 [`${pfx}props.aspects.css`]: Aspects,
35 [`${pfx}props.colors.css`]: OpenColors.default,
36 // [`${pfx}props.svg.css`]: SVG,
37 [`${pfx}props.gradients.css`]: Gradients,
38 [`${pfx}props.animations.css`]: Animations,
39 [`${pfx}props.borders.css`]: Borders,
40}
41
42const individual_colors = {
43 [`${pfx}props.gray.css`]: OpenColors.Gray,
44 [`${pfx}props.red.css`]: OpenColors.Red,
45 [`${pfx}props.pink.css`]: OpenColors.Pink,
46 [`${pfx}props.grape.css`]: OpenColors.Grape,
47 [`${pfx}props.violet.css`]: OpenColors.Violet,
48 [`${pfx}props.indigo.css`]: OpenColors.Indigo,
49 [`${pfx}props.blue.css`]: OpenColors.Blue,
50 [`${pfx}props.cyan.css`]: OpenColors.Cyan,
51 [`${pfx}props.teal.css`]: OpenColors.Teal,
52 [`${pfx}props.green.css`]: OpenColors.Green,
53 [`${pfx}props.lime.css`]: OpenColors.Lime,
54 [`${pfx}props.yellow.css`]: OpenColors.Yellow,
55 [`${pfx}props.orange.css`]: OpenColors.Orange,
56}
57
58const individual_colors_hsl = {
59 [`${pfx}props.gray-hsl.css`]: ColorsHSL.Gray,
60 [`${pfx}props.red-hsl.css`]: ColorsHSL.Red,
61 [`${pfx}props.pink-hsl.css`]: ColorsHSL.Pink,
62 [`${pfx}props.grape-hsl.css`]: ColorsHSL.Grape,
63 [`${pfx}props.violet-hsl.css`]: ColorsHSL.Violet,
64 [`${pfx}props.indigo-hsl.css`]: ColorsHSL.Indigo,
65 [`${pfx}props.blue-hsl.css`]: ColorsHSL.Blue,
66 [`${pfx}props.cyan-hsl.css`]: ColorsHSL.Cyan,
67 [`${pfx}props.teal-hsl.css`]: ColorsHSL.Teal,
68 [`${pfx}props.green-hsl.css`]: ColorsHSL.Green,
69 [`${pfx}props.lime-hsl.css`]: ColorsHSL.Lime,
70 [`${pfx}props.yellow-hsl.css`]: ColorsHSL.Yellow,
71 [`${pfx}props.orange-hsl.css`]: ColorsHSL.Orange,
72}
73
74// const individuals = {
75// 'props.masks.edges.css': MaskEdges,
76// 'props.masks.corner-cuts.css': MaskCornerCuts,
77// }
78
79// gen design tokens
80const jsonbundle = Object.entries({
81 ...Object.assign({}, ...Object.values(individual_colors)),
82 ...Sizes,
83 ...Easings,
84 ...Zindex,
85 ...Aspects,
86 ...Gradients,
87 ...Borders,
88}).reverse()
89
90const designtokens = toTokens(jsonbundle)
91const JSONtokens = fs.createWriteStream('../open-props.tokens.json')
92JSONtokens.end(JSON.stringify(Object.fromEntries(designtokens), null, 2))
93
94// gen figma tokens
95const figmatokens = toFigmaTokens(jsonbundle)
96const FigmaTokens = fs.createWriteStream('../open-props.figma-tokens.json')
97FigmaTokens.end(JSON.stringify(figmatokens, null, 2))
98
99const figmatokensSYNC = { 'open-props': { ...figmatokens } }
100const FigmaTokensSync = fs.createWriteStream('../open-props.figma-tokens.sync.json')
101FigmaTokensSync.end(JSON.stringify(figmatokensSYNC, null, 2))
102
103// gen prop variants
104Object.entries({
105 ...mainbundle,
106 ...individual_colors,
107 ...individual_colors_hsl,
108 // ...individuals,
109}).forEach(([filename, props]) => {
110 buildPropsStylesheet({filename, props}, {selector, prefix})
111})
112
113// gen color hsl main file
114buildPropsStylesheet({
115 filename: pfx + 'props.colors-hsl.css',
116 props: ColorsHSL.default},
117 {selector, prefix}
118)
119
120// gen index.css
121const entry = fs.createWriteStream(`../src/${pfx}index.css`)
122entry.write(`@import 'props.media.css';
123`)
124Object.keys(mainbundle).forEach(filename => {
125 entry.write(`@import '${filename}';\n`)
126})
127entry.end()
\No newline at end of file