exlab_wizard.ui.pages.settings#

Settings dialog (Frontend Spec §7).

Two-pane modal with a left vertical-nav and a right content area. Nine sections; setup-incomplete mode auto-selects the first incomplete one.

Functions

first_incomplete_section(incomplete)

Return the first section ID in canonical order that's incomplete.

render_settings_page(*[, state, on_save, ...])

Render the settings dialog.

save_button_label(state)

Compute the Save all button label, including the badge count.

section_has_warning(state, section)

Return True when the sidebar should decorate section.

section_is_dirty(state, section)

Return True when section has uncommitted edits.

Classes

SettingsState([active_section, ...])

Mutable state for the dialog.

class exlab_wizard.ui.pages.settings.SettingsState(active_section='paths', incomplete_sections=(), dirty_sections=<factory>, pending_change_count=0)[source]#

Bases: object

Mutable state for the dialog.

Parameters:
active_section: str = 'paths'#
dirty_sections: set[str]#
incomplete_sections: tuple[str, ...] = ()#
pending_change_count: int = 0#
exlab_wizard.ui.pages.settings.first_incomplete_section(incomplete)[source]#

Return the first section ID in canonical order that’s incomplete.

Parameters:

incomplete (tuple[str, ...])

Return type:

str | None

exlab_wizard.ui.pages.settings.render_settings_page(*, state=None, on_save=None, on_discard=None, on_select_section=None)[source]#

Render the settings dialog.

on_select_section is invoked when the operator clicks a sidebar nav row. The Phase 12 cut bound this to a no-op (the selection cycle is handled by the host page); the e2e harness wires it to a navigation hook so each section’s body becomes assertable.

Parameters:
Return type:

Any

exlab_wizard.ui.pages.settings.save_button_label(state)[source]#

Compute the Save all button label, including the badge count.

Parameters:

state (SettingsState)

Return type:

str

exlab_wizard.ui.pages.settings.section_has_warning(state, section)[source]#

Return True when the sidebar should decorate section.

Parameters:
Return type:

bool

exlab_wizard.ui.pages.settings.section_is_dirty(state, section)[source]#

Return True when section has uncommitted edits.

Parameters:
Return type:

bool