ó
    Ãu„j<Ö  ã                  óH  • % S SK Jr  S SKrS SKrS SK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  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#J$r$  S SK%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<J=r=  S SK>J?r?  Sr@S\AS'     " S S 5      rB " S! S"5      rC " S# S$\<5      rD " S% S&\D5      rE " S' S(\E5      rF " S) S*\E5      rG " S+ S,\E5      rH " S- S.\E5      rI " S/ S0\E5      rJ " S1 S2\E5      rK " S3 S4\D5      rL " S5 S6\D5      rM " S7 S8\D5      rN " S9 S:\D5      rO " S; S<\O5      rP " S= S>\O5      rQ " S? S@\<5      rR " SA SB\:5      rS " SC SD\D5      rT " SE SF\D5      rU " SG SH\D5      rV " SI SJ\D5      rW " SK SL\D5      rX " SM SN\D5      rY " SO SP\:5      rZ " SQ SR\D5      r[ " SS ST\[5      r\ " SU SV\[5      r] " SW SX\D5      r^SYr_ " SZ S[\:5      r` " S\ S]\:S^S_9ra " S` Sa\$SbS^Sc9rbg)dé    )ÚannotationsN)Úsuppress)Úpartial)ÚPathÚPurePath)ÚCallableÚIterableÚOptional)Úunquote)Ú
MarkdownIt)ÚToken)ÚText)Ú	TypeAlias)ÚTrackedSlugsÚslug_for_tcss_id)ÚComposeResult)ÚAwaitComplete)Ú
HorizontalÚVerticalÚVerticalScroll)ÚContentÚSpan)Ú	NoMatches)ÚMount)Ú	highlight)ÚLayout)Ú
GridLayout)ÚMessage)ÚreactiveÚvar)ÚStyle)ÚWidget)ÚStaticÚTree)ÚLabelz!list[tuple[int, str, str | None]]r   ÚTableOfContentsTypec                  óJ   • \ rS rSrSrS
S jrSS jrSS jrSS jrSS jr	Sr
g	)ÚMarkdownStreamé)   zåAn object to manage streaming markdown.

This will accumulate markdown fragments if they can't be rendered fast enough.

This object is typically created by the [Markdown.get_stream][textual.widgets.Markdown.get_stream] method.

c                ón   • Xl         SU l        [        R                  " 5       U l        / U l        SU l        g)z7
Args:
    markdown_widget: Markdown widget to update.
NF)Úmarkdown_widgetÚ_taskÚasyncioÚEventÚ_new_markupÚ_pendingÚ_stopped)Úselfr+   s     Ú§C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\textual/widgets/_markdown.pyÚ__init__ÚMarkdownStream.__init__2   s-   € ð
  /ÔØ*.ˆŒ
Ü"Ÿ=š=›?ˆÔØ#%ˆŒØˆ�ó    c                ór   • U R                   c*  [        R                  " U R                  5       5      U l         gg)zžStart the updater running in the background.

No need to call this, if the object was created by [Markdown.get_stream][textual.widgets.Markdown.get_stream].

N)r,   r-   Úcreate_taskÚ_run©r2   s    r3   ÚstartÚMarkdownStream.start=   s+   € ð �:‰:ÑÜ ×,Ò,¨T¯Y©Y«[Ó9ˆD�Jð r6   c              ƒ  ó¤   #   • U R                   b=  U R                   R                  5         U R                   I Sh  v•N   SU l         SU l        gg N7f)z%Stop the stream and await its finish.NT)r,   Úcancelr1   r:   s    r3   ÚstopÚMarkdownStream.stopF   sB   é € à�:‰:Ñ!Ø�J‰J×ÑÔØ—*‘*×ÐØˆDŒJØ ˆD�Mð	 "áùs   ‚7A¹AºAc              ƒ  óþ   #   • U R                   (       a  [        S5      eU(       d  gU R                  R                  U5        U R                  R                  5         [        R                  " S5      I Sh  v•N   g N7f)ztAppend or enqueue a markdown fragment.

Args:
    markdown_fragment: A string to append at the end of the document.
z/Can't write to the stream after it has stopped.Nr   )r1   ÚRuntimeErrorr0   Úappendr/   Úsetr-   Úsleep)r2   Úmarkdown_fragments     r3   ÚwriteÚMarkdownStream.writeN   sW   é € ð �=�=ÜÐPÓQÐQÞ àà�‰×ÑÐ.Ô/Ø×Ñ×ÑÔä�mŠm˜AÓ×Óùs   ‚A3A=Á5A;Á6A=c              ƒ  óŠ  #   •  U R                   R                  5       I Sh  v•N (       a¯  SR                  U R                  5      nU R                  R	                  5         U R                   R	                  5         [
        R                  " U R                  R                  U5      5      I Sh  v•N   U R                   R                  5       I Sh  v•N (       a  M¯  SR                  U R                  5      nU(       a$  U R                  R                  U5      I Sh  v•N   gg Nÿ Nv NV! [
        R                   a     Ncf = f N&7f)z7Run a task to append markdown fragments when available.NÚ )
r/   ÚwaitÚjoinr0   Úclearr-   Úshieldr+   rC   ÚCancelledError)r2   Únew_markdowns     r3   r9   ÚMarkdownStream._run_   sø   é € ð	Ø×(Ñ(×-Ñ-Ó/×/Õ/Ø!Ÿw™w t§}¡}Ó5�Ø—‘×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ü—n’n T×%9Ñ%9×%@Ñ%@ÀÓ%NÓO×OÐOð	 ×(Ñ(×-Ñ-Ó/×/×/ð —w‘w˜tŸ}™}Ó-ˆÞØ×&Ñ&×-Ñ-¨lÓ;×;Ñ;ð ñ 0ñ Pñ	 0øô
 ×%Ñ%ó 	áð	úñ <ùsj   ‚E„D' ¡D!¢B
