Ë
    V.j‡(  ã                  óø   — d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ dd	lmZ erdd
lmZ g d¢Z G d„ de¬«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)zQ
Margin implementations for a :class:`~prompt_toolkit.layout.containers.Window`.
é    )Úannotations)ÚABCMetaÚabstractmethod)ÚTYPE_CHECKINGÚCallable)ÚFilterOrBoolÚ	to_filter)ÚStyleAndTextTuplesÚfragment_list_to_textÚto_formatted_text)Ú
get_cwidthé   )Ú	UIContent)ÚWindowRenderInfo)ÚMarginÚNumberedMarginÚScrollbarMarginÚConditionalMarginÚPromptMarginc                  óD   — e Zd ZdZedd„«       Ze	 	 	 	 	 	 	 	 dd„«       Zy)r   z&
    Base interface for a margin.
    c                 ó   — y)a  
        Return the width that this margin is going to consume.

        :param get_ui_content: Callable that asks the user control to create
            a :class:`.UIContent` instance. This can be used for instance to
            obtain the number of lines.
        r   © ©ÚselfÚget_ui_contents     ú_C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\prompt_toolkit/layout/margins.pyÚ	get_widthzMargin.get_width%   s   € ð ó    c                ó   — g S )a³  
        Creates a margin.
        This should return a list of (style_str, text) tuples.

        :param window_render_info:
            :class:`~prompt_toolkit.layout.containers.WindowRenderInfo`
            instance, generated after rendering and copying the visible part of
            the :class:`~prompt_toolkit.layout.controls.UIControl` into the
            :class:`~prompt_toolkit.layout.containers.Window`.
        :param width: The width that's available for this margin. (As reported
            by :meth:`.get_width`.)
        :param height: The height that's available for this margin. (The height
            of the :class:`~prompt_toolkit.layout.containers.Window`.)
        r   ©r   Úwindow_render_infoÚwidthÚheights       r   Úcreate_marginzMargin.create_margin0   s	   € ð$ ˆ	r   N©r   zCallable[[], UIContent]ÚreturnÚint©r!   r   r"   r'   r#   r'   r&   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r   r   r   r   r       sO   „ ñð òó ðð ðØ"2ðØ;>ðØHKðà	òó ñr   r   )Ú	metaclassc                  óF   — e Zd ZdZ	 d	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 d	d„Zy)
r   a  
    Margin that displays the line numbers.

    :param relative: Number relative to the cursor position. Similar to the Vi
                     'relativenumber' option.
    :param display_tildes: Display tildes after the end of the document, just
        like Vi does.
    c                óD   — t        |«      | _        t        |«      | _        y ©N)r	   ÚrelativeÚdisplay_tildes)r   r1   r2   s      r   Ú__init__zNumberedMargin.__init__O   s   € ô " (Ó+ˆŒÜ'¨Ó7ˆÕr   c                óV   —  |«       j                   }t        dt        |› «      dz   «      S )Né   r   )Ú
line_countÚmaxÚlen)r   r   r6   s      r   r   zNumberedMargin.get_widthU   s)   € Ù#Ó%×0Ñ0ˆ
Ü�1”c˜Z˜LÓ*¨QÑ.Ó/Ð/r   c                óz  — | j                  «       }d}d}|j                  j                  j                  }g }d }	t	        |j
                  «      D ]¥  \  }
}||	k7  rˆ|€n…||k(  rE|r|j                  |d|dz   z  f«       nd|j                  |d|dz   z  j                  |«      f«       n;|rt        ||z
  «      dz
  }|j                  |d|dz   z  j                  |«      f«       |}	|j                  d«       Œ§ | j                  «       r5
