
    Cj."              
      2   S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKrS SKJr  S SKJr  S S	KJr  S S
KJr  \
(       a  S SK	Jr  S SKJr  S SKJr   " S S\5      r " S S\5      rS S jrS S jrS S jrS S jr \RB                  \\RD                  \\RF                  \\RH                  \ \RJ                  \0r&\ " S S5      5       r'\ " S S5      5       r(\RR                  RU                  SS9\ " S S5      5       5       r+\ " S S5      5       r,g)!    )annotations)	dataclassfield)Enum)partial)TYPE_CHECKINGIterableN)HelpText)Styles)Token)Specificity3)Callable)Self)DOMNodec                  4    \ rS rSrSrSr Sr Sr Sr Sr	Sr
g	)
SelectorType   zType of selector.                N)__name__
__module____qualname____firstlineno____doc__	UNIVERSALTYPECLASSIDNESTED__static_attributes__r       c/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/css/model.pyr   r      s-    ID E!	
BF1r%   r   c                  (    \ rS rSrSrSr Sr SrSrg)CombinatorType&   zType of combinator.r   r   r   r   N)	r   r   r   r   r   SAME
DESCENDENTCHILDr$   r   r%   r&   r(   r(   &   s    D5J;EAr%   r(   c                .    UR                  S5      (       + $ )zCheck node matches universal selector.

Args:
    name: Selector name.
    node: A DOM node.

Returns:
    `True` if the selector matches.
z-textual-system)	has_classnamenodes     r&   _check_universalr2   1   s     ~~/000r%   c                    XR                   ;   $ )zCheck node matches a type selector.

Args:
    name: Selector name.
    node: A DOM node.

Returns:
    `True` if the selector matches.
)_css_type_namesr/   s     r&   _check_typer5   >   s     ''''r%   c                    XR                   ;   $ )zCheck node matches a class selector.

Args:
    name: Selector name.
    node: A DOM node.

Returns:
    `True` if the selector matches.
)_classesr/   s     r&   _check_classr8   K   s     ==  r%   c                     UR                   U :H  $ )zCheck node matches an ID selector.

Args:
    name: Selector name.
    node: A DOM node.

Returns:
    `True` if the selector matches.
idr/   s     r&   	_check_idr<   X   s     77d?r%   c                      \ rS rSr% SrS\S'   \R                  rS\S'   \	R                  rS\S'   \" \S	9rS
\S'   \" S S	9rS\S'   SrS\S'   SS jr\SS j5       rSS jrSS jrSrg)Selectorn   zVRepresents a CSS selector.

Some examples of selectors:

*
Header.title
App > Content
strr0   r(   
combinatorr   typedefault_factoryset[str]pseudo_classesc                     g)Nr   r   r   r   r   r%   r&   <lambda>Selector.<lambda>}   s    ir%   r   specificityr   intadvancec                \    [        [        U R                     U R                  5      U l        g N)r   _CHECKSrB   r0   _checkselfs    r&   __post_init__Selector.__post_init__   s    189KTYY1Wr%   c                r   SR                  S [        U R                  5       5       5      nU R                  [        R
                  :X  a  gU R                  [        R                  :X  a  U R                   U 3$ U R                  [        R                  :X  a  SU R                   U 3$ SU R                   U 3$ )z0Rebuilds the selector as it would appear in CSS. c              3  ,   #    U  H
  nS U 3v   M     g7f):Nr   ).0r0   s     r&   	<genexpr>Selector.css.<locals>.<genexpr>   s     S7Rt!D6
7R   *.#)	joinsortedrF   rB   r   r   r    r0   r!   )rS   pseudo_suffixs     r&   cssSelector.css   s     Svd>Q>Q7RSS99...YY,+++ii[00YY,,,,tyyk-11tyyk-11r%   c                p    U R                   R                  U5        U R                  u  p#nX#S-   U4U l        g)z\Adds a pseudo class and updates specificity.

Args:
    pseudo_class: Name of pseudo class.
r   N)rF   addrK   )rS   pseudo_classspecificity1specificity2specificity3s        r&   _add_pseudo_classSelector._add_pseudo_class   s:     	-373C3C0L(*:LIr%   c                    U R                  U5      =(       a.    U R                  (       a  UR                  U R                  5      $ S$ )zCheck if a given node matches the selector.

Args:
    node: A DOM node.

Returns:
    True if the selector matches, otherwise False.
T)rQ   rF   has_pseudo_classes)rS   r1   s     r&   checkSelector.check   sC     {{4  
"" ##D$7$78	
 	
r%   )rQ   rK   NreturnNoners   r@   )rh   r@   rs   rt   )r1   r   rs   bool)r   r   r   r   r   __annotations__r(   r+   rA   r   r    rB   r   setrF   rK   rM   rT   propertyrd   rl   rp   r$   r   r%   r&   r>   r>   n   s|     I!/!:!:J:%**D,*$S9NH9 %6G HKHGSX 
2 
2J
r%   r>   c                  D    \ rS rSr% SrS\S'   S\S'   \" \S9rS\S	'   S
r	g)Declaration   z-A single CSS declaration (not yet processed).r   tokenr@   r0   rC   zlist[Token]tokensr   N)
r   r   r   r   r   rw   r   listr~   r$   r   r%   r&   r{   r{      s    7L
I5FK5r%   r{   T)angularc                      \ rS rSr% Sr\" \S9rS\S'   Sr	S\S'   SS	 jr
\SS
 j5       r\SS j5       rSS jrSS jr\SS j5       rSrg)SelectorSet   z.A set of selectors associated with a rule set.rC   list[Selector]	selectorsrH   r   rK   c                    [         R                  n[        U R                  U R                  SS  5       H"  u  p#[	        UR
                  U:g  5      Ul        M$     g )Nr   )r(   r*   zipr   rL   rA   rM   )rS   r*   selectornext_selectors       r&   rT   SelectorSet.__post_init__   sI    ""'*4>>4>>!";M'N#H"=#;#;t#CDH (Or%   c                @    [         R                  U R                  5      $ rO   )RuleSet_selector_to_cssr   rR   s    r&   rd   SelectorSet.css   s    ''77r%   c                   ^ [         R                  [         R                  1m[        U4S jU R                   5       5      $ )zGAre all the selectors simple (i.e. only dependent on static DOM state).c              3  r   >#    U  H,  nUR                   T;   =(       a    UR                  (       + v   M.     g 7frO   )rB   rF   )rZ   r   simple_typess     r&   r[   (SelectorSet.is_simple.<locals>.<genexpr>   s2      
* ]]l*J83J3J/JJ*s   47)r   r"   r    allr   )rS   r   s    @r&   	is_simpleSelectorSet.is_simple   s7     %):):; 
 NN
 
 	
r%   c              #  r   #    [         R                  U R                  5      nUv   S U R                  4v   g 7frO   )r   r   r   rK   )rS   r   s     r&   __rich_repr__SelectorSet.__rich_repr__   s/     ,,T^^<	D$$$$s   57c                ~    S=n=p#U R                    H  nUR                  u  pVnX-  nX&-  nX7-  nM      XU4U l        U $ )z>Calculate total specificity of selectors.

Returns:
    Self.
r   )r   rK   )rS   id_totalclass_total
type_totalr   _id_class_types           r&   _total_specificitySelectorSet._total_specificity   sZ     /0//;H!)!5!5COH!KJ	 '
 %:>r%   c              #     #    U H;  nS=n=pEU H  nUR                   u  pxn	X7-  nXH-  nXY-  nM      [        X#XE45      v   M=     g 7f)Nr   )rK   r   )
clsr   selector_listr   r   r   r   r   r   r   s
             r&   from_selectorsSelectorSet.from_selectors   s_     &M233H3{)%-%9%9"U%#
	 *
 m-PQQ 's   AA)rK   Nrr   ru   )rs   rv   )rs   zrich.repr.Result)rs   r   )r   zlist[list[Selector]]rs   zIterable[SelectorSet])r   r   r   r   r   r   r   r   rw   rK   rT   ry   rd   r   r   r   classmethodr   r$   r   r%   r&   r   r      sn     9 %d ;I~; )K)E
 8 8 
 
%
 R Rr%   r   c                      \ rS rSr% \" \S9rS\S'   \" \S9r	S\S'   \" \S9r
S\S'   S	rS
\S'   SrS\S'   \" \S9rS\S'   \" \S9rS\S'   S r\SS j5       r\S 5       r\SS j5       rSS jrSrg)r      rC   zlist[SelectorSet]selector_setr   stylesz"list[tuple[Token, str | HelpText]]errorsFrv   is_default_rulesr   rL   tie_breakerrE   selector_namesrF   c                    [        U 5      $ rO   r:   rR   s    r&   __hash__RuleSet.__hash__   s    $xr%   c                J   / nU H}  nUR                   [        R                  :X  a  UR                  S5        O/UR                   [        R                  :X  a  UR                  S5        UR                  UR
                  5        M     SR                  U5      R                  5       $ )N z > rW   )rA   r(   r+   appendr,   rd   ra   strip)r   r   r~   r   s       r&   r   RuleSet._selector_to_css   sz    !H""n&?&??c"$$(<(<<e$MM(,,' " wwv$$&&r%   c                N   ^  SR                  U 4S jT R                   5       5      $ )Nz, c              3  Z   >#    U  H   nTR                  UR                  5      v   M"     g 7frO   )r   r   )rZ   r   rS   s     r&   r[   $RuleSet.selectors.<locals>.<genexpr>	  s,      
 1 !!,"8"899 1s   (+)ra   r   rR   s   `r&   r   RuleSet.selectors  s'    yy 
 $ 1 1
 
 	
r%   c                    SR                  S U R                  R                   5       5      nU R                   SU S3nU$ )zJGenerate the CSS this RuleSet

Returns:
    A string containing CSS code.

c              3  ,   #    U  H
  nS U 3v   M     g7f)z    Nr   )rZ   lines     r&   r[   RuleSet.css.<locals>.<genexpr>  s      Q;P44v;Pr]   z {
z
})ra   r   	css_linesr   )rS   declarationsrd   s      r&   rd   RuleSet.css  s>     yy Q4;;;P;P QQ l^48
r%   c                B   [         R                  n[         R                  n[         R                  n[         R                  nU R
                  R                  nU R                  R                  nU R                   H  nUR                   H  nU" UR                  5        M     UR                  S   nUR                  n	X:X  a
  U" S5        MR  X:X  a  U" UR                  5        Mk  X:X  a  U" SUR                   35        M  X:X  d  M  U" SUR                   35        M     g)z#Called after the RuleSet is parsed.r^   r_   r`   N)r   r!   r"   r    r   r   rg   rF   updater   r   rB   r0   )
rS   
class_typeid_type	type_typeuniversal_typeadd_selectoradd_pseudo_classesr   r   selector_types
             r&   _post_parseRuleSet._post_parse  s     "''
// %%	%//**..!0077 --L(22"8#:#:; 3 $--b1H$MMM.S!+X]]+,q01)q01 .r%   r   N)r   r   rs   r@   ru   rr   )r   r   r   r   r   r   r   rw   r   r   r   r   r   rx   r   rF   r   r   r   ry   r   rd   r   r$   r   r%   r&   r   r      s    &+D&AL#A62FF216t1LF.L"d"K$S9NH9$S9NH9 	' 	' 
 
  2r%   r   )r0   r@   r1   r   rs   rv   )-
__future__r   dataclassesr   r   enumr   	functoolsr   typingr   r	   	rich.reprrichtextual.css._help_renderablesr
   textual.css.stylesr   textual.css.tokenizer   textual.css.typesr   r   typing_extensionsr   textual.domr   r   r(   r2   r5   r8   r<   r   r    r!   r"   r#   rP   r>   r{   reprautor   r   r   r%   r&   <module>r      s    " (   *  2 % & *&#24 2BT B
1
(
!
 ,{OOY) 8
 8
 8
v 6 6 6 
5R 5R  5Rp D2 D2 D2r%   