from pydantic import BaseModel class AdminPanelNavigationItem(BaseModel): label: str href: str description: str badge: str | None = None is_active: bool = False class AdminPanelQuickAction(BaseModel): label: str href: str button_class: str = "btn-outline-dark" class AdminPanelMetric(BaseModel): label: str value: str description: str class AdminPanelModuleCard(BaseModel): eyebrow: str title: str description: str status_label: str status_variant: str = "secondary" highlights: tuple[str, ...] = () cta_label: str | None = None href: str | None = None is_available: bool = False class AdminPanelSurfaceLink(BaseModel): method: str label: str href: str description: str class AdminPanelRoadmapItem(BaseModel): step: str title: str description: str status_label: str class AdminPanelHomeView(BaseModel): service: str app_name: str panel_title: str panel_subtitle: str environment: str version: str api_prefix: str release_label: str navigation: tuple[AdminPanelNavigationItem, ...] quick_actions: tuple[AdminPanelQuickAction, ...] metrics: tuple[AdminPanelMetric, ...] modules: tuple[AdminPanelModuleCard, ...] surface_links: tuple[AdminPanelSurfaceLink, ...] roadmap: tuple[AdminPanelRoadmapItem, ...] class AdminLoginPageView(BaseModel): app_name: str title: str subtitle: str environment: str version: str dashboard_href: str auth_endpoint: str session_endpoint: str logout_endpoint: str email_placeholder: str password_placeholder: str access_token_ttl_label: str refresh_token_ttl_label: str password_policy_label: str security_highlights: tuple[str, ...] integration_notes: tuple[str, ...] class AdminToolReviewWorkflowStep(BaseModel): eyebrow: str title: str description: str status_label: str status_variant: str = "secondary" class AdminToolReviewPageView(BaseModel): app_name: str title: str subtitle: str environment: str version: str dashboard_href: str login_href: str overview_endpoint: str contracts_endpoint: str review_queue_endpoint: str publications_endpoint: str workflow: tuple[AdminToolReviewWorkflowStep, ...] review_notes: tuple[str, ...] approval_notes: tuple[str, ...] activation_notes: tuple[str, ...]