|j                  k  r&|j                  d«       |
dz  }
|
|j                  k  rŒ&|S )Nzclass:line-numberzclass:line-number.currentz%ir   z%i ©Ú Ú
)zclass:tildez~
)r1   Ú
ui_contentÚcursor_positionÚyÚ	enumerateÚdisplayed_linesÚappendÚrjustÚabsr2   Úwindow_height)r   r!   r"   r#   r1   ÚstyleÚstyle_currentÚcurrent_linenoÚresultÚlast_linenor?   Úlinenos               r   r$   zNumberedMargin.create_marginY   sP  € ð —=‘=“?ˆà#ˆØ3ˆð ,×6Ñ6×FÑF×HÑHˆð &(ˆØˆä"Ð#5×#EÑ#EÖF‰IˆAˆvà˜Ò$Ø�>ØØ˜~Ò-áàŸ™ }°d¸fÀq¹jÑ6IÐ&JÕKàŸ™Ø*¨U°f¸q±jÑ-A×,HÑ,HÈÓ,OÐPõñ
  Ü!$ V¨nÑ%<Ó!=ÀÑ!A˜à—M‘M 5¨5°F¸Q±JÑ+?×*FÑ*FÀuÓ*MÐ"NÔOà ˆKØ�M‰M˜*Õ%ð- Gð2 ×ÑÔ ØÐ(×6Ñ6Ò6Ø—‘Ð4Ô5Ø�Q‘�ð Ð(×6Ñ6Ó6ð ˆr   N)FF)r1   r   r2   r   r&   ÚNoner%   r(   ©r)   r*   r+   r,   r3   r   r$   r   r   r   r   r   E   sU   „ ñð NSð8Ø$ð8Ø>Jð8à	ó8ó0ð-Ø"2ð-Ø;>ð-ØHKð-à	ô-r   r   c                  ó8   — e Zd ZdZdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Zy)	r   zJ
    Wrapper around other :class:`.Margin` classes to show/hide them.
    c                ó2   — || _         t        |«      | _        y r0   )Úmarginr	   Úfilter)r   rP   rQ   s      r   r3   zConditionalMargin.__init__Ž   s   € ØˆŒÜ Ó'ˆ�r   c                óZ   — | j                  «       r| j                  j                  |«      S y)Nr   )rQ   rP   r   r   s     r   r   zConditionalMargin.get_width’   s#   € Ø�;‰;Œ=Ø—;‘;×(Ñ(¨Ó8Ð8àr   c                ód   — |r-| j                  «       r| j                  j                  |||«      S g S r0   )rQ   rP   r$   r    s       r   r$   zConditionalMargin.create_margin˜   s.   € ñ �T—[‘[”]Ø—;‘;×,Ñ,Ð-?ÀÈÓOÐOàˆIr   N)rP   r   rQ   r   r&   rL   r%   r(   rM   r   r   r   r   r   ‰   s6   „ ñó(óðØ"2ðØ;>ðØHKðà	ôr   r   c                  óN   — e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 d	d„Zy)
r   zc
    Margin displaying a scrollbar.

    :param display_arrows: Display scroll up/down arrows.
    c                ó@   — t        |«      | _        || _        || _        y r0   )r	   Údisplay_arrowsÚup_arrow_symbolÚdown_arrow_symbol)r   rV   rW   rX   s       r   r3   zScrollbarMargin.__init__¨   s!   € ô (¨Ó7ˆÔØ.ˆÔØ!2ˆÕr   c                 ó   — y)Nr   r   r   s     r   r   zScrollbarMargin.get_width²   s   € Ør   c           
     ó  ‡‡— |j                   }|j                  }| j                  «       }|r|dz  }	 t        |j                  «      t        |«      z  }|j                  t        |«      z  }t        t        |t        d||z  «      «      «      Št        ||z  «      Šdˆˆfd„}	g }
|r|
j                  d| j                  fdg«       d}d}d}d	}t        |«      D ]€  } |	|«      r3 |	|dz   «      s|
j                  |d
f«       nF|
j                  |d
f«       n2 |	|dz   «      r|
j                  |d
f«       n|
j                  |d
f«       |
j                  d«       Œ‚ |r|
j                  d| j                  f«       |
S # t        $ r g cY S w xY w)Né   r   c                ó*   •— ‰| cxk  xr ‰‰z   k  S c S )z/True if we should display a button on this row.r   )ÚrowÚscrollbar_heightÚscrollbar_tops    €€r   Úis_scroll_buttonz7ScrollbarMargin.create_margin.<locals>.is_scroll_buttonÍ   s   ø€ à$¨ÖO¨}Ð?OÑ/OÑOÐOÑOÐOr   zclass:scrollbar.arrow)zclass:scrollbarr<   zclass:scrollbar.backgroundz*class:scrollbar.background,scrollbar.startzclass:scrollbar.buttonz$class:scrollbar.button,scrollbar.endÚ r:   )r]   r'   r&   Úbool)Úcontent_heightrE   rV   r8   rA   ÚfloatÚvertical_scrollr'   Úminr7   ÚextendrW   ÚrangerB   rX   ÚZeroDivisionError)r   r!   r"   r#   rc   rE   rV   Úfraction_visibleÚfraction_abover`   rI   Úscrollbar_backgroundÚscrollbar_background_startÚscrollbar_buttonÚscrollbar_button_endÚir^   r_   s                   @@r   r$   zScrollbarMargin.create_marginµ   s²  ù€ ð ,×:Ñ:ˆØ*×8Ñ8ˆØ×,Ñ,Ó.ˆáØ˜QÑˆMð5	Ü"Ð#5×#EÑ#EÓFÌØóJñ  Ðð 0×?Ñ?Ä%ÈÓBWÑWˆNä"Ü�M¤3 q¨-Ð:JÑ*JÓ#KÓLó Ðô   °Ñ >Ó?ˆMö
Pð
 *,ˆFÙØ—‘à0°$×2FÑ2FÐGØ1ðôð $@Ð Ø)UÐ&Ø7ÐØ#IÐ ä˜=Ö)�Ù# AÔ&Ù+¨A°©EÔ2ð Ÿ™Ð';¸SÐ&AÕBàŸ™Ð'7¸Ð&=Õ>á'¨¨A©Ô.ØŸ™Ð'AÀ3Ð&GÕHàŸ™Ð';¸SÐ&AÔBØ—‘˜jÕ)ð *ñ  Ø—‘Ð6¸×8NÑ8NÐOÔPàˆMøôW !ò 	ØŠIð	ús   ³A)E= Å=FÆ
