
    Cj>]                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJrJ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J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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:  Sr; " S S\Rx                  5      r= " S S\Rx                  5      r> " S S\Rx                  5      r? " S S\Rx                  5      r@ " S S\Rx                  5      rA " S S\Rx                  5      rB " S S\Rx                  5      rC " S S \Rx                  5      rD " S! S"\Rx                  5      rE " S# S$\Rx                  5      rF " S% S&\Rx                  5      rG " S' S(\Rx                  5      rH " S) S*\Rx                  5      rI " S+ S,\Rx                  5      rJ " S- S.\5      rK\LS/:X  a)  S S0KJMrM   " S1 S2\M5      rN\N" 5       rO\OR                  5         gg)3    )annotationsN)sin)Syntax)Table)	Traceback)
containerseventslazyon)ComposeResult)Binding)	COUNTRIES	DUNE_BIOSMOVIESMOVIES_TREE)
PageScreen)reactivevar)SuggestFromList)BUILTIN_THEMES)ButtonCheckbox	DataTableDigitsFooterInputLabelListItemListViewLogMarkdownMaskedInput
OptionListRadioButtonRadioSetRichLogSelect	SparklineStaticSwitchTabbedContentTextAreaTreeux   # Widgets

The Textual library includes a large number of builtin widgets.

The following list is *not* exhaustive…
 
c                  2    \ rS rSrSrSrSrSrSrS
S jr	Sr
g	)Buttons7   zButtons demo.Tcolumnz^
    Buttons {
        ItemGrid { margin-bottom: 1;}
        Button { width: 1fr; }
    }
    z## Buttons

A simple button, with a number of semantic styles.
May be rendered unclickable by setting `disabled=True`.

Press `return` to active a button when focused (or click it).

    c              #    #    [        U R                  5      v   [        R                  " SSS9   [	        SSSS9v   [	        SS	S
