"""Reusable Streamlit widgets for the DataTools GUI. This package replaces the former single ``components.py`` module. Public behaviour is identical — every name that used to be importable from ``src.gui.components`` is still importable from the same path because this ``__init__`` re-exports the legacy surface in full. The package layout exists so per-tool builds can ship only the seams they need without dragging the entire kitchen-sink module: components/ __init__.py ← compatibility shim (this file) _legacy.py ← original components.py, unchanged gate.py ← gate-only seam (require_normalization_gate) findings.py ← analyzer-finding rendering seam dedup_review.py ← dedup match-group cards + review pipeline shared.py ← chrome / file-pickup helpers used by every tool A standalone Deduplicator build, for example, can ship without ``findings.py`` and ``gate.py`` — those modules import the analyzer / gate code that the Lite SKU does not include. Adding new tooling: drop new helpers into the appropriate seam module. Add their names to its ``__all__`` and to this file's ``__all__`` if they should remain importable from ``src.gui.components`` directly. """ from __future__ import annotations # Re-export the full legacy surface so existing pages continue to # import unchanged. Once individual tool packages start consuming # the focused seam modules directly, names can migrate out of # _legacy.py without breaking those imports — this shim is what # absorbs the move. from ._legacy import * # noqa: F401,F403 from . import _legacy as _legacy # noqa: F401 (keep for direct access) # Names exported from _legacy.py that pages currently use. Kept here as # the canonical public list so a removal from _legacy is a visible # breaking change instead of a silent drop. from .activation import ( # noqa: F401 re-exported render_activation_form, render_license_status_sidebar, require_feature_or_render_upgrade, require_license_or_render_activation, ) __all__ = [ # Shared chrome / pickup / gate "hide_streamlit_chrome", "quit_button", "pickup_or_upload", "require_normalization_gate", # License gate + activation form "render_activation_form", "render_license_status_sidebar", "require_feature_or_render_upgrade", "require_license_or_render_activation", # Dedup widgets "config_panel", "match_group_card", "results_summary", "apply_review_decisions", # Analyzer widgets "tool_display_name", "render_findings_panel", "render_hidden_aware_preview", "upload_and_analyze_section", "findings_count_for_tool", ]