FN)FÚ^Úv)rV   r   rW   ÚstrrX   rs   r&   rL   r%   r(   rM   r   r   r   r   r   ¡   sg   „ ñð (-Ø"Ø!$ð	3à$ð3ð ð3ð ð	3ð
 
ó3óð?Ø"2ð?Ø;>ð?ØHKð?à	ô?r   r   c                  óF   — e Zd ZdZ	 d	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 d	d„Zy)
r   a¢  
    [Deprecated]

    Create margin that displays a prompt.
    This can display one prompt at the first line, and a continuation prompt
    (e.g, just dots) on all the following lines.

    This `PromptMargin` implementation has been largely superseded in favor of
    the `get_line_prefix` attribute of `Window`. The reason is that a margin is
    always a fixed width, while `get_line_prefix` can return a variable width
    prefix in front of every line, making it more powerful, especially for line
    continuations.

    :param get_prompt: Callable returns formatted text or a list of
        `(style_str, type)` tuples to be shown as the prompt at the first line.
    :param get_continuation: Callable that takes three inputs. The width (int),
        line_number (int), and is_soft_wrap (bool). It should return formatted
        text or a list of `(style_str, type)` tuples for the next lines of the
        input.
    Nc                ó    — || _         || _        y r0   )Ú
get_promptÚget_continuation)r   rv   rw   s      r   r3   zPromptMargin.__init__  s   € ð %ˆŒØ 0ˆÕr   c                óJ   — t        | j                  «       «      }t        |«      S )z Width to report to the `Window`.)r   rv   r   )r   r   Útexts      r   r   zPromptMargin.get_width  s    € ô % T§_¡_Ó%6Ó7ˆÜ˜$ÓÐr   c                ó  — | j                   }g }|j                  t        | j                  «       «      «       |rNd }|j                  dd  D ]:  }|j                  d«       |j                  t         |||||k(  «      «      «       |}Œ< |S )Nr   r:   )rw   rg   r   rv   rA   rB   )r   r!   r"   r#   rw   rI   Úlast_yr?   s           r   r$   zPromptMargin.create_margin  s�   € ð  ×0Ñ0ÐØ%'ˆð 	�‰Ô'¨¯©Ó(9Ó:Ô;ñ ØˆFà'×7Ñ7¸¸Ó;�Ø—‘˜jÔ)Ø—‘Ü%Ñ&6°u¸aÀÀfÁÓ&MÓNôð ‘ð <ð ˆr   r0   )rv   z Callable[[], StyleAndTextTuples]rw   z5None | Callable[[int, int, bool], StyleAndTextTuples]r&   rL   r%   r(   rM   r   r   r   r   r   ÷   sX   „ ñð2 >Bð	1à4ð1ð;ð1ð
 
ó1ó ðØ"2ðØ;>ðØHKðà	ôr   r   N)r,   Ú
__future__r   Úabcr   r   Útypingr   r   Úprompt_toolkit.filtersr   r	   Úprompt_toolkit.formatted_textr
   r   r   Úprompt_toolkit.utilsr   Úcontrolsr   Ú
containersr   Ú__all__r   r   r   r   r   r   r   r   Ú<module>r…      sz   ðñõ #ç 'ß *ç :÷ñ õ
 ,å áÝ,ò€ô"�wõ "ôJA�Vô AôH˜ô ô0S�fô Sôl9�6õ 9r   