ó
    Ãu„j>8 ã                  ó  • % 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	J
r
JrJrJrJrJrJrJrJrJrJrJr  SSKrSSKJr  SSKJr  SS	KJr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(J)r)  SSK*J+r+J,r,  SSK-J.r.J/r/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8J9r9J:r:  SSK;J<r<  SSK=J>r>  SSK?J@r@JArA  SSKBJCrC  SSKDJErE  SSKFJGrG  SSKHJIrIJJrJJKrKJLrL  SSKMJNrN  SSKOJPrP  SSKQJRrRJSrS  SSKTJUrU  SSKVJWrW  SS KXJYrYJZrZJ[r[J\r\J]r]  SS!K^J_r_  SS"K`Jara  SS#KbJcrc  SS$KdJere  SS%KfJgrg  SS&KhJiri  \	(       a  SS'KjJkrk  SS(KlJmrm  SS)KnJoro  S*\Rà                  -  rqS+\rS,'   \" S-5      rs \\\\s   /S4   \\\s   /\S   4   4   rt  " S. S/\5      ru\Rì                  Rî                   " S0 S1\\s   5      5       rx\Rì                  Rî                   " S2 S3\\s   \e5      5       ry\Rì                  Rî                   " S4 S5\y\s   5      5       rz " S6 S7\z\s   S8S99r{g):zÂ

This module contains the `Screen` class and related objects.

The `Screen` class is a special widget which represents the content in the terminal. See [Screens](/guide/screens/) for details.

é    )ÚannotationsN)Úpartial)Ú
attrgetter)ÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚClassVarÚGenericÚIterableÚIteratorÚLiteralÚ
NamedTupleÚOptionalÚTypeVarÚUnion)ÚRenderableType)ÚStyle)Ú	constantsÚerrorsÚeventsÚmessages)Úarrange)Úget_auto_scroll_regions)Úinvoke)Ú
CompositorÚMapGeometry)Úactive_message_pumpÚvisible_screen_stack)ÚCSSPathTypeÚ_css_path_type_as_listÚ_make_path_object_relative)ÚCallbackType)Ú
SkipAction)ÚAwaitComplete)ÚActiveBindingÚBindingÚBindingsMap©Úmatch)Úparse_selectors)Ú	NoMatchesÚ	QueryType)ÚPointerShape)ÚDOMNode)ÚNoWidget)ÚOffsetÚRegionÚShapeÚSize)Úkey_to_character)ÚDockArrangeResult)ÚReactiveÚvar)ÚBackgroundScreen)ÚBlank)Ú
SELECT_ALLÚ	SelectEndÚ	SelectionÚSelectStartÚSelectState)ÚSignal)ÚTimer)Úwalk_selectable_widgets)ÚWidget)ÚTooltip)Ú	ToastRack)ÚFinal)ÚProvider)ÚMessagePumpé   zFinal[float]ÚUPDATE_PERIODÚScreenResultTypec                  óF   • \ rS rSr% SrS\S'    S\S'    \S
S j5       rSrg	)ÚHoverWidgetséZ   zJResult of [get_hover_widget_at][textual.screen.Screen.get_hover_widget_at]útuple[Widget, Region]Ú
mouse_overztuple[Widget, Region] | NoneÚ
hover_overc                ó^   • U R                   S   U R                  c  S4$ U R                  S   4$ )zJust the widgets.r   N)rP   rQ   ©Úselfs    ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\textual/screen.pyÚwidgetsÚHoverWidgets.widgetsb   s<   € ð �O‰O˜AÑØ—O‘OÑ+ˆDð
ð 	
à15·±ÀÑ1Cð
ð 	
ó    © N)Úreturnztuple[Widget, Widget | None])	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__ÚpropertyrV   Ú__static_attributes__rY   rX   rU   rM   rM   Z   s)   ‡ ÙTà%Ó%Ø5Ø,Ó,ØYàó
ó ó
rX   rM   c                  ó@   • \ rS rSrSr S       SS jjrS	S jrSrg)
ÚResultCallbackék   z Holds the details of a callback.Nc                ó,   • Xl          X l         X0l        g)z¹Initialise the result callback object.

Args:
    requester: The object making a request for the callback.
    callback: The callback function.
    future: A Future to hold the result.
N)Ú	requesterÚcallbackÚfuture©rT   rg   rh   ri   s       rU   Ú__init__ÚResultCallback.__init__o   s   € ð #ŒØ@Ø9AŒØ$ØŒØ%rX   c                óâ   • U R                   b  U R                   R                  U5        U R                  b3  U R                  b&  U R                  R	                  U R                  U5        SU l        g)z±Call the callback, passing the given result.

Args:
    result: The result to pass to the callback.

Note:
    If the requested or the callback are `None` this will be a no-op.
N)ri   Ú
set_resultrg   rh   Ú	call_next©rT   Úresults     rU   Ú__call__ÚResultCallback.__call__ƒ   sR   € ð �;‰;Ñ"Ø�K‰K×"Ñ" 6Ô*Ø�>‰>Ñ%¨$¯-©-Ñ*CØ�N‰N×$Ñ$ T§]¡]°FÔ;Øˆ�rX   )rh   ri   rg   ©N)rg   rH   rh   ú1ScreenResultCallbackType[ScreenResultType] | Noneri   z'asyncio.Future[ScreenResultType] | NonerZ   ÚNone)rq   rK   rZ   rv   )r[   r\   r]   r^   r_   rk   rr   rb   rY   rX   rU   rd   rd   k   s;   † á*ð ;?ð	&àð&ð Dð&ð 8ð	&ð
 
õ&÷(rX   rd   c            	      ó4  ^ • \ rS rSr% SrSrS\S'    SrS\S'    SrS	\S
'    S1r	Sr
SrS\S'    SrS\S'    SrS\S'    SrS\S'    \" S5      rS\S'    \" SSS9rS\S'    \" SSS9rS\S'    \" SSS9rS\S'    \" 5       rS\S'    SrS\S'    SrS \S!'    \" SS"S#9rS\S$'    \" \5      rS%\S&'    \" S5      r \" S5      rS'\S('    \" S5      rS)\S*'    \" S+5      rS,\S-'    \ " S.S/S0SS19\ " S2S3S4SS19\ " S5S6S7SS19/r!   S“       S”U 4S8 jjjr"\#S•S9 j5       r$\#S•S: j5       r%\#S–S; j5       r&\#S—U 4S< jj5       r'\#S˜S= j5       r(S> r)S? r*    S™S@ jr+SšSA jr,      S›SB jr-\#SœSC j5       r.\#SœSD j5       r/\#S�SE j5       r0SžSŸSF jjr1\#S•SG j5       r2\#S•SH j5       r3S SI jr4S¡SJ jr5SšSK jr6S¢SL jr7S£SM jr8S¤SN jr9S¥SO jr:S¦SP jr;S§SQ jr<S¨SR jr=      S©SS jr>SªST jr?SšSU jr@S«SV jrA\#S¬SW j5       rB S­     S®SX jjrCS¯S°SY jjrDS¯S°SZ jjrES±S²S[ jjrFSšS\ jrGS³S] jrHSšS^ jrISšS_ jrJSšS` jrKSšSa jrLS´Sb jrM Sµ     S¶Sc jjrN S·     S¸Sd jjrO  S¹       SºSe jjrPS»Sf jrQS¼Sg jrRS½Sh jrSSšSi jrTSšSj jrUSšSk jrVS¾Sl jrW Sµ       S¿Sm jjrXSšU 4Sn jjrYSšSo jrZSÀSÁSp jjr[SÂSq jr\SÃSr jr]SÄSs jr^SÅSt jr_SÆSu jr`SÇSv jraSšU 4Sw jjrbSšSx jrcSšSy jrdSÈSz jre      SÉS{ jrfS«S| jrgSšS} jrhSšS~ jriS«S jrjSÊS€ jrk\l        SËS� j5       rm SÌ       SÍS‚ jjrnSšSƒ jro        SÎS„ jrpSšS… jrqSÏS† jrrSšS‡ jrsSÐSˆ jrt\u          SÑS‰ j5       rvSÒSŠ jrwSµSÓS‹ jjrxSšSŒ jrySµSÔS� jjrzSÕ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€$ )ØÚScreené“   zThe base class for screens.NzClassVar[str | None]Ú
AUTO_FOCUSÚ zClassVar[str]ÚCSSzClassVar[CSSPathType | None]ÚCSS_PATHzscreen--selectionaa  
    Screen {
        layout: vertical;
        overflow-y: auto;
        background: $background;        
        
        &:inline {
            height: auto;
            min-height: 1;
            border-top: tall $background;
            border-bottom: tall $background;
        }
        & > .screen--selection {
            background: $screen-selection-background;
            color: $screen-selection-foreground;           
        }
        &:ansi {
            background: ansi_default;
            color: ansi_default;
            &.-screen-suspended {
                text-style: dim;
                ScrollBar {
                    text-style: not dim;
                }
            }
            &:inline {
                border-top: tall $ansi-background;
                border-bottom: tall $ansi-background;
            }
        }
    }
    
    ÚTITLEÚ	SUB_TITLEz&ClassVar[list[tuple[int, str]]] | NoneÚHORIZONTAL_BREAKPOINTSÚVERTICAL_BREAKPOINTSzReactive[Widget | None]Úfocusedr   F)ÚrepaintzReactive[int]Ústack_updates)ÚcomputezReactive[str | None]Ú	sub_titleÚtitlez<ClassVar[set[type[Provider] | Callable[[], type[Provider]]]]ÚCOMMANDSÚALLOW_IN_MAXIMIZED_VIEWzClassVar[bool | None]ÚESCAPE_TO_MINIMIZET©ÚlayoutÚ	maximizedzvar[dict[Widget, Selection]]Ú
selectionszReactive[SelectState | None]Ú_select_statezvar[Offset | None]Ú_mouse_down_offsetÚdefaultzvar[PointerShape]Ú_pointer_shapeÚtabzapp.focus_nextz
Focus Next)Úshowz	shift+tabzapp.focus_previouszFocus Previouszctrl+c,super+czscreen.copy_textzCopy selected textc                ó   >• SU l         [        TU ]	  XUS9  [        5       U l        [        5       U l        SU l        / U l        / U l	        SU l
        SU l        U R                  b  [        U R                  5      O/  Vs/ s H  n[        X@5      PM     nnXPl        U R                   U l        U R$                  U l        [)        U S5      U l         [)        U S5      U l         [)        U S5      U l         SU l         0 U l         SU l        gs  snf )z—
Initialize the screen.

Args:
    name: The name of the screen.
    id: The ID of the screen in the DOM.
    classes: The CSS classes for the screen.
F©ÚnameÚidÚclassesNzlayout-refreshÚbindings_updatedÚselection_startedéÿÿÿÿ)Ú_modalÚsuperrk   r   Ú_compositorÚsetÚ_dirty_widgetsÚ_Screen__update_timerÚ
_callbacksÚ_result_callbacksÚ_tooltip_widgetÚ_tooltip_timerr}   r!   r"   Úcss_pathr~   r‡   r   r†   r@   Úscreen_layout_refresh_signalÚbindings_updated_signalÚtext_selection_started_signalÚ_css_update_countÚ_layout_widgetsÚ_auto_select_scroll_timer)rT   r—   r˜   r™   r§   Ú	css_pathsÚ	__class__s         €rU   rk   ÚScreen.__init__  s-  ø€ ð ˆŒÜ‰Ñ˜d°7ÐÑ;Ü%›<ˆÔÜ+.«5ˆÔØ,0ˆÔØBDˆŒØPRˆÔà.2ˆÔØ,0ˆÔð —=‘=Ñ,ô ' t§}¡}Ô5àðó
òð ô ' xÖ6ñð 	ð 
ð "Œà—Z‘ZˆŒ
ØŸ™ˆŒä<BØÐ"ó=
ˆÔ)ð 	Rä7=¸dÐDVÓ7WˆÔ$ØDä=CØÐ%ó>
ˆÔ*ð 	Bà!#ˆÔØ#à;=ˆÔØ4à7;ˆÔ&Ø1ùòC
s   Á>Dc                ó   • U R                   $ )zIs the screen modal?©r�   rS   s    rU   Úis_modalÚScreen.is_modalO  s   € ð �{‰{ÐrX   c                ó–   • SSK Jn   U R                  R                  U L =(       d    X R                  R                  ;   $ ! U a     gf = f)z-Is the screen current (i.e. visible to user)?r   )ÚScreenStackErrorF)Útextual.appr¶   ÚappÚscreenÚ_background_screens)rT   r¶   s     rU   Ú
is_currentÚScreen.is_currentT  sC   € õ 	1ð	Ø—8‘8—?‘? dÐ*×R¨d·h±h×6RÑ6RÑ.RÐRøØó 	Ùð	ús   ˆ6? ¿AÁAc                ó~   • U R                   c%  U R                  [        U R                  SSS9U l         U R                   $ )zTimer used to perform updates.Úscreen_updateT)r—   Úpause)r¢   Úset_intervalrJ   Ú_on_timer_updaterS   s    rU   Ú_update_timerÚScreen._update_timer^  sF   € ð ×ÑÑ&Ø"&×"3Ñ"3Ü˜t×4Ñ4¸?ÐRVð #4ð #ˆDÔð ×"Ñ"Ð"rX   c                óØ   >• S/nU R                   R                  (       d  UR                  S5        U R                   R                  (       d  UR                  S5        / [        TU ]  QUQ7$ )z8Layers from parent.

Returns:
    Tuple of layer names.
Ú_loadingÚ
_toastrackÚ	_tooltips)r¸   Ú_disable_notificationsÚappendÚ_disable_tooltipsrž   Úlayers)rT   Úextrasr¯   s     €rU   rË   ÚScreen.layersg  sR   ø€ ð �ˆØ�x‰x×.×.Ø�M‰M˜,Ô'Ø�x‰x×)×)Ø�M‰M˜+Ô&Ø)”‘‘Ð) &Ñ)Ð)rX   c                óp   • U R                   R                  U R                  R                  R                  -
  $ )zThe size of the screen.)r¸   ÚsizeÚstylesÚgutterÚtotalsrS   s    rU   rÏ   ÚScreen.sizeu  s'   € ð �x‰x�}‰}˜tŸ{™{×1Ñ1×8Ñ8Ñ8Ð8rX   c                ó$   • U R                  5         g rt   ©Úrefresh_bindingsrS   s    rU   Ú_watch_focusedÚScreen._watch_focusedz  ó   € Ø×ÑÕrX   c                ó$   • U R                  5         g rt   rÕ   rS   s    rU   Ú_watch_stack_updatesÚScreen._watch_stack_updates}  rÙ   rX   c              ƒ  óž   #   • UR                  5       UR                  5       -   H$  nUR                  UR                  US 5      5        M&     g 7frt   )ÚkeysÚselection_updatedÚget)rT   Úold_selectionsrŽ   Úwidgets       rU   Ú_watch_selectionsÚScreen._watch_selections€  s@   é € ð
 %×)Ñ)Ó+¨j¯o©oÓ.?Ô?ˆFØ×$Ñ$ Z§^¡^°F¸DÓ%AÖBò @ùs   ‚AAc                ó:   • U R                   R                  U 5        g)z&Call to request a refresh of bindings.N)r©   ÚpublishrS   s    rU   rÖ   ÚScreen.refresh_bindingsˆ  s   € à×$Ñ$×,Ñ,¨TÕ2rX   c                ó~   • U R                  US LS5        Ub  UR                  S5        Ub  UR                  S5        g g )Nz-maximized-viewz
