nexusLIMS.tui.common.widgets#

Reusable widgets for NexusLIMS TUI applications.

Provides form inputs, validation feedback, and other common UI components.

Module Contents#

Classes#

NumpadInput

Input widget that accepts numpad key entry.

ValidatedInput

Input widget with validation support.

AutocompleteInput

Input widget with autocomplete suggestions.

FormField

Container for a labeled form field with validation error display.

API#

class nexusLIMS.tui.common.widgets.NumpadInput(value: str | None = None, placeholder: str = '', highlighter: rich.highlighter.Highlighter | None = None, password: bool = False, *, restrict: str | None = None, type: textual.widgets._input.InputType = 'text', max_length: int = 0, suggester: textual.suggester.Suggester | None = None, validators: textual.validation.Validator | Iterable[textual.validation.Validator] | None = None, validate_on: Iterable[textual.widgets._input.InputValidationOn] | None = None, valid_empty: bool = False, select_on_focus: bool = True, name: str | None = None, id: str | None = None, classes: str | None = None, disabled: bool = False, tooltip: rich.console.RenderableType | None = None, compact: bool = False)[source]#

Bases: textual.widgets.Input

Input widget that accepts numpad key entry.

Extends Textual’s Input to map numpad keys to their regular equivalents, fixing the issue where numpad minus and other numpad keys don’t work.

on_key(event: textual.events.Key) None[source]#

Handle numpad key events before default Input processing.

class nexusLIMS.tui.common.widgets.ValidatedInput(*args, validator: Callable | None = None, **kwargs)[source]#

Bases: textual.widgets.Input

Input widget with validation support.

Displays validation errors below the input field and provides custom messages for invalid states.

Variables:

validator (Callable | None) – Validation function that takes the input value and returns (is_valid, error_message) tuple

validate_value(value: str) tuple[bool, str][source]#

Validate the input value.

Parameters:

value (str) – Value to validate

Returns:

(is_valid, error_message)

Return type:

tuple[bool, str]

property is_valid: bool#

Check if current value is valid.

property error_message: str#

Get current error message.

class nexusLIMS.tui.common.widgets.AutocompleteInput(suggestions: list[str] | None = None, *args, **kwargs)[source]#

Bases: textual.widgets.Input

Input widget with autocomplete suggestions.

Uses Textual’s built-in Suggester for dropdown suggestions.

Variables:

suggestions (list[str]) – List of suggestion strings

set_suggestions(suggestions: list[str]) None[source]#

Update autocomplete suggestions.

Parameters:

suggestions (list[str]) – New list of suggestions

class nexusLIMS.tui.common.widgets.FormField(label_text: str, input_widget: textual.widgets.Input, *, required: bool = False, help_text: str | None = None, **kwargs)[source]#

Bases: textual.containers.Vertical

Container for a labeled form field with validation error display.

Provides consistent layout for label + input + error message.

Variables:
  • label_text (str) – Field label text

  • input_widget (textual.widgets.Input) – Input widget (ValidatedInput, AutocompleteInput, etc.)

  • required (bool) – Whether field is required

class Changed(field: FormField, value: str)[source]#

Bases: textual.message.Message

Message emitted when field value changes.

compose() textual.app.ComposeResult[source]#

Compose the field layout.

on_input_changed(event: textual.widgets.Input.Changed) None[source]#

Forward input changes and update error display.

property value: str#

Get current field value.

property is_valid: bool#

Check if field value is valid.

property error_message: str#

Get current error message.