magscope.ui.search
==================

.. py:module:: magscope.ui.search


Classes
-------

.. autoapisummary::

   magscope.ui.search.SearchTarget
   magscope.ui.search.PanelControlTarget
   magscope.ui.search.PreferencesSettingTarget
   magscope.ui.search.PreferencesWidgetTarget
   magscope.ui.search.MenuActionTarget
   magscope.ui.search.SearchMatch
   magscope.ui.search.SearchRegistry
   magscope.ui.search.SearchHighlighter


Functions
---------

.. autoapisummary::

   magscope.ui.search.normalize_search_text


Module Contents
---------------

.. py:function:: normalize_search_text(text: str) -> str

.. py:class:: SearchTarget

   .. py:attribute:: label
      :type:  str


   .. py:attribute:: aliases
      :type:  tuple[str, Ellipsis]
      :value: ()



   .. py:attribute:: context
      :type:  str
      :value: ''



   .. py:attribute:: description
      :type:  str
      :value: ''



   .. py:attribute:: keywords
      :type:  tuple[str, Ellipsis]
      :value: ()



   .. py:attribute:: guide_only
      :type:  bool
      :value: True



   .. py:property:: display_label
      :type: str



   .. py:property:: search_values
      :type: tuple[str, Ellipsis]



.. py:class:: PanelControlTarget

   Bases: :py:obj:`SearchTarget`


   .. py:attribute:: panel_id
      :type:  str
      :value: ''



   .. py:attribute:: widget_path
      :type:  tuple[str, Ellipsis]
      :value: ()



.. py:class:: PreferencesSettingTarget

   Bases: :py:obj:`SearchTarget`


   .. py:attribute:: setting_key
      :type:  str
      :value: ''



   .. py:attribute:: tab_name
      :type:  str
      :value: 'MagScope'



.. py:class:: PreferencesWidgetTarget

   Bases: :py:obj:`SearchTarget`


   .. py:attribute:: tab_name
      :type:  str
      :value: ''



   .. py:attribute:: widget_attr
      :type:  str
      :value: ''



.. py:class:: MenuActionTarget

   Bases: :py:obj:`SearchTarget`


   .. py:attribute:: menu_name
      :type:  str
      :value: ''



   .. py:attribute:: action_text
      :type:  str
      :value: ''



.. py:class:: SearchMatch

   .. py:attribute:: target
      :type:  SearchTarget


   .. py:attribute:: rank
      :type:  int


   .. py:attribute:: score
      :type:  float
      :value: 0.0



.. py:class:: SearchRegistry(targets: list[SearchTarget] | None = None)

   .. py:attribute:: RANK_EXACT_LABEL
      :value: 0



   .. py:attribute:: RANK_EXACT_DISPLAY
      :value: 1



   .. py:attribute:: RANK_EXACT_ALIAS
      :value: 2



   .. py:attribute:: RANK_PREFIX
      :value: 3



   .. py:attribute:: RANK_CONTAINS
      :value: 4



   .. py:attribute:: RANK_FUZZY
      :value: 5



   .. py:attribute:: RANK_EMPTY_QUERY
      :value: 10



   .. py:attribute:: _targets
      :type:  list[SearchTarget]
      :value: []



   .. py:property:: targets
      :type: list[SearchTarget]



   .. py:method:: clear() -> None


   .. py:method:: register(target: SearchTarget) -> None


   .. py:method:: register_many(targets: list[SearchTarget] | tuple[SearchTarget, Ellipsis]) -> None


   .. py:method:: matches(text: str) -> list[SearchMatch]


   .. py:method:: labels(text: str, *, limit: int = 20) -> list[str]


   .. py:method:: best(text: str) -> SearchTarget | None


.. py:class:: SearchHighlighter

   .. py:attribute:: _original_styles
      :type:  dict[PyQt6.QtWidgets.QWidget, str]


   .. py:method:: clear() -> None


   .. py:method:: highlight(widget: PyQt6.QtWidgets.QWidget, *, duration_ms: int = 2500) -> None


   .. py:method:: clear_widget(widget: PyQt6.QtWidgets.QWidget) -> None


