Layout scaffolding for Web apps.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

36 lines
890 B

  1. import config from '../config.json'
  2. const mangledVarNames: Record<string, string> = {}
  3. export const configVar = (varName: keyof typeof config) => {
  4. let { [varName]: mangledVarName } = mangledVarNames
  5. if (!mangledVarName) {
  6. mangledVarNames[varName] = mangledVarName = `config-${varName}`
  7. }
  8. return `var(--${mangledVarName}, ${config[varName]})`
  9. }
  10. export const loadConfig = (): any => {
  11. return ({
  12. ':root': Object.entries(mangledVarNames).reduce(
  13. (varNames, [key, cssVarName]) => {
  14. switch (key as keyof typeof config) {
  15. case 'base-width':
  16. if (typeof config[key as keyof typeof config] === 'number') {
  17. return ({
  18. ...varNames,
  19. [`--${cssVarName}`]: `${config[key as keyof typeof config]}px`,
  20. })
  21. }
  22. break
  23. }
  24. return ({
  25. ...varNames,
  26. [`--${cssVarName}`]: config[key as keyof typeof config],
  27. })
  28. },
  29. {},
  30. ),
  31. })
  32. }