JAMESPARK3's picture
Upload folder using huggingface_hub
1380717 verified
raw
history blame
1.73 kB
"""Tools for enabling and registering chart themes."""
from __future__ import annotations
from typing import TYPE_CHECKING, Final, Literal, get_args
from altair.utils.theme import ThemeRegistry
from altair.vegalite.v5.schema._typing import VegaThemes
if TYPE_CHECKING:
import sys
if sys.version_info >= (3, 10):
from typing import TypeAlias
else:
from typing_extensions import TypeAlias
AltairThemes: TypeAlias = Literal["default", "opaque"]
VEGA_THEMES: list[str] = list(get_args(VegaThemes))
class VegaTheme:
"""Implementation of a builtin vega theme."""
def __init__(self, theme: str) -> None:
self.theme = theme
def __call__(self) -> dict[str, dict[str, dict[str, str | int]]]:
return {
"usermeta": {"embedOptions": {"theme": self.theme}},
"config": {"view": {"continuousWidth": 300, "continuousHeight": 300}},
}
def __repr__(self) -> str:
return f"VegaTheme({self.theme!r})"
# The entry point group that can be used by other packages to declare other
# themes that will be auto-detected. Explicit registration is also
# allowed by the PluginRegistry API.
ENTRY_POINT_GROUP: Final = "altair.vegalite.v5.theme"
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", dict)
for theme in VEGA_THEMES:
themes.register(theme, VegaTheme(theme))
themes.enable("default")