SS9v   [	        SSSSS9v   [	        SSSSS9v   S S S 5        [        R                  " SSS9   [	        SSS9v   [	        SS	SS9v   [	        SSSS9v   [	        SSSS9v   S S S 5        g ! , (       d  f       N`= f! , (       d  f       g = f7f)N   T)min_column_widthregularDefaultzThe default button styleznotify('you pressed Default'))tooltipactionPrimaryprimaryzBThe primary button style - carry out the core action of the dialogznotify('you pressed Primary'))variantr7   r8   WarningwarningzIThe warning button style - warn the user that this isn't a typical buttonznotify('you pressed Warning')Errorerrorz9The error button style - clicking is a destructive actionznotify('you pressed Error'))disabled)r;   r@   )r!   
BUTTONS_MDr   ItemGridr   selfs    f/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/demo/widgets.pycomposeButtons.composeM   s     t''  "dC26 
 !\6	  !c6	  S4	 % D0   "dCT22IEEIEE'DAA	 DC1 DC0 DCs4   -C#8C'C#4C8	C#
CC#
C C# Nreturnr   )__name__
__module____qualname____firstlineno____doc__ALLOW_MAXIMIZEDEFAULT_CLASSESDEFAULT_CSSrA   rF   __static_attributes__rH       rE   r/   r/   7   s#    NOKJBrT   r/   c                  2    \ rS rSrSrSrSrSrSrS
S jr	Sr
g	)
Checkboxesn   zDemonstrates Checkboxes.r1   z
    Checkboxes {
        height: auto;
        Checkbox, RadioButton { width: 1fr; }
        &>HorizontalGroup > * { width: 1fr; }
    }

    z## Checkboxes, Radio buttons, and Radio sets

Checkboxes to toggle booleans.
Radio buttons for exclusive booleans.

Hit `return` to toggle an checkbox / radio button, when focused.

    z### Radio Sets

A *radio set* is a list of mutually exclusive options.
Use the `up` and `down` keys to navigate the list.
Press `return` to toggle a radio button.

c              #     #    [        U R                  5      v   [        S5      v   [        S5      v   [        U R                  5      v   [        SSSSSSS	S
S5	      v   g 7f)Nz
A CheckboxzA Radio ButtonAmandazConnor MacLeodzDuncan MacLeodzHeather MacLeodz
Joe DawsonzKurgan, [bold italic red]The[/]MethoszRachel Ellensteinu   Ramírez)r!   CHECKBOXES_MDr   r$   RADIOSET_MDr%   rC   s    rE   rF   Checkboxes.compose   sf     t))**|$$*++t''((-

 
	
s   AA!rH   NrI   )rK   rL   rM   rN   rO   rQ   rR   r[   r\   rF   rS   rH   rT   rE   rV   rV   n   s$    "OKMK
rT   rV   c                  8    \ rS rSrSrSrSrSrS
S jrSS jr	Sr
g	)
Datatables   zDemonstrates DataTables.r1   z## Datatables

A fully-featured DataTable, with cell, row, and columns cursors.
Cells may be individually styled, and may include Rich renderables.

**Tip:** Focus the table and press `ctrl+a`

z    
    DataTable {        
        height: 16 !important;            
        &.-maximized {
            height: auto !important;
        }
    }
    
    c              #     #    [        U R                  5      v   [        R                  " 5          [	        SS9v   S S S 5        g ! , (       d  f       g = f7f)N   )fixed_columns)r!   DATATABLES_MDr   Centerr   rC   s    rE   rF   Datatables.compose   s8     t))** !,, !  s   -AA	A
AAc                    [        [        R                  " [        R                  " [
        5      5      5      nU R                  [        5      nUR                  " US   6   UR                  USS  5        g )Nr   rb   )
listcsvreaderioStringIOr   	query_oner   add_columnsadd_rows)rD   ROWStables      rE   on_mountDatatables.on_mount   sP    CJJr{{6234y)47#tABx rT   rH   NrI   rJ   None)rK   rL   rM   rN   rO   rQ   rd   rR   rF   rr   rS   rH   rT   rE   r_   r_      s"    "OMK-
!rT   r_   c                  2    \ rS rSrSrSrSrSrSrS
S jr	Sr
g	)Inputs   zDemonstrates Inputs.Tr1   z## Inputs and MaskedInputs

Text input fields, with placeholder text, validation, and auto-complete.
Build for intuitive and user-friendly forms.
 
a  
    Inputs {
        Grid {
            background: $boost;
            padding: 1 2;
            height: auto;
            grid-size: 2;
            grid-gutter: 1;
            grid-columns: auto 1fr;
            border: tall blank;
            &:focus-within {
                border: tall $accent;
            }
            Label {
                width: 100%;
                padding: 1;
                text-align: right;
            }
        }
    }
    c              #  z  #    [        U R                  5      v   [        R                  " 5          [	        S5      v   [        SS9v   [	        S5      v   [        SSSS9v   [	        S	5      v   [        S
SSS9v   [	        S5      v   [        [        [        SS9SS9v   S S S 5        g ! , (       d  f       g = f7f)NFreezType anything here)placeholderNumbernumberzType a number hereT)typer{   valid_emptyzCredit cardz9999-9999-9999-9999;0z$Obviously not your real credit card!)r7   r   CountryF)case_sensitive)	suggesterr{   )	r!   	INPUTS_MDr   Gridr   r   r"   r   r   rC   s    rE   rF   Inputs.compose   s     t~~&&__-$899/!+?T  &&'>  
 	""))EJ%  s   -B;A2B*!	B;*
B84B;rH   NrI   )rK   rL   rM   rN   rO   rP   rQ   r   rR   rF   rS   rH   rT   rE   rw   rw      s"    NOIK,rT   rw   c                  2    \ rS rSrSrSrSrSrSrS
S jr	Sr
g	)	ListViews   z)Demonstrates List Views and Option Lists.Tr1   z## List Views and Option Lists

A List View turns any widget into a user-navigable and selectable list.
An Option List for a field to present a list of strings to select from.

    z
    ListViews {
        ListView {
            width: 1fr;
            height: auto;
            margin: 0 2;
            background: $panel;
        }
        OptionList { max-height: 15; }
        Digits { padding: 1 2; width: 1fr; }
    }
    
    c           
   #  >  #    [        U R                  5      v   [        R                  " 5          [	        [        [        S5      5      [        [        S5      5      [        [        S5      5      5      v   [        [        6 v   S S S 5        g ! , (       d  f       g = f7f)Nz$50.00u   £100.00u	   €500.00)	r!   LISTS_MDr   HorizontalGroupr   r   r   r#   r   rC   s    rE   rF   ListViews.compose  sl     t}}%%''))*