-maximized)Ú	set_classÚremove_classÚ	add_class)rT   Úpreviously_maximizedr�   s      rU   Ú_watch_maximizedÚScreen._watch_maximizedŒ  sE   € ð
 	�‰�y¨Ð,Ð.?Ô@ØÑ+Ø ×-Ñ-¨lÔ;ØÑ Ø×Ñ Õ-ð !rX   c           	     ó.  • U R                   nUb  UR                  (       a  SnUcL  X R                  R                  5       4U R                  U R                  R                  R                  5       4/nO5UR
                   Vs/ s H  o3UR                  R                  5       4PM      nn/ nU Hm  u  pVU HQ  nUR                  n[        UR                  5       H)  n	U" U	[        U	5      5      (       d  M  UR                  U		 M+     MS     UR                  U5        Mo     U R                  R                  n
U HX  u  pVU
(       d  M  UR                  U
5      nUR                  (       d  M2  U R                  R                  UR                  U5        MZ     U$ s  snf )zBinding chain from this screen.N)r‚   ÚloadingÚ	_bindingsÚcopyr¸   Úancestors_with_selfÚcheck_consume_keyÚlistÚkey_to_bindingsr5   rÉ   Ú_keymapÚapply_keymapÚclashed_bindingsÚhandle_bindings_clash)rT   r‚   Únamespace_bindingsÚnodeÚfilter_namespacesÚ	namespaceÚbindings_mapÚfilter_namespacerô   ÚkeyÚkeymaprq   s               rU   Ú_binding_chainÚScreen._binding_chain—  so  € ð —,‘,ˆØÑ 7§?§?ØˆGð ‰?à—~‘~×*Ñ*Ó,Ð-Ø—‘˜4Ÿ8™8×-Ñ-×2Ñ2Ó4Ð5ð"Ñð ;B×:UÒ:Uó"Ú:U°$�t—~‘~×*Ñ*Ó,Ó-Ñ:Uð ð "ð
 ,.ÐÛ'9Ñ#ˆIÛ$5Ð Ø$4×$FÑ$FÐ!Ü × <Ñ <Ö=�CÙ(¨Ô.>¸sÓ.C×DÓDð )×8Ñ8¸Ò=ó	 >ñ %6ð ×$Ñ$ YÖ/ñ (:ð —‘×!Ñ!ˆÛ'9Ñ#ˆIßˆvØ%×2Ñ2°6Ó:�Ø×*×*Ñ*Ø—H‘H×2Ñ2°6×3JÑ3JÈIÖVñ	 (:ð "Ð!ùò1"s   Â %Fc                ó~   • U R                   n[        US5       H   u  nu  p4UR                  (       d  M  USU s  $    U$ )z=The binding chain, ignoring everything before the last modal.rI   N)r  Ú	enumerater³   )rT   Úbinding_chainÚindexrü   rñ   s        rU   Ú_modal_binding_chainÚScreen._modal_binding_chainÀ  sG   € ð ×+Ñ+ˆÜ(1°-ÀÖ(CÑ$ˆEÑ$�DØ�}�}‰}Ø$ V eÐ,Ò,ñ )Dð ÐrX   c                ó²  • 0 nU R                   nU R                   H¸  u  p4U H­  u  pVUR                  UR                  U5      nUSL a  M(  [	        U5      nUR                  U5      =n	(       aJ  UR                  (       a7  U	R                  R                  (       d  [        X6X†R                  5      X'   M‘  M“  M•  [        X6X†R                  5      X'   M¯     Mº     U$ )aY  Get currently active bindings for this screen.

If no widget is focused, then app-level bindings are returned.
If a widget is focused, then any bindings present in the screen and app are merged and returned.

This property may be used to inspect current bindings.

Returns:
    A map of keys to a tuple containing (NAMESPACE, BINDING, ENABLED).
F)
r¸   r	  Ú_check_action_stateÚactionÚboolrà   ÚpriorityÚbindingr&   Útooltip)
rT   rÿ   r¸   rþ   Úbindingsr  r  Úaction_stateÚenabledÚexisting_key_and_bindings
             rU   Úactive_bindingsÚScreen.active_bindingsÉ  sÐ   € ð 24ˆØ�h‰hˆØ#'×#<Ô#<ÑˆIÛ (‘�à"×6Ñ6°w·~±~ÀyÓQ�Ø 5Ò(ñ ä˜|Ó,�Ø/;×/?Ñ/?ÀÓ/DÐDÐ+ÕDð  ×(×(Ø 8× @Ñ @× I× Iä,9Ø%°¿¹ó-˜Ó)ñ !Jñ )ô )6Ø!¨G·_±_ó)�LÓ%ó- !)ñ $=ð6 ÐrX   c                ó¢  ^ ^• UT R                   R                  T R                  4nT R                  R	                  U5      nUb  U$ T R
                  c  T R                  R
                  OT R
                  mSUU 4S jjn[        T T R                  b  U" T R                  5      OT R                   UT R                  S5      =nT R                  U'   U$ )zvArrange children.

Args:
    size: Size of container.
    optimal: Ignored on screen.

Returns:
    Widget locations.
c                óÐ   >• U 1TR                  T5      kTR                  S5      knTR                   Vs/ s H  o"U;   d  M
  UPM     nnX;  a  UR                  SU 5        U$ s  snf )zLGet widgets to display in maximized view.

Returns:
    A list of widgets.

z.-textual-systemr   )Úquery_childrenÚchildrenÚinsert)r�   rV   râ   Úmaximize_widgetsÚallow_in_maximized_viewrT   s       €€rU   Úget_maximize_widgetsÚ,Screen.arrange.<locals>.get_maximize_widgets
  s|   ø€ ð ðà×$Ñ$Ð%<Ó=ðð ×$Ñ$Ð%7Ó8ðˆGð 6:·]²]ÓX²]¨6ÐPWÑFW§±]ÐÐXàÓ0Ø ×'Ñ'¨¨9Ô5Ø#Ð#ùò	  Ys   µ	A#ÁA#F)r�   rC   rZ   úlist[Widget])	Ú_nodesÚ_updatesr�   Ú_arrangement_cacherà   r‰   r¸   r   rÏ   )rT   rÏ   Ú_optimalÚ	cache_keyÚcached_resultr  Úarrangementr  s   `      @rU   r   ÚScreen.arrangeô  sÎ   ù€ ð ˜4Ÿ;™;×/Ñ/°·±Ð@ˆ	Ø×/Ñ/×3Ñ3°IÓ>ˆØÑ$Ø Ð ð ×+Ñ+Ñ3ð �H‰H×,Ò,à×-Ñ-ð 	 ÷	$ð 	$ô( <CØð —>‘>Ñ-ñ % T§^¡^Ô4à—[‘[àØ�I‰IØó
<
ð 
	
ˆ�d×-Ñ-¨iÑ8ð ÐrX   c                óT   •  U R                   R                  U L $ ! [         a     gf = f)z9Is the screen active (i.e. visible and top of the stack)?F)r¸   r¹   Ú	ExceptionrS   s    rU   Ú	is_activeÚScreen.is_active,  s,   € ð	Ø—8‘8—?‘? dÐ*Ð*øÜó 	Ùð	ús   ‚ š
'¦'c                ó   • U R                   $ )z,Check if this widget permits text selection.)ÚALLOW_SELECTrS   s    rU   Úallow_selectÚScreen.allow_select4  s   € ð × Ñ Ð rX   c                ó:   • U R                   R                  5       nU$ )zµGet a widget to display a loading indicator.

The default implementation will defer to App.get_loading_widget.

