API: Fixed a bug where validate_report (and the associated CLI validation rules) would fail to forward custom user configurations and parameters from pbir-sanitize.yaml (such as theme_path in set_theme), leading to TypeError during rule evaluation.
Sanitizer: Added remove_unused_hidden_pages action (opt-in) to safely delete hidden pages. Pages are kept if they are the active page, or referenced by tooltips, drillthroughs, used bookmarks, or page navigation.
Changed
Dependencies: Downgraded pyyaml requirement to >=6.0.2 (from 6.0.3) to resolve installation conflicts with ms-fabric-cli.
Sanitizer: Added clear_slicer_search_text action (enabled by default) to remove leftover search text from slicer visuals. This prevents viewers from seeing the developer's last search when they open a slicer dropdown.
Themes/Sanitizer: Fixed a bug where relative theme_path strings in pbir-sanitize.yaml resolved against the current working directory instead of the configuration file's directory when executed via the validation or Python API.
Themes/Sanitizer: Fixed a bug where set_theme would leave orphaned files in the StaticResources/RegisteredResources/ directory if the new theme had a different filename than the existing custom theme.
Filters/Sanitizer: Fixed a bug where clear_filters (used by the clear_all_report_filters sanitizer action or CLI command) would exit silently without outputting an info message when no filters matched the specified criteria.
Sanitizer / CLI: The set_theme action is now content-aware. It compares the JSON of the --theme-file with the report's existing custom theme, skipping application if the content is identical. This allows you to safely orchestrate theme enforcement across multiple reports. You can also specify a relative theme_path in pbir-sanitize.yaml, which resolves relative to the config file's directory.
Fixed
Sanitizer: Fixed a bug where cleanup_invalid_bookmarks would silently delete all bookmarks if you ran the folder standardization tool first.
Wireframe Visualizer: Selecting visuals now filters the Fields pane to show only the tables and columns they use. You can select multiple visuals by holding Ctrl or dragging a selection box. (#5)
Metadata Extraction: Added Visual Path column to extract-metadata --visuals-only to output the full visual grouping hierarchy. (#4)
Fixed
Wireframe Visualizer: Fixed visual coordinate calculations inside nested groups to recursively accumulate offsets from all ancestor groups.
Metadata Extraction: New --columns, --exclude-columns, and --define-column flags for extract-metadata. Select, reorder, exclude, or derive custom columns in CSV output using {ColumnName} templates. (#4)
UI: Improved custom config loading UX. The generic load button is now replaced by a clear indicator displaying the loaded file name, along with direct controls to change or reset the configuration.
Fixed
UI: Fixed right-click context menu not working after switching to a different report.
Sanitizer: Fixed a bug where remove_unused_measures would incorrectly remove measures that were referenced by other measures across different entities (tables).
UI: Fixed an issue where wide reports were cut off on the left side due to an incorrect CSS justification on the wireframe canvas container, ensuring a scrollable, centered view at 100% zoom.
Pages: Introduced set_page_order() for reordering tabs and set_active_page() to specify default open pages.
Themes: Added capabilities to apply themes with set_theme(). Introduced reset_hardcoded_colors (and the reset-colors CLI command) to strip hardcoded hex colors from visuals, reverting them to their theme defaults.
Metadata: Enhanced extract-metadata to now capture DAX calculation contexts defined directly on visuals (NativeVisualCalculation).
Changed
UI:
UI Overhaul: Replaced structural emojis with crisp Lucide SVG icons (with secure emoji fallbacks for standalone HTML exports), refined the dark mode palette, standardized visual selection borders, and introduced sleek, modern scrollbars.
Activity Bar: Introduced a navigation rail to the left sidebar, replacing stacked accordions with a clean, dynamic sidebar that switches context (Reports, Actions, Validate, Export) and can be fully collapsed to maximize screen real estate.