75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
from typing import Optional
|
|
|
|
from fastapi import APIRouter
|
|
from pydantic import BaseModel
|
|
|
|
from models.theme_data import ThemeData
|
|
from utils.theme_utils import (
|
|
IS_DARK_BELOW,
|
|
generate_color_palette,
|
|
get_lightness_key_at_distance,
|
|
)
|
|
|
|
THEME_ROUTER = APIRouter(prefix="/theme", tags=["V3 Theme"])
|
|
|
|
|
|
class GenerateThemeRequestV3(BaseModel):
|
|
primary: Optional[str] = None
|
|
background: Optional[str] = None
|
|
accent_1: Optional[str] = None
|
|
accent_2: Optional[str] = None
|
|
text_1: Optional[str] = None
|
|
text_2: Optional[str] = None
|
|
|
|
|
|
@THEME_ROUTER.post("/generate", response_model=ThemeData)
|
|
async def generate_theme_v3(request: GenerateThemeRequestV3) -> ThemeData:
|
|
color_palette = generate_color_palette(
|
|
request.primary,
|
|
request.background,
|
|
request.accent_1,
|
|
request.accent_2,
|
|
request.text_1,
|
|
request.text_2,
|
|
)
|
|
|
|
is_dark_theme = color_palette.background_lightness < IS_DARK_BELOW
|
|
graph_colors = list(color_palette.primary_variations.values())
|
|
|
|
if not is_dark_theme:
|
|
graph_colors.reverse()
|
|
|
|
theme_data = ThemeData(
|
|
primary=color_palette.primary,
|
|
background=color_palette.background,
|
|
card=color_palette.background_variations[
|
|
get_lightness_key_at_distance(
|
|
color_palette.background_lightness,
|
|
min_distance=1,
|
|
max_distance=1,
|
|
prefer_dark=not is_dark_theme,
|
|
)
|
|
],
|
|
stroke=color_palette.background_variations[
|
|
get_lightness_key_at_distance(
|
|
color_palette.background_lightness,
|
|
min_distance=2,
|
|
max_distance=2,
|
|
prefer_dark=not is_dark_theme,
|
|
)
|
|
],
|
|
background_text=color_palette.text_1,
|
|
primary_text=color_palette.text_2,
|
|
graph_0=graph_colors[0],
|
|
graph_1=graph_colors[1],
|
|
graph_2=graph_colors[2],
|
|
graph_3=graph_colors[3],
|
|
graph_4=graph_colors[4],
|
|
graph_5=graph_colors[5],
|
|
graph_6=graph_colors[6],
|
|
graph_7=graph_colors[7],
|
|
graph_8=graph_colors[8],
|
|
graph_9=graph_colors[9],
|
|
)
|
|
return theme_data
|
|
|