D' Â,D#Â-!D' ÃD%Ã	D' ÃA EÄEÄEÄ!D' Ä#D' Ä%D' Ä'D>Ä;EÄ=D>Ä>E)r/   r0   r1   r,   r+   N)r+   ÚMarkdownÚreturnÚNone©rS   rT   )rF   ÚstrrS   rT   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r4   r;   r?   rG   r9   Ú__static_attributes__© r6   r3   r(   r(   )   s    † ñô	ô:ô!ô÷"<r6   r(   c                  ó|   • \ rS rSrSrSS jr\SS j5       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)Ú	Navigatorép   z(Manages a stack of paths like a browser.c                ó    • / U l         SU l        g )Nr   )ÚstackÚindexr:   s    r3   r4   ÚNavigator.__init__s   s   € Ø!#ˆŒ
Øˆ�
r6   c                ól   • U R                   (       d  [        S5      $ U R                   U R                     $ )zEThe current location.

Returns:
    A path for the current document.
Ú.)rb   r   rc   r:   s    r3   ÚlocationÚNavigator.locationw   s(   € ð �z�zÜ˜“9ÐØ�z‰z˜$Ÿ*™*Ñ%Ð%r6   c                ó    • U R                   S:H  $ )z2Is the current location at the start of the stack?r   ©rc   r:   s    r3   r;   ÚNavigator.start‚   s   € ð �z‰z˜Q‰Ðr6   c                óL   • U R                   [        U R                  5      S-
  :¬  $ )z0Is the current location at the end of the stack?é   ©rc   Úlenrb   r:   s    r3   ÚendÚNavigator.end‡   s    € ð �z‰zœS §¡›_¨qÑ0Ñ0Ð0r6   c                óê  • [         R                  [        U5      5      u  p#U[        S5      :X  a8  U(       a1  [         R                  [        U R                  5      5      u  pEU SU 3nU R                  R
                  [        U5      -  nU R                  SU R                  S-    U l        UR                  5       nU R                  R                  U5        [        U R                  5      S-
  U l        U$ )zYGo to a new document.

Args:
    path: Path to new document.

Returns:
    New location.
rf   Ú#Nrm   )rR   Úsanitize_locationrV   r   rg   Úparentrb   rc   ÚabsoluterC   ro   )r2   Úpathrg   ÚanchorÚcurrent_fileÚ_Únew_paths          r3   ÚgoÚNavigator.goŒ   sÀ   € ô $×5Ñ5´c¸$³iÓ@ÑˆØ”t˜C“yÓ ¦VÜ&×8Ñ8¼¸T¿]¹]Ó9KÓL‰OˆLØ"�^ 1 V HÐ-ˆDØ—=‘=×'Ñ'¬$¨t«*Ñ4ˆØ—Z‘ZÐ 0 $§*¡*¨q¡.Ð1ˆŒ
Ø×$Ñ$Ó&ˆØ�
‰
×Ñ˜(Ô#Ü˜Ÿ™“_ qÑ(ˆŒ
Øˆr6   c                óR   • U R                   (       a  U =R                   S-  sl         gg)zSGo back in the stack.

Returns:
    True if the location changed, otherwise False.
rm   TFrj   r:   s    r3   ÚbackÚNavigator.back    s   € ð �:�:Ø�JŠJ˜!‰O�JØØr6   c                ó|   • U R                   [        U R                  5      S-
  :  a  U =R                   S-  sl         gg)zVGo forward in the stack.

Returns:
    True if the location changed, otherwise False.
rm   TFrn   r:   s    r3   ÚforwardÚNavigator.forward«   s0   € ð �:‰:œ˜DŸJ™J›¨!Ñ+Ó+Ø�JŠJ˜!‰O�JØØr6   )rc   rb   NrU   )rS   r   ©rS   Úbool)rw   ústr | PurePathrS   r   )rW   rX   rY   rZ   r[   r4   Úpropertyrg   r;   rp   r|   r   r‚   r\   r]   r6   r3   r_   r_   p   sU   † Ù2ôð ó&ó ð&ð óó ðð ó1ó ð1ôô(	÷	r6   r_   c                  óÔ   ^ • \ rS rSrSr1 Skr Sr S       SU 4S jjjr\SS j5       r	\SS j5       r
\SS j5       rSS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )ÚMarkdownBlocké·   z&The base class for a Markdown Element.>   ÚsÚemÚstrongÚcode_inlinezI
    MarkdownBlock {
        width: 1fr;
        height: auto;
    }
    c                óP  >• [         R                  " U5      U l         [        5       U l        X l        / U l        S U l        U=(       d-    UR                  b  UR                  S   UR                  S   4OSU l	        [        TU ],  " UUR                  SUR                   3SS.UD6  g )Nr   rm   )r   r   zlevel-T)ÚnameÚclassesÚexpand)ÚweakrefÚrefÚ_markdown_refr   Ú_contentÚ_tokenÚ_blocksÚ_inline_tokenÚmapÚsource_rangeÚsuperr4   ÚtypeÚlevel)r2   ÚmarkdownÚtokenr›   ÚargsÚkwargsÚ	__class__s         €r3   r4   ÚMarkdownBlock.__init__Î   s�   ø€ ô %Ÿ[š[¨Ó2ˆÔØLÜ!(£ˆŒØ"ŒØ,.ˆŒØ+/ˆÔØ-9÷ .
Ø,1¯I©IÑ,AˆU�Y‰Y�q‰\˜5Ÿ9™9 Q™<Ñ(Àvð 	Ôô 	‰ÒØØ—‘Ø˜UŸ[™[˜MÐ*Øñ		
ð
 ó	
r6   c                ó0   • U R                  5       nUc   eU$ )z!Resolve the weak ref to _markdown)r•   ©r2   rŸ   s     r3   Ú	_markdownÚMarkdownBlock._markdownè   s#   € ð ×%Ñ%Ó'ˆØÑ#Ð#Ð#Øˆr6   c                ó,   • U R                  [        5      $ ©N)Úquery_ancestorrR   r:   s    r3   Úselect_containerÚMarkdownBlock.select_containerï   s   € à×"Ñ"¤8Ó,Ð,r6   c                ó¢   • U R                   c  gU R                   u  pSR                  U R                  R                  R	                  SS9X 5      $ )z4The source of this block if known, otherwise `None`.NrJ   T©Úkeepends)r›   rL   r§   ÚsourceÚ
splitlines)r2   r;   rp   s      r3   r±   ÚMarkdownBlock.sourceó   sL   € ð ×ÑÑ$ØØ×&Ñ&‰
ˆØ�w‰w�t—~‘~×,Ñ,×7Ñ7ÀÐ7ÐFÀuÐQÓRÐRr6   c                ó&   • UR                   U l         g)z$Copy the context from another block.N)r—   ©r2   Úblocks     r3   Ú_copy_contextÚMarkdownBlock._copy_contextû   s   € à—l‘lˆ�r6   c              #  ól   #   • U R                    S h  v•N   U R                   R                  5         g  N7frª   )r˜   rM   r:   s    r3   ÚcomposeÚMarkdownBlock.composeÿ   s'   é € Ø—<‘<×ÐØ�‰×ÑÕñ 	 ùs   ‚4’2“ 4c                ó2   • Xl         U R                  U5        g rª   )r–   Úupdate©r2   Úcontents     r3   Úset_contentÚMarkdownBlock.set_content  s   € ØŒØ�‰�GÕr6   c              ƒ  óŠ   #   • U R                  5       I S h  v•N   U R                  R                  U5      I S h  v•N   g  N( N7frª   )Úremover§   Úmountrµ   s     r3   Ú_update_from_blockÚ MarkdownBlock._update_from_block  s4   é € Ø�k‰k‹m×ÐØ�n‰n×"Ñ" 5Ó)×)Ñ)ñ 	Ù)ùs   ‚A–?—"A¹AºAÁAc              ƒ  ój   #   • U R                  [        R                  U R                  U5      5        g7f)zCalled on link click.N)Úpost_messagerR   ÚLinkClickedr§   ©r2   Úhrefs     r3   Úaction_linkÚMarkdownBlock.action_link  s$   é € à×Ñœ(×.Ñ.¨t¯~©~¸tÓDÕEùs   ‚13c                óT   • Xl         U R                  U5      nU R                  U5        g)znBuild inline block content from its source token.

Args:
    token: The token from which this block is built.
N)r™   Ú_token_to_contentrÀ   )r2   r    r¿   s      r3   Úbuild_from_tokenÚMarkdownBlock.build_from_token  s(   € ð #ÔØ×(Ñ(¨Ó/ˆØ×Ñ˜Õ!r6   c                óŽ  ^^^^• UR                   c  [        S5      $ / m/ m/ mSmS UU4S jjnS!UU4S jjnSmS"UUU4S jjnUR                    GHØ  nUR                  nUS:X  a(  U" [        R                  " SSUR
                  5      5        US	:X  a  U" S
5        US:X  a
  U" S5        M\  US:X  a#  U" S5        U" UR
                  5        U" 5         M…  US:X  a
  U" S5        M•  US:X  a
  U" S5        M¥  US:X  a
  U" S5        Mµ  US:X  aC  UR                  R                  SS5      nSU< S3nU" [        R                  " SU05      5        Mþ  US:X  a´  UR                  R                  SS5      nUR                  R                  SS5      n	SU< S3nU" [        R                  " SU05      5        U" S5        U	(       a  U" SU	 S35        UR                   b%  UR                    H  n
U" U
R
                  5        M     U" 5         GM¸  UR                  S5      (       d  GMÑ  U" 5         GMÛ     [        SR                  T5      TS9nU$ )#zpConvert an inline token to Textual Content.

Args:
    token: A markdown token.

Returns:
    Content instance.
rJ   r   Útextc                óD   >• TR                  U 5        T[        U 5      -  mg)zVAdd text to the tokens list, and advance the position.

Args:
    text: Text to add.

N)rC   ro   )rÓ   ÚpositionÚtokenss    €€r3   Úadd_contentÚ4MarkdownBlock._token_to_content.<locals>.add_content+  s   ø€ ð �M‰M˜$ÔØœ˜D›	Ñ!‰Hr6   c                ó,   >• TR                  U T45        g)zQAdd a style to the stack.

Args:
    style: A style as Style instance or string.
N)rC   )ÚstylerÕ   Ústyle_stacks    €€r3   Ú	add_styleÚ2MarkdownBlock._token_to_content.<locals>.add_style6  s   ø€ ð ×Ñ  xÐ0Õ1r6   c                 ób   >• TR                  5       u  pTR                  [        UTU 5      5        g rª   )ÚpoprC   r   )rÚ   r;   rÕ   ÚspansrÛ   s     €€€r3   Ú	close_tagÚ2MarkdownBlock._token_to_content.<locals>.close_tag@  s&   ø€ Ø&Ÿ?™?Ó,‰LˆEØ�L‰Lœ˜e X¨uÓ5Õ6r6   z\s+Ú Ú	hardbreakÚ
Ú	softbreakrŽ   z.code_inlineÚem_openz.emÚstrong_openz.strongÚs_openz.sÚ	link_openrË   zlink(Ú)z@clickÚimageÚsrcÚaltu   ðŸ–¼  Ú(Ú_close)rà   )rÓ   rV   rS   rT   )rÚ   zStyle | strrS   rT   rU   )Úchildrenr   r�   ÚreÚsubr¿   ÚattrsÚgetr!   Ú	from_metaÚendswithrL   )r2   r    r×   rÜ   rá   ÚchildÚ
child_typerË   Úactionrî   Ú
grandchildr¿   rÕ   rà   rÛ   rÖ   s               @@@@r3   rÏ   ÚMarkdownBlock._token_to_content  s	  û€ ð �>‰>Ñ!Ü˜2“;ÐàˆØˆØ57ˆØˆ÷		"ð 		"÷	2ð 	2ð ˆ÷	7ñ 	7ð —^•^ˆEØŸ™ˆJØ˜VÓ#ÙœBŸFšF 6¨3°·±Ó>Ô?Ø˜[Ó(Ù˜DÔ!Ø˜[Ó(Ù˜CÖ Ø˜}Ó,Ù˜.Ô)Ù˜EŸM™MÔ*Ù–Ø˜yÓ(Ù˜%Ö Ø˜}Ó,Ù˜)Ö$Ø˜xÓ'Ù˜$–Ø˜{Ó*Ø—{‘{—‘ v¨rÓ2�Ø  ¡¨Ð*�Ùœ%Ÿ/š/¨8°VÐ*<Ó=Ö>Ø˜wÓ&Ø—{‘{—‘ u¨bÓ1�Ø—k‘k—o‘o e¨RÓ0�Ø  ¡¨Ð*�Ùœ%Ÿ/š/¨8°VÐ*<Ó=Ô>Ù˜HÔ%ÞÙ ! C 5¨ 
Ô+Ø—>‘>Ñ-Ø&+§n¤n˜
Ù# J×$6Ñ$6Ö7ñ '5á—à×$Ñ$ X×.Ô.Ù—ñI $ôL ˜"Ÿ'™' &›/°Ñ7ˆØˆr6   )r˜   r–   r™   r•   r—   r›   rª   )rŸ   rR   r    r   r›   ztuple[int, int] | NonerS   rT   ©rS   rR   )rS   r"   )rS   ú
str | None©r¶   r‰   rS   rT   ©rS   r   ©r¿   r   rS   rT   ©rË   rV   rS   rT   )r    r   rS   rT   )r    r   rS   r   )rW   rX   rY   rZ   r[   ÚCOMPONENT_CLASSESÚDEFAULT_CSSr4   r‡   r§   r¬   r±   r·   rº   rÀ   rÅ   rÌ   rÐ   rÏ   r\   Ú__classcell__©r£   s   @r3   r‰   r‰   ·   s¶   ø† Ù0â<Ðð
ð€Kð 04ð	
àð
ð ð
ð -ð	
ð 
÷
ð 
ð4 óó ðð ó-ó ð-ð óSó ðSô#ôôô*ôFô"÷Rò Rr6   r‰   c                  ó    • \ rS rSrSrSrSrSrg)ÚMarkdownHeaderin  z!Base class for a Markdown header.r   zP
    MarkdownHeader {
        color: $text;
        margin: 2 0 1 0;

    }
    r]   N©rW   rX   rY   rZ   r[   ÚLEVELr  r\   r]   r6   r3   r  r  n  s   † Ù+à€EðƒKr6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH1i|  zAn H1 Markdown header.rm   z¿
    MarkdownH1 {
        content-align: center middle;
        color: $markdown-h1-color;
        background: $markdown-h1-background;
        text-style: $markdown-h1-text-style;
    }
    r]   Nr	  r]   r6   r3   r  r  |  ó   † Ù à€EðƒKr6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH2i‹  zAn H2 Markdown header.é   z™
    MarkdownH2 {
        color: $markdown-h2-color;
        background: $markdown-h2-background;
        text-style: $markdown-h2-text-style;
    }
    r]   Nr	  r]   r6   r3   r  r  ‹  s   † Ù à€EðƒKr6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH3i™  zAn H3 Markdown header.é   zÃ
    MarkdownH3 {
        color: $markdown-h3-color;
        background: $markdown-h3-background;
        text-style: $markdown-h3-text-style;
        margin: 1 0;
        width: auto;
    }
    r]   Nr	  r]   r6   r3   r  r  ™  s   † Ù à€EðƒKr6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH4i©  zAn H4 Markdown header.é   z®
    MarkdownH4 {
        color: $markdown-h4-color;
        background: $markdown-h4-background;
        text-style: $markdown-h4-text-style;
        margin: 1 0;
    }
    r]   Nr	  r]   r6   r3   r  r  ©  r  r6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH5i¸  zAn H5 Markdown header.é   z®
    MarkdownH5 {
        color: $markdown-h5-color;
        background: $markdown-h5-background;
        text-style: $markdown-h5-text-style;
        margin: 1 0;
    }
    r]   Nr	  r]   r6   r3   r  r  ¸  r  r6   r  c                  ó    • \ rS rSrSrSrSrSrg)Ú
MarkdownH6iÇ  zAn H6 Markdown header.é   z®
    MarkdownH6 {
        color: $markdown-h6-color;
        background: $markdown-h6-background;
        text-style: $markdown-h6-text-style;
        margin: 1 0;
    }
    r]   Nr	  r]   r6   r3   r  r  Ç  r  r6   r  c                  ó   • \ rS rSrSrSrSrg)ÚMarkdownHorizontalRuleiÖ  zA horizontal rule.z–
    MarkdownHorizontalRule {
        border-bottom: solid $secondary;
        height: 1;
        padding-top: 1;
        margin-bottom: 1;
    }
    r]   N©rW   rX   rY   rZ   r[   r  r\   r]   r6   r3   r  r  Ö  s   † ÙðƒKr6   r  c                  ó8   ^ • \ rS rSrSrSrSrSU 4S jjrSrU =r	$ )ÚMarkdownParagraphiã  zA paragraph Markdown block.FzH
    Markdown > MarkdownParagraph {
         margin: 0 0 1 0;
    }
    c              ƒ  óÄ   >#   • [        U[        5      (       a-  U R                  UR                  5        U R	                  U5        g [
        TU ]  U5      I S h  v•N   g  N7frª   )Ú
