
    Cj                        % S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJrJr  SS	KJr  SS
KJr  SSKJrJr  SSKJrJrJr  SSKJr  SSKJrJr  SSKJrJ r   \S   r!S\"S'   SSSS.r# " S S\5      r$ " S S5      r%\ " S S\%5      5       r&\ " S S\%5      5       r'\ " S S\%5      5       r( " S  S!5      r)g)"zu
A Canvas class used to render keylines.

!!! note
    This API is experimental, and may change in the near future.

    )annotationsN)array)defaultdict)	dataclass)
itemgetter)
NamedTupleSequence)Segment)Style)Literal	TypeAlias)BOX_CHARACTERSQuadcombine_quads)Color)Offsetclamp)StripStripRenderable)thinheavydoubler   CanvasLineType         c                  8    \ rS rSr% SrS\S'   S\S'   S\S'   Srg	)
_Span!   z8Associates a sequence of character indices with a color.intstartendr   color N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r$       `/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/canvas.pyr   r   !   s    BJ	HLr,   r   c                  "    \ rS rSrSrSS jrSrg)	Primitive)   z"Base class for a canvas primitive.c                    [        5       e)z:Render to the canvas.

Args:
    canvas: Canvas instance.
)NotImplementedError)selfcanvass     r-   renderPrimitive.render,   s     "##r,   r$   Nr4   CanvasreturnNone)r%   r&   r'   r(   r)   r5   r+   r$   r,   r-   r/   r/   )   s
    ,$r,   r/   c                  P    \ rS rSr% SrS\S'   S\S'   S\S'   S	rS
\S'   SS jrSrg)HorizontalLine5   zA horizontal line.r   originr    lengthr   r#   r   r   	line_typec                T   U R                   u  p#US:  d  X1R                  S-
  :  a  g UR                  nXC   n[        U R                     n[
        nX R                  -   S-
  nUR                  X"U R                  -   5      n	X);   a  U" XR   SUSS45      XR'   X;   a  U" XX   SSSU45      XX'   SUSU4n
UR                  US-   X R                  -   S-
  5       H  nU" X[   U
5      X['   M     UR                  U   R                  [        X"U R                  -   U R                  5      5        g Nr   r   )r>   heightbox_LINE_TYPE_INDEXr@   r   r?   x_rangespansappendr   r#   )r3   r4   xyrD   box_lineline_type_index_combine_quadsrightrF   	line_quadbox_xs               r-   r5   HorizontalLine.render>   s   {{q5A))jj6*4>>:&KK!#..O4<(q/1a6PQHK,!Q?!;HO O<	^^AE1{{?Q+>?E,X_iHHO @ 	QuQDKKDEr,   r$   Nr7   	r%   r&   r'   r(   r)   r*   r@   r5   r+   r$   r,   r-   r<   r<   5   s$    NKL &I~&Fr,   r<   c                  P    \ rS rSr% SrS\S'   S\S'   S\S'   S	rS
\S'   SS jrSrg)VerticalLineZ   zA vertical line.r   r>   r    r?   r   r#   r   r   r@   c                n   U R                   u  p#US:  d  X!R                  :  a  g [        U R                     nUR                  n[
        nUR                  X3U R                  -   5      nX7;   a  U" XS   U   SSUS45      XS   U'   X0R                  -   S-
  nX;   a  U" XX   U   USSS45      XX   U'   USUS4n	UR                  US-   X0R                  -   S-
  5       H  n
U" XZ   U   U	5      XZ   U'   M     UR                  n[        X"S-   U R                  5      nU H  nX   R                  U5        M     g rB   )r>   widthrE   r@   rD   r   y_ranger?   rG   r   r#   rH   )r3   r4   rI   rJ   rL   rD   rM   rX   bottomrO   box_yrG   spans                r-   r5   VerticalLine.renderc   s3   {{q5A%*4>>:jj&..O4<&svay1a!2LMCF1I[[1$+CKN_aQRTU<VWCKN$a!<	^^AE1{{?Q+>?E*3:a=)DCJqM @ QAtzz*AHOOD! r,   r$   Nr7   rR   r$   r,   r-   rT   rT   Z   s#    NKL &I~&"r,   rT   c                  Z    \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
rS\S'   SS jrSrg)	Rectangle~   zA rectangle.r   r>   r    rW   rC   r   r#   r   r   r@   c                v   U R                   nU R                  nU R                  nU R                  nU R                  n[        X#XV5      R                  U5        [        USUS-
  4-   X5U5      R                  U5        [        X$XV5      R                  U5        [        X#S-
  S4-   XEU5      R                  U5        g rB   )r>   rW   rC   r#   r@   r<   r5   rT   )r3   r4   r>   rW   rC   r#   r@   s          r-   r5   Rectangle.render   s    



NN	ve7>>vFvFQJ/yIPPQWXVU6==fEVqy!n,fYGNNvVr,   r$   Nr7   rR   r$   r,   r-   r^   r^   ~   s)    NJKL &I~&	Wr,   r^   c                  t    \ rS rSrSrSS jr\SS j5       r\SS j5       rSS jr	SS jr
      SS jrS	rg
)r8      zA character canvas.c                `   Xl         X l        SU-  n[        R                  S:  a  SOSn[	        U5       Vs/ s H  n[        XC5      PM     snU l        [	        U5       Vs/ s H  n[        S 5      PM     snU l        [	        U5       Vs/ s H  n/ PM     snU l	        gs  snf s  snf s  snf )z_

Args:
    width: Width of the canvas (in cells).
    height Height of the canvas (in cells).
 )r      wuc                     g)N)r   r   r   r   r$   r$   r,   r-   <lambda>!Canvas.__init__.<locals>.<lambda>   s    r,   N)
_width_heightsysversion_inforanger   linesr   rD   rG   )r3   rW   rC   
blank_linearray_type_code_s         r-   __init__Canvas.__init__   s     5[
!$!1!1W!<##8=f(
8E1E/.(

 8=V}2
7D!K,-}2
 6;6](C]](C
(
2
 )Ds   B!!B&B+c                    U R                   $ )zThe canvas width.)rl   r3   s    r-   rW   Canvas.width   s     {{r,   c                    U R                   $ )zThe canvas height.)rm   rx   s    r-   rC   Canvas.height   s     ||r,   c                n    [        [        USU R                  5      [        USU R                  5      5      $ )zRange of x values, clipped to the canvas dimensions.

Args:
    start: Start index.
    end: End index.

Returns:
    A range object.
r   )rp   r   rl   r3   r!   r"   s      r-   rF   Canvas.x_range   s1     %DKK(#q$++&
 	
r,   c                n    [        [        USU R                  5      [        USU R                  5      5      $ )zRange of y values, clipped to the canvas dimensions.

Args:
    start: Start index.
    end: End index.

Returns:
    A range object.
r   )rp   r   rm   r}   s      r-   rX   Canvas.y_range   s1     %DLL)#q$,,'
 	
r,   c                   U H  nUR                  U 5        M     [        R                  n[        U R                  U R
                  5       H(  u  pVUR                  5        H  u  pxU" U5      Xg'   M     M*     U R                  n	[        SS5      n
/ nUR                  (       a   [        R                  " UR                  5      O[        R                  " S5      n[        n[        U R                  U R
                  5       GHq  u  pUR                  5       nU(       Ga1  / nU/U Vs/ s H  nUR                   PM     sn-   nS/S [#        US5       5       QS [#        US5       5       QU	SS4PnUR%                  U
S9  ['        5       nUR(                  nUR*                  n[        UUSS	 5       H~  u  u  nnnu  n  nU(       a	  U" U5        OU" U5        UU:  d  M.  UR-                  U" XU U[.        R0                  " UU(       a  [3        U5      OS   R4                  5      -   5      5        M     UR-                  [7        UU	5      5        GMO  UR-                  [7        U" X5      /U	5      5        GMt     [9        X5      $ s  snf )
zRender the canvas.

Args:
    primitives: A sequence of primitives.
    base_style: The base style of the canvas.

Returns:
    A Rich renderable for the canvas.
r   r   transparent)r   Fr   c              3  D   #    U  H  u  pUR                   S U4v   M     g7f)FN)r!   .0indexr[   s      r-   	<genexpr> Canvas.render.<locals>.<genexpr>   s$      +BKE UE2+B    c              3  D   #    U  H  u  pUR                   S U4v   M     g7f)TN)r"   r   s      r-   r   r      s$      +BKE 4/+Br   T)keyN)r5   r   __getitem__ziprD   rq   itemsrl   r   bgcolorr   from_rich_colorparser
   rG   	tounicoder#   	enumeratesortsetdiscardaddrH   r   
from_colormax
rich_colorr   r   )r3   
primitives
base_style	primitiveget_boxrD   lineoffsetquadrW   span_sort_keystripsr#   _Segment	raw_spanstextsegmentsr[   colorsrG   color_indicescolor_remove	color_addleavingstyle_idnext_offsetrt   s                              r-   r5   Canvas.render   s\    $IT" $ !,,TXXtzz2IC #		&t} !, 3 "1a(  !! !!*"4"45]+ 	
 "4::tzz:OI>>#D*,9#E94DJJ9#EE!+4Y+B+4Y+B D!$ 

}
-*-%,44)--	HK59ID/VWh1D+q! $X.!(+"V+ $ $K 8 *"'"2"2$*>KM(:QR%&&0j#"!"
I& eHe45eXd%?$@%HIW  ;Z v--Q $Fs   $I?)rm   rl   rD   rq   rG   N)rW   r    rC   r    r9   r:   )r9   r    )r!   r    r"   r    r9   rp   )r   zSequence[Primitive]r   r   r9   r   )r%   r&   r'   r(   r)   ru   propertyrW   rC   rF   rX   r5   r+   r$   r,   r-   r8   r8      s^    D&    

J.-J.;@J.	J.r,   r8   )*r)   
__future__r   rn   r   collectionsr   dataclassesr   operatorr   typingr   r	   rich.segmentr
   
rich.styler   typing_extensionsr   r   textual._box_drawingr   r   r   textual.colorr   textual.geometryr   r   textual.stripr   r   r   r*   rE   r   r/   r<   rT   r^   r8   r$   r,   r-   <module>r      s    # 
  # !  '    0 D D  * 0#$=>	 > Q7 J 	$ 	$ !FY !F !FH  "9  "  "F W	 W W*H. H.r,   