+,,- 
 i(( *))s   -BAB	B
BBrH   NrI   )rK   rL   rM   rN   rO   rP   rQ   r   rR   rF   rS   rH   rT   rE   r   r      s"    3NOHK)rT   r   c                      \ rS rSrSrSrSrSrSR                  5       r	Sr
\" \R                  " \R                  " \
5      5      5      rSr\" S	5      r\" S	5      rSS
 jrSS jrSS jrSS jrSrg)Logsi   zDemonstrates Logs.r1   z## Logs and Rich Logs

A Log widget to efficiently display a scrolling view of text, with optional highlighting.
And a RichLog widget to display Rich renderables.

a  
    Logs {
        Log, RichLog {
            width: 1fr;
            height: 20;
            padding: 1;
            overflow-x: auto;
            border: wide $border-blurred;
            &:focus {
                border: wide $border;
            }
        }
        TabPane { padding: 0; }
        TabbedContent.-maximized {
            height: 1fr;
            Log, RichLog { height: 1fr; }
        }
    }
    a3  I must not fear.  
Fear is the mind-killer.
Fear is the little-death that brings total obliteration.
I will face my fear.
I will permit it to pass over me and through me.
And when it has gone past, I will turn the inner eye to see its path.
Where the fear has gone there will be nothing. Only I will remain.u  lane,swimmer,country,time
4,Joseph Schooling,Singapore,50.39
2,Michael Phelps,United States,51.14
5,Chad le Clos,South Africa,51.14
6,László Cseh,Hungary,51.14
3,Li Zhuhao,China,51.26
8,Mehdy Metella,France,51.58
7,Tom Shields,United States,51.73
1,Aleksandr Sadovnikov,Russia,51.84a  def loop_first_last(values: Iterable[T]) -> Iterable[tuple[bool, bool, T]]:
    """Iterate and generate a tuple with a flag for first and last value."""
    iter_values = iter(values)
    try:
        previous_value = next(iter_values)
    except StopIteration:
        return
    first = True
    for value in iter_values:
        yield first, False, previous_value
        first = False
        previous_value = value
    yield first, True, previous_valuer   c              #     #    [        U R                  5      v   [        SS5         [        SSS9v   [	        SS9v   S S S 5        g ! , (       d  f       g = f7f)Nr    r&   i'  T)	max_lines	highlight)r   )r!   LOGS_MDr+   r    r&   rC   s    rE   rF   Logs.composed  sA     t||$$5),$77F++ -,,s   $AA	A