Returns:
    A widget in place of this widget to indicate a loading.
)r¸   Úget_loading_widget)rT   Úloading_widgets     rU   r3  ÚScreen.get_loading_widget9  s   € ð Ÿ™×4Ñ4Ó6ˆØÐrX   c                ó:   • U R                   R                  U5        g rt   )r¸   Ú_set_pointer_shape)rT   Úpointer_shapes     rU   Ú_watch__pointer_shapeÚScreen._watch__pointer_shapeD  s   € Ø�‰×#Ñ# MÕ2rX   c                ó^  • U R                   (       a  SU l        gU R                  R                  c  U OU R                  R                  nSnUR                   HM  n[        U[        5      (       d  M  UR                  (       a  Sn  O"UR                  R                  =nS:w  d  MM    O   X l        g)z'Get the screen's current pointer shape.ÚtextNr‘   Úwait)
Ú
_selectingr’   r¸   rP   ró   Ú
isinstancerC   rð   rÐ   Úpointer)rT   râ   r8  rü   s       rU   Úupdate_pointer_shapeÚScreen.update_pointer_shapeG  s‡   € à�?�?Ø"(ˆDÔØØŸ™×,Ñ,Ñ4‘¸$¿(¹(×:MÑ:MˆØ!ˆØ×.Ô.ˆDÜ˜$¤×'Ó'Ø—<—<Ø$*�MÙØ%)§[¡[×%8Ñ%8Ð8�M¸YÕFÙñ /ð ,ÕrX   c                óJ  • U R                   R                  n [        R                  " 5       R	                  5       nUb  X La  UR                  S:  a  [        X!5      $ UR                  (       a  U R                  R                  5       $ [        U5      $ ! [
         a    Sn Nff = f)zrRender method inherited from widget, used to render the screen's background.

Returns:
    Background renderable.
NrI   )rÐ   Ú
backgroundr   rà   ÚpopÚLookupErrorÚar9   Úis_transparentr¸   Úrenderr:   )rT   rD  Úbase_screens      rU   rI  ÚScreen.renderX  sŽ   € ð —[‘[×+Ñ+ˆ
ð	Ü.×2Ò2Ó4×8Ñ8Ó:ˆKð Ñ" {Ò'>À:Ç<Á<ÐRSÓCSä# KÓ<Ð<à×$×$à—8‘8—?‘?Ó$Ð$ä�ZÓ Ð øô ó 	ØŠKð	ús   ˜#B ÂB"Â!B"c                ó8   • U R                   R                  U5      $ )z“Get the absolute offset of a given Widget.

Args:
    widget: A widget

Returns:
    The widget's offset relative to the top left of the terminal.
)rŸ   Ú
get_offset©rT   râ   s     rU   rM  ÚScreen.get_offsetn  s   € ð ×Ñ×*Ñ*¨6Ó2Ð2rX   c                ó8   • U R                   R                  X5      $ )zÉGet the widget at a given coordinate.

Args:
    x: X Coordinate.
    y: Y Coordinate.

Returns:
    Widget and screen region.

Raises:
    NoWidget: If there is no widget under the screen coordinate.
)rŸ   Úget_widget_at©rT   ÚxÚys      rU   rQ  ÚScreen.get_widget_aty  s   € ð ×Ñ×-Ñ-¨aÓ3Ð3rX   c                ól  • [        U R                  R                  X5      5      n [        U5      u  pEUR                  (       d9  U H&  u  pgUR                  (       d  M  [        XE4Xg45      s  $    [        XE4S5      $ [        XE4XE45      $ ! [         a    [
        R                  " SU SU S35      ef = f)aP  Get the widget, and its region directly under the mouse, and the first
widget, region pair with a hover style.

Args:
    x: X Coordinate.
    y: Y Coordinate.

Returns:
    A pair of (WIDGET, REGION) tuples for the top most and first hover style respectively.

Raises:
    NoWidget: If there is no widget under the screen coordinate.

z)No hover widget under screen coordinate (z, Ú)N)	ÚiterrŸ   Úget_widgets_atÚnextÚStopIterationr   r0   Ú_has_hover_stylerM   )rT   rS  rT  Úwidgets_under_coordinateÚ
top_widgetÚ
top_regionrâ   Úregions           rU   Úget_hover_widgets_atÚScreen.get_hover_widgets_atˆ  sÅ   € ô $(¨×(8Ñ(8×(GÑ(GÈÓ(MÓ#NÐ ð	YÜ%)Ð*BÓ%CÑ"ˆJð ×*×*Û":‘�Ø×*×*Ñ*Ü'¨Ð(@À6ÐBRÓSÒSñ #;ô   Ð 8¸$Ó?Ð?Ü˜ZÐ4°zÐ6NÓOÐOøô ó 	YÜ—/’/Ð$MÈaÈSÐPRÐSTÐRUÐUVÐ"WÓXÐXð	Yús   ¦B Â(B3c                ó8   • U R                   R                  X5      $ )zŽGet all widgets under a given coordinate.

Args:
    x: X coordinate.
    y: Y coordinate.

Returns:
    Sequence of (WIDGET, REGION) tuples.
)rŸ   rY  rR  s      rU   rY  ÚScreen.get_widgets_at£  s   € ð ×Ñ×.Ñ.¨qÓ4Ð4rX   c                ó  •  U R                  X5      u  p4UR                  S5      (       d  UR                  (       a  gUR                   H/  n[        U[        5      (       d  M  UR                  (       d  M-  Us  $    g! [         a     gf = f)aˆ  Get the focusable widget under a given coordinate.

If the widget directly under the given coordinate is not focusable, then this method will check
if any of the ancestors are focusable. If no ancestors are focusable, then `None` will be returned.

Args:
    x: X coordinate.
    y: Y coordinate.

Returns:
    A `Widget`, or `None` if there is no focusable widget underneath the coordinate.
Nú-textual-system)rQ  r0   Ú	has_classrð   ró   r?  rC   Ú	focusable)rT   rS  rT  râ   Ú_regionrü   s         rU   Úget_focusable_widget_atÚScreen.get_focusable_widget_at¯  sy   € ð	Ø"×0Ñ0°Ó6‰OˆFð ×ÑÐ-×.Ñ.°&·.·.àà×.Ô.ˆDÜ˜$¤×'Ó'¨D¯N¯N©NØ’ñ /ð øô ó 	Ùð	ús   ‚A= Á=
B
Â	B
c                ó8   • U R                   R                  X5      $ )zzGet the style under a given coordinate.

Args:
    x: X Coordinate.
    y: Y Coordinate.

Returns:
    Rich Style object.
)rŸ   Úget_style_atrR  s      rU   rm  ÚScreen.get_style_atÊ  s   € ð ×Ñ×,Ñ,¨QÓ2Ð2rX   c                ó8   • U R                   R                  X5      $ )zÊGet the widget under a given coordinate, and an offset within the original content.

Args:
    x: X Coordinate.
    y: Y Coordinate.

Returns:
    Tuple of Widget and Offset, both of which may be None.
)rŸ   Úget_widget_and_offset_atrR  s      rU   rp  ÚScreen.get_widget_and_offset_atÖ  s   € ð ×Ñ×8Ñ8¸Ó>Ð>rX   c                ó8   • U R                   R                  U5      $ )zÈGet the screen region of a Widget.

Args:
    widget: A Widget within the composition.

Returns:
    Region relative to screen.

Raises:
    NoWidget: If the widget could not be found in this screen.
)rŸ   Úfind_widgetrN  s     rU   rs  ÚScreen.find_widgetä  s   € ð ×Ñ×+Ñ+¨FÓ3Ð3rX   c                ó    • 0 U l         SU l        g)zClear any selected text.N)rŽ   r�   rS   s    rU   Úclear_selectionÚScreen.clear_selectionò  s   € àˆŒØ!ˆÕrX   c                ón   • [         nX0UR                  S5       Vs0 s H  o3U_M     snEU l        gs  snf )zKSelect a widget and all its children.

Args:
    widget: Widget to select.
Ú*N)r;   ÚqueryrŽ   )rT   râ   Ú
select_allÚchilds       rU   Ú_select_all_in_widgetÚScreen._select_all_in_widget÷  s=   € ô  ˆ
àð
à.4¯l©l¸3Ô.?Ó@Ò.? U�jÒ Ñ.?Ñ@ð
ˆ�ùâ@s   œ2c                ó   • / nUR                   n[        S5      nU R                  nU R                  =nb(  UR                   H  nUR
                  (       d  M  Un  O   [        [        UR                  US95      U R                  4/nUR                  nUR                   n	U(       aØ  US   u  p«[        U
S5      nUc  U" 5         O±UR                  5       (       a  M<  UR                  R                  S5      nU(       a  US:g  OUnUR                  (       a<  UR!                  5       (       a'  [        UR                  US9nU	" [        U5      U45        U(       a  UR#                  5       (       a  U" U5        U(       a  MØ  U$ )z9A list of widgets that may receive focus, in focus order.Ú_focus_sort_keyN)r  rœ   Ú
visibilityÚhidden)rÉ   r   r¹   r‚   ró   Ú_trap_focusrX  ÚsortedÚdisplayed_childrenÚvisiblerE  rZ  Ú_check_disabledrÐ   Úget_ruleÚis_containerÚallow_focus_childrenÚallow_focus)rT   rV   Ú
add_widgetÚfocus_sorterÚ	root_noder‚   rü   Ú
node_stackrE  ÚpushÚchildren_iteratorÚparent_visibilityÚnode_styles_visibilityÚnode_is_visibleÚsorted_displayed_childrens                  rU   Úfocus_chainÚScreen.focus_chain  sm  € ð !#ˆØ—^‘^ˆ
Ü!Ð"3Ó4ˆð —K‘Kˆ	à—|‘|Ð#ˆGÑ0Ø×3Ô3�Ø×#×#Ñ#Ø $�IÙñ 4ô ”V˜I×8Ñ8¸lÑKÓLØ—‘ðð;
ˆ
ð �n‰nˆØ× Ñ ˆæØ3=¸b±>Ñ0ÐÜÐ)¨4Ó0ˆDØ‰|Ù•à×'Ñ'×)Ñ)ÙØ)-¯©×)=Ñ)=¸lÓ)KÐ&ö .ð +¨hÒ6à*ð  ð
 ×$×$¨×)BÑ)B×)DÑ)DÜ06Ø×/Ñ/°\ñ1Ð-ñ œ$Ð8Ó9¸?ÐKÔLö # t×'7Ñ'7×'9Ñ'9Ù˜tÔ$÷- ˆjð0 ˆrX   c                óˆ  ^• [        U[        5      (       d  UR                  n[        U5      mU R                  nU R
                  b;  [        U R
                  R                  SS95      nU Vs/ s H  oUU;   d  M
  UPM     nnU4S jU 5       nU(       d  U R                  $ U R                  c)  [        US5      nU R                  U5        U R                  $ U(       d  [        TU R                  5      (       d  Sn UR                  U R                  5      nU(       a_  Sn[        U5      n	[        S[        U5      S-   5       H%  n
UX�U
-  -   U	-     n[        TU5      (       d  M#  Un  O   U R                  U5        U R                  $ s  snf ! [         a)    U R                  [        US5      5         U R                  $ f = f)a;  Move the focus in the given direction.

If no widget is currently focused, this will focus the first focusable widget.
If no focusable widget matches the given CSS selector, focus is set to `None`.

Args:
    direction: 1 to move forward, -1 to move backward, or
        0 to keep the current focus.
    selector: CSS selector to filter
        what nodes can be focused.

Returns:
    Newly focused widget, or None for no focus. If the return
        is not `None`, then it is guaranteed that the widget returned matches
        the CSS selectors given in the argument.
NT©Ú	with_selfc              3  óN   >#   • U  H  n[        TU5      (       d  M  Uv •  M     g 7frt   r)   )Ú.0rü   Úselector_sets     €rU   Ú	<genexpr>Ú%Screen._move_focus.<locals>.<genexpr>Z  s   øé € ð  
Ú(�T¬E°,À×,E�D‰Dš[ùs   ƒ%œ	%rI   )r?  Ústrr[   r+   r–  r�   r    Úwalk_childrenr‚   rZ  Ú	set_focusr*   r  ÚlenÚrangeÚ
ValueError)rT   Ú	directionÚselectorr–  rh  râ   Úfiltered_focus_chainÚto_focusÚcurrent_indexÚchain_lengthÚsteprü   r�  s               @rU   Ú_move_focusÚScreen._move_focus<  s¢  ø€ ô( ˜(¤C×(Ñ(Ø×(Ñ(ˆHÜ& xÓ0ˆØ×&Ñ&ˆð �>‰>Ñ%Ü˜DŸN™N×8Ñ8À4Ð8ÐHÓIˆIÙ0;ÓS² fÈÑ?RŸ6±ˆKÐSô 
Ù(ó 
Ðö à—<‘<ÐØ�<‰<ÑäÐ0°$Ó7ˆHØ�N‰N˜8Ô$Ø—<‘<Ðö ¤ |°T·\±\×!BÑ!BØˆIð	)à'×-Ñ-¨d¯l©lÓ;ˆMö Ø�Ü" ;Ó/�Ü! !¤S¨Ó%5¸Ñ%9Ö:�DØ&Ø&°TÑ)9Ñ9¸\ÑIñ�Dô ˜\¨4×0Ó0Ø#'˜Ùñ ;ð —‘˜xÔ(à�|‰|ÐùòO Tøô, ó 	=à�N‰Nœ4Ð 4°dÓ;Õ<ð �|‰|Ðð#	=ús   Á-	F	Á:F	Ã<F Æ%GÇ Gc                ó&   • U R                  SU5      $ )aó  Focus the next widget, optionally filtered by a CSS selector.

If no widget is currently focused, this will focus the first focusable widget.
If no focusable widget matches the given CSS selector, focus is set to `None`.

Args:
    selector: CSS selector to filter
        what nodes can be focused.

Returns:
    Newly focused widget, or None for no focus. If the return
        is not `None`, then it is guaranteed that the widget returned matches
        the CSS selectors given in the argument.
rI   ©r­  ©rT   r§  s     rU   Ú
focus_nextÚScreen.focus_next�  s   € ð ×Ñ  8Ó,Ð,rX   c                ó&   • U R                  SU5      $ )a÷  Focus the previous widget, optionally filtered by a CSS selector.

If no widget is currently focused, this will focus the first focusable widget.
If no focusable widget matches the given CSS selector, focus is set to `None`.

Args:
    selector: CSS selector to filter
        what nodes can be focused.

Returns:
    Newly focused widget, or None for no focus. If the return
        is not `None`, then it is guaranteed that the widget returned matches
        the CSS selectors given in the argument.
rœ   r°  r±  s     rU   Úfocus_previousÚScreen.focus_previous’  s   € ð ×Ñ  HÓ-Ð-rX   c                óÈ   • UR                   (       aQ  U(       aC  UR                   H3  n[        U[        5      (       d    OUR                   (       d  M-  X0l          g   Xl        gg)z÷Maximize a widget, so it fills the screen.

Args:
    widget: Widget to maximize.
    container: If one of the widgets ancestors is a maximizeable widget, maximize that instead.

Returns:
    `True` if the widget was maximized, otherwise `False`.
TF)Úallow_maximizeÚ	ancestorsr?  rC   r�   )rT   râ   Ú	containerÚmaximize_widgets       rU   ÚmaximizeÚScreen.maximize£  sQ   € ð × × Þà'-×'7Ô'7�OÜ% o´v×>Ñ>ÙØ&×5×5Ñ5Ø)8œÙ#ñ (8ð $ŒNØØrX   c                óz   • SU l         U R                  b'  U R                  U R                  U R                  SSS9  gg)z-Restore any maximized widget to normal state.NFT)ÚanimateÚcenter)r�   r‚   Úcall_after_refreshÚscroll_to_widgetrS   s    rU   ÚminimizeÚScreen.minimize»  s>   € àˆŒØ�<‰<Ñ#Ø×#Ñ#Ø×%Ñ% t§|¡|¸UÈ4ð $ò ð $rX   c                ó*  • U R                   (       d  g/ nU R                   R                  5        H@  u  p#UR                  (       d  M  UR                  U5      =n c  M/  UR	                  U5        MB     SR                  U5      R                  S5      nU$ )zZGet text under selection.

Returns:
    Selected text, or `None` if no text was selected.
Nr{   Ú
)rŽ   ÚitemsÚis_attachedÚget_selectionÚextendÚjoinÚrstrip)rT   Úwidget_textrâ   Ú	selectionÚselected_text_in_widgetÚselected_texts         rU   Úget_selected_textÚScreen.get_selected_textÃ  s‰   € ð ��Øà!#ˆØ!%§¡×!6Ñ!6Ö!8ÑˆFð ×"×"Ñ"Ø06×0DÑ0DÀYÓ0OÐOÐ,Øóð ×"Ñ"Ð#:Ö;ñ "9ð Ÿ™ Ó,×3Ñ3°DÓ9ˆØÐrX   c                ót   • U R                  5       nUc
  [        5       eU R                  R                  U5        g)z Copy selected text to clipboard.N)rÑ  r$   r¸   Úcopy_to_clipboard)rT   rÎ  s     rU   Úaction_copy_textÚScreen.action_copy_textÙ  s0   € à×*Ñ*Ó,ˆ	ØÑä“,ÐØ�‰×"Ñ" 9Õ-rX   c                óV   • U R                   b  U R                  U R                   5        gg)z0Action to maximize the currently focused widget.N)r‚   r¼  rS   s    rU   Úaction_maximizeÚScreen.action_maximizeá  s!   € à�<‰<Ñ#Ø�M‰M˜$Ÿ,™,Õ'ð $rX   c                ó$   • U R                  5         g)z2Action to minimize the currently maximized widget.N)rÃ  rS   s    rU   Úaction_minimizeÚScreen.action_minimizeæ  s   € à�‰�rX   c                ó&   • U R                  S5        g)z Action to remove focus (if set).N)r¢  rS   s    rU   Úaction_blurÚScreen.action_blurê  s   € à�‰�tÕrX   c              ƒ  óº   #   •  U R                  U5      R                  5       n[        U[        5      (       a  U R	                  U5        gg! [
         a     gf = f7f)zwAn [action](/guide/actions) to focus the given widget.

Args:
    selector: Selector of widget to focus (first match).
N)rz  Úfirstr?  rC   r¢  r,   )rT   r§  rü   s      rU   Úaction_focusÚScreen.action_focusî  sT   é € ð	%Ø—:‘:˜hÓ'×-Ñ-Ó/ˆDô ˜$¤×'Ñ'Ø—‘˜tÕ$ð (øô ó 	Ùð	üs'   ‚A„A £(AÁ
AÁAÁAÁAc                óØ  • U=(       d    / nU R                   ULa  gU R                  nU(       d  U R                  S5        g UR                  U5      nSn[        X4S-   S USU -   5       H  nXr;  d  M
  Un  O   U R                  U5        g! [         aR    UR
                   H.  nXR;  d  M
  UR                  (       d  M  U R                  U5          O   U R                  S5         gf = f)z…Reset the focus when a widget is removed

Args:
    widget: A widget that is removed.
    avoiding: Optional list of nodes to avoid.
NrI   )r‚   r–  r¢  r  r¥  Úvisible_siblingsrh  Úreversed)rT   râ   ÚavoidingÚfocusable_widgetsÚwidget_indexÚsiblingÚchosenÚ	candidates           rU   Ú_reset_focusÚScreen._reset_focusü  sø   € ð —>˜rˆð �<‰<˜vÒ%Øð !×,Ñ,ÐÞ à�N‰N˜4Ô Øð	ð -×2Ñ2°6Ó:ˆLð !%ˆÜ!Ø¨QÑ.Ð0Ð1Ð4EÀmÀ|Ð4TÑTö
ˆIð Õ(Ø"�Ùñ
ð 	�‰�vÕøô/ ó 
	ð "×2Ô2�ØÕ*¨w×/@×/@Ñ/@Ø—N‘N 7Ô+Ùñ 3ð
 —‘˜tÔ$Ùð
	ús   ÁB ÂC)Â-C)Ã &C)Ã(C)c                ó°  • [        5       nUbM  [        UR                  5       H4  nUR                  (       d  M  UR	                  UR                  SS95          O   UbM  [        UR                  5       H4  nUR                  (       d  M  UR	                  UR                  SS95          O   U(       a%  U R                  R                  R                  USS9  gg)zyUpdate CSS for focus changes.

Args:
    focused: The widget that was focused.
    blurred: The widget that was blurred.
NTr™  ©r¿  )	r    ræ  ró   Ú_has_focus_withinÚupdater¡  r¸   Ú
stylesheetÚupdate_nodes)rT   r‚   ÚblurredrV   râ   s        rU   Ú_update_focus_stylesÚScreen._update_focus_styles1  s¾   € ô !$£ˆàÑÜ" 7×#>Ñ#>Ö?�Ø×+×+Ñ+Ø—N‘N 6×#7Ñ#7À$Ð#7Ð#GÔHÙñ @ð ÑÜ" 7×#>Ñ#>Ö?�Ø×+×+Ñ+Ø—N‘N 6×#7Ñ#7À$Ð#7Ð#GÔHÙñ @ö Ø�H‰H×Ñ×,Ñ,¨W¸dÐ,ÒCð rX   c                ó   ^ • UT R                   L a  gSnSnUcj  T R                   bA  T R                   R                  [        R                  " 5       5        T R                   nST l         T R                  R                  S5        OÐUR                  (       a¿  T R                   U:w  a¯  T R                   b:  T R                   R                  [        R                  " 5       5        T R                   nUT l         UR                  [        R                  " US95        UnU(       a  SU 4S jjnT R                  Xa5        T R                  R                  US5        T R                  XE5        T R                  T R                  5        g)ak  Focus (or un-focus) a widget. A focused widget will receive key events first.

Args:
    widget: Widget to focus, or None to un-focus.
    scroll_visible: Scroll widget into view.
    from_app_focus: True if this focus is due to the app itself having regained
        focus. False if the focus is being set because a widget within the app
        regained focus.
Nzfocus was removed)Úfrom_app_focusc                ót   >• TR                   U L a(  TR                  U 5      (       d  TR                  U SS9  ggg)z#Scroll to center (after a refresh).T)Úorigin_visibleN)r‚   Úcan_view_entireÚscroll_to_center)râ   rT   s    €rU   rý  Ú*Screen.set_focus.<locals>.scroll_to_centert  s;   ø€ àŸ<™<¨6Ò1¸$×:NÑ:NÈv×:VÑ:VØ ×1Ñ1°&ÈÐ1ÒNð ;WÐ1rX   zwas focused©râ   rC   rZ   rv   )r‚   Úpost_messager   ÚBlurÚlogÚdebugrh  ÚFocusÚ
call_laterrö  rÁ  rÖ   )rT   râ   Úscroll_visiblerù  r‚   rõ  rý  s   `      rU   r¢  ÚScreen.set_focusI  s  ø€ ð �T—\‘\Ò!àà!%ˆØ!%ˆà‰>à�|‰|Ñ'Ø—‘×)Ñ)¬&¯+ª+«-Ô8ØŸ,™,�Ø#�”Ø�H‰H�N‰NÐ.Õ/Ø××Ø�|‰|˜vÓ%Ø—<‘<Ñ+à—L‘L×-Ñ-¬f¯kªk«mÔ<Ø"Ÿl™l�Gà%�”à×#Ñ#¤F§L¢LÀÑ$OÔPØ �æ!÷Oð
 —O‘OÐ$4Ô=à—‘—‘˜v }Ô5à×!Ñ! 'Ô3Ø×Ñ × 5Ñ 5Õ6rX   c                óÖ   • U R                   R                  (       d  UR                  S[        SS95        U R                   R                  (       d  UR                  S[        SS95        gg)zµInsert Textual's own internal widgets.

Args:
    widgets: The list of widgets to be composed.

This method adds the tooltip, if required, and also adds the
container for `Toast`s.
r   ztextual-tooltip)r˜   ztextual-toastrackN)r¸   rÊ   r  rD   rÈ   rE   )rT   rV   s     rU   Ú_extend_composeÚScreen._extend_compose€  sK   € ð �x‰x×)×)Ø�N‰N˜1œgÐ):Ñ;Ô<Ø�x‰x×.×.Ø�N‰N˜1œiÐ+>Ñ?Õ@ð /rX   c                óL   • U R                   R                  X R                  SS9  g)z1Set up the tooltip-clearing signal when we mount.T)Ú	immediateN)r¨   Ú	subscribeÚ_maybe_clear_tooltip©rT   Úevents     rU   Ú	_on_mountÚScreen._on_mountŽ  s&   € à×)Ñ)×3Ñ3Ø×+Ñ+°tð 	4ò 	
rX   c              ƒ  ó˜  #   • UR                  5         U R                  R                  (       d�  U R                  (       ap  U R                  (       dD  U R
                  (       d3  U R                  (       d"  U R                  (       d  U R                  (       a  U R                  R                  5         g U R                  5       I S h  v•N   g  N7frt   )Úprevent_defaultr¸   Ú_batch_countr»   Ú_layout_requiredÚ_scroll_requiredÚ_repaint_requiredÚ_recompose_requiredr¡   rÂ   ÚresumeÚ_invoke_and_clear_callbacksr  s     rU   Ú_on_idleÚScreen._on_idle”  sx   é € à×ÑÔØ�x‰x×$×$¨¯¯à×%×%Ø×(×(Ø×)×)Ø×+×+Ø×&×&à×"Ñ"×)Ñ)Ô+Øà×.Ñ.Ó0×0Ó0ùs   ‚C C
ÃCÃC
c           	     óš  • U R                   nUR                  (       Gav  XR                  L aÇ  UR                  5       nUR                  SL=(       a    X!R                  :  nUR                  U U R                  R                  UR                  R                  U5      UR                  US95        X!l        U R                  R                  5         U R                  R                  R                  5         GOÇX R                   R                  ;   a†  U R                  R                  (       ak  UR                  R                  " U R                  R                  6   U R                  R                  R                  5         U R                  R                  5         GO&XR                  L aO  U R                  R                  UR                  S9nUR                  X5        U R                  R                  5         OÉX R                   R                  ;   a°  U R                  R                  (       a•  U R                   " U R                  R                  6   UR                  R                  " U R                  R                  6   SU l        U R                  R                  R                  5         U R                  R                  5         UR%                  U 5        g)zPerform a compositor refresh.N)Úscreen_stackÚclear)r  T)r¸   Ú	is_inliner¹   Ú_get_inline_heightÚ_previous_inline_heightÚ_displayrŸ   Úrender_inlinerÏ   Úwith_heightrº   r¡   r   Ú_dirty_regionsÚrefreshÚrender_updateÚ
_set_dirtyr  Ú_update_mouse_over)rT   r¸   Úinline_heightr   rò  s        rU   Ú_compositor_refreshÚScreen._compositor_refresh¤  s  € ð �h‰hˆà�=�=ˆ=Ø—z‘zÒ!Ø #× 6Ñ 6Ó 8�à×/Ñ/°tÐ;÷ DØ%×(CÑ(CÑCð ð —‘ØØ×$Ñ$×2Ñ2ØŸ™×,Ñ,¨]Ó;Ø%(×%<Ñ%<Ø#ð 3ð ôð /<Ô+Ø×#Ñ#×)Ñ)Ô+Ø× Ñ ×/Ñ/×5Ñ5Ö7àŸ™×4Ñ4Ó4¸×9IÑ9I×9X×9Xà—
‘
×"Ò" D×$4Ñ$4×$CÑ$CÑDØ× Ñ ×/Ñ/×5Ñ5Ô7Ø×#Ñ#×)Ñ)Ô+ùð —z‘zÒ!à×)Ñ)×7Ñ7Ø!$×!8Ñ!8ð 8ð �ð —‘˜TÔ*Ø×#Ñ#×)Ñ)Õ+àŸ™×4Ñ4Ó4¸×9IÑ9I×9X×9Xà—’ ×!1Ñ!1×!@Ñ!@ÑAØ—
‘
×"Ò" D×$4Ñ$4×$CÑ$CÑDØ)-�Ô&Ø× Ñ ×/Ñ/×5Ñ5Ô7Ø×#Ñ#×)Ñ)Ô+Ø×Ñ˜tÕ$rX   c                ó`  • U R                   R                  5         U R                  (       GaU  U R                  R                  (       Gd9  U R
                  (       a;  U R                  U R                  S9  SU l        U R                  R                  5         O U R                  (       a  U R                  SS9  SU l        U R                  (       a<  U R                  R                  5         U R                  R                  U 5        SU l
        U R                  (       a5  U R                  R                  U R                  5        U R                  5         U R                  (       a"  SU l        U R!                  U R"                  5        U R$                  (       a  U R!                  U R&                  5        gg)zCalled by the _update_timer.)ÚscrollFTN)rÂ   r¿   r»   r¸   r  r  Ú_refresh_layoutr  r¡   r   r  ÚaddrŸ   Úupdate_widgetsr-  r  ro   Ú	recomposer£   r  rS   s    rU   rÁ   ÚScreen._on_timer_updateÔ  s-  € à×Ñ× Ñ Ô"Ø�?�?ˆ? 4§8¡8×#8×#8Ð#8Ø×$×$Ø×$Ñ$¨D×,AÑ,AÐ$ÑBØ(-�Ô%Ø×#Ñ#×)Ñ)Õ+Ø×&×&Ø×$Ñ$¨DÐ$Ñ1Ø$)ˆDÔ!à×%×%Ø×#Ñ#×)Ñ)Ô+Ø×#Ñ#×'Ñ'¨Ô-Ø).�Ô&à×"×"Ø× Ñ ×/Ñ/°×0CÑ0CÔDØ×(Ñ(Ô*à×'×'Ø+0�Ô(Ø—‘˜tŸ~™~Ô.à�?�?Ø�N‰N˜4×;Ñ;Õ<ð rX   c              ƒ  ó  #   • U R                   (       aa  U R                   SS nU R                   R                  5         U H1  u  p#UR                  5          [        U5      I Sh  v•N   SSS5        M3     gg N! , (       d  f       MH  = f7f)zPIf there are scheduled callbacks to run, call them and clear
the callback queue.N)r£   r   Ú_contextr   )rT   Ú	callbacksrh   Úmessage_pumps       rU   r  Ú"Screen._invoke_and_clear_callbacksð  sm   é € ð �?�?ØŸ™©Ð*ˆIØ�O‰O×!Ñ!Ô#Û*3Ñ&�Ø!×*Ñ*Õ,Ü  Ó*×*Ð*÷ -Ñ,ò +4ð ñ
 +÷ -Ö,üs0   ‚AB
ÁA8Á#A6Á$A8Á(B
Á6A8Á8
B	ÂB
c                ó\   • U R                   R                  X45        U R                  5         g)zŸEnqueue a callback to be invoked after the screen is repainted.

Args:
    callback: A callback.
    sender: The sender (active message pump) of the callback.
N)r£   rÉ   Ú
check_idle)rT   rh   Úsenders      rU   Ú_invoke_laterÚScreen._invoke_laterú  s#   € ð 	�‰×Ñ Ð1Ô2Ø�‰ÕrX   c                ól   • U R                   R                  [        [        [              " XU5      5        g)z¤Add a result callback to the screen.

Args:
    requester: The object requesting the callback.
    callback: The callback.
    future: A Future to hold the result.
N)r¤   rÉ   rd   r   rK   rj   s       rU   Ú_push_result_callbackÚScreen._push_result_callback  s-   € ð 	×Ñ×%Ñ%Üœ8Ô$4Ñ5Ò6°yÈFÓSõ	
rX   c              ƒ  ó†  >#   • [         TU ]  5       I S h  v•N   U R                  R                  5         U R                  R                  5         U R
                  R                  5         U R                  R                  5         U R                  R                  U 5        U R                  R                  5         S U l        g  N©7frt   )rž   Ú_message_loop_exitrŸ   r   r¡   r'  r$  r¨   Úunsubscriber"  Ú_clearÚ_task©rT   r¯   s    €rU   rD  ÚScreen._message_loop_exit  s�   øé € Ü‰gÑ(Ó*×*Ð*Ø×Ñ×ÑÔ Ø×Ñ×!Ñ!Ô#Ø×Ñ×!Ñ!Ô#Ø×Ñ×%Ñ%Ô'Ø×)Ñ)×5Ñ5°dÔ;Ø�‰×ÑÔØˆ�
ñ 	+ùs   ƒC•B?–B*Cc                ó8   • U R                   R                  5         g)z1Remove the latest result callback from the stack.N)r¤   rE  rS   s    rU   Ú_pop_result_callbackÚScreen._pop_result_callback   s   € à×Ñ×"Ñ"Õ$rX   c                óê  • Uc  U R                   OUnU R                  R                  (       a)  UR                  U R                  R	                  5       5      nU(       d  gU R
                  R                  U R                  5        U R                  R                  5         [        R                  n U(       aª  U R                  (       d™  U R
                  R                  X5      nU(       au  U R
                  R                  nU HY  u  nu  nnn	n
nnnXd;   d  M  UR                  UR                   X«SS9(       d  M7  UR#                  U" UR                   X«5      5        M[     GOU R
                  R%                  X5      u  pÞnU R                  R'                  5         [        R(                  n[        R*                  nU H  nUR#                  U" 5       5        M     Xï-  nU R
                  R                  nU HT  u  nu  nnn	n
nnnUR                  UR                   X«5        UU;   d  M2  UR#                  U" UR                   X«5      5        MV     U H  nUR#                  U" 5       5        M      U R0                  (       aG  U R                  R2                  (       a  U R5                  U R6                  5        OU R7                  5         U R                  R8                  (       a&  U R:                  R=                  U R>                  5        gU R                  R#                  [        R@                  " 5       5        SU R                  l        g! [,         a%  nU R                  R/                  U5         SnAgSnAff = f)z>Refresh the layout (can change size and positions of widgets).NFr‹   T)!Ú
outer_sizer¸   r!  r&  r"  rŸ   r3  r¡   rÂ   r¿   r   ÚResizer¬   Úreflow_visiblerË   Ú_size_updatedrÏ   r   Úreflowr   ÚHideÚShowr+  Ú_handle_exceptionr»   r  r  r-  Ú
_dom_readyr¨   ræ   r¹   ÚReady)rT   rÏ   r0  ÚResizeEventÚexposed_widgetsrË   râ   r`  Ú_orderÚ_clipÚvirtual_sizeÚcontainer_sizeÚ_r‚  ÚshownÚresizedrS  rT  Úsend_resizeÚerrors                       rU   r1  ÚScreen._refresh_layout$  s¿  € à"&¡,ˆt�Š°DˆØ�8‰8××Ø×#Ñ# D§H¡H×$?Ñ$?Ó$AÓBˆDÞØØ×Ñ×'Ñ'¨×(;Ñ(;Ô<Ø×Ñ× Ñ Ô"Ü—m‘mˆð9	Þ˜d×2×2Ø"&×"2Ñ"2×"AÑ"AÀ$Ó"M�Þ"Ø!×-Ñ-×4Ñ4�Fó  ñ˜ñ !ØØØØ$Ø&ØØà!Õ4Ø%×3Ñ3Ø &§¡¨\ÐRWð  4÷  ð  ð !'× 3Ñ 3Ù$/Ø(.¯©°\ó%&ö!"ñ  ùð *.×)9Ñ)9×)@Ñ)@ÀÓ)LÑ&�˜wØ×$Ñ$×*Ñ*Ô,Ü—{‘{�Ü—{‘{�ã$�FØ×'Ñ'©«Ö/ñ %ð $™o�à×)Ñ)×0Ñ0�ó ñ�Fñ ØØØØ Ø"ØØà×(Ñ(¨¯©°lÔSØ Õ,Ø×+Ñ+Ù'¨¯©°\ÓRöñ ó $�FØ×'Ñ'©«Ö/ò $ð �?�?Ø�x‰x×$×$Ø—‘ × 8Ñ 8Õ9à×(Ñ(Ô*à�8‰8××Ø×-Ñ-×5Ñ5°d·k±kÕBà�H‰H×!Ñ!¤&§,¢,£.Ô1Ø"&ˆD�H‰HÕøô ó 	Ø�H‰H×&Ñ& uÔ-Üûð	ús3   Â.A#M ÄM Ä7&M ÅCM È$AM Í
M2ÍM-Í-M2c              ƒ  ó  #   • UR                  5         UR                  5         UR                  n[        U[        5      (       d   eX R
                  ;   a,  U R                  R                  U5        U R                  5         g g 7frt   )	Ústopr  râ   r?  rC   rŸ   r¡   r2  r<  )rT   Úmessagerâ   s      rU   Ú
_on_updateÚScreen._on_updatev  se   é € Ø�‰ŒØ×ÑÔ!Ø—‘ˆÜ˜&¤&×)Ñ)Ð)Ð)à×#Ñ#Ó#Ø×Ñ×#Ñ# FÔ+Ø�O‰OÕð $ùs   ‚B Bc              ƒ  ó  #   • UR                  5         UR                  5         SnUR                  nUR                  R                   HŽ  n[	        U[
        5      (       d    OxX@R                  ;  a  [        5       U R                  U'   X0R                  ;  a   U R                  U   R                  U5        SnUR                  R                  (       d    OUnM�     U(       a*  U R                  (       d  SU l        U R                  5         g g g 7f)NFT)re  r  râ   r¹  r?  rC   r¬   r    r2  rÐ   Úauto_dimensionsr  r<  )rT   rf  Úlayout_requiredrâ   Úancestors        rU   Ú
_on_layoutÚScreen._on_layout€  sÏ   é € Ø�‰ŒØ×ÑÔ!àˆØ!Ÿ.™.ˆØŸ™×0Ô0ˆHÜ˜h¬×/Ñ/ÙØ×3Ñ3Ó3Ü14³�×$Ñ$ XÑ.Ø×1Ñ1Ó1Ø×$Ñ$ XÑ.×2Ñ2°6Ô:Ø"&�Ø—?‘?×2×2ÙØŠFñ 1ö  4×#8×#8Ø$(ˆDÔ!Ø�O‰OÕð $9ˆ?ùs   ‚D	Dc              ƒ  óz   #   • UR                  5         UR                  5         SU l        U R                  5         g 7f)NT)re  r  r  r<  )rT   rf  s     rU   Ú_on_update_scrollÚScreen._on_update_scroll–  s,   é € Ø�‰ŒØ×ÑÔ!Ø $ˆÔØ�‰Õùs   ‚9;c           	     óT  • U R                   R                  nUb  UR                  (       a  U R                  XUR                  5      nO[        UR                  X5      5      nX0R                   R                  R                  -  nU R                   R                  nU R                   R                  nUb$  [        U[        UR                  X5      5      5      nUb$  [        U[        UR                  X5      5      5      n[        U R                  R                  R                  U5      nU$ )z™Get the inline height (number of lines to display when running inline mode).

Args:
    size: Size of the terminal

Returns:
    Height for inline mode.
)rÐ   ÚheightÚis_autoÚget_content_heightÚwidthÚintÚresolverÑ   Ú
min_heightÚ
max_heightÚmaxÚminr¸   rÏ   )rT   rÏ   Úheight_scalarr,  ry  rz  s         rU   r"  ÚScreen._get_inline_heightœ  sæ   € ð Ÿ™×*Ñ*ˆØÑ  M×$9×$9Ø ×3Ñ3°DÀÇ
Á
ÓK‰Mä × 5Ñ 5°dÓ AÓBˆMØŸ™×+Ñ+×2Ñ2Ñ2ˆØ—[‘[×+Ñ+ˆ
Ø—[‘[×+Ñ+ˆ
ØÑ!Ü ¬s°:×3EÑ3EÀdÓ3QÓ/RÓSˆMØÑ!Ü ¬s°:×3EÑ3EÀdÓ3QÓ/RÓSˆMÜ˜DŸH™HŸM™M×0Ñ0°-Ó@ˆØÐrX   c                ón   • U R                   (       a$  U R                  (       a  U R                  U5        ggg)z)Called by App when the screen is resized.N)r„   rÈ  r1  )rT   rÏ   s     rU   Ú_screen_resizedÚScreen._screen_resized´  s)   € à×× $×"2×"2Ø× Ñ  Õ&ð #3ÐrX   c                óô  • U R                   R                  (       a%  U R                  U R                   R                  5        U =R                  S-  sl        U R                   R	                  5         U R                   R
                  nU R                  5         U R                  (       aR  UR                  (       a  U R                  SS9  U R                  U:w  a  U R                  U5        U R                  5         gg)zScreen has resumed.rI   Frð  N)r¸   ÚSUSPENDED_SCREEN_CLASSrê   r„   Ú_refresh_notificationsrÏ   Ú_update_auto_focusrÈ  Úrefresh_stylesÚupdate_node_stylesÚ_sizer1  r(  )rT   r  rÏ   s      rU   Ú_on_screen_resumeÚScreen._on_screen_resume¹  s¬   € à�8‰8×*×*Ø×Ñ˜dŸh™h×=Ñ=Ô>à×Ò˜aÑÕà�‰×'Ñ'Ô)Ø�x‰x�}‰}ˆà×ÑÔ!à××à×#×#Ø×'Ñ'°Ð'Ñ6Ø�z‰z˜TÓ!Ø×$Ñ$ TÔ*Ø�L‰L�Nð rX   c              ƒ  ó^   >#   • [         TU ]  5       I S h  v•N   U R                  5         g  N7frt   )rž   Ú_composer…  rH  s    €rU   rŒ  ÚScreen._composeÍ  s(   øé € Ü‰gÑÓ × Ð Ø×ÑÕ!ñ 	!ùs   ƒ-•+–-c                óL  • U R                   R                  (       a‰  U R                  c  U R                   R                  OU R                  nU(       aR  U R                  cD  U R	                  U5       H.  nUR
                  (       d  M  SUl        U R                  U5          g   gggg)zUpdate auto focus.NT)r¸   Ú	app_focusrz   r‚   rz  rh  Ú	has_focusr¢  )rT   Ú
auto_focusrâ   s      rU   r…  ÚScreen._update_auto_focusÑ  s€   € à�8‰8××à'+§¡Ñ'>�—‘×#Ò#ÀDÇOÁOð ö ˜dŸl™lÑ2Ø"Ÿj™j¨Ö4�FØ×'×'Ñ'Ø+/˜Ô(ØŸ™ vÔ.Ùò	 5ð 3ˆzð	 rX   c                ó  • U R                   R                  (       a%  U R                  U R                   R                  5        U R                   R                  SS5        U R	                  5         U =R
                  S-  sl        g)zScreen has suspended.NrI   )r¸   rƒ  rë   Ú_set_mouse_overÚ_clear_tooltipr„   rS   s    rU   Ú_on_screen_suspendÚScreen._on_screen_suspendÞ  sV   € à�8‰8×*×*Ø�N‰N˜4Ÿ8™8×:Ñ:Ô;Ø�‰× Ñ   tÔ,Ø×ÑÔØ×Ò˜aÑÖrX   c              ƒ  óº  #   • UR                  5         U R                  UR                  5        U R                  R                   H  nUR                  UR                  5        M      U R
                  c  U R                  R
                  OU R
                  =(       d    / nU R                  c  U R                  R                  OU R                  =(       d    / nU(       d  U(       ap  UR                  u  pVX4-    VVs0 s H  u  pxUS_M
     n	nnU R                  XS5       H  nSX˜'   M	     U R                  Xd5       H  nSX˜'   M	     U R                  U	SS9  g g s  snnf 7f)NFTrð  )	re  r€  rÏ   r¸   rº   r€   r�   Ú_get_breakpoint_classesÚupdate_classes)
rT   r  r¹   Úhorizontal_breakpointsÚvertical_breakpointsrv  rs  r^  Ú
breakpointÚbreakpointss
             rU   Ú
_on_resizeÚScreen._on_resizeæ  sV  é € Ø�
‰
ŒØ×Ñ˜UŸZ™ZÔ(Ø—h‘h×2Ô2ˆFØ×"Ñ" 5§:¡:Ö.ñ 3ð
 ×*Ñ*Ñ2ð �H‰H×+Ò+à×,Ñ,÷"ð ð	 	ð ×(Ñ(Ñ0ð �H‰H×)Ò)à×*Ñ*÷ ð ð	 	ö "Ö%9Ø!ŸJ™J‰MˆEð '=Ò&Sôâ&S‘M�Að ˜EÒ!Ù&Sð ñ ð
 #×:Ñ:Øö�
ð +/�Ó'ñð
 #×:Ñ:Øö�
ð +/�Ó'ñð
 ×Ñ °UÐÒ;ð# &:ùóùs   ‚C7EÃ9EÄAEc                óP   • [        USS9 H  u  p4X:¼  d  M  U1s  $    [        5       $ )zÆGet breakpoint classes for given dimension.

Args:
    dimension: Size in cells.
    breakpoints: Associated breakpoints.

Returns:
    A set containing a breakpoint, or an empty set if none apply.
T)Úreverse)r„  r    )rT   Ú	dimensionrž  r�  Ú
class_names        rU   r™  ÚScreen._get_breakpoint_classes  s0   € ô '-¨[À$Ô&GÑ"ˆJØÕ&Ø"�|Ò#ñ 'Hô ‹uˆrX   c                ó¶   •  U R                  [        5      nUR                  (       a"  U R                  UL a  U R	                  U5        ggg! [
         a     gf = f)z"Update the content of the tooltip.N)Úget_child_by_typerD   Údisplayr¥   Ú_handle_tooltip_timerr,   )rT   râ   r  s      rU   Ú_update_tooltipÚScreen._update_tooltip  sW   € ð	3Ø×,Ñ,¬WÓ5ˆGð �� 4×#7Ñ#7¸6Ò#AØ×*Ñ*¨6Õ2ð $Bˆøô ó 	Ùð	ús   ‚A Á
AÁAc                óÐ   •  U R                  [        5      nUR                  (       a/  U R                  b  U R                  R                  5         SUl        gg! [         a     gf = f)z+Unconditionally clear any existing tooltip.NF)r§  rD   r,   r¨  r¦   re  )rT   r  s     rU   r•  ÚScreen._clear_tooltip&  s^   € ð	Ø×,Ñ,¬WÓ5ˆGð �?�?Ø×"Ñ"Ñ.Ø×#Ñ#×(Ñ(Ô*Ø#ˆG�Oð øô ó 	Ùð	ús   ‚A Á
A%Á$A%c                óÊ   • U R                   bF   U R                  " U R                  R                  6 u  p!X R                   La  U R	                  5         ggg! [
         a     gf = f)zxCheck if the widget under the mouse cursor still pertains to the tooltip.

If they differ, the tooltip will be removed.
N)r¥   rQ  r¸   Úmouse_positionr•  r0   )rT   r^  Úunder_mouses      rU   r  ÚScreen._maybe_clear_tooltip1  si   € ð ×ÑÑ+ð*Ø!%×!3Ò!3°T·X±X×5LÑ5LÐ!M‘�ð
 ×&:Ñ&:Ò:à×'Ñ'Õ)ð ;ð ,øô ó Ùðús   �%A Á
A"Á!A"c                óZ  •  U R                  [        5      nSnUR                   H5  n[        U[        5      (       d    OUR
                  c  M)  UR
                  n  O   Uc  SUl        gSUl        U R                  R                  Ul	        UR                  U5        g! [         a     gf = f)zpCalled by a timer from _handle_mouse_move to update the tooltip.

Args:
    widget: The widget under the mouse.
NFT)r§  rD   ró   r?  rC   r  r¨  r¸   r¯  Úabsolute_offsetrò  r,   )rT   râ   r  Útooltip_contentrü   s        rU   r©  ÚScreen._handle_tooltip_timerC  sœ   € ð	0Ø×,Ñ,¬WÓ5ˆGð 6:ˆOØ×2Ô2�Ü! $¬×/Ñ/ÙØ—<‘<Ó+Ø&*§l¡l�OÙñ 3ð Ñ&Ø"'�•à"&�”Ø*.¯(©(×*AÑ*A�Ô'Ø—‘˜Õ/øô! ó 	Ùð	ús   ‚B Â
B*Â)B*c                óB  • S n U R                   R                  (       a2  U R                   R                  nU R                  U5      R                  nO3U R	                  UR
                  UR                  5      u  u  p4nUb  US   nU R                   R                  X25        U R                  5         UR                  Ul
        X0L a  U R                  U5        O3U R                  XU5      nUR                  5         UR                  U5        U R                   R                  (       d«   U R!                  ["        5      nU R$                  U:w  d  UR&                  (       dl  X0l        U R(                  b  U R(                  R+                  5         U R-                  U R                   R.                  [1        U R2                  U5      SS9U l        O	SUl        O U R:                  R                  5         g ! [4         a     N'f = f! [6        R8                   a�    U R                   R                  S S 5        U R(                  b  U R(                  R+                  5         U R                   R                  (       d.   SU R!                  ["        5      l         Nº! [4         a      NÇf = f NÍf = f)Nr   ztooltip-timer)r—   F)r¸   Úmouse_capturedrs  r`  ra  rS  rT  r”  rA  ÚstyleÚhover_styler   Ú_translate_mouse_move_eventÚ_set_forwardedÚ_forward_eventrÊ   r§  rD   r¥   r¨  r¦   re  Ú	set_timerÚTOOLTIP_DELAYr   r©  r,   r   r0   r¹   )rT   r  Úhover_widgetrâ   r`  ÚhoverÚmouse_eventr  s           rU   Ú_handle_mouse_moveÚScreen._handle_mouse_move^  s"  € Ø&*ˆð-	0Ø�x‰x×&×&ØŸ™×0Ñ0�Ø×)Ñ)¨&Ó1×8Ñ8‘à*.×*CÑ*CÀEÇGÁGÈUÏWÉWÓ*UÑ'Ñ � %ØÑ$Ø#(¨¡8�Lð �H‰H×$Ñ$ VÔ:Ø×%Ñ%Ô'Ø!&§¡ˆFÔØŠ~Ø×!Ñ! %Õ(à"×>Ñ>¸uÈfÓU�Ø×*Ñ*Ô,Ø×%Ñ% kÔ2à—8‘8×-×-ð0Ø"×4Ñ4´WÓ=�Gð ×+Ñ+¨vÓ5¸W¿_¿_Ø/5Ô,Ø×.Ñ.Ñ:Ø ×/Ñ/×4Ñ4Ô6à.2¯n©nØ ŸH™H×2Ñ2Ü# D×$>Ñ$>ÀÓGØ!0ð /=ð /˜Õ+ð +0˜�ð# .ð$ 	�‰×(Ñ(Õ*øô !ó Ùðûô/ �‰ó 	Ø�H‰H×$Ñ$ T¨4Ô0Ø×"Ñ"Ñ.Ø×#Ñ#×(Ñ(Ô*Ø—8‘8×-×-ðØ>C�D×*Ñ*¬7Ó3Ö;øÜ ó Úðúñ .ð		úsC   „B G; Ä%G+ Ç+
G8Ç7G8Ç;A2JÉ.J
Ê

JÊJÊJÊJÊJc                óP  • [         R                  " UU R                  UR                  -
  U R                  UR
                  -
  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9$ )zm
Returns a mouse move event whose relative coordinates are translated to
the origin of the specified region.
)Úscreen_xÚscreen_yr¸  )r   Ú	MouseMoveÚ_xrS  Ú_yrT  Ú_delta_xÚ_delta_yÚbuttonÚshiftÚmetaÚctrlÚ	_screen_xÚ	_screen_yr¸  )r  râ   r`  s      rU   rº  Ú"Screen._translate_mouse_move_event�  sy   € ô ×ÒØØ�H‰H�v—x‘xÑØ�H‰H�v—x‘xÑØ�N‰NØ�N‰NØ�L‰LØ�K‰KØ�J‰JØ�J‰JØ—_‘_Ø—_‘_Ø—+‘+ñ
ð 	
rX   c                ó   ^ • US:”  d   S5       eSU 4S jjnT R                  5         UT R                  R                  [        R                  -  -  U-  n[        XAU5      nU" 5         T R                  S[        R                  -  U5      T l        g)z¿Start (or update) auto scrolling.

Args:
    widget: Container widget to scroll.
    direction: Direction: `+1` for up, `-1` for down.
    speed: The scroll speed as a factor of the maximum.
r   z%Speed should be positive and non-zeroc                óŽ   >• TR                   b7  U =R                  U-  sl        U R                  U l        TR                  5         gg)z‰Scroll a container a single line in the given direction.

Args:
    widget: Container widgets to scroll.
    direction: Lines to scroll.
N)r�   Úscroll_yÚscroll_target_yÚ_update_select)râ   r¦  rT   s     €rU   Ú_auto_scroll_yÚ1Screen._start_auto_scroll.<locals>._auto_scroll_y¶  s<   ø€ ð ×!Ñ!Ñ-à—’ 9Ñ,•Ø)/¯©�Ô&à×#Ñ#Õ%ð .rX   rI   N)râ   rC   r¦  ÚfloatrZ   rv   )Ú_stop_auto_scrollr¸   ÚSELECT_AUTO_SCROLL_SPEEDr   ÚMAX_FPSr   rÀ   r­   )rT   râ   r¦  ÚspeedrØ  Úlines_to_scrollÚscroll_callbacks   `      rU   Ú_start_auto_scrollÚScreen._start_auto_scroll§  s�   ø€ ð �q‹yÐAÐAÓAˆy÷	&ð 	×ÑÔ ð ˜Ÿ™×:Ñ:¼Y×=NÑ=NÑNÑOÐRWÑWð 	ô " .¸/ÓJˆáÔð *.×):Ñ):Ø”	×!Ñ!Ñ! ?ó*
ˆÕ&rX   c                ób   • U R                   b"  U R                   R                  5         SU l         gg)zStop any auto scrolling.N)r­   re  rS   s    rU   rÛ  ÚScreen._stop_auto_scrollÕ  s-   € à×)Ñ)Ñ5Ø×*Ñ*×/Ñ/Ô1Ø-1ˆDÕ*ð 6rX   c                óâ  • U R                   R                  (       d  gU R                  c  [        U5      S:  a  gUu  pE[	        [        U5      [        U5      5      nUR                   Hô  n[        U[        5      (       d    OÞUR                  (       d  M-  UR                  nU R                   R                  n	[        UU	S9u  p«Xj;   aD  UR                  S:”  a2  X•U
R                  -
  -
  U	-  nU(       a  U R                  USU5          gM¢  M¤  Xk;   d  M«  UR                  UR                   :  d  MÇ  X[R                  -
  U	-  nU(       d  Má  U R                  USU5          g   U R#                  5         g)a   Check auto-scrolling when selecting.

This will start, update, or stop a timer used to move the scroll position.

Args:
    select_widget: The widget under the mouise pointer.
    mouse_coordinate: The screen-space mouse pointer.
    delta_y: Change in mouse y since previous mouse move.
NrI   )Úauto_scroll_linesr   rœ   )r¸   ÚENABLE_SELECT_AUTO_SCROLLr­   Úabsr1   rw  ró   r?  rC   Úallow_vertical_scrollÚcontent_regionÚSELECT_AUTO_SCROLL_LINESr   rÕ  rT  rá  Úmax_scroll_yrÛ  )rT   Úselect_widgetÚmouse_coordinateÚdelta_yÚmouse_xÚmouse_yÚmouse_offsetrl  Úancestor_regionÚscroll_linesÚ	up_regionÚdown_regionrÞ  s                rU   Ú_check_auto_scrollÚScreen._check_auto_scrollÛ  sJ  € ð  �x‰x×1×1àà×)Ñ)Ñ1´c¸'³lÀQÓ6Fàà+ÑˆÜœc '›l¬C°«LÓ9ˆð &×9Ô9ˆHÜ˜h¬×/Ñ/ÙØ×1×1áØ&×5Ñ5ˆOØŸ8™8×<Ñ<ˆLÜ%<ØØ".ñ&Ñ"ˆIð Ó(à×$Ñ$ qÓ(ð *°y·{±{Ñ-BÑCÀ|ÑS�EÞØ×/Ñ/°¸"¸eÔDÙñ ñ	 )ð Õ,à×$Ñ$ x×'<Ñ'<Õ<à$§}¡}Ñ4¸ÑD�Eß�uØ×/Ñ/°¸"¸eÔDÙñ9 :ð< 	×ÑÕ rX   c                ó:   • U R                  U R                  5        g)zGUpdate select for a screen-space offset (typically the mouse position).N)Ú_watch__select_stater�   rS   s    rU   r×  ÚScreen._update_select  s   € à×!Ñ! $×"4Ñ"4Õ5rX   c                ó˜  • UR                   (       a  g UR                  5         [        U[        R                  [        R
                  45      (       a  U R                  U5        GO+[        U[        R                  5      (       Ga5  U R                  UR                  UR                  5      Ul        U R                  U5        U R                  (       aæ  U R                  bÙ  U R                  UR                   UR"                  5      u  p#Ubf  Ub(  UnUn[        U[$        5      (       a  UOUR&                  nOS nUnS nU R                  R)                  UR*                  [-        XdU5      5      U l        Ub5  U R/                  UUR0                  UR2                  4UR4                  5        GOèU R7                  5         GOÖ[        U[        R8                  5      (       Ga¥  [        U[        R:                  5      (       a¬  U R<                  bk  U R<                  UR*                  :X  aQ  U R                  UR                   UR"                  5      u  p#Ub  UR?                  S5      (       d  U RA                  5         S U l        SU l        U R                  [        RB                  " 5       5        GO\[        U[        RD                  5      (       Ga<  U RF                  RH                  (       Gd   UR*                  U l        U R                  UR                   UR"                  5      u  p#UbÝ  URJ                  (       aÌ  U RL                  RJ                  (       a±  U RF                  RN                  (       a–  Ub(  UnUn[        U[$        5      (       a  UOUR&                  nOS nUnS n[Q        UR*                  [S        UUR*                  URT                  RV                  -
  URT                  RV                  URX                  UUS9S9U l        OS U l         U RF                  RH                  (       a2  U RF                  RH                  nU R[                  U5      RT                  nO(U R]                  UR                   UR"                  5      u  px[        U[        RD                  5      (       aN  U R_                  UR                   UR"                  5      n	U	b%  U	Ra                  5       (       a  U Rc                  U	SS9  U R                  UR                  UR                  5      Ul        URd                  (       a  g XpL a"  UR                  5         U R                  U5        OIURg                  URi                  UR                   * UR"                  * 5      5        OU R                  U5        U Ro                  5         g ! [j        Rl                   a    U Rc                  S 5         N8f = f)Nrf  F)Úcontent_widgetÚcontent_offset)Ústart)r  )8Úis_forwardedr»  r?  r   ÚEnterÚLeaver   rÇ  rm  rÅ  rÆ  r¸  rÂ  r>  r�   rp  rS  rT  rx   ÚparentÚ
update_endÚscreen_offsetr<   r÷  Úpointer_screen_xÚpointer_screen_yrï  rÛ  Ú
MouseEventÚMouseUpr�   rg  rv  ÚTextSelectedÚ	MouseDownr¸   r·  r0  r¹   r/  r?   r>   r`  ÚoffsetÚscroll_offsetrs  rQ  rj  Úfocus_on_clickr¢  rð   r¼  Ú_apply_offsetr   r0   rA  )
rT   r  rí  Úselect_offsetrý  rþ  rº  râ   r`  Úfocusable_widgets
             rU   r¼  ÚScreen._forward_event  s–  € Ø××ØØ×ÑÔä�eœfŸl™l¬F¯L©LÐ9×:Ñ:Ø×Ñ˜eÖ$ä˜œv×/Ñ/×0Ò0Ø×+Ñ+¨E¯N©N¸E¿N¹NÓKˆEŒKØ×#Ñ# EÔ*à�� 4×#5Ñ#5Ñ#Aà/3×/LÑ/LØ—G‘G˜UŸW™Wó0Ñ,�ð !Ñ,Ø$Ñ0Ø)6˜Ø)6˜ô  *¨.¼&×AÑAñ +à!/×!6Ñ!6ñ "ð *.˜Ø$1˜	Ø)-˜à)-×);Ñ);×)FÑ)FØ×+Ñ+Ü! )¸^ÓLó*�DÔ&ð
 !Ñ,Ø×+Ñ+Ø%Ø×/Ñ/°×1GÑ1GÐHØŸ™öð ×*Ñ*Ô,ùä˜œv×0Ñ0×1Ò1Ü˜%¤§¡×0Ñ0à×+Ñ+Ñ7Ø×/Ñ/°5×3FÑ3FÓFð 48×3PÑ3PØŸ™ §¡ó4Ñ0�Mð %Ñ,°M×4KÑ4KØ)÷5ñ 5ð ×,Ñ,Ô.à*.�Ô'Ø"'�”Ø×!Ñ!¤&×"5Ò"5Ó"7Ö8ä˜E¤6×#3Ñ#3×4Ò4¸T¿X¹X×=T×=TÐ=TØ*/×*=Ñ*=�Ô'Ø/3×/LÑ/LØ—G‘G˜UŸW™Wó0Ñ,�ð
 "Ñ-Ø%×2×2ØŸ™×0×0ØŸ™×-×-à$Ñ0Ø)6˜Ø)6˜ô  *¨.¼&×AÑAñ +à!/×!6Ñ!6ñ "ð *.˜Ø$1˜	Ø)-˜ä)4Ø×+Ñ+Ü)Ø%Ø!×/Ñ/°)×2BÑ2B×2IÑ2IÑIØ%×,Ñ,×3Ñ3Ø%×3Ñ3Ø+9Ø+9ññ
*�DÕ&ð *.�DÔ&ðUØ—8‘8×*×*Ø!ŸX™X×4Ñ4�FØ!×-Ñ-¨fÓ5×<Ñ<‘Fà%)×%7Ñ%7¸¿¹ÀÇÁÓ%I‘N�Fô ˜e¤V×%5Ñ%5×6Ñ6Ø'+×'CÑ'CÀEÇGÁGÈUÏWÉWÓ'UÐ$à(Ñ4Ø,×;Ñ;×=Ñ=àŸ™Ð'7È˜ÑNØ"×/Ñ/°·±ÀÇÁÓO�”Ø—>—>ØØ’>Ø×(Ñ(Ô*Ø×%Ñ% eÕ,à×)Ñ)¨%×*=Ñ*=¸v¿x¹x¸iÈ&Ï(É(ÈÓ*SÕTð ×Ñ˜eÔ$Ø×!Ñ!Õ#øô+ —?‘?ó %Ø—‘˜tÖ$ð%ús   ÐA5V! Ö!%W	×W	c                ó$   • U R                  5         g rt   )rv  rS   s    rU   Ú_key_escapeÚScreen._key_escape¡  s   € Ø×ÑÕrX   c                ó4   • U(       d  U R                  5         g g rt   )rÛ  )rT   Ú	selectings     rU   Ú_watch__selectingÚScreen._watch__selecting¤  s   € ÞØ×"Ñ"Õ$ð rX   c                óÒ   • [        [        UUX415      5      nSn UR                  U5      nSn UR                  U5      S-   nXVU nU$ ! [         a     N)f = f! [         a     N"f = f)a  Get widgets between two widgets in select order.

Args:
    selection_bounds: A shape defining the selection bounds.
    container: A parent widgets.
    start_widget: First widget.
    end_widget: Second widget.

Returns:
    Widgets between start and end, in select sort order.
NrI   )rõ   rB   r  r¥  )	ÚclsÚselection_boundsrº  Ústart_widgetÚ
end_widgetrV   Úindex1Úindex2Úresultss	            rU   Ú_collect_select_widgetsÚScreen._collect_select_widgets¨  s“   € ô( Ü#ØØ ØÐ*óó
ˆð "ˆð	Ø—]‘] <Ó0ˆFð "ˆð	Ø—]‘] :Ó.°Ñ2ˆFð  Ð(ˆØˆøô ó 	Ùð	ûô ó 	Ùð	ús"   ›A	 ¯A Á	
AÁAÁ
A&Á%A&c                óö  • Uc  SU l         U R                  5         gSU l         UR                  c  gUR                  (       d  SU l        gUR
                  (       a]  UR                  u  p#UR                  R                  c   eUR                  R                  [        R                  " UUS-   5      0U l        g[        nUR                  5        Vs0 s H  oUU_M     nnUR                  U5        X`l        gs  snf )z^Respond to user-initiated selection change.

Args:
    select_state: Current selection state.
NFT)rI   r   )r>  r(  ÚendÚis_attached_to_domr�   Úis_single_content_widgetÚcontent_offsetsrÿ  rý  r=   Úfrom_offsetsrŽ   r;   Ú_walk_selected_widgetsÚ_apply_content_selections)rT   Úselect_stateÚstart_indexÚ
end_offsetr{  râ   rŽ   s          rU   rú  ÚScreen._watch__select_stateÓ  sù   € ð Ñà#ˆDŒOØ�L‰LŒNØà"ˆDŒOà×ÑÑ#àà×.×.à!%ˆDÔØð ×0×0Ø&2×&BÑ&BÑ#ˆKØ×%Ñ%×4Ñ4Ñ@Ð@Ð@à×"Ñ"×1Ñ1´9×3IÒ3IØØ Ñ'ó4ðˆDŒOð ô  ˆ
à-9×-PÑ-PÔ-Ró
Ú-R 6�JÒÑ-Rð 	ð 
ð 	×.Ñ.¨zÔ:ð %�ùò
s   ÃC6c                óÂ   ^ • SnT R                   (       a  T R                   S   nU" U5        T R                  R                  5       nSU 4S jjnUR                  U5        U$ )aó  Dismiss the screen, optionally with a result.

Any callback provided in [push_screen][textual.app.App.push_screen] will be invoked with the supplied result.

!!! warning

    Textual will raise a [`ScreenError`][textual.app.ScreenError] if you await the return value from a
    message handler on the Screen being dismissed. If you want to dismiss the current screen, you can
    call `self.dismiss()` _without_ awaiting.

Args:
    result: The optional result to be passed to the result callback.

Trœ   c                 óV   >• Sn [         R                  " 5       TL a  SSKJn  U" S5      eg)z#Called by the AwaitComplete object.Tr   ©ÚScreenErrorz_Can't await screen.dismiss() from the screen's message handler; try removing the await keyword.N)r   rà   r·   r3  )Ú_rich_traceback_omitr3  rT   s     €rU   Ú	pre_awaitÚ!Screen.dismiss.<locals>.pre_await  s2   ø€ à#'Ð Ü"×&Ò&Ó(¨DÒ0Ý3á!Øuóð ð 1rX   ©rZ   rv   )r¤   r¸   Ú
pop_screenÚset_pre_await_callback)rT   rq   r4  rh   Ú	await_popr5  s   `     rU   ÚdismissÚScreen.dismiss   sY   ø€ ð  $ÐØ×!×!Ø×-Ñ-¨bÑ1ˆHÙ�VÔØ—H‘H×'Ñ'Ó)ˆ	÷	ð 	×(Ñ(¨Ô3àÐrX   c                óv   • SSK Jn   U R                  R                  U 5        g! U a    U" SU  S35      Sef = f)z‡Pop any screens on top of this one, until this screen is active.

Raises:
    ScreenError: If this screen is not in the current mode.

r   r2  zCan't make z* active as it is not in the current stack.N)r·   r3  r¸   Ú_pop_to_screen)rT   r3  s     rU   Úpop_until_activeÚScreen.pop_until_active#  sJ   € õ 	,ð	Ø�H‰H×#Ñ# DÕ)øØó 	áØ˜d˜VÐ#MÐNóàðð	ús   ˆ$ ¤8c              ƒ  ób   #   • U R                  5       I Sh  v•N   U R                  U5        g N7f)z©A wrapper around [`dismiss`][textual.screen.Screen.dismiss] that can be called as an action.

Args:
    result: The optional result to be passed to the result callback.
N)Ú_flush_next_callbacksr;  rp   s     rU   Úaction_dismissÚScreen.action_dismiss4  s*   é € ð ×(Ñ(Ó*×*Ð*Ø�‰�VÕñ 	+ùs   ‚/–-—/c                ó¼   >• XR                   R                  ;  a  gUR                  R                  S:X  a  UR                  U R                  ;   $ [
        TU ]  U5      $ )a=  Check if a given widget is fully within the current screen.

Note: This doesn't necessarily equate to a widget being visible.
There are other reasons why a widget may not be visible.

Args:
    widget: A widget.

Returns:
    `True` if the entire widget is in view, `False` if it is partially visible or not in view.
Fr¹   )rŸ   Úvisible_widgetsrÐ   Úoverlayr`  rž   rü  ©rT   râ   r¯   s     €rU   rü  ÚScreen.can_view_entire=  sO   ø€ ð ×)Ñ)×9Ñ9Ó9Øà�=‰=× Ñ  HÓ,à—=‘= D§K¡KÑ/Ð/ä‰wÑ& vÓ.Ð.rX   c                ó¼   >• XR                   R                  ;  a  gUR                  R                  S:X  a  UR                  U R                  ;   $ [
        TU ]  U5      $ )zÖCheck if a given widget is at least partially within the current view.

Args:
    widget: A widget.

Returns:
    `True` if the any part of the widget is in view, `False` if it is completely outside of the screen.
Fr¹   )rŸ   rF  rÐ   rG  r`  rž   Úcan_view_partialrH  s     €rU   rK  ÚScreen.can_view_partialR  sO   ø€ ð ×)Ñ)×9Ñ9Ó9Øà�=‰=× Ñ  HÓ,à—=‘= D§K¡KÑ/Ð/ä‰wÑ'¨Ó/Ð/rX   c                ó"   • Uc  S$ [        U5      $ )z'Ensure the title is a string or `None`.N©r   )rT   r‡   s     rU   Úvalidate_titleÚScreen.validate_titled  s   € à‘}ˆtÐ4¬#¨e«*Ð4rX   c                ó"   • Uc  S$ [        U5      $ )z+Ensure the sub-title is a string or `None`.NrN  )rT   r†   s     rU   Úvalidate_sub_titleÚScreen.validate_sub_titleh  s   € à Ñ(ˆtÐ<¬c°)«nÐ<rX   )Ú__update_timerr­   r£   rŸ   r«   r¡   r  r¬   r�   r�   r’   r  r  r¤   r  r�   r>  rG  r¦   r¥   r©   r§   r‚   r�   r¨   rŽ   r†   rª   r‡   ©NNN©r—   ú
str | Noner˜   rW  r™   rW  rZ   rv   )rZ   r  )rZ   rA   )rZ   ztuple[str, ...])rZ   r4   )rá   údict[Widget, Selection]rŽ   rX  r7  )rì   úWidget | Noner�   rY  rZ   rv   )rZ   z!list[tuple[DOMNode, BindingsMap]])rZ   zdict[str, ActiveBinding])F)rÏ   r4   r%  r  rZ   r6   )rZ   rC   )r8  r.   rZ   rv   )rZ   r   )râ   rC   rZ   r1   )rS  rw  rT  rw  rZ   rO   )rS  rw  rT  rw  rZ   rM   )rS  rw  rT  rw  rZ   zIterable[tuple[Widget, Region]])rS  rw  rT  rw  rZ   rY  )rS  rw  rT  rw  rZ   r   )rS  rw  rT  rw  rZ   z#tuple[Widget | None, Offset | None])râ   rC   rZ   r   rÿ  )rZ   r!  )r   ry  )r¦  rw  r§  ústr | type[QueryType]rZ   rY  )ry  )r§  rZ  rZ   rY  )T)râ   rC   rº  r  rZ   r  )rZ   rW  )r§  r   rZ   rv   rt   )râ   rC   rç  zlist[Widget] | NonerZ   rv   )NN)r‚   rY  rõ  rY  rZ   rv   )TF)râ   rY  r  r  rù  r  rZ   rv   )rV   r!  rZ   rv   )r  zevents.MountrZ   rv   )r  zevents.IdlerZ   rv   )rh   r#   r=  rH   rZ   rv   )rg   rH   rh   ru   ri   z.asyncio.Future[ScreenResultType | None] | NonerZ   rv   )NF)rÏ   zSize | Noner0  r  rZ   rv   )rf  zmessages.UpdaterZ   rv   )rf  zmessages.LayoutrZ   rv   )rf  zmessages.UpdateScrollrZ   rv   )rÏ   r4   rZ   rw  )rÏ   r4   rZ   rv   )r  zevents.ScreenResumerZ   rv   )r  zevents.ResizerZ   rv   )r£  rw  rž  zlist[tuple[int, str]]rZ   zset[str])r  úevents.MouseMoverZ   rv   )r  r[  râ   rC   r`  r2   rZ   r[  )g      ð?)râ   rC   r¦  zLiteral[+1, -1]rÞ  rÚ  rZ   rv   )rí  rC   rî  ztuple[float, float]rï  rÚ  rZ   rv   )r  zevents.EventrZ   rv   )r  r  rZ   rv   )
r  r3   rº  rC   r  rC   r  rC   rZ   r!  )r,  zSelectState | NonerZ   rv   )rq   úScreenResultType | NonerZ   r%   )rq   r\  rZ   rv   )râ   rC   rZ   r  )r‡   r   rZ   rW  )r†   r   rZ   rW  )�r[   r\   r]   r^   r_   rz   r`   r|   r}   ÚCOMPONENT_CLASSESÚDEFAULT_CSSr~   r   r€   r�   r7   r‚   r„   r†   r‡   r    rˆ   r‰   rŠ   r�   r8   ÚdictrŽ   r>  r�   r�   r’   r'   ÚBINDINGSrk   ra   r³   r»   rÂ   rË   rÏ   r×   rÛ   rã   rÖ   rí   r  r	  r  r   r,  r0  r3  r9  rA  rI  rM  rQ  ra  rY  rj  rm  rp  rs  rv  r}  r–  r­  r²  rµ  r¼  rÃ  rÑ  rÕ  rØ  rÛ  rÞ  râ  rí  rö  r¢  r	  r  r  r-  rÁ   r  r>  rA  rD  rK  r1  rg  rm  rp  r"  r€  r‰  rŒ  r…  r–  rŸ  r™  rª  r•  r  r©  rÂ  Ústaticmethodrº  rá  rÛ  r÷  r×  r¼  r  r  Úclassmethodr"  rú  r;  r?  rC  rü  rK  rO  rR  rb   Ú__classcell__©r¯   s   @rU   rx   rx   “   sZ  ø‡ á%à'+€JÐ$Ó+ðð €CˆÓðð
 .2€HÐ*Ó1ðð -Ð-Ðð €KðD #'€EÐÓ&ðð '+€IÐ#Ó*ðð FJÐÐBÓIð DØCGÐÐ@ÓGØ}á'/°£~€GÐ$Ó5ðrá#+¨A°uÑ#=€M�=Ó=Ø=Ù&.¨t¸UÑ&C€IÐ#ÓCØVÙ"*¨4¸Ñ"?€EÐÓ?ØJáMPËU€HÐJÓRðð 59ÐÐ1Ó8ðcð 15ÐÐ-Ó4ð ]á)1°$¸tÑ)D€IÐ&ÓDØLá/2°4«y€JÐ,Ó8Ø-á�U“€JØ3á2:¸4³.€MÐ/Ó@Ø-á-0°«YÐÐ*Ó6ØFá(+¨I«€NÐ%Ó6Ø*ñ 	�Ð'¨¸EÑBÙ�Ð1Ð3CÈ%ÑPÙÐ Ð"4Ð6JÐQVÑWð€Hð  ØØ"ð	:2àð:2ð ð:2ð ð	:2ð
 
÷:2ð :2ðx óó ðð óó ðð ó#ó ð#ð ö*ó ð*ð ó9ó ð9ò ò ðCà/ðCð ,ôCô3ð	.Ø$1ð	.Ø>Kð	.à	ô	.ð ó&"ó ð&"ðP óó ðð ó(ó ð(öT6ðp óó ðð ó!ó ð!ô	ô3ô,ô"!ô,	3ô4ôPô6
5ôô6
3ð?Øð?Øð?à	,ô?ô4ô"ô


ð ó6ó ð6ðr EHðCØðCØ,AðCà	õCöJ-ö".ö"ô0ôô,.ô(ô
ôô%ð ?Cð3Øð3Ø(;ð3à	õ3ðl GKðDØ$ðDØ6CðDà	õDð6  $Ø$ð	57àð57ð ð57ð ð	57ð
 
õ57ônAô
ô1ô .%ô`=ô8+ô	ð BFð	
àð
ð Dð
ð ?ð	
ð
 
