feat(ui): Material icons in sidebar + stats overview on home
Two pieces of the mockup 2 layout that hadn't landed yet: 1. Sidebar nav icons — emoji glyphs (🧹 ✂️ 🔍 …) swapped for Streamlit's ``:material/<name>:`` syntax, picking the outline Material Symbol that best matches each mockup SVG: Home → :material/home: Fix Missing Values → :material/help_outline: Find Unusual Vals → :material/insights: Clean Text → :material/text_format: Standardize Fmts → :material/format_list_bulleted: Find Duplicates → :material/search: Quality Check → :material/check_circle: Map Columns → :material/view_column: Combine Files → :material/account_tree: Auto Workflows → :material/auto_awesome: Activate → :material/key: Close → :material/close: Streamlit injects the icon name as a literal ligature inside a first-child ``<span>`` of the nav anchor, expected to render through the Material Symbols font. theme.py's base rule was forcing Geist on every span under ``stSidebarNav``, turning the ligatures back into plain text labels — added a structural exception that targets ``[data-testid="stSidebarNavLink"] > span:first-child`` (and any descendant), restoring the Material font family, neutralizing the inherited ``ss01/cv01/cv11`` feature settings, and sizing to 18px. Also stripped the leading emojis from every page title in the en/es i18n packs (``home.title``, ``close_page.title``, ``activation.title``, ``tools.*.page_title``) — the icons live in the sidebar now, the page H1 no longer needs to carry one. 2. Stats overview on home — new ``_render_stats_overview`` in _home.py emits a 4-card grid above the per-file findings panels: Files analyzed, Total findings, Warnings (severity ``warn`` ∪ ``error``), Info (severity ``info``). Card layout follows the mockup §stats verbatim — Geist 28px / 600 / -0.03em for the numeric value (the "Display number" row in spec §4), tiny uppercase tracked label, paper-surface card with the standard warm border + faint shadow. The Warnings / Info cards tint the number with ``--warn`` / ``--info`` when the count is non-zero. CSS for ``.dt-stats / .dt-stat / .dt-stat-label / .dt-stat-value / .dt-stat-unit`` added to ``_DESIGN_TOKENS_CSS``; falls to a 2-column grid below 900px viewport, matching the mockup's media query. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -49,7 +49,7 @@ class Tool:
|
||||
TOOLS: list[Tool] = [
|
||||
Tool(
|
||||
tool_id="04_missing_handler",
|
||||
icon="🕳️",
|
||||
icon=":material/help_outline:",
|
||||
name="Fix Missing Values",
|
||||
description=(
|
||||
"Detect disguised nulls, missingness analysis, and imputation strategies."
|
||||
@@ -60,7 +60,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="06_outlier_detector",
|
||||
icon="📊",
|
||||
icon=":material/insights:",
|
||||
name="Find Unusual Values",
|
||||
description=(
|
||||
"Z-score, IQR, and MAD detection with domain-rule violations and "
|
||||
@@ -72,7 +72,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="02_text_cleaner",
|
||||
icon="✂️",
|
||||
icon=":material/text_format:",
|
||||
name="Clean Text",
|
||||
description=(
|
||||
"Whitespace trim, multi-space collapse, Unicode normalization, "
|
||||
@@ -84,7 +84,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="03_format_standardizer",
|
||||
icon="📐",
|
||||
icon=":material/format_list_bulleted:",
|
||||
name="Standardize Formats",
|
||||
description=(
|
||||
"Standardize dates, currencies, names, phone numbers, and addresses."
|
||||
@@ -95,7 +95,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="01_deduplicator",
|
||||
icon="🔍",
|
||||
icon=":material/search:",
|
||||
name="Find Duplicates",
|
||||
description=(
|
||||
"Fuzzy matching, normalization, survivor selection, and "
|
||||
@@ -107,7 +107,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="08_validator_reporter",
|
||||
icon="✅",
|
||||
icon=":material/check_circle:",
|
||||
name="Quality Check",
|
||||
description=(
|
||||
"Validate against rules and generate PDF/Excel quality reports."
|
||||
@@ -118,7 +118,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="05_column_mapper",
|
||||
icon="🗂️",
|
||||
icon=":material/view_column:",
|
||||
name="Map Columns",
|
||||
description="Rename columns, enforce a target schema, and coerce types.",
|
||||
page_slug="5_Column_Mapper",
|
||||
@@ -127,7 +127,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="07_multi_file_merger",
|
||||
icon="📎",
|
||||
icon=":material/account_tree:",
|
||||
name="Combine Files",
|
||||
description="Combine multiple CSV/Excel files with schema alignment.",
|
||||
page_slug="7_Multi_File_Merger",
|
||||
@@ -136,7 +136,7 @@ TOOLS: list[Tool] = [
|
||||
),
|
||||
Tool(
|
||||
tool_id="09_pipeline_runner",
|
||||
icon="⚙️",
|
||||
icon=":material/auto_awesome:",
|
||||
name="Automated Workflows",
|
||||
description=(
|
||||
"Chain tools in recommended order and pass output between steps."
|
||||
|
||||
Reference in New Issue
Block a user