AAc                L   U R                  [        5      nU R                  [        5      nUR                  5         UR                  5         UR	                  S5        UR	                  S5        U R                  SU R                  5        U R                  SU R                  5        g )NzI am a Log WidgetzI am a Rich Log Widgetg      ?rb   )rm   r    r&   anchorwriteset_interval
update_logupdate_rich_log)rD   logrich_logs      rE   rr   Logs.on_mountj  su    nnS!>>'*

		%&/0$0!T112rT   c                   U R                  [        5      nU R                  (       a  gU R                  R                  R                  U5      (       d  UR                  (       d  gU =R                  S-  sl        U R                  [        U R                  5      -  nU R                  U R                  [        U R                  5      -     nUR                  SU SU< 35        g)z Update the Log with new content.Nrb   zfear[z] = )rm   r    is_scrollingappscreencan_view_entireis_in_maximized_view	log_countlenTEXT
write_line)rD   r   line_nolines       rE   r   Logs.update_logt  s    nnS!xx..s33C<T<T!..3tyy>1yy#dii.89witD845rT   c                   U R                  [        5      nU R                  (       a  gU R                  R                  R                  U5      (       d  UR                  (       d  gU =R                  S-  sl        U R                  S-  nUS:X  a3  UR                  SSS9  UR                  [        U R                  SS	9SS9  gUS:X  a[  UR                  S
SS9  [        U R                  S   6 nU R                  SS  H  nUR                  " U6   M     UR                  USS9  gUS:X  a  UR                  SSS9   SS-    gg! [         a    [        5       nUR                  USS9   gf = f)z!Update the Rich Log with content.Nrb      r   zSyntax highlighted codeT)animatepython)lexerzA Rich Table   zA Rich Traceback)rm   r&   r   r   r   r   r   rich_log_countr   r   CODEr   CSV_ROWSadd_row	Exceptionr   )rD   r   
log_optionrq   row	tracebacks         rE   r   Logs.update_rich_log  sA   >>'*//9911q ((1,
?NN4dNCNN6$))8<dNK1_NN>4N84==+,E}}QR(s# )NN5$N/1_NN-tN<8A   8%K	y$78s   9E   $E'&E'rH   NrI   rt   )rK   rL   rM   rN   rO   rQ   r   rR   
splitlinesr   CSVrh   ri   rj   rk   rl   r   r   r   r   r   rF   rr   r   r   rS   rH   rT   rE   r   r      s    OGK(F GQjl 	'C CJJr{{3/01HD AIVN,3
68rT   r   c                  .    \ rS rSrSrSrSrSrS	S jrSr	g)
	Markdownsi  r1   a  
    Markdowns {
        #container {
            background: $boost;
            border: tall $border-blurred;   
            height: 16;
            padding: 0 1;
            &:focus { border: tall $border; }
            &.-maximized { height: 1fr; }
        }
        #movies {
            padding: 0 1;
            MarkdownBlock { padding: 0 1 0 0; }              
        }
    }
    z## Markdown

Display Markdown in your apps with the Markdown widget.
Most of the text on this page is Markdown.

Here's an AI generated Markdown document:

a  # The Golden Age of Action Cinema: The 1980s

The 1980s marked a transformative era in action cinema, defined by **excessive machismo**, explosive practical effects, and unforgettable one-liners. This decade gave birth to many of Hollywood's most enduring action franchises, from _Die Hard_ to _Rambo_, setting templates that filmmakers still reference today.

## Technical Innovation

Technologically, the 80s represented a sweet spot between practical effects and early CGI. Filmmakers relied heavily on:

* Practical stunts
* Pyrotechnics
* Hand-built models

These elements lent the films a tangible quality that many argue remains superior to modern digital effects.

## The Action Hero Archetype

The quintessential action hero emerged during this period, with key characteristics:

1. Impressive physique
2. Military background
3. Anti-authority attitude
4. Memorable catchphrases

> "I'll be back" - The Terminator (1984)

Heroes like Arnold Schwarzenegger and Sylvester Stallone became global icons. However, the decade also saw more nuanced characters emerge, like Bruce Willis's everyman John McClane in *Die Hard*, and powerful female protagonists like Sigourney Weaver's Ellen Ripley in *Aliens*.

### Political Influence

Cold War politics heavily influenced these films' narratives, with many plots featuring American heroes facing off against Soviet adversaries. This political subtext, combined with themes of individual triumph over bureaucratic systems, perfectly captured the era's zeitgeist.

---

While often dismissed as simple entertainment, 80s action films left an indelible mark on cinema history, influencing everything from filming techniques to narrative structures, and continuing to inspire filmmakers and delight audiences decades later.

c              #     #    [        U R                  5      v   [        R                  " SSSS9   [        U R                  SS9v   S S S 5        g ! , (       d  f       g = f7f)N	containerTid	can_focuscan_maximizemoviesr   )r!   MD_MDr   VerticalScroll	MOVIES_MDrC   s    rE   rF   Markdowns.compose  sK     tzz""&&d
 4>>h77
 
 
s   .A!A	A!
AA!rH   NrI   )
rK   rL   rM   rN   rQ   rR   r   r   rF   rS   rH   rT   rE   r   r     s"    OK E$IL8rT   r   c                  .    \ rS rSrSrSr/ SQrSS jrSrg)	Selectsi  r1   zo## Selects

