"""Tools for enabling and registering chart themes""" from ...utils.theme import ThemeRegistry VEGA_THEMES = [ "ggplot2", "quartz", "vox", "fivethirtyeight", "dark", "latimes", "urbaninstitute", "excel", "googlecharts", "powerbi", ] class VegaTheme: """Implementation of a builtin vega theme.""" def __init__(self, theme): self.theme = theme def __call__(self): return { "usermeta": {"embedOptions": {"theme": self.theme}}, "config": {"view": {"continuousWidth": 300, "continuousHeight": 300}}, } def __repr__(self): return "VegaTheme({!r})".format(self.theme) # The entry point group that can be used by other packages to declare other # renderers that will be auto-detected. Explicit registration is also # allowed by the PluginRegistery API. ENTRY_POINT_GROUP = "altair.vegalite.v5.theme" # type: str themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP) themes.register( "default", lambda: {"config": {"view": {"continuousWidth": 300, "continuousHeight": 300}}}, ) themes.register( "opaque", lambda: { "config": { "background": "white", "view": {"continuousWidth": 300, "continuousHeight": 300}, } }, ) themes.register("none", lambda: {}) for theme in VEGA_THEMES: themes.register(theme, VegaTheme(theme)) themes.enable("default")