isinstancer!  rÀ   r–   r·   rœ   rÅ   ©r2   r¶   r£   s     €r3   rÅ   Ú$MarkdownParagraph._update_from_blockí  sG   øé € Ü�eÔ.×/Ñ/Ø×Ñ˜UŸ^™^Ô,Ø×Ñ˜uÕ%ä‘'Ñ,¨UÓ3×3Ó3ùó   ƒAA ÁAÁA r]   ©r¶   r‰   )
rW   rX   rY   rZ   r[   Ú
SCOPED_CSSr  rÅ   r\   r  r  s   @r3   r!  r!  ã  s   ø† Ù%à€Jð€K÷4õ 4r6   r!  c                  ó   • \ rS rSrSrSrSrg)ÚMarkdownBlockQuoteiõ  zA block quote Markdown block.aE  
    MarkdownBlockQuote {
        background: $boost;
        border-left: outer $text-primary 50%;
        margin: 1 0;
        padding: 0 1;
    }
    MarkdownBlockQuote:light {
        border-left: outer $text-secondary;
    }
    MarkdownBlockQuote > BlockQuote {
        margin-left: 2;
        margin-top: 1;
    }
    r]   Nr  r]   r6   r3   r*  r*  õ  s   † Ù'ðƒKr6   r*  c                  ó   • \ rS rSrSrSrg)ÚMarkdownListi	  z…

    MarkdownList {
        width: 1fr;
    }

    MarkdownList MarkdownList {
        margin: 0;
        padding-top: 0;
    }
    r]   N)rW   rX   rY   rZ   r  r\   r]   r6   r3   r,  r,  	  s	   † ð
ƒKr6   r,  c                  ó&   • \ rS rSrSrSrSS jrSrg)ÚMarkdownBulletListi  zA Bullet list Markdown block.zû
    MarkdownBulletList {
        margin: 0 0 1 0;
        padding: 0 0;
    }

    MarkdownBulletList Horizontal {
        height: auto;
        width: 1fr;
    }

    MarkdownBulletList Vertical {
        height: auto;
        width: 1fr;
    }
    c              #  ó  #   • U R                    HS  n[        U[        5      (       d  M  [        5       nUR                  Ul        [        U[        UR                   6 5      v •  MU     U R                   R                  5         g 7frª   )	r˜   r#  ÚMarkdownListItemÚMarkdownBulletÚbulletÚsymbolr   r   rM   )r2   r¶   r2  s      r3   rº   ÚMarkdownBulletList.compose+  s\   é € Ø—\”\ˆEÜ˜%Ô!1×2Ó2Ü'Ó)�Ø %§¡�”Ü  ¬°5·=±=Ð)AÓBÔBñ	 "ð
 	�‰×ÑÕùs   ‚#B©ABr]   Nr   ©rW   rX   rY   rZ   r[   r  rº   r\   r]   r6   r3   r.  r.    s   † Ù'ð€K÷"r6   r.  c                  ó&   • \ rS rSrSrSrSS jrSrg)ÚMarkdownOrderedListi4  zAn ordered list Markdown block.zþ
    MarkdownOrderedList {
        margin: 0 0 1 0;
        padding: 0 0;
    }

    MarkdownOrderedList Horizontal {
        height: auto;
        width: 1fr;
    }

    MarkdownOrderedList Vertical {
        height: auto;
        width: 1fr;
    }
    c              #  ó^  ^#   • SmSnU R                   (       aE  [        U R                   S   [        5      (       a#   [        U R                   S   R                  5      n[        U4S j[        U R                   U5       5       5      n[        U R                   U5       Ha  u  p4[        U[        5      (       d  M  [        5       nU T 3R                  US-   5      Ul        [        U[        UR                   6 5      v •  Mc     U R                   R                  5         g ! [
         a     NËf = f7f)Nz. rm   r   c              3  ót   >#   • U  H-  u  p[        U[        5      (       d  M  [        U T 35      v •  M/     g 7frª   )r#  r0  ro   )Ú.0Únumberr¶   Úsuffixs      €r3   Ú	<genexpr>Ú.MarkdownOrderedList.compose.<locals>.<genexpr>P  s8   øé € ð 
â!?‘�Ü˜%Ô!1×2ó %ŒC�6�(˜6˜(Ð#×$Ð$Ú!?ùs   ƒ8¢8)r˜   r#  ÚMarkdownOrderedListItemÚintr2  Ú
ValueErrorÚmaxÚ	enumerater0  r1  Úrjustr3  r   r   rM   )r2   r;   Úsymbol_sizer;  r¶   r2  r<  s         @r3   rº   ÚMarkdownOrderedList.composeH  sö   øé € ØˆØˆØ�<�<œJ t§|¡|°A¡Ô8O×PÑPðÜ˜DŸL™L¨™O×2Ñ2Ó3�ô ô 
ä!*¨4¯<©<¸Ô!?ó
ó 
ˆô
 ' t§|¡|°UÖ;‰MˆFÜ˜%Ô!1×2Ó2Ü'Ó)�Ø#) (¨6¨(Ð 3× 9Ñ 9¸+È¹/Ó J�”Ü  ¬°5·=±=Ð)AÓBÔBñ	 <ð 	�‰×ÑÕøô ó Ùðüs0   ƒ8D-¼"D ÁAD-Â9A$D-Ä
D*Ä'D-Ä)D*Ä*D-r]   Nr   r5  r]   r6   r3   r7  r7  4  s   † Ù)ð€K÷"r6   r7  c                  ó"   • \ rS rSrSrSS jrSrg)ÚMarkdownTableCellContentsi^  zGWidget for table cells.

A shim over a Static which responds to links.
c              ƒ  ó|   #   • U R                  [        R                  U R                  [        5      U5      5        g7f©z2Pass a link action on to the MarkdownTable parent.N)rÈ   rR   rÉ   r«   rÊ   s     r3   rÌ   Ú%MarkdownTableCellContents.action_linkd  s+   é € à×Ñœ(×.Ñ.¨t×/BÑ/BÄ8Ó/LÈdÓSÕTùs   ‚:<r]   Nr  )rW   rX   rY   rZ   r[   rÌ   r\   r]   r6   r3   rH  rH  ^  s   † ñ÷
Ur6   rH  c                  óx   ^ • \ rS rSrSrSrSS1rSU 4S jjrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSrU =r$ )ÚMarkdownTableContentii  zRenders a Markdown table.a™  
    MarkdownTableContent {
        width: 1fr;
        height: auto;
        layout: grid;
        grid-columns: auto;
        grid-rows: auto;
        grid-gutter: 1 1;

        & > .cell {
            margin: 0 0;
            height: auto;
            padding: 0 1;
            text-overflow: ellipsis;
        }
        & > .header {
            height: auto;
            margin: 0 0;
            padding: 0 1;
            color: $primary;
            text-overflow: ellipsis;
            content-align: left bottom;
        }
        keyline: thin $foreground 20%;
    }
    MarkdownTableContent > .markdown-table--header {
        text-style: bold;
    }
    zmarkdown-table--headerzmarkdown-table--linesc                ó–   >• UR                  5       U l         UR                  5       U l         [        TU ]  5         SU l        SU l        g )NTr   )ÚcopyÚheadersÚrowsrœ   r4   ÚshrinkÚlast_row)r2   rP  rQ  r£   s      €r3   r4   ÚMarkdownTableContent.__init__Œ  s<   ø€ Ø—|‘|“~ˆŒØ"Ø—I‘I“KˆŒ	ØÜ‰ÑÔØˆŒØˆ�r6   c                óÂ   • [        U[        5      (       d   eSUl        U R                  [        5      R
                  R                  (       + Ul        SUl        SUl	        g ©NT)