Selects (AKA *Combo boxes*), present a list of options in a menu that may be expanded by the user.
)zArnold SchwarzeneggerzBrigitte NielsenzBruce WilliszCarl WeatherszChuck NorriszDolph LundgrenzGrace JoneszHarrison FordzJean-Claude Van DammezKurt RussellzLinda Hamiltonz
Mel GibsonzMichelle YeohzSigourney WeaverzSylvester Stallonec              #  |   #    [        U R                  5      v   [        R                  " U R                  SS9v   g 7f)Nz80s action hero)prompt)r!   
SELECTS_MDr'   from_valuesHEROSrC   s    rE   rF   Selects.compose   s,     t''  4EFFs   :<rH   NrI   )	rK   rL   rM   rN   rQ   r   r   rF   rS   rH   rT   rE   r   r     s    OJ
E$GrT   r   c                  n    \ rS rSr% SrSrSrSr\" S5      r	\
" \5      rS\S'   SS	 jrSS
 jrSS jrSrg)
Sparklinesi  zDemonstrates sparklines.r1   z## Sparklines

A low-res summary of time-series data.

For detailed graphs, see [textual-plotext](https://github.com/Textualize/textual-plotext).
a  
    Sparklines {
        Sparkline {
            width: 1fr;          
            margin: 1;
            &#first > .sparkline--min-color { color: $success; }
            &#first > .sparkline--max-color { color: $warning; }                
            &#second > .sparkline--min-color { color: $warning; }
            &#second > .sparkline--max-color { color: $error; }
            &#third > .sparkline--min-color { color: $primary; }
            &#third > .sparkline--max-color { color: $accent; }    
        }
        VerticalScroll {
            height: auto;
            border: heavy $border-blurred;
            &:focus { border: heavy $border; }
        }
    }

    r   zreactive[list[float]]datac              #    #    [        U R                  5      v   [        R                  " SSSS9   [	        / [
        SS9R                  [        R                  5      v   [	        / [
        SS9R                  [        R                  5      v   [	        / [
        SS9R                  [        R                  5      v   S S S 5        g ! , (       d  f       g = f7f)Nr   Tr   first)summary_functionr   secondthird)	r!   r   r   r   r(   max	data_bindr   r   rC   s    rE   rF   Sparklines.compose(  s     t||$$&&d
 BAKK  BBLL  BAKK 
 
 
s   .CBC;	C
CCc                <    U R                  SU R                  5        g )Ng?)r   update_sparksrC   s    rE   rr   Sparklines.on_mount7  s    #t112rT   c           	        U R                   (       a  gU R                  R                  R                  U 5      (       d%  U R	                  [
        5      R                  (       d  gU =R                  S-  sl        U R                  S-  n[        XS-   S5       Vs/ s H  n[        [        US-  5      5      PM     snU l        gs  snf )zUpdate the sparks data.Nrb   (   ip  r3   gQ	@)r   r   r   can_view_partialrm   r(   r   countrangeabsr   r   )rD   offsetxs      rE   r   Sparklines.update_sparks:  s    0066NN9-BB

a
b16v?OQS1TU1TASQX'1TU	Us   !C)r   NrI   rt   )rK   rL   rM   rN   rO   rQ   r   rR   r   r   r   rh   r   __annotations__rF   rr   r   rS   rH   rT   rE   r   r     sB    "OGK* FE"*4.D
03VrT   r   c                  r    \ rS rSrSrSrSrSrSrSS jr	\
" \R                  S5      SS	 j5       rSS
 jrSrg)SwitchesiH  zDemonstrate the Switch widget.Tr1   zc## Switches

Functionally almost identical to a Checkbox, but displays more prominently in the UI.
zqSwitches {    
    Label {
        padding: 1;
        &:hover {text-style:underline; pointer: pointer;}
    }
}
c              #  l  #    [        U R                  5      v   [        R                  " SS9   [         HO  nUR                  S5      (       a  M  [        R                  " 5          [        US9v   [        XS9v   S S S 5        MQ     S S S 5        g ! , (       d  f       Mk  = f! , (       d  f       g = f7f)N    )r4   z-ansir   )name)	r!   SWITCHES_MDr   rB   r   endswithr   r*   r   )rD   themes     rE   rF   Switches.compose[  s     t''((  "5'>>'**//1 E**22 21 ( 65 21	 65s4   ,B47B#%B<B#	B4
B B##
B1-B4r   c                    UR                  5         UR                  b<  U R                  SUR                  R                   3[        5      R                  5         gg)z!Make the label toggle the switch.N#)stopwidgetrm   r   r*   togglerD   events     rE   on_clickSwitches.on_clicke  sE     	

<<#NNQu||0012F;BBD $rT   c                  ^ ^ UR                   (       d  ST R                  S[        5      l         g T R                  [        R                  5         T R                  S5      R                  [        5       H0  nUR                  UR                  R                  :w  d  M)  SUl         M2     S S S 5        UR                  R                  c   eUR                  R                  mSU U4S jjnT R                  SU5        g ! , (       d  f       NY= f)NTz#textual-darkr*   Fc                 (   > TT R                   l        g)zCallback to switch the theme.N)r   r   )rD   theme_ids   rE   switch_theme0Switches.on_switch_changed.<locals>.switch_theme{  s    %DHHNrT   g333333?rt   )
valuerm   r*   preventChangedqueryresultsr   switch	set_timer)rD   r   r  r   r   s   `   @rE   on_switch_changedSwitches.on_switch_changedm  s    {{<@DNN?F39\\&..)**X.66v>99/#(FL ? *
 ||***<<??	& 	&
 	sL) *)s   A
C;C;;
D	rH   NrI   )r   zevents.ClickrJ   ru   )r   zSwitch.ChangedrJ   ru   )rK   rL   rM   rN   rO   rP   rQ   r   rR   rF   r   r	   Clickr   r  rS   rH   rT   rE   r   r   H  sH    (NOK
K3 gE E*rT   r   c                  *    \ rS rSrSrSrSrSS jrSrg)	TabsDemoi  r1   z## Tabs

A navigable list of section headers.

Typically used with `ContentTabs`, to display additional content associate with each tab.

Use the cursor keys to navigate.

zN
    .bio { padding: 1 2; background: $boost; color: $foreground-muted; }
    c              #     #    [        U R                  5      v   [        [         Vs/ s H  oS   PM	     sn6    [         H  n[	        US   SS9v   M     S S S 5        g s  snf ! , (       d  f       g = f7f)Nr   descriptionbioclasses)r!   TABS_MDr+   r   r)   )rD   r  s     rE   rF   TabsDemo.compose  s[     t||$$I>IS[I>? S/?? ! @?>??s&   %A5AA5A$A5$
A2.A5rH   NrI   )	rK   rL   rM   rN   rQ   r  rR   rF   rS   rH   rT   rE   r  r    s    O	GK@rT   r  c                  *    \ rS rSrSrSrSrSS jrSrg)	Treesi  r1   z## Tree

The Tree widget displays hierarchical data.

There is also the Tree widget's cousin, DirectoryTree, to navigate folders and files on the filesystem.
    a6  
    Trees {
        Tree {
            height: 16;            
            padding: 1;
            &.-maximized { height: 1fr; }    
            border: wide $border-blurred;            
            &:focus { border: wide $border; }        
        }
        VerticalGroup {
            
        }
    }

    c              #  "  #    [        U R                  5      v   [        R                  " 5          [	        S5      nSUl        UR                  [        5        UR                  R                  5         Uv   S S S 5        g ! , (       d  f       g = f7f)Nz
80s moviesF)
r!   TREES_MDr   VerticalGroupr-   	show_rootadd_jsonr   rootexpand)rD   trees     rE   rF   Trees.compose  s]     t}}%%%%'%D"DNMM+&IIJ (''s   -BAA>5	B>
BBrH   NrI   )	rK   rL   rM   rN   rQ   r  rR   rF   rS   rH   rT   rE   r  r    s    OHK rT   r  c                  <    \ rS rSrSrSrSrSrSrSS jr	SS jr
S	rg
)	TextAreasi  Tr1   z## TextArea

A powerful and highly configurable text area that supports syntax highlighting, line numbers, soft wrapping, and more.

z
    TextAreas {
        TextArea {
            height: 16;
        }
        &.-maximized {
            height: 1fr;
        }
    }
    z9# Start building!
from textual import App, ComposeResult
c              #     #    [        U R                  5      v   [        R                  " / SQSSS9v   [	        U R
                  SS S9v   g 7f)N)BashCssGoHTMLJava
JavascriptJSONr!   PythonRustRegexSqlTOMLYAMLr(  zHighlight language)r   r   T)show_line_numberslanguage)r!   TEXTAREA_MDr'   r   r,   DEFAULT_TEXTrC   s    rE   rF   TextAreas.compose  sM     t''((    '%
 	
* t((D4PPs   A
Ac                    [        UR                  [        5      (       a  UR                  R                  5       OS U R	                  [
        5      l        g N)
isinstancer   strlowerrm   r,   r/  r   s     rE   on_select_changedTextAreas.on_select_changed  s5    #-ekk3#?#?EKKT 	x )rT   rH   NrI   )r   zSelect.ChangedrJ   ru   )rK   rL   rM   rN   rP   rQ   r0  rR   r1  rF   r8  rS   rH   rT   rE   r  r    s,    NOK	KL
Q2
rT   r  c                  *    \ rS rSrSrSrSrSS jrSrg)	YourWidgetsi  r1   a  ## Your Widget Here!

The Textual API allows you to [build custom re-usable widgets](https://textual.textualize.io/guide/widgets/#custom-widgets) and share them across projects.
Custom widgets can be themed, just like the builtin widget library.

Combine existing widgets to add new functionality, or use the powerful [Line API](https://textual.textualize.io/guide/widgets/#line-api) for unique creations.

z+
    YourWidgets { margin-bottom: 2; }
    c              #  :   #    [        U R                  5      v   g 7fr4  )r!   YOUR_MDrC   s    rE   rF   YourWidgets.compose  s     t||$$s   rH   NrI   )	rK   rL   rM   rN   rQ   r=  rR   rF   rS   rH   rT   rE   r;  r;    s    OGK%rT   r;  c                  :    \ rS rSrSrSr\" SSSSS9/rSS	 jrS
r	g)WidgetsScreeni  zThe Widgets screenaK  
    WidgetsScreen { 
        align-horizontal: center;
        Markdown { background: transparent; }
        & > VerticalScroll {
            scrollbar-gutter: stable;
            & > * {                          
                &:even { background: $boost; }
                padding-bottom: 1;
            }
        }
    }
    escapeblurzUnfocus any focused widgetF)showc              #    #    [         R                  " [        R                  " SS95         [	        [
        SS9v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [        5       v   [!        5       v   [#        5       v   [%        5       v   ['        5       v   S S S 5        [)        5       v   g ! , (       d  f       N= f7f)NT)r   r1   r  )r
   Revealr   r   r!   
WIDGETS_MDr/   rV   r_   rw   r   r   r   r   r   r   r  r  r  r;  r   rC   s    rE   rF   WidgetsScreen.compose  s     [[22TBC:x88)O,,(N+&L+)O,**+'M- D  h! DCs   )D
B9C9$D
9
DD
rH   NrI   )
rK   rL   rM   rN   rO   CSSr   BINDINGSrF   rS   rH   rT   rE   r@  r@    s'    C &*FUSTHrT   r@  __main__)Appc                      \ rS rSrSS jrSrg)GameAppi1  c                    [        5       $ r4  )r@  rC   s    rE   get_default_screenGameApp.get_default_screen2  s
     ?"rT   rH   N)rJ   Screen)rK   rL   rM   rN   rO  rS   rH   rT   rE   rM  rM  1  s    	#rT   rM  )Q
__future__r   ri   rk   mathr   rich.syntaxr   
rich.tabler   rich.tracebackr   textualr   r	   r
   r   textual.appr   textual.bindingr   textual.demo.datar   r   r   r   textual.demo.pager   textual.reactiver   r   textual.suggesterr   textual.themer   textual.widgetsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   rF  r  r/   rV   r_   rw   r   r   r   r   r   r   r  r  r  r;  r@  rK   rK  rM  r   runrH   rT   rE   <module>ra     s   " 
 	    $ 0 0 % # G G ( * - (      4
4Bj&& 4Bn.
)) .
b !))  !F5Z%% 5p#)
(( #)L{8:## {8|F8
(( F8RGj&& G<@V)) @VF8*z'' 8*v@z'' @. J$$  F4

(( 4
n%*** %&$J $N z## # )CGGI rT   