"""
UI Constants - Colors, Styling, Display Settings
All visual/interface related constants
"""
# ========================================
# COLOR PALETTE (Used throughout pipeline)
# ========================================
UAB_GREEN = "#1E6B52"
UAB_DARK_GREEN = "#16533E"
UAB_LIGHT_GREEN = "#5A9B7F"
UAB_ACCENT_TEAL = "#008C95"
UAB_PALE_GREEN = "#E8F4F0"
UAB_WHITE = "#FFFFFF"
# ========================================
# STAGE CONFIGURATION (Used in generate_synthetic_data, badges, etc.)
# ========================================
STAGE_MAPPING = {
"S0": (0.35, 0.50),
"S1": (0.45, 0.58),
"S2": (0.55, 0.68),
"S3": (0.65, 0.78),
"S4": (0.73, 0.85),
"S5": (0.80, 0.92),
"S6": (0.88, 0.95),
}
STAGE_NAMES = {
"S0": "Ideation",
"S1": "Intake",
"S2": "Feasibility",
"S3": "In Silico",
"S4": "Wet Lab",
"S5": "IND-Ready",
"S6": "Handoff"
}
STAGE_COLORS = {
"S0": "#94A3B8",
"S1": "#A8CABD",
"S2": UAB_LIGHT_GREEN,
"S3": UAB_GREEN,
"S4": UAB_GREEN,
"S5": UAB_DARK_GREEN,
"S6": UAB_DARK_GREEN,
}
# ========================================
# SCORE THRESHOLDS (Used in charts and interpretation)
# ========================================
SCORE_THRESHOLD_HIGH = 0.7
SCORE_THRESHOLD_MODERATE = 0.5
# ========================================
# DISPLAY SETTINGS (Used in UI rendering)
# ========================================
MAX_CATEGORY_CANDIDATES_DISPLAY = 12
MAX_TOP_CANDIDATES_DISPLAY = 5
SMILES_DISPLAY_LENGTH = 60
MAX_TARGET_DISPLAY = 5
# Chart heights
CHART_HEIGHT_SMALL = 190
CHART_HEIGHT_MEDIUM = 300
CHART_HEIGHT_LARGE = 400
# ========================================
# HELPER FUNCTIONS
# ========================================
def get_status_badge(stage):
"""Generate HTML badge for stage status"""
colors = STAGE_COLORS
names = STAGE_NAMES
color = colors.get(stage, "#CBD5E0")
name = names.get(stage, stage)
return f'{stage} - {name}'
def get_score_type_badge(score_type):
"""Get badge for score type (Real ML/DL or Synthetic/AI)"""
if score_type == "Real":
return f'🤖 Real ML/DL'
else:
return f'🔮 Synthetic/AI'
def get_evidence_stars(score):
"""Convert score to star rating"""
stars = int(score * 5)
return "⭐" * stars
def get_impact_badge(impact):
"""Generate HTML badge for project impact"""
if impact >= 0.10:
return f'High +{impact:.2f}'
elif impact >= 0.05:
return f'Moderate +{impact:.2f}'
elif impact > 0:
return f'Low +{impact:.2f}'
elif impact <= -0.10:
return f'High Risk {impact:.2f}'
elif impact <= -0.05:
return f'Moderate Risk {impact:.2f}'
else:
return f'Low Risk {impact:.2f}'