r#  r   Úauto_minimumr«   ÚMarkdownTableÚstylesÚis_auto_widthr’   rR  Ústretch_height)r2   Úlayouts     r3   Ú
pre_layoutÚMarkdownTableContent.pre_layout•  sM   € Ü˜&¤*×-Ñ-Ð-Ð-Ø"ˆÔØ ×/Ñ/´Ó>×EÑE×SÑSÔSˆŒØˆŒØ $ˆÕr6   c           
   #  ó<  #   • U R                    H  n[        USS9R                  U5      v •  M      [        U R                  S5       HP  u  p#[        US5       H5  u  pE[        USU S3SU SU 3S9R                  UR
                  5      v •  M7     X l        MR     g 7f)	NÚheader©r‘   rm   Úrowú cellÚcellrf   )r‘   r�   )rP  rH  Úwith_tooltiprC  rQ  ÚplainrS  )r2   r`  Ú	row_indexrb  Ú
cell_indexrd  s         r3   rº   ÚMarkdownTableContent.composeœ  s    é € Ø—l”lˆFÜ+¨F¸HÑE×RÑRØóô ñ #ô (¨¯	©	°1Ö5‰NˆIÜ$-¨c°1Ö$5Ñ �
Ü/ØØ! ) ¨EÐ2Ø 	˜{¨!¨J¨<Ð8ñ÷ ‘,˜tŸz™zÓ*ô	+ñ %6ð &ŽMò 6ùs   ‚BBc                ó  • Xl         X l        / U R                   QU R                   VVs/ s H  o3  H  oDPM     M     snnQn[        U R                  [        5      U5       H  u  pgUR                  USS9  M     gs  snnf )zUpdate cell contents.F)r\  N)rP  rQ  ÚzipÚqueryrH  r½   )r2   rP  rQ  rb  rd  Úcellsrø   Úupdated_cells           r3   Ú_update_contentÚ$MarkdownTableContent._update_contentª  sx   € àŒØŒ	ð 
Ø�\‰\ð 
à"ŸišiÔ8ši�s³C¨DŠd±C‰d™iÒ8ð 
ˆô $' t§z¡zÔ2KÓ'LÈeÖ#TÑˆEØ�L‰L˜¨eˆLÓ4ò $Uùó 9s   ©A;c           
   ƒ  ó®  #   • [        U R                  5      U R                  l        U R	                  SU R
                   35      R                  5       I S h  v•N   / n[        XR
                  5       H:  u  p4U H/  nUR                  [        USU S3S9R                  U5      5        M1     M<     WU l        U R                  U5      I S h  v•N   g  Nz N7f)Nz	.cell.rowrb  rc  ra  )ro   rP  rY  Úgrid_size_columnsÚquery_childrenrS  rÃ   rC  rC   r#   re  Ú	mount_all)r2   Úupdated_rowsÚ	new_cellsrg  rb  rd  s         r3   Ú_update_rowsÚ!MarkdownTableContent._update_rowsµ  s¾   é € Ü(+¨D¯L©LÓ(9ˆ�‰Ô%Ø×!Ñ! I¨d¯m©m¨_Ð"=Ó>×EÑEÓG×GÐGØ"$ˆ	Ü'¨·m±mÖD‰NˆIÛ�Ø× Ñ ÜØØ"% i [°Ð 6ñ÷ #‘l 4Ó(ö	ó ñ Eð "ˆŒØ�n‰n˜YÓ'×'Ñ'ñ 	Hñ 	(ùs%   ‚ACÁCÁA4CÃCÃCÃCc                óL   • [        U R                  5      U R                  l        g rª   )ro   rP  rY  rr  r:   s    r3   Úon_mountÚMarkdownTableContent.on_mountÄ  s   € Ü(+¨D¯L©LÓ(9ˆ�‰Õ%r6   c              ƒ  ó–   #   • [        U R                  [        5      (       a$  U R                  R                  U5      I Sh  v•N   gg N7frJ  )r#  ru   rX  rÌ   rÊ   s     r3   rÌ   Ú MarkdownTableContent.action_linkÇ  s6   é € ä�d—k‘k¤=×1Ñ1Ø—+‘+×)Ñ)¨$Ó/×/Ñ/ð 2Ù/ùs   ‚>A	Á AÁA	)rP  rS  rQ  rR  )rP  zlist[Content]rQ  úlist[list[Content]])r\  r   rS   rT   r   )ru  r~  rS   rT   rU   r  )rW   rX   rY   rZ   r[   r  r  r4   r]  rº   ro  rw  rz  rÌ   r\   r  r  s   @r3   rM  rM  i  sC   ø† Ù#ð€Kð< 2Ð3JÐKÐ÷ô%ô&ô	5ô(ô:÷0ò 0r6   rM  c                  óX   ^ • \ rS rSrSrSrS	U 4S jjrS
S jrSS jrSU 4S jjr	Sr
U =r$ )rX  iÍ  zA Table markdown Block.zŒ
    MarkdownTable {
        width: 1fr;
        margin-bottom: 1;
        &:light {
            background: white 30%;
        }
    }
    c                óJ   >• [         TU ]  " X/UQ70 UD6  / U l        / U l        g rª   )rœ   r4   Ú_headersÚ_rows)r2   rŸ   r    r¡   r¢   r£   s        €r3   r4   ÚMarkdownTable.__init__Ú  s(   ø€ Ü‰Ò˜Ð:¨4Ò:°6Ò:Ø')ˆŒØ*,ˆ�
r6   c              #  ób   #   • U R                  5       u  pXl        X l        [        X5      v •  g 7frª   )Ú_get_headers_and_rowsr�  r‚  rM  )r2   rP  rQ  s      r3   rº   ÚMarkdownTable.composeß  s*   é € Ø×2Ñ2Ó4‰ˆØŒØŒ
Ü" 7Ó1Ó1ùó   ‚-/c                ó   ^• SU4S jjm/ n/ nT" U 5       H’  n[        U[        5      (       a  UR                  UR                  5        M5  [        U[        5      (       a  UR                  / 5        M]  [        U[
        5      (       d  Mt  US   R                  UR                  5        M”     U(       a  US   (       d  UR                  5         X4$ )zoGet list of headers, and list of rows.

Returns:
    A tuple containing a list of headers, and a list of rows.
c              3  ó‚   >#   • U R                    H(  n U R                   (       a  T" U 5       S h  v•N   U v •  M*     g  N7frª   )r˜   )r¶   Úflattens    €r3   rŠ  Ú4MarkdownTable._get_headers_and_rows.<locals>.flattenì  s0   øé € ØŸœ�Ø—=—=Ù& u›~×-Ð-Ø”ò 'á-ùs   ƒ,?¯=°?éÿÿÿÿ)r¶   r‰   rS   úIterable[MarkdownBlock])r#  Ú
MarkdownTHrC   r–   Ú
MarkdownTRÚ
MarkdownTDrß   )r2   rP  rQ  r¶   rŠ  s       @r3   r…  Ú#MarkdownTable._get_headers_and_rowså  s”   ø€ ÷	ð "$ˆØ$&ˆÙ˜T–]ˆEÜ˜%¤×,Ñ,Ø—‘˜uŸ~™~Ö.Ü˜E¤:×.Ñ.Ø—‘˜B–Ü˜E¤:×.Ó.Ø�R‘—‘ §¡Ö/ñ #ö ˜˜RŸØ�H‰HŒJØˆ}Ðr6   c              ƒ  ó|  >#   • [        U[        5      (       aw   U R                  [        5      nUR                  (       aO  U R
                  nUR                  5       u  pEU[        U5      S-
  S nXPl        UR                  U5      I Sh  v•N   g [        TU ]-  U5      I Sh  v•N   g N! [         a     N&f = f N7f)zTSpecial case to update a Markdown table.

Args:
    block: Existing markdown block.
rm   N)r#  rX  Ú	query_onerM  rQ  r‚  r…  ro   rw  r   rœ   rÅ   )r2   r¶   Útable_contentÚcurrent_rowsÚ_new_headersÚnew_rowsru  r£   s          €r3   rÅ   Ú MarkdownTable._update_from_blockÿ  sº   øé € ô �eœ]×+Ñ+ðØ $§¡Ô/CÓ D�ð !×%×%Ø#'§:¡:�LØ-2×-HÑ-HÓ-JÑ*�LØ#+¬C°Ó,=ÀÑ,AÐ,CÐ#D�LØ!)”JØ'×4Ñ4°\ÓB×BÐBØð &ô ‰gÑ(¨Ó/×/Ñ/ñ Cøô ó Ùðúñ 	0ùs@   ƒB<šB* ¯AB<Â	B(Â
B<Â"B:Â#B<Â*
B7Â4B<Â6B7Â7B<)r�  r‚  )rŸ   rR   r    r   rS   rT   r   )rS   z)tuple[list[Content], list[list[Content]]]rÿ   )rW   rX   rY   rZ   r[   r  r4   rº   r…  rÅ   r\   r  r  s   @r3   rX  rX  Í  s&   ø† Ù!ð€K÷-ô
2ô÷40õ 0r6   rX  c                  ó   • \ rS rSrSrSrg)ÚMarkdownTBodyi  zA table body Markdown block.r]   N©rW   rX   rY   rZ   r[   r\   r]   r6   r3   rš  rš    ó   † Ü&r6   rš  c                  ó   • \ rS rSrSrSrg)ÚMarkdownTHeadi  zA table head Markdown block.r]   Nr›  r]   r6   r3   rž  rž    rœ  r6   rž  c                  ó   • \ rS rSrSrSrg)r�  i  zA table row Markdown block.r]   Nr›  r]   r6   r3   r�  r�    s   † Ü%r6   r�  c                  ó   • \ rS rSrSrSrg)rŽ  i!  zA table header Markdown block.r]   Nr›  r]   r6   r3   rŽ  rŽ  !  s   † Ü(r6   rŽ  c                  ó   • \ rS rSrSrSrg)r�  i%  zA table data Markdown block.r]   Nr›  r]   r6   r3   r�  r�  %  rœ  r6   r�  c                  óB   • \ rS rSrSrSr\" S5      r S	S jrS
S jr	Sr
g)r1  i)  zA bullet widget.z“
    MarkdownBullet {
        width: auto;
        color: $text-primary;
        &:light {
            color: $text-secondary;
        }
    }
    u   â—�c                ó   • U R                   S4$ )Nrã   )r3  )r2   Ú
_selections     r3   Úget_selectionÚMarkdownBullet.get_selection9  s   € Ø�{‰{˜CÐÐr6   c                ó,   • [        U R                  5      $ rª   )r   r3  r:   s    r3   ÚrenderÚMarkdownBullet.render<  s   € Ü�t—{‘{Ó#Ð#r6   r]   N)rS   ztuple[str, str] | None)rS   r   )rW   rX   rY   rZ   r[   r  r   r3  r¥  r¨  r\   r]   r6   r3   r1  r1  )  s%   † Ùð€Kñ �hÓ€FØ$ô ÷$r6   r1  c                  ó4   ^ • \ rS rSrSrSrSU 4S jjrSrU =r$ )r0  i@  zA list item Markdown block.zÀ
    MarkdownListItem {
        layout: horizontal;
        margin-right: 1;
        height: auto;
    }

    MarkdownListItem > Vertical {
        width: 1fr;
        height: auto;
    }
    c                ó0   >• X0l         [        TU ]	  X5        g rª   )r2  rœ   r4   )r2   rŸ   r    r2  r£   s       €r3   r4   ÚMarkdownListItem.__init__P  s   ø€ ØŒÜ‰Ñ˜Õ)r6   )r2  )rŸ   rR   r    r   r2  rV   rS   rT   )	rW   rX   rY   rZ   r[   r  r4   r\   r  r  s   @r3   r0  r0  @  s   ø† Ù%ð€K÷*õ *r6   r0  c                  ó   • \ rS rSrSrg)r?  iU  r]   N©rW   rX   rY   rZ   r\   r]   r6   r3   r?  r?  U  ó   † Úr6   r?  c                  ó   • \ rS rSrSrg)ÚMarkdownUnorderedListItemiY  r]   Nr®  r]   r6   r3   r±  r±  Y  r¯  r6   r±  c                  ó¸   ^ • \ rS rSrSrSrSU 4S jjrSU 4S jjr\SS j5       r	\
 S         SS jj5       rSU 4S jjrSU 4S	 jjrSS
 jrSS jrSrU =r$ )ÚMarkdownFencei]  zA fence Markdown block.a)  
    MarkdownFence {
        padding: 0;
        margin: 1 0;
        overflow: scroll hidden;
        scrollbar-size-horizontal: 0;
        scrollbar-size-vertical: 0;
        width: 1fr;
        height: auto;
        color: rgb(210,210,210);
        background: black 10%;
        &:light {
            background: white 30%;
        }
        & > Label {
            padding: 1 2;
        }
    }
    MarkdownFence:ansi {
        background: transparent;

        margin: 0;
        & > Label {
            padding: 1 0;
        }
        
    }
    c                ó  >• [         TU ]  X5        X0l        UR                  U l        U R                  U R                  U R                  U R                  R                  U R                  R                  R                  S9U l
        SU l        g )N©ÚansiÚdarkF)rœ   r4   ÚcodeÚinfoÚlexerr   ÚappÚnative_ansi_colorÚcurrent_themer·  Ú_highlighted_codeÚ
auto_links)r2   rŸ   r    r¸  r£   s       €r3   r4   ÚMarkdownFence.__init__}  sm   ø€ Ü‰Ñ˜Ô)ØŒ	Ø—Z‘ZˆŒ
Ø!%§¡Ø�I‰IØ�J‰JØ—‘×+Ñ+Ø—‘×'Ñ'×,Ñ,ð	 "0ð "
ˆÔð  ˆ�r6   c                ó  >• U R                  U R                  U R                  U R                  R                  U R                  R
                  R                  S9U l        U R                  U R                  5        [        TU ])  5       $ )z.Update highlight theme when App theme changes.rµ  )r   r¸  rº  r»  r¼  r½  r·  r¾  rÀ   rœ   Únotify_style_update)r2   r£   s    €r3   rÂ  Ú!MarkdownFence.notify_style_updateŠ  sk   ø€ à!%§¡Ø�I‰IØ�J‰JØ—‘×+Ñ+Ø—‘×'Ñ'×,Ñ,ð	 "0ð "
ˆÔð 	×Ñ˜×/Ñ/Ô0Ü‰wÑ*Ó,Ð,r6   c                ó   • grV  r]   r:   s    r3   Úallow_horizontal_scrollÚ%MarkdownFence.allow_horizontal_scroll•  s   € àr6   c                ól   • U(       a  U(       a  SSK Jn  OSSK Jn  OSSK Jn  [	        X=(       d    S US9$ )Nr   )ÚANSIDarkHighlightTheme)ÚANSILightHighlightTheme)ÚHighlightTheme)ÚlanguageÚtheme)Útextual.highlightrÈ  rÉ  rÊ  r   )Úclsr¸  rË  r¶  r·  rÊ  s         r3   r   ÚMarkdownFence.highlight™  s'   € ö ÞÞVæWõ 9ä˜×(8°DÀÑOÐOr6   c                ó´   >• [        U[        5      (       a3  UR                  U l        UR                  U l        UR                  U l        [
        TU ]  U5        g rª   )r#  r³  r¸  rº  r¾  rœ   r·   r$  s     €r3   r·   ÚMarkdownFence._copy_context¨  sA   ø€ Ü�eœ]×+Ñ+ØŸ
™
ˆDŒIØŸ™ˆDŒJØ%*×%<Ñ%<ˆDÔ"Ü‰Ñ˜eÕ$r6   c              ƒ  óÄ   >#   • [        U[        5      (       a-  U R                  U5        U R                  UR                  5        g [
        TU ]  U5      I S h  v•N   g  N7frª   )r#  r³  r·   rÀ   r¾  rœ   rÅ   r$  s     €r3   rÅ   Ú MarkdownFence._update_from_block¯  sH   øé € Ü�eœ]×+Ñ+Ø×Ñ˜uÔ%Ø×Ñ˜U×4Ñ4Õ5ä‘'Ñ,¨UÓ3×3Ó3ùr&  c                ó¬   • Xl         [        [        5         U R                  S[        5      R                  U5        S S S 5        g ! , (       d  f       g = f)Nz#code-content)r–   r   r   r“  r%   r½   r¾   s     r3   rÀ   ÚMarkdownFence.set_content¶  s4   € ØŒÜ”iÕ Ø�N‰N˜?¬EÓ2×9Ñ9¸'ÔB÷ !× Ö ús   –&AÁ
Ac              #  ó:   #   • [        U R                  SSS9v •  g 7f)Nzcode-contentT)Úidr’   )r%   r¾  r:   s    r3   rº   ÚMarkdownFence.compose»  s   é € Ü�D×*Ñ*¨~ÀdÑKÓKùs   ‚)r–   r¾  r¿  r¸  rº  )rŸ   rR   r    r   r¸  rV   rS   rT   rU   r„   )FF)
r¸  rV   rË  rV   r¶  r…   r·  r…   rS   r   rÿ   r'  r  r   )rW   rX   rY   rZ   r[   r  r4   rÂ  r‡   rÅ  Úclassmethodr   r·   rÅ   rÀ   rº   r\   r  r  s   @r3   r³  r³  ]  s�   ø† Ù!ð€K÷: ÷	-ð óó ðð àHMðPØðPØ"%ðPØ-1ðPØAEðPà	ôPó ðP÷%÷4ôC÷
Lò Lr6   r³  u    â… â…¡â…¢â…£â…¤â…¥c                  óâ  ^ • \ rS rSr% Sr/ SQr 0 S\_S\_S\_S\	_S\
_S	\_S
\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_\\\\S.ErS\S'     S1SSSSSS.           S2U 4S jjjjr\S3S j5       r " S S\5      r  " S S \5      r! " S! S"\5      r"\S4S# j5       r#S5S$ jr$S6S% jr%\&S7S& j5       r'S8S' jr(\)S9S( j5       r*S:S) jr+S;S* jr,S<S+ jr-S=S, jr.S>S- jr/S?S. jr0S?S/ jr1S0r2U =r3$ )@rR   iÂ  a=  
    Markdown {
        height: auto;
        padding: 0 2 0 2;
        layout: vertical;
        color: $foreground;
        overflow-y: hidden;

        &:ansi {
            MarkdownBlock > .code_inline {
                background: ansi_default !important;
            }
        }
        
        MarkdownBlock {
            &:dark > .code_inline {
                background: $warning 10%;
                color: $text-warning 95%;
            }
            &:light > .code_inline {
                background: $error 5%;
                color: $text-error 95%;
            }           
            & > .em {
                text-style: italic;
            }
            & > .strong {
                text-style: bold;
            }
            & > .s {
                text-style: strike;
            }
        }
    }
    )u   â€¢ u   â–ª u   â€£ u   â­‘ u   â—¦ Úh1Úh2Úh3Úh4Úh5Úh6ÚhrÚparagraph_openÚblockquote_openÚbullet_list_openÚordered_list_openÚlist_item_ordered_openÚlist_item_unordered_openÚ
table_openÚ
tbody_openÚ
thead_openÚtr_open)Úth_openÚtd_openÚfenceÚ
code_blockzdict[str, type[MarkdownBlock]]ÚBLOCKSNT)r�   r×  r‘   Úparser_factoryÚ
open_linksc               ó~   >• [         TU ]  X#US9  Xl        SU l        XPl        SU l        X`l        SU l        SU l        g)aõ  A Markdown widget.

