import json
from style_variable_generator.base_generator import Color, BaseGenerator
from style_variable_generator.model import Modes, VariableType
from .css_generator import CSSStyleGenerator
SYS_SUBSTR = "sys"
REF_SUBSTR = "ref"
TOKENS_SUBSTR = "tokens"
def TokenArrayPropertyTitle(property):
return "%s_%s" % (property, TOKENS_SUBSTR)
class JSONStyleGenerator(CSSStyleGenerator):
@staticmethod
def GetName():
return 'json'
def __init__(self):
super().__init__()
self.resolve_blended_colors = False
def GetParameters(self):
color_model = self.model.colors
ref_tokens = []
sys_tokens = []
tokens = {}
for name, mode_values in color_model.items():
color_item = {
"token_name": name,
"css_variable": self.ToCSSVarName(name),
}
if SYS_SUBSTR in name:
color_item["mode_values"] = {
Modes.LIGHT:
color_model.Resolve(name, Modes.LIGHT).GetFormula(),
Modes.DARK:
color_model.Resolve(name, Modes.DARK).GetFormula()
}
sys_tokens.append(color_item)
else:
ref_tokens.append(color_item)
return {
"tokens":
json.dumps(
{
TokenArrayPropertyTitle(REF_SUBSTR): ref_tokens,
TokenArrayPropertyTitle(SYS_SUBSTR): sys_tokens,
},
indent=4)
}
def GetGlobals(self):
return {}
def GetFilters(self):
return {}
def Render(self):
return self.ApplyTemplate(self, "templates/json_generator.tmpl",
self.GetParameters())