.. _root_api_app_dividing_lines:

Dividing Lines
==============

Разделительные линии в ``Argenta`` используются для визуального структурирования вывода и отделения блоков информации друг от друга. Библиотека предлагает два типа линий: статическую и динамическую.

-----

``StaticDividingLine``
----------------------

``StaticDividingLine`` создаёт разделительную линию **фиксированной** длины. Этот тип линии полезен для создания предсказуемого и унифицированного интерфейса.

.. code-block:: python
   :linenos:
   
      def __init__(self, unit_part: str = "-", *, 
                   length: int = 25) -> None

Создаёт экземпляр статической разделительной линии.

* ``unit_part``: Символ для построения линии (учитывается только первый символ). По умолчанию: ``-``.
* ``length``: Фиксированная длина линии. По умолчанию: ``25``.

-----

``DynamicDividingLine``
-----------------------

``DynamicDividingLine`` создаёт линию, длина которой **динамически** подстраивается под самую длинную строку в выводе команды. Это требует перехвата ``stdout``, в результате чего разделители идеально обрамляют выводимый контент.

.. code-block:: python
  :linenos:

   __init__(self, unit_part: str = "-") -> None

Создаёт экземпляр динамической разделительной линии.

* ``unit_part``: Символ для построения линии. По умолчанию: ``-``.

Длина вычисляется автоматически и не задаётся при инициализации.

.. warning::
    Обязательно почитайте про нюансы использования динамических линий и перехвата ``stdout`` в :ref:`этом разделе<root_redirect_stdout>`.

-----

Назначение и использование
---------------------------

Выбор между статической и динамической линией зависит от ваших задач.

*   **StaticDividingLine** идеально подходит, если:

    *   Вам нужен строгий и консистентный дизайн.
    *   Вы используете роутеры с отключённым перехватом ``stdout`` (``disable_redirect_stdout=True``), где динамическое вычисление длины невозможно.

*   **DynamicDividingLine** (поведение по умолчанию) — предпочтительный выбор, если:

    *   Вы хотите, чтобы интерфейс был адаптивным.
    *   Вывод ваших команд имеет разную длину.
    *   В ваших обработчиках нет интерактивных операций ввода (например, ``input()``).

Тип разделителя для всего приложения задаётся при инициализации ``App`` через параметр ``dividing_line``.