Args:
    markdown: String containing Markdown or None to leave blank for now.
    name: The name of the widget.
    id: The ID of the widget in the DOM.
    classes: The CSS classes of the widget.
    parser_factory: A factory function to return a configured MarkdownIt instance. If `None`, a "gfm-like" parser is used.
    open_links: Open links automatically. If you set this to `False`, you can handle the [`LinkClicked`][textual.widgets.markdown.Markdown.LinkClicked] events.
©r�   r×  r‘   rJ   Nr   )	rœ   r4   Ú_initial_markdownr§   Ú_parser_factoryÚ_table_of_contentsÚ_open_linksÚ_last_parsed_lineÚ_theme)r2   rŸ   r�   r×  r‘   rñ  rò  r£   s          €r3   r4   ÚMarkdown.__init__  sG   ø€ ô( 	‰Ñ˜d°7ÐÑ;Ø-5ÔØˆŒØ-ÔØ>BˆÔØ%ÔØ!"ˆÔØˆ�r6   c                ó  • U R                   cd  U R                   Vs/ s HG  n[        U[        5      (       d  M  UR                  UR
                  R                  UR                  4PMI     snU l         U R                   $ s  snf )z!The document's table of contents.)r÷  rñ   r#  r  r
  r–   rf  r×  )r2   r`  s     r3   Útable_of_contentsÚMarkdown.table_of_contents   so   € ð ×"Ñ"Ñ*ð #Ÿmšmó'â+�FÜ˜f¤n×5ó A�—‘˜vŸ™×4Ñ4°f·i±iÓ@Ù+ñ'ˆDÔ#ð
 ×&Ñ&Ð&ùò's
   œA>¹1A>c                  óP   ^ • \ rS rSrSr      SU 4S jjr\SS j5       rSrU =r	$ )ÚMarkdown.TableOfContentsUpdatedi+  z"The table of contents was updated.c                ó<   >• [         TU ]  5         Xl         X l        g rª   )rœ   r4   rŸ   rý  )r2   rŸ   rý  r£   s      €r3   r4   Ú(Markdown.TableOfContentsUpdated.__init__.  s!   ø€ ô ‰GÑÔØ&.ŒMØNØ:KÔ"Ø$r6   c                ó   • U R                   $ )zãThe `Markdown` widget associated with the table of contents.

This is an alias for [`TableOfContentsUpdated.markdown`][textual.widgets.Markdown.TableOfContentsSelected.markdown]
and is used by the [`on`][textual.on] decorator.
©rŸ   r:   s    r3   ÚcontrolÚ'Markdown.TableOfContentsUpdated.control7  ó   € ð —=‘=Ð r6   )rŸ   rý  )rŸ   rR   rý  r&   rS   rT   rý   ©
rW   rX   rY   rZ   r[   r4   r‡   r  r\   r  r  s   @r3   ÚTableOfContentsUpdatedr   +  s7   ø† Ù0ð	%Ø$ð	%Ø9Lð	%à÷	%ð 
ó	!ó 
ö	!r6   r	  c                  óD   ^ • \ rS rSrSrSU 4S jjr\SS j5       rSrU =r	$ )Ú Markdown.TableOfContentsSelectedi@  z An item in the TOC was selected.c                ó<   >• [         TU ]  5         Xl         X l        g rª   )rœ   r4   rŸ   Úblock_id)r2   rŸ   r  r£   s      €r3   r4   Ú)Markdown.TableOfContentsSelected.__init__C  s   ø€ Ü‰GÑÔØ&.ŒMØCØ!)ŒMØ4r6   c                ó   • U R                   $ )zÙThe `Markdown` widget where the selected item is.

This is an alias for [`TableOfContentsSelected.markdown`][textual.widgets.Markdown.TableOfContentsSelected.markdown]
and is used by the [`on`][textual.on] decorator.
r  r:   s    r3   r  Ú(Markdown.TableOfContentsSelected.controlJ  r  r6   )r  rŸ   )rŸ   rR   r  rV   rS   rT   rý   r  r  s   @r3   ÚTableOfContentsSelectedr  @  s   ø† Ù.÷	5ð 
ó	!ó 
ö	!r6   r  c                  óD   ^ • \ rS rSrSrSU 4S jjr\SS j5       rSrU =r	$ )ÚMarkdown.LinkClickediS  z#A link in the document was clicked.c                óP   >• [         TU ]  5         Xl         [        U5      U l        g rª   )rœ   r4   rŸ   r   rË   )r2   rŸ   rË   r£   s      €r3   r4   ÚMarkdown.LinkClicked.__init__V  s$   ø€ Ü‰GÑÔØ&.ŒMØDÜ$ T›]ˆDŒIØ-r6   c                ó   • U R                   $ )zÂThe `Markdown` widget containing the link clicked.

This is an alias for [`LinkClicked.markdown`][textual.widgets.Markdown.LinkClicked.markdown]
and is used by the [`on`][textual.on] decorator.
r  r:   s    r3   r  ÚMarkdown.LinkClicked.control]  r  r6   )rË   rŸ   )rŸ   rR   rË   rV   rS   rT   rý   r  r  s   @r3   rÉ   r  S  s   ø† Ù1÷	.ð 
ó	!ó 
ö	!r6   rÉ   c                ó,   • U R                   =(       d    S$ )zThe markdown source.rJ   )r§   r:   s    r3   r±   ÚMarkdown.sourcef  s   € ð �~‰~×# Ð#r6   c                ó    • U R                   U   $ )zjGet the block widget class.

Args:
    block_name: Name of the block.

Returns:
    A MarkdownBlock class
)rð  )r2   Ú
block_names     r3   Úget_block_classÚMarkdown.get_block_classk  s   € ð �{‰{˜:Ñ&Ð&r6   c              ƒ  óü   #   • U R                   nS U l         U R                  U=(       d    S5      I S h  v•N   Uc>  U R                  [        R	                  X R
                  5      R                  U 5      5        g g  NF7f©NrJ   )rõ  r½   rÈ   rR   r	  r÷  Ú
set_sender)r2   rz   Úinitial_markdowns      r3   Ú	_on_mountÚMarkdown._on_mountv  sp   é € Ø×1Ñ1ÐØ!%ˆÔØ�k‰kÐ*×0¨bÓ1×1Ð1àÑ#Ø×ÑÜ×/Ñ/Ø×1Ñ1óç‘*˜TÓ"õð $ñ 	2ùs   ‚1A<³A:´AA<c                ó<   • [        U5      nUR                  5         U$ )a~  Get a [MarkdownStream][textual.widgets.markdown.MarkdownStream] instance to stream Markdown in the background.

If you append to the Markdown document many times a second, it is possible the widget won't
be able to update as fast as you write (occurs around 20 appends per second). It will still
work, but the user will have to wait for the UI to catch up after the document has be retrieved.

Using a [MarkdownStream][textual.widgets.markdown.MarkdownStream] will combine several updates in to one
as necessary to keep up with the incoming data.

example:
```python
# self.get_chunk is a hypothetical method that retrieves a
# markdown fragment from the network
@work
async def stream_markdown(self) -> None:
    markdown_widget = self.query_one(Markdown)
    container = self.query_one(VerticalScroll)
    container.anchor()

    stream = Markdown.get_stream(markdown_widget)
    try:
        while (chunk:= await self.get_chunk()) is not None:
            await stream.write(chunk)
    finally:
        await stream.stop()