õ
÷"ô%öP'ôdôô,ôô0'ô
÷("ôô ô#<ðJØðØ+@ðà	ôô"3ô	$ô*ô$0ô60+ðd ð
Øð
Ø)/ð
Ø9?ð
à	ó
ó ð
ð4 ð	,
àð,
ð #ð,
ð ð	,
ð
 
õ,
ô\2ð;!àð;!ð .ð;!ð ð	;!ð
 
ô;!ôz6ôC$ôJô%ð ð(àð(ð ð(ð ð	(ð
 ð(ð 
ó(ó ð(ôT+%öZ!ôFö"÷/÷*0ô$5÷=ò =rX   rx   c                  óL   ^ • \ rS rSrSrSr   S       SU 4S jjjrSrU =r$ )ÚModalScreenim  z�A screen with bindings that take precedence over the App's key bindings.

The default styling of a modal screen will dim the screen underneath.
zÉ
    ModalScreen {
        layout: vertical;
        overflow-y: auto;
        background: $background 60%;
        &:ansi {
            background: transparent;                   
        }
    }
    c                ó0   >• [         TU ]  XUS9  SU l        g )Nr–   T)rž   rk   r�   )rT   r—   r˜   r™   r¯   s       €rU   rk   ÚModalScreen.__init__  s   ø€ ô 	‰Ñ˜d°7ÐÑ;Øˆ�rX   r²   rU  rV  )	r[   r\   r]   r^   r_   r^  rk   rb   rc  rd  s   @rU   rf  rf  m  sJ   ø† ñð
	€Kð  ØØ"ð	àðð ðð ð	ð
 
÷ö rX   rf  c                  ó   • \ rS rSrSrSrg)ÚSystemModalScreeni‰  a  A variant of `ModalScreen` for internal use.

This version of `ModalScreen` allows us to build system-level screens;
the type being used to indicate that the screen should be isolated from
the main application.

Note:
    This screen is set to *not* inherit CSS.
rY   N)r[   r\   r]   r^   r_   rb   rY   rX   rU   rj  rj  ‰  s   † ôrX   rj  F)Úinherit_css)|r_   Ú
__future__r   ÚasyncioÚ	functoolsr   Úoperatorr   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   Ú	rich.reprÚrichÚrich.consoler   Ú
rich.styler   Útextualr   r   r   r   Útextual._arranger   Útextual._auto_scrollr   Útextual._callbackr   Útextual._compositorr   r   Útextual._contextr   r   Útextual._pathr    r!   r"   Útextual._typesr#   Útextual.actionsr$   Útextual.await_completer%   Útextual.bindingr&   r'   r(   Útextual.css.matchr*   Útextual.css.parser+   Útextual.css.queryr,   r-   Útextual.css.stylesr.   Útextual.domr/   Útextual.errorsr0   Útextual.geometryr1   r2   r3   r4   Útextual.keysr5   Útextual.layoutr6   Útextual.reactiver7   r8   Ú%textual.renderables.background_screenr9   Útextual.renderables.blankr:   Útextual.selectionr;   r<   r=   r>   r?   Útextual.signalr@   Útextual.timerrA   Útextual.walkrB   Útextual.widgetrC   Útextual.widgetsrD   Útextual.widgets._toastrE   Útyping_extensionsrF   Útextual.commandrG   Útextual.message_pumprH   rÝ  rJ   r`   rK   ÚScreenResultCallbackTyperM   ÚreprÚautord   rx   rf  rj  rY   rX   rU   Ú<module>r™     sÁ  ðòõ #ã Ý Ý ÷÷ ÷ õ ó  Ý 'Ý ç 7Ó 7Ý $Ý 8Ý $ß 7ß F÷ñ õ
 (Ý &Ý 0ß ?Ñ ?Ý #Ý -ß 2Ý +Ý Ý #ß 8Ó 8Ý )Ý ,ß *Ý BÝ +ß XÕ XÝ !Ý Ý 0Ý !Ý #Ý ,æÝ'å(õ 1ð   )×"3Ñ"3Ñ3€ˆ|Ó 3áÐ-Ó.Ð Ø "à ØˆhÐ'Ñ(Ð)¨4Ð/Ñ0ØˆhÐ'Ñ(Ð)¨9°T©?Ð:Ñ;ð=ñÐ ð 1ô
�:ô 
ð" ‡�‡�ô$�WÐ-Ñ.ó $ó ð$ðN ‡�‡�ôV=ˆWÐ%Ñ&¨ó V=ó ðV=ðr> ‡�‡�ô�&Ð)Ñ*ó ó ðô6	˜Ð$4Ñ5À5ó 	rX   