|
| 1 | +from __future__ import annotations |
| 2 | +from typing import Literal, Optional, List, Union |
| 3 | +from pydantic import BaseModel, ConfigDict, Field |
| 4 | + |
| 5 | + |
| 6 | +BrandingColorScheme = Union[Literal["light", "dark"], str] |
| 7 | + |
| 8 | +BrandingPersonalityTone = Union[ |
| 9 | + Literal[ |
| 10 | + "professional", |
| 11 | + "playful", |
| 12 | + "modern", |
| 13 | + "traditional", |
| 14 | + "minimalist", |
| 15 | + "bold", |
| 16 | + ], |
| 17 | + str, |
| 18 | +] |
| 19 | + |
| 20 | +BrandingPersonalityEnergy = Union[Literal["low", "medium", "high"], str] |
| 21 | + |
| 22 | +BrandingFontRole = Union[ |
| 23 | + Literal["heading", "body", "monospace", "display", "unknown"], |
| 24 | + str, |
| 25 | +] |
| 26 | + |
| 27 | +BrandingDesignFramework = Union[ |
| 28 | + Literal[ |
| 29 | + "tailwind", |
| 30 | + "bootstrap", |
| 31 | + "material", |
| 32 | + "chakra", |
| 33 | + "custom", |
| 34 | + "unknown", |
| 35 | + ], |
| 36 | + str, |
| 37 | +] |
| 38 | + |
| 39 | + |
| 40 | +class BrandingColors(BaseModel): |
| 41 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 42 | + |
| 43 | + primary: Optional[str] = None |
| 44 | + secondary: Optional[str] = None |
| 45 | + accent: Optional[str] = None |
| 46 | + background: Optional[str] = None |
| 47 | + text_primary: Optional[str] = Field( |
| 48 | + default=None, alias="textPrimary", serialization_alias="textPrimary" |
| 49 | + ) |
| 50 | + text_secondary: Optional[str] = Field( |
| 51 | + default=None, alias="textSecondary", serialization_alias="textSecondary" |
| 52 | + ) |
| 53 | + link: Optional[str] = None |
| 54 | + success: Optional[str] = None |
| 55 | + warning: Optional[str] = None |
| 56 | + error: Optional[str] = None |
| 57 | + |
| 58 | + |
| 59 | +class BrandingFont(BaseModel): |
| 60 | + model_config = ConfigDict(extra="allow") |
| 61 | + |
| 62 | + family: Optional[str] = None |
| 63 | + role: Optional[BrandingFontRole] = None |
| 64 | + |
| 65 | + |
| 66 | +class BrandingBorderRadiusCorners(BaseModel): |
| 67 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 68 | + |
| 69 | + top_left: Optional[str] = Field( |
| 70 | + default=None, alias="topLeft", serialization_alias="topLeft" |
| 71 | + ) |
| 72 | + top_right: Optional[str] = Field( |
| 73 | + default=None, alias="topRight", serialization_alias="topRight" |
| 74 | + ) |
| 75 | + bottom_right: Optional[str] = Field( |
| 76 | + default=None, alias="bottomRight", serialization_alias="bottomRight" |
| 77 | + ) |
| 78 | + bottom_left: Optional[str] = Field( |
| 79 | + default=None, alias="bottomLeft", serialization_alias="bottomLeft" |
| 80 | + ) |
| 81 | + |
| 82 | + |
| 83 | +class BrandingButtonStyle(BaseModel): |
| 84 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 85 | + |
| 86 | + background: Optional[str] = None |
| 87 | + text_color: Optional[str] = Field( |
| 88 | + default=None, alias="textColor", serialization_alias="textColor" |
| 89 | + ) |
| 90 | + border_color: Optional[str] = Field( |
| 91 | + default=None, alias="borderColor", serialization_alias="borderColor" |
| 92 | + ) |
| 93 | + border_radius: Optional[str] = Field( |
| 94 | + default=None, alias="borderRadius", serialization_alias="borderRadius" |
| 95 | + ) |
| 96 | + border_radius_corners: Optional[BrandingBorderRadiusCorners] = Field( |
| 97 | + default=None, |
| 98 | + alias="borderRadiusCorners", |
| 99 | + serialization_alias="borderRadiusCorners", |
| 100 | + ) |
| 101 | + shadow: Optional[str] = None |
| 102 | + |
| 103 | + |
| 104 | +class BrandingInputStyle(BaseModel): |
| 105 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 106 | + |
| 107 | + background: Optional[str] = None |
| 108 | + text_color: Optional[str] = Field( |
| 109 | + default=None, alias="textColor", serialization_alias="textColor" |
| 110 | + ) |
| 111 | + border_color: Optional[str] = Field( |
| 112 | + default=None, alias="borderColor", serialization_alias="borderColor" |
| 113 | + ) |
| 114 | + focus_border_color: Optional[str] = Field( |
| 115 | + default=None, |
| 116 | + alias="focusBorderColor", |
| 117 | + serialization_alias="focusBorderColor", |
| 118 | + ) |
| 119 | + border_radius: Optional[str] = Field( |
| 120 | + default=None, alias="borderRadius", serialization_alias="borderRadius" |
| 121 | + ) |
| 122 | + border_radius_corners: Optional[BrandingBorderRadiusCorners] = Field( |
| 123 | + default=None, |
| 124 | + alias="borderRadiusCorners", |
| 125 | + serialization_alias="borderRadiusCorners", |
| 126 | + ) |
| 127 | + shadow: Optional[str] = None |
| 128 | + |
| 129 | + |
| 130 | +class BrandingComponents(BaseModel): |
| 131 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 132 | + |
| 133 | + button_primary: Optional[BrandingButtonStyle] = Field( |
| 134 | + default=None, alias="buttonPrimary", serialization_alias="buttonPrimary" |
| 135 | + ) |
| 136 | + button_secondary: Optional[BrandingButtonStyle] = Field( |
| 137 | + default=None, |
| 138 | + alias="buttonSecondary", |
| 139 | + serialization_alias="buttonSecondary", |
| 140 | + ) |
| 141 | + input: Optional[BrandingInputStyle] = None |
| 142 | + |
| 143 | + |
| 144 | +class BrandingFontFamilies(BaseModel): |
| 145 | + model_config = ConfigDict(extra="allow") |
| 146 | + |
| 147 | + primary: Optional[str] = None |
| 148 | + heading: Optional[str] = None |
| 149 | + code: Optional[str] = None |
| 150 | + |
| 151 | + |
| 152 | +class BrandingFontStacks(BaseModel): |
| 153 | + model_config = ConfigDict(extra="allow") |
| 154 | + |
| 155 | + primary: Optional[List[Optional[str]]] = None |
| 156 | + heading: Optional[List[Optional[str]]] = None |
| 157 | + body: Optional[List[Optional[str]]] = None |
| 158 | + paragraph: Optional[List[Optional[str]]] = None |
| 159 | + |
| 160 | + |
| 161 | +class BrandingFontSizes(BaseModel): |
| 162 | + model_config = ConfigDict(extra="allow") |
| 163 | + |
| 164 | + h1: Optional[str] = None |
| 165 | + h2: Optional[str] = None |
| 166 | + h3: Optional[str] = None |
| 167 | + body: Optional[str] = None |
| 168 | + small: Optional[str] = None |
| 169 | + |
| 170 | + |
| 171 | +class BrandingTypography(BaseModel): |
| 172 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 173 | + |
| 174 | + font_families: Optional[BrandingFontFamilies] = Field( |
| 175 | + default=None, alias="fontFamilies", serialization_alias="fontFamilies" |
| 176 | + ) |
| 177 | + font_stacks: Optional[BrandingFontStacks] = Field( |
| 178 | + default=None, alias="fontStacks", serialization_alias="fontStacks" |
| 179 | + ) |
| 180 | + font_sizes: Optional[BrandingFontSizes] = Field( |
| 181 | + default=None, alias="fontSizes", serialization_alias="fontSizes" |
| 182 | + ) |
| 183 | + line_heights: Optional[dict[str, Optional[float]]] = Field( |
| 184 | + default=None, alias="lineHeights", serialization_alias="lineHeights" |
| 185 | + ) |
| 186 | + font_weights: Optional[dict[str, Optional[float]]] = Field( |
| 187 | + default=None, alias="fontWeights", serialization_alias="fontWeights" |
| 188 | + ) |
| 189 | + |
| 190 | + |
| 191 | +class BrandingSpacing(BaseModel): |
| 192 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 193 | + |
| 194 | + base_unit: Optional[float] = Field( |
| 195 | + default=None, alias="baseUnit", serialization_alias="baseUnit" |
| 196 | + ) |
| 197 | + border_radius: Optional[str] = Field( |
| 198 | + default=None, alias="borderRadius", serialization_alias="borderRadius" |
| 199 | + ) |
| 200 | + padding: Optional[dict[str, Optional[float]]] = None |
| 201 | + margins: Optional[dict[str, Optional[float]]] = None |
| 202 | + grid_gutter: Optional[float] = Field( |
| 203 | + default=None, alias="gridGutter", serialization_alias="gridGutter" |
| 204 | + ) |
| 205 | + |
| 206 | + |
| 207 | +class BrandingImages(BaseModel): |
| 208 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 209 | + |
| 210 | + logo: Optional[str] = None |
| 211 | + logo_href: Optional[str] = Field( |
| 212 | + default=None, alias="logoHref", serialization_alias="logoHref" |
| 213 | + ) |
| 214 | + logo_alt: Optional[str] = Field( |
| 215 | + default=None, alias="logoAlt", serialization_alias="logoAlt" |
| 216 | + ) |
| 217 | + favicon: Optional[str] = None |
| 218 | + og_image: Optional[str] = Field( |
| 219 | + default=None, alias="ogImage", serialization_alias="ogImage" |
| 220 | + ) |
| 221 | + |
| 222 | + |
| 223 | +class BrandingPersonality(BaseModel): |
| 224 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 225 | + |
| 226 | + tone: Optional[BrandingPersonalityTone] = None |
| 227 | + energy: Optional[BrandingPersonalityEnergy] = None |
| 228 | + target_audience: Optional[str] = Field( |
| 229 | + default=None, |
| 230 | + alias="targetAudience", |
| 231 | + serialization_alias="targetAudience", |
| 232 | + ) |
| 233 | + |
| 234 | + |
| 235 | +class BrandingDesignSystem(BaseModel): |
| 236 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 237 | + |
| 238 | + framework: Optional[BrandingDesignFramework] = None |
| 239 | + component_library: Optional[str] = Field( |
| 240 | + default=None, |
| 241 | + alias="componentLibrary", |
| 242 | + serialization_alias="componentLibrary", |
| 243 | + ) |
| 244 | + |
| 245 | + |
| 246 | +class BrandingConfidence(BaseModel): |
| 247 | + model_config = ConfigDict(extra="allow") |
| 248 | + |
| 249 | + buttons: Optional[float] = None |
| 250 | + colors: Optional[float] = None |
| 251 | + overall: Optional[float] = None |
| 252 | + |
| 253 | + |
| 254 | +class BrandingProfile(BaseModel): |
| 255 | + model_config = ConfigDict(populate_by_alias=True, extra="allow") |
| 256 | + |
| 257 | + color_scheme: Optional[BrandingColorScheme] = Field( |
| 258 | + default=None, alias="colorScheme", serialization_alias="colorScheme" |
| 259 | + ) |
| 260 | + colors: Optional[BrandingColors] = None |
| 261 | + fonts: Optional[List[BrandingFont]] = None |
| 262 | + typography: Optional[BrandingTypography] = None |
| 263 | + spacing: Optional[BrandingSpacing] = None |
| 264 | + components: Optional[BrandingComponents] = None |
| 265 | + images: Optional[BrandingImages] = None |
| 266 | + personality: Optional[BrandingPersonality] = None |
| 267 | + design_system: Optional[BrandingDesignSystem] = Field( |
| 268 | + default=None, alias="designSystem", serialization_alias="designSystem" |
| 269 | + ) |
| 270 | + confidence: Optional[BrandingConfidence] = None |
0 commit comments