```


Args:
    markdown: A [Markdown][textual.widgets.Markdown] widget instance.

Returns:
    The Markdown stream object.
)r(   r;   )rÎ  rŸ   Úupdaters      r3   Ú
get_streamÚMarkdown.get_stream‚  s   € ôH ! Ó*ˆØ�‰ŒØˆr6   c                ór   • U R                   (       a&  U R                  R                  UR                  5        g g rª   )rø  r»  Úopen_urlrË   )r2   Úevents     r3   Úon_markdown_link_clickedÚ!Markdown.on_markdown_link_clickedª  s&   € Ø××Ø�H‰H×Ñ˜eŸj™jÕ)ð r6   c                óD   • U R                  S5      u  pn[        U 5      U4$ )zéGiven a location, break out the path and any anchor.

Args:
    location: The location to sanitize.

Returns:
    A tuple of the path to the location cleaned of any anchor, plus
    the anchor (or an empty string if none was found).
rs   )Ú	partitionr   )rg   rz   rx   s      r3   rt   ÚMarkdown.sanitize_location®  s(   € ð '×0Ñ0°Ó5Ñˆ�VÜ�H‹~˜vÐ%Ð%r6   c                ó  • U R                   (       a  [        U R                  [        5      (       d  g[	        5       nU R                    H>  u  p4nUR                  U5      U:X  d  M  U R                  SU 35      R                  SS9    g   g)aŸ  Try and find the given anchor in the current document.

Args:
    anchor: The anchor to try and find.

Note:
    The anchor is found by looking at all of the headings in the
    document and finding the first one whose slug matches the
    anchor.

    Note that the slugging method used is similar to that found on
    GitHub.

Returns:
    True when the anchor was found in the current document, False otherwise.
Frs   T©Útop)r÷  r#  ru   r"   r   Úslugr“  Úscroll_visible)r2   rx   Úuniquerz   ÚtitleÚ	header_ids         r3   Úgoto_anchorÚMarkdown.goto_anchor¼  su   € ð" ×&×&¬j¸¿¹Äf×.MÑ.MØÜ“ˆØ#'×#:Ô#:ÑˆA�iØ�{‰{˜5Ó! VÕ+Ø—‘  9 +˜Ó/×>Ñ>À4Ð>ÑHÙñ $;ð r6   c              ƒ  ó.  #   • U R                  [        U5      5      u  p[        R                  " 5       R	                  S[        UR                  SS95      I Sh  v•N nU R                  U5      I Sh  v•N   U(       a  U R                  U5        gg N7 N 7f)a,  Load a new Markdown document.

Args:
    path: Path to the document.

Raises:
    OSError: If there was some form of error loading the document.

Note:
    The exceptions that can be raised by this method are all of
    those that can be raised by calling [`Path.read_text`][pathlib.Path.read_text].
Nzutf-8)Úencoding)	rt   rV   r-   Úget_running_loopÚrun_in_executorr   Ú	read_textr½   r8  )r2   rw   rx   Údatas       r3   ÚloadÚMarkdown.loadÖ  s   é € ð ×-Ñ-¬c°$«iÓ8‰ˆÜ×-Ò-Ó/×?Ñ?Ø”'˜$Ÿ.™.°7Ñ;ó
÷ 
ˆð �k‰k˜$Ó×ÐÞØ×Ñ˜VÕ$ð ñ	
ñ 	 ùs$   ‚ABÁBÁBÁ2BÁ3BÂBc                ó   • g)z’Process an unhandled token.

Args:
    token: The MarkdownIt token to handle.

Returns:
    Either a widget to be added to the output, or `None`.
Nr]   )r2   r    s     r3   Úunhandled_tokenÚMarkdown.unhandled_tokenë  s   € ð r6   c              #  ó  #   • / nUR                   nU R                  nU GH_  nUR                  nUS:X  a   U" U" UR                  5      " X5      5        M6  US:X  a  U" S5      " X5      v •  MN  US:X  a  U" U" S5      " X5      5        Mj  US:X  a  U" U" S5      " X5      5        M†  US:X  a  U" U" S5      " X5      5        M¢  US:X  a  U" U" S5      " X5      5        M¾  US:X  a€  UR                  (       a!  U" U" S5      " XUR                  5      5        Mö  [        S	 U 5       5      nU" U" S
5      " U UU R                  U[        U R                  5      -     5      5        GMD  US:X  a  U" U" S5      " X5      5        GMa  US:X  a  U" U" S5      " X5      5        GM~  US:X  a  U" U" S5      " X5      5        GM›  US:X  a  U" U" S5      " X5      5        GM¸  US:X  a  U" U" S5      " X5      5        GMÕ  US:X  a  U" U" S5      " X5      5        GMò  UR                  S5      (       a‚  UR                  5       nUR                  S:X  a3  S[        UR                  R                  5       S[        U5       3Ul        U(       a!  US   R                  R                  U5        GMƒ  Uv •  GMŠ  US:X  a  US   R                  U5        GM§  US;   ao  U" U5      n	[!        U	["        5      (       d   eU	" XUR$                  R'                  5       5      n
U(       a!  US   R                  R                  U
5        GM  U
v •  GM  U R)                  U5      nUc  GM3  U(       a!  US   R                  R                  U5        GM[  Uv •  GMb     g7f)z~Create a stream of MarkdownBlock widgets from markdown.

Args:
    tokens: List of tokens.

Yields:
    Widgets for mounting.
Úheading_openrá  râ  rã  rä  rå  Úlist_item_openræ  c              3  óT   #   • U  H  n[        U[        5      (       d  M  S v •  M      g7f)rm   N)r#  r±  ©r:  r¶   s     r3   r=  Ú+Markdown._parse_markdown.<locals>.<genexpr>  s$   é € ð %â%*˜EÜ% eÔ-F×G÷ ™Ú%*ùs   ‚(Ÿ	(rç  rè  ré  rê  rë  rì  rí  rð   Úheading_closezheading-Ú-rŒ  Úinline)rî  rï  N)rC   r  r�   Útagr¹  ÚsumÚBULLETSro   r÷   rß   r   r–   rf  r×  r˜   rÐ   Ú
issubclassr³  r¿   ÚrstriprC  )r2   rÖ   rb   Ústack_appendr  r    Ú
token_typeÚ
item_countr¶   Úfence_classrî  Úexternals               r3   Ú_parse_markdownÚMarkdown._parse_markdownö  s  é € ð &(ˆØ—|‘|ˆà×.Ñ.ˆäˆEØŸ™ˆJØ˜^Ó+Ù™_¨U¯Y©YÔ7¸ÓDÖEØ˜tÓ#Ù% dÔ+¨DÓ8Ô8ØÐ/Ó/Ù™_Ð-=Ô>¸tÓKÖLØÐ0Ó0Ù™_Ð->Ô?ÀÓLÖMØÐ1Ó1Ù™_Ð-?Ô@ÀÓMÖNØÐ2Ó2Ù™_Ð-@ÔAÀ$ÓNÖOØÐ/Ó/Ø—:—:Ù Ù'Ð(@ÔAØ ¨¯©óöô "%ñ %á%*ó%ó "�Jñ
 !Ù'Ð(BÔCØ Ø!Ø ŸL™L¨´c¸$¿,¹,Ó6GÑ)GÑHó÷ð ˜|Ó+Ù™_¨\Ô:¸4ÓG×HØ˜|Ó+Ù™_¨\Ô:¸4ÓG×HØ˜|Ó+Ù™_¨\Ô:¸4ÓG×HØ˜yÓ(Ù™_¨YÔ7¸ÓD×EØ˜yÓ(Ù™_¨YÔ7¸ÓD×EØ˜yÓ(Ù™_¨YÔ7¸ÓD×EØ×$Ñ$ X×.Ñ.ØŸ	™	›�Ø—:‘: Ó0à"Ô#3°E·N±N×4HÑ4HÓ#IÐ"JÈ!ÌBÈuËIÈ;ÐWð ”Hö Ø˜"‘I×%Ñ%×,Ñ,¨U×3à•KØ˜xÓ'Ø�b‘	×*Ñ*¨5×1ØÐ6Ó6Ù-¨jÓ9�Ü! +¬}×=Ñ=Ð=Ð=Ù# D°·±×1EÑ1EÓ1GÓH�ÞØ˜"‘I×%Ñ%×,Ñ,¨U×3à•Kà×/Ñ/°Ó6�ØÔ'ÞØ˜b™	×)Ñ)×0Ñ0°×:à&�òQ ùs   ‚MNÍ2Nc                ó¨   • U R                   c  [        S5      OU R                  5       nUR                  U5      n[        U R	                  U5      5      $ )z“Build blocks from markdown source.

Args:
    markdown: A Markdown document, or partial document.

Returns:
    A list of MarkdownBlock instances.
úgfm-like)rö  r   ÚparseÚlistrX  )r2   rŸ   ÚparserrÖ   s       r3   Ú_build_from_sourceÚMarkdown._build_from_sourceO  sQ   € ð ×#Ñ#Ñ+ô �zÔ"à×%Ñ%Ó'ð 	ð
 —‘˜hÓ'ˆÜ�D×(Ñ(¨Ó0Ó1Ð1r6   c                ó  ^ ^^^• T R                   R                  T l        T R                  c  [	        S5      OT R                  5       mT R                  S5      mTT l        ST l        SUUUU 4S jjn[        U" 5       5      $ )zÂUpdate the document with new Markdown.

Args:
    markdown: A string containing Markdown.

Returns:
    An optionally awaitable object. Await this to ensure that all children have been mounted.
Nr[  r‰   c               “  óB  >^#   • Sn / nT
R                    ISh  v•N   [        R                  " 5       R                  ST	R                  T5      I Sh  v•N nSmSUUU
4S jjnT
R                  U5       HE  nUR                  U5        [        U5      U :X  d  M%  U" U5      I Sh  v•N   UR                  5         MG     U(       a  U" U5      I Sh  v•N   T(       d  TR                  5       I Sh  v•N   SSS5      ISh  v•N   TR                  5       n[        U5      U(       a  US   (       a  SOS-
  T
l        T
R                  [        R                  T
T
R                  5      R!                  T
5      5        g GN^ GN) NÙ N° N“ N…! , ISh  v•N  (       d  f       Nš= f7f)	zUpdate in batches.éÈ   NFc              “  ó*  >#   • T(       a  TR                  U 5      I Sh  v•N   gTR                  R                  5          TR                  5       I Sh  v•N   TR                  U 5      I Sh  v•N   SSS5        Smg N\ N* N! , (       d  f       N= f7f)zMMount a single match of blocks.

Args:
    batch: A list of blocks to mount.
NT)rt  r»  Úbatch_updaterÃ   )ÚbatchÚmarkdown_blockÚremovedr2   s    €€€r3   Úmount_batchÚ:Markdown.update.<locals>.await_update.<locals>.mount_batch‚  sr   øé € ö Ø"Ÿn™n¨UÓ3×3Ñ3à!ŸX™X×2Ñ2Õ4Ø"0×"7Ñ"7Ó"9×9Ð9Ø"&§.¡.°Ó"7×7Ð7÷ 5ð #'™ñ 4ñ :Ù7÷ 5Õ4üsJ   ƒBŸA< B¿BÁA>ÁBÁ,B Á-BÁ1BÁ>BÂ BÂ
BÂBrŒ  rm   r   )rf  úlist[MarkdownBlock]rS   rT   )Úlockr-   r<  r=  r\  rX  rC   ro   rM   rÃ   r²   rù  rÈ   rR   r	  rý  r   )Ú
BATCH_SIZErf  rÖ   ri  r¶   Úlinesrh  rŸ   rg  r^  r2   s         @€€€€r3   Úawait_updateÚ%Markdown.update.<locals>.await_updatet  sK  ùé € àˆJØ)+ˆEð —y—y“yÜ&×7Ò7Ó9×IÑIØ˜&Ÿ,™,¨ó ÷ �ð
 !&�÷'ñ 'ð "×1Ñ1°&Ö9�EØ—L‘L Ô'Ü˜5“z ZÕ/Ù)¨%Ó0×0Ð0ØŸ™žñ	 :ö
 Ù% eÓ,×,Ð,ÞØ(×/Ñ/Ó1×1Ð1÷? !—yðB ×'Ñ'Ó)ˆEÜ%(¨£Z¾À%ÈÇ)±1ÐQRÑ%SˆDÔ"Ø×ÑÜ×/Ñ/Ø˜$×0Ñ0óç‘*˜TÓ"õòG !òñ2 1ñ -á1÷? !—y—y�yüs”   „F™E7šF�4FÁE:ÁAFÂFÂ#E=Â$*FÃE?ÃFÃ-FÃ.FÃ2FÃ=FÃ>A:FÅ:FÅ=FÅ?FÆFÆFÆFÆFÆFÆFrU   )	r»  rÌ  rú  rö  r   rl  r§   r÷  r   )r2   rŸ   ro  rg  r^  s   `` @@r3   r½   ÚMarkdown.update`  sv   û€ ð —h‘h—n‘nˆŒð ×#Ñ#Ñ+ô �zÔ"à×%Ñ%Ó'ð 	ð Ÿ™ OÓ4ˆØ!ˆŒØ"&ˆÔ÷-	ò -	ô^ ™\›^Ó,Ð,r6   c                ó  ^ ^^• T R                   c  [        S5      OT R                  5       mT R                  U-   T l        SR	                  T R                  R                  SS9T R                  S 5      mSUU U4S jjn[        U" 5       5      $ )zÇAppend to markdown.

Args:
    markdown: A fragment of markdown to be appended.

Returns:
    An optionally awaitable object. Await this to ensure that the markdown has been append by the next line.
Nr[  rJ   Tr¯   c               “  ó„  >#   • TR                    ISh  v•N   TR                  T5      n TR                   Vs/ s H  n[        U[        5      (       d  M  UPM     nnTR
                  n[        U 5       HF  nUR                  c  M  UR                  S:X  d  M$  T=R
                  UR                  S   -  sl          O   [        TR                  U 5      5      n[        S U 5       5      nU H  nUR                  u  p‰Xƒ-   X“-   4Ul        M      TR                  R                  5          U(       aB  U(       a;  US   n
US   R                  U
l         U
R                  US   5      I Sh  v•N   USS nU(       a  TR#                  U5      I Sh  v•N   SSS5        U(       aE  STl        TR'                  [(        R+                  TTR,                  5      R/                  T5      5        SSS5      ISh  v•N   g GNãs  snf  N–! [          a     N›f = f Nƒ! , (       d  f       N‡= f N2! , ISh  v•N  (       d  f       g= f7f)zAppend new markdown widgets.Nr   c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frª   )r#  r  rI  s     r3   r=  Ú8Markdown.append.<locals>.await_append.<locals>.<genexpr>Ç  s   é € ð "ÚCM¸%”J˜u¤n×5Ð5Â:ùs   ‚rŒ  rm   )rl  r\  rñ   r#  r‰   rù  Úreversedrš   rž   r]  rX  Úanyr›   r»  re  rÅ   Ú
IndexErrorrt  r÷  rÈ   rR   r	  rý  r   )rÖ   rø   Úexisting_blocksÚ
start_liner    Ú
new_blocksÚany_headersr¶   r;   rp   Ú
last_blockr^  r2   Úupdated_sources              €€€r3   Úawait_appendÚ%Markdown.append.<locals>.await_append¹  så  øé € à—y—y“yØŸ™ nÓ5�à'+§}¢}ó#Ú'4˜e¼
À5Ì-×8X—E¡}ð  ð #ð "×3Ñ3�
Ü% fÖ-�EØ—y‘yÓ,°·±ÀÕ1AØ×.Ò.°%·)±)¸A±,Ñ>Õ.Ùñ .ô
 " $×"6Ñ"6°vÓ">Ó?�
Ü!ñ "ÙCMó"ó �ó (�EØ!&×!3Ñ!3‘J�EàÑ*ØÑ(ð*�EÖ&ñ (ð —X‘X×*Ñ*Õ,Þ&®:Ø%4°RÑ%8˜
Ø2<¸Q±-×2LÑ2L˜
Ô/ð8Ø",×"?Ñ"?À
È1ÁÓ"N×NÐNð *4°A°B¨˜Jæ!Ø"Ÿn™n¨ZÓ8×8Ð8÷ -ö Ø.2�DÔ+Ø×%Ñ%Ü ×7Ñ7Ø  $×"8Ñ"8óç$™* TÓ*ô÷M !—y“yùò#ñ2 OøÜ)ó !Ù ð!úñ 9÷ -Õ,ú÷- !—y—y�yüsÃ   ƒI ”G7•I ˜ H&¸G:ÁG:Á'H&ÂH&ÂBH&Ä((HÅHÅ(G?Å)HÅ- HÆHÆHÆAH&Ç&I Ç1H$Ç2I Ç:H&Ç?HÈ
HÈHÈHÈHÈ
H!	ÈH&È$I È&H=È,H/È-H=È9I rU   )rö  r   r±   r§   rL   r²   rù  r   )r2   rŸ   r  r^  r~  s   `  @@r3   rC   ÚMarkdown.append¥  s‰   ú€ ð ×#Ñ#Ñ+ô �zÔ"à×%Ñ%Ó'ð 	ð Ÿ™ xÑ/ˆŒØŸ™Ø�N‰N×%Ñ%¨tÐ%Ð4°T×5KÑ5KÐ5MÐNó
ˆ÷,	ñ ,	ô\ ™\›^Ó,Ð,r6   )rõ  rù  r§   rø  rö  r÷  rú  rª   )rŸ   rþ   r�   rþ   r×  rþ   r‘   rþ   rñ  úCallable[[], MarkdownIt] | Nonerò  r…   )rS   r&   )rS   rV   )r  rV   rS   ztype[MarkdownBlock]©rz   r   rS   rT   )rŸ   rR   rS   r(   )r*  rÉ   rS   rT   )rg   rV   rS   ztuple[Path, str])rx   rV   rS   r…   )rw   r   rS   rT   )r    r   rS   zMarkdownBlock | None)rÖ   zIterable[Token]rS   r�  )rŸ   rV   rS   rk  )rŸ   rV   rS   r   )4rW   rX   rY   rZ   r  rP  r  r  r  r  r  r  r  r!  r*  r.  r7  r?  r±  rX  rš  rž  r�  rŽ  r�  r³  rð  Ú__annotations__r4   r‡   rý  r   r	  r  rÉ   r±   r  r"  rÙ  r&  r+  Ústaticmethodrt   r8  r@  rC  rX  r_  r½   rC   r\   r  r  s   @r3   rR   rR   Â  s  ø‡ ð"€KòH 7€GØ3ð.Øˆjð.àˆjð.ð 	ˆjð.ð 	ˆjð	.ð
 	ˆjð.ð 	ˆjð.ð 	Ð$ð.ð 	Ð+ð.ð 	Ð-ð.ð 	Ð.ð.ð 	Ð0ð.ð 	!Ð"9ð.ð 	#Ð$=ð.ð 	�mð.ð 	�mð.ð  	�mð!.ð" 	�:ð#.ð$ ØØØ#ò+.€FÐ*ó ð. 7ð  $ðð  ØØ"Ø:>Øñàðð ð	ð
 ðð ðð 8ðð ÷ñ ð: ó'ó ð'ô! ô !ô*! 'ô !ô&!�gô !ð& ó$ó ð$ô	'ô
ð ó%ó ð%ôN*ð ó&ó ð&ôô4%ô*	ôW'ôr2ô"C-÷JB-ò B-r6   rR   c                  óš   ^ • \ rS rSrSrSr\\\      " SSS9r	     S           SU 4S jjjr
SS jrSS	 jrSS
 jrSS jrSrU =r$ )ÚMarkdownTableOfContentsiê  z5Displays a table of contents for a markdown document.aD  
    MarkdownTableOfContents {
        width: auto;
        height: 1fr;
        background: $panel;
        &:focus-within {
            background-tint: $foreground 5%;
        }
    }
    MarkdownTableOfContents > Tree {
        padding: 1;
        width: auto;
        height: 1fr;
        background: $panel;
    }
    NF)Úinitc                ó0   >• Xl          [        TU ]	  X#XES9  g)a   Initialize a table of contents.

Args:
    markdown: The Markdown document associated with this table of contents.
    name: The name of the widget.
    id: The ID of the widget in the DOM.
    classes: The CSS classes for the widget.
    disabled: Whether the widget is disabled or not.
)r�   r×  r‘   ÚdisabledN)rŸ   rœ   r4   )r2   rŸ   r�   r×  r‘   rŠ  r£   s         €r3   r4   Ú MarkdownTableOfContents.__init__  s   ø€ ð" #+ŒØKÜ‰Ñ˜d°7ÐÒNr6   c              #  ób   #   • [        S5      nSUl        SUl        SUl        SUl        Uv •  g 7f)NÚTOCFTr  )r$   Ú	show_rootÚshow_guidesÚguide_depthÚauto_expand)r2   Útrees     r3   rº   ÚMarkdownTableOfContents.compose  s2   é € Ü˜%“[ˆØˆŒØˆÔØˆÔØ ˆÔØ‹
ùr‡  c                ó&   • U R                  U5        g)z-Triggered when the table of contents changes.N)Úrebuild_table_of_contents)r2   rý  s     r3   Úwatch_table_of_contentsÚ/MarkdownTableOfContents.watch_table_of_contents  s   € à×&Ñ&Ð'8Õ9r6   c                óº  • U R                  [        5      nUR                  5         UR                  nU H¤  u  pEnUn[	        US-
  5       HS  nUR
                  (       a(  UR
                  S   nUR                  5         SUl        M<  UR                  [        U   SS9nMU     [        R                  " [        U    S3S4U5      n	UR                  U	SU05        M¦     g)	zqRebuilds the tree representation of the table of contents data.

Args:
    table_of_contents: Table of contents.
rm   rŒ  T)r’   rã   Údimr  N)r“  r$   rM   ÚrootÚrangeÚ	_childrenr’   Úallow_expandÚaddÚNUMERALSr   ÚassembleÚadd_leaf)
r2   rý  r’  rš  rž   r�   r  Únoderz   Ú
node_labels
             r3   r•  Ú1MarkdownTableOfContents.rebuild_table_of_contents"  s½   € ð �~‰~œdÓ#ˆØ�
‰
ŒØ�y‰yˆÛ%6Ñ!ˆE˜ØˆDÜ˜5 1™9Ö%�Ø—>—>ØŸ>™>¨"Ñ-�DØ—K‘K”MØ(,�DÖ%àŸ8™8¤H¨U¡O¸D˜8ÐA’Dñ &ô Ÿš¬8°E©?Ð*;¸1Ð(=¸uÐ'EÀtÓLˆJØ�M‰M˜* z°8Ð&<Ö=ò &7r6   c              ƒ  óÖ   #   • UR                   R                  nUb:  U R                  [        R	                  U R
                  US   5      5      I S h  v•N   UR                  5         g  N7f)Nr  )r¢  r?  Ú_post_messagerR   r  rŸ   r?   )r2   ÚmessageÚ	node_datas      r3   Ú_on_tree_node_selectedÚ.MarkdownTableOfContents._on_tree_node_selected7  s[   é € Ø—L‘L×%Ñ%ˆ	ØÑ Ø×$Ñ$Ü×0Ñ0°·±À	È*Ñ@UÓVó÷ ð ð 	�‰�ñùs   ‚AA)ÁA'ÁA)r  )NNNF)rŸ   rR   r�   rþ   r×  rþ   r‘   rþ   rŠ  r…   rS   rT   r   )rý  r&   rS   rT   )r§  zTree.NodeSelectedrS   rT   )rW   rX   rY   rZ   r[   r  r   r
   r&   rý  r4   rº   r–  r•  r©  r\   r  r  s   @r3   r‡  r‡  ê  s�   ø† Ù?ð€Kð" ! Ð*=Ñ!>Ò?ÀÈ5ÑQÐØCð
  ØØ"ØðOàðOð ðOð ð	Oð
 ðOð ðOð 
÷Oð Oô*ô:ô>÷*ò r6   r‡  T)Úcan_focus_childrenc                  óP  ^ • \ rS rSr% SrSrSr\" S5      r \" S5      r	\
" \5      rS\S'    " S	 S
\5      r SSSSSSSS.             SU 4S jjj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 S jrS!S jrS"S jrS#S jr    S$S jr    S%S jrSrU =r$ )&ÚMarkdownVieweri@  zA Markdown viewer widget.Fa=  
    MarkdownViewer {
        height: 1fr;
        scrollbar-gutter: stable;
        background: $surface;
        & > MarkdownTableOfContents {
            display: none;
            dock:left;
        }
    }

    MarkdownViewer.-show-table-of-contents > MarkdownTableOfContents {
        display: block;
    }
    TrJ   zvar[Navigator]Ú	navigatorc                  ó   • \ rS rSrSrSrg)ÚMarkdownViewer.NavigatorUpdatedi[  z.Navigator has been changed (clicked link etc).r]   Nr›  r]   r6   r3   ÚNavigatorUpdatedr°  [  s   † Ü<r6   r±  N)Úshow_table_of_contentsr�   r×  r‘   rñ  rò  c               óR   >• [         TU ]  X4US9  X l        Xl        X`l        Xpl        g)a?  Create a Markdown Viewer object.

Args:
    markdown: String containing Markdown, or None to leave blank.
    show_table_of_contents: Show a table of contents in a sidebar.
    name: The name of the widget.
    id: The ID of the widget in the DOM.
    classes: The CSS classes of the widget.
    parser_factory: A factory function to return a configured MarkdownIt instance. If `None`, a "gfm-like" parser is used.
    open_links: Open links automatically. If you set this to `False`, you can handle the [`LinkClicked`][textual.widgets.markdown.Markdown.LinkClicked] events.
rô  N)rœ   r4   r²  r§   rö  rø  )	r2   rŸ   r²  r�   r×  r‘   rñ  rò  r£   s	           €r3   r4   ÚMarkdownViewer.__init__^  s.   ø€ ô, 	‰Ñ˜d°7ÐÑ;Ø&<Ô#Ø!ŒØ-ÔØ%Õr6   c                ó,   • U R                  [        5      $ )z;The [`Markdown`][textual.widgets.Markdown] document widget.)r“  rR   r:   s    r3   ÚdocumentÚMarkdownViewer.documentz  s   € ð �~‰~œhÓ'Ð'r6   c                ó,   • U R                  [        5      $ )zQThe [table of contents][textual.widgets.markdown.MarkdownTableOfContents] widget.)r“  r‡  r:   s    r3   rý  Ú MarkdownViewer.table_of_contents  s   € ð �~‰~Ô5Ó6Ð6r6   c              ƒ  ó|   #   • U R                   R                  U R                  =(       d    S5      I S h  v•N   g  N7fr  )r¶  r½   r§   )r2   rz   s     r3   r"  ÚMarkdownViewer._on_mount„  s&   é € Ø�m‰m×"Ñ" 4§>¡>×#7°RÓ8×8Ó8ùs   ‚2<´:µ<c              ƒ  óv  #   • U R                   R                  [        U5      5      u  p#U[        S5      :X  a#  U(       a  U R                   R	                  U5        gU R                   R                  U R                  R                  U5      5      I Sh  v•N   U R                  U R                  5       5        g N$7f)z Navigate to a new document path.rf   N)
r¶  rt   rV   r   r8  r@  r®  r|   rÈ   r±  )r2   rg   rw   rx   s       r3   r|   ÚMarkdownViewer.go‡  s…   é € à—}‘}×6Ñ6´s¸8³}ÓE‰ˆØ”4˜“9Ó¦à�M‰M×%Ñ% fÕ-ð —-‘-×$Ñ$ T§^¡^×%6Ñ%6°xÓ%@ÓA×AÐAØ×Ñ˜d×3Ñ3Ó5Õ6ñ Bùs   ‚BB9ÂB7Â%B9c              ƒ  óü   #   • U R                   R                  5       (       aW  U R                  R                  U R                   R                  5      I Sh  v•N   U R                  U R                  5       5        gg N%7f)z!Go back one level in the history.N)r®  r   r¶  r@  rg   rÈ   r±  r:   s    r3   r   ÚMarkdownViewer.back’  sY   é € à�>‰>×Ñ× Ñ Ø—-‘-×$Ñ$ T§^¡^×%<Ñ%<Ó=×=Ð=Ø×Ñ˜d×3Ñ3Ó5Õ6ð !Ù=ùó   ‚AA<ÁA:Á&A<c              ƒ  óü   #   • U R                   R                  5       (       aW  U R                  R                  U R                   R                  5      I Sh  v•N   U R                  U R                  5       5        gg N%7f)z$Go forward one level in the history.N)r®  r‚   r¶  r@  rg   rÈ   r±  r:   s    r3   r‚   ÚMarkdownViewer.forward˜  sY   é € à�>‰>×!Ñ!×#Ñ#Ø—-‘-×$Ñ$ T§^¡^×%<Ñ%<Ó=×=Ð=Ø×Ñ˜d×3Ñ3Ó5Õ6ð $Ù=ùrÀ  c              ƒ  óv   #   • UR                  5         U R                  UR                  5      I S h  v•N   g  N7frª   )r?   r|   rË   ©r2   r§  s     r3   Ú_on_markdown_link_clickedÚ(MarkdownViewer._on_markdown_link_clickedž  s$   é € Ø�‰ŒØ�g‰g�g—l‘lÓ#×#Ó#ùs   ‚/9±7²9c                ó(   • U R                  US5        g )Nz-show-table-of-contents)Ú	set_class)r2   r²  s     r3   Úwatch_show_table_of_contentsÚ+MarkdownViewer.watch_show_table_of_contents¢  s   € Ø�‰Ð-Ð/HÕIr6   c              #  óx   #   • [        U R                  U R                  S9nSUl        Uv •  [	        U5      v •  g 7f)N)rñ  rò  T)rR   rö  rø  Ú	can_focusr‡  r¦   s     r3   rº   ÚMarkdownViewer.compose¥  s:   é € ÜØ×/Ñ/¸D×<LÑ<Lñ
ˆð "ˆÔØŠÜ% hÓ/Ó/ùs   ‚8:c                ól   • UR                   U R                  [        5      l         UR                  5         g rª   )rý  r“  r‡  r?   rÄ  s     r3   Ú&_on_markdown_table_of_contents_updatedÚ5MarkdownViewer._on_markdown_table_of_contents_updated­  s*   € ð ×%Ñ%ð 	�‰Ô.Ó/ÔAð 	�‰�r6   c                óŽ   • SUR                    3nU R                  U[        5      nU R                  USS9  UR	                  5         g )Nrs   Tr1  )r  r“  r‰   Úscroll_to_widgetr?   )r2   r§  Úblock_selectorr¶   s       r3   Ú'_on_markdown_table_of_contents_selectedÚ6MarkdownViewer._on_markdown_table_of_contents_selectedµ  sC   € ð ˜W×-Ñ-Ð.Ð/ˆØ—‘˜~¬}Ó=ˆØ×Ñ˜e¨ÐÑ.Ø�‰�r6   )r§   rø  rö  r²  rª   )rŸ   rþ   r²  r…   r�   rþ   r×  rþ   r‘   rþ   rñ  r‚  rò  r…   rý   )rS   r‡  rƒ  )rg   r†   rS   rT   rU   )r§  r  rS   rT   )r²  r…   rS   rT   r   )r§  r   rS   rT   )r§  r  rS   rT   )rW   rX   rY   rZ   r[   r(  r  r   r²  Ú	top_blockr    r_   r®  r„  r   r±  r4   r‡   r¶  rý  r"  r|   r   r‚   rÅ  rÉ  rº   rÏ  rÔ  r\   r  r  s   @r3   r­  r­  @  s+  ø‡ Ù#à€Jð€Kñ  & d›^ÐØ%Ù˜“€Iá # I£€Iˆ~Ó.ô=˜7ô =ð
  $ð&ð (,ØØØ"Ø:>Øñ&àð&ð !%ð	&ð
 ð&ð ð&ð ð&ð 8ð&ð ÷&ñ &ð8 ó(ó ð(ð ó7ó ð7ô9ô	7ô7ô7ô$ôJô0ðØ6ðà	ôðØ7ðà	÷ò r6   r­  F)rÌ  r«  )cÚ
__future__r   r-   rò   r“   Ú
contextlibr   Ú	functoolsr   Úpathlibr   r   Útypingr   r	   r
   Úurllib.parser   Úmarkdown_itr   Úmarkdown_it.tokenr   Ú	rich.textr   Útyping_extensionsr   Útextual._slugr   r   Útextual.appr   Útextual.await_completer   Útextual.containersr   r   r   Útextual.contentr   r   Útextual.css.queryr   Útextual.eventsr   rÍ  r   Útextual.layoutr   Útextual.layouts.gridr   Útextual.messager   Útextual.reactiver   r    Útextual.styler!   Útextual.widgetr"   Útextual.widgetsr#   r$   Útextual.widgets._labelr%   r&   r„  r(   r_   r‰   r  r  r  r  r  r  r  r  r!  r*  r,  r.  r7  rH  rM  rX  rš  rž  r�  rŽ  r�  r1  r0  r?  r±  r³  rŸ  rR   r‡  r­  r]   r6   r3   Ú<module>rð     s  ðÞ "ã Û 	Û Ý Ý ß "ß /Ñ /Ý  å "Ý #Ý Ý 'ç 8Ý %Ý 0ß CÑ Cß )Ý 'Ý  Ý 'Ý !Ý +Ý #ß *Ý Ý !ß (Ý (à!DÐ �YÓ Dð÷D<ñ D<÷NDñ DôNt�Fô tôn�]ô ô�ô ô�ô ô�ô ô �ô ô�ô ô�ô ô
˜]ô 
ô4˜ô 4ô$˜ô ô(�=ô ô˜ô ô:'˜,ô 'ôTU ô Uôa0˜6ô a0ôHE0�Mô E0ôP'�Mô 'ô'�Mô 'ô&�ô &ô)�ô )ô'�ô 'ô$�Vô $ô.*�}ô *ô*	Ð.ô 	ô	Ð 0ô 	ô_L�Mô _LðD !€ôe-ˆvô e-ôPS˜f¸ò Sôl{�^¨uÈó {r6   