ó
    Ãu„jä   ã                  ó„  • % 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$   ó    ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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)ÚHorizontalLineé5   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  € Ø�{‰{‰ˆØˆq‹5�AŸ™¨Ñ)Ó)ØØ�j‰jˆØ‘6ˆä*¨4¯>©>Ñ:ˆÜ&ˆà—K‘K‘ !Ñ#ˆà—.‘. ¨¯©¡OÓ4ˆà‹<Ù(¨©°q¸/È1ÈaÐ6PÓQˆH‰KØÓÙ,Ø‘ ! Q¨¨?Ð!;óˆH‰Oð ˜¨¨OÐ<ˆ	Ø—^‘^ A¨¡E¨1¯{©{©?¸QÑ+>Ö?ˆEÙ,¨X©_¸iÓHˆH‹Oñ @ð 	�‰�Q‰×Ñœu Q¨D¯K©K©¸¿¹Ó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)ÚVerticalLineéZ   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  € Ø�{‰{‰ˆØˆq‹5�AŸ™Ó%ØÜ*¨4¯>©>Ñ:ˆØ�j‰jˆÜ&ˆà—.‘. ¨¯©¡OÓ4ˆà‹<Ù& s¡v¨a¡y°1°a¸È!Ð2LÓMˆC‰F�1‰IØ—[‘[‘ 1Ñ$ˆàÓÙ+¨C©K¸©N¸_ÈaÐQRÐTUÐ<VÓWˆC‰K˜‰NØ$ a¨¸!Ð<ˆ	à—^‘^ A¨¡E¨1¯{©{©?¸QÑ+>Ö?ˆEÙ*¨3©:°a©=¸)ÓDˆC‰J�q‹Mñ @ð —‘ˆÜ�Q˜A™˜tŸz™zÓ*ˆÛˆAØ‰H�O‰O˜DÖ!ò 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    € Ø—‘ˆØ—
‘
ˆØ—‘ˆØ—
‘
ˆØ—N‘Nˆ	Ü�v eÓ7×>Ñ>¸vÔFÜ�v  F¨Q¡J Ñ/°¸yÓI×PÑPÐQWÔXÜ�V UÓ6×=Ñ=¸fÔEÜ�V q™y¨!˜nÑ,¨f¸YÓG×NÑNÈvÕ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Ñ!1°WÓ!<™#À#ˆä8=¸f¼ó(
Ú8E°1ŒE�/Ö.¹ñ(
ˆŒ
ô 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      $ )z†Range 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   € ô Ü�%˜˜DŸK™KÓ(Ü�#�q˜$Ÿ+™+Ó&ó
ð 	
r,   c                ón   • [        [        USU R                  5      [        USU R                  5      5      $ )z†Range 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   € ô Ü�%˜˜DŸL™LÓ)Ü�#�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  pæU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" X÷U 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" Xò5      /U	5      5        GMt     [9        X¹5      $ s  snf )
z¢Render 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$   é € ð â+B™K˜Eð Ÿ™ U¨EÕ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$   é € ð â+B™K˜Eð Ÿ™ 4¨Õ/Ú+Bùr‰   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Ö"ñ $ô !×,Ñ,ˆÜ˜TŸX™X t§z¡zÖ2‰IˆCØ #§	¡	¦‘�Ù& t›}�“ó !,ñ 3ð —‘ˆÜ" 1 aÓ(ˆØ ˆð ×!×!ô ×!Ò! *×"4Ñ"4Ô5ä—’˜]Ó+ð 	ô
 ˆÜ" 4§:¡:¨t¯z©z×:‰OˆIØ—>‘>Ó#ˆDçØ*,�Ø˜¹9Ó#Eº9°4 D§J¤J¹9Ñ#EÑE�à!ðñä+4°YÀÔ+Bóðñä+4°YÀÔ+Bóðð ˜D !Ð$ð�ð —
‘
˜}�
Ñ-Ü*-«%�Ø,×4Ñ4�Ø)×-Ñ-�	ÜHKØ˜5  ˜9öIÑDÑ/�V˜W hÑ1D°+¸qÀ!ö Ù$ XÕ.á! (Ô+Ø" VÕ+Ø Ÿ™Ù$Ø $¨KÐ 8Ø *Ü"'×"2Ò"2Ø$*Þ>K¬¨MÔ(:ÐQRñ%&ç&0¡jó#"ñ!"óö
ñIð& —‘œe H¨eÓ4×5à—‘œe¡X¨dÓ%?Ð$@À%ÓH×IñW  ;ô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,   