
    AHj                       d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZ d dlZd dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d dl`maZambZb e
rd dlPmcZc d dldmeZe d dlfmgZg  G d ded      Zh eiehj                  j                               Zl emel      Zn eel Zo G d d      Zpej                  j                  e G d dep                    Zsej                  j                   G d dep             Zty)     )annotations)	dataclassfield)partial)
attrgetter)TYPE_CHECKINGAnyCallableIterableIteratorLiteralcastN)Style)	TypedDict)DEFAULT_EASING
AnimatableBoundAnimatorEasingFunction)AnimationLevelCallbackType)Color)AlignPropertyBooleanPropertyBorderPropertyBoxPropertyColorPropertyDockPropertyFractionalPropertyHatchPropertyIntegerPropertyKeylinePropertyLayoutPropertyNameListPropertyNamePropertyOffsetPropertyOverflowPropertyScalarListPropertyScalarPropertyScrollbarColorPropertySpacingPropertySplitPropertyStringEnumPropertyStyleFlagsPropertyTransitionsProperty)VALID_ALIGN_HORIZONTALVALID_ALIGN_VERTICALVALID_BOX_SIZINGVALID_CONSTRAINVALID_DISPLAYVALID_EXPANDVALID_OVERFLOWVALID_OVERLAYVALID_POSITIONVALID_SCROLLBAR_GUTTERVALID_TEXT_ALIGNVALID_TEXT_OVERFLOWVALID_TEXT_WRAPVALID_VISIBILITY)ScalarScalarOffsetUnit)ScalarAnimation)
Transition)AlignHorizontalAlignVertical	BoxSizing	ConstrainDisplayExpandOverflowOverlayScrollbarGutterSpecificity3Specificity6	TextAlignTextOverflowTextWrap
Visibility)OffsetSpacing)CSSLocation)DOMNode)Layoutc                  x   e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   ded!<   ded"<   ded#<   ded$<   ded%<   ded&<   d'ed(<   d)ed*<   d)ed+<   d)ed,<   d)ed-<   d)ed.<   d)ed/<   ded0<   ded1<   d2ed3<   d2ed4<   d5ed6<   ded7<   d8ed9<   d
ed:<   d
ed;<   d
ed<<   d
ed=<   d
ed><   d
ed?<   d
ed@<   d
edA<   dBedC<   dDedE<   dDedF<   dedG<   dHedI<   dedJ<   dHedK<   dDedL<   dDedM<   dDedN<   dDedO<   dPedQ<   dPedR<   dDedS<   dDedT<   dUedV<   d
edW<   dedX<   d
edY<   dedZ<   d
ed[<   ded\<   d
ed]<   ded^<   ded_<   d
ed`<   d
eda<   dedb<   dedc<   d
edd<   d
ede<   dedf<   dgedh<   diedj<   dkedl<   dkedm<   dnedo<   dpedq<   dreds<   dDedt<   yu)vRulesMapzA typed dict for CSS rules.

    Any key may be absent, indicating that rule has not been set.

    Does not define composite rules, that is a rule that is made of a combination of other rules.
    rF   displayrP   
visibilityz'Layout'layoutbool
auto_colorr   color
backgroundr   
text_stylebackground_tintfloatopacitytext_opacityrR   paddingmarginr>   offsetstrpositionztuple[str, Color]
border_topborder_rightborder_bottomborder_leftrB   border_title_alignborder_subtitle_alignoutline_topoutline_rightoutline_bottomoutline_leftkeylinerD   
box_sizingr=   widthheight	min_width
min_height	max_width
max_heightdocksplitrH   
overflow_x
overflow_yztuple[str, ...]layerslayerzdict[str, Transition]transitionstintscrollbar_colorscrollbar_color_hoverscrollbar_color_activescrollbar_corner_colorscrollbar_backgroundscrollbar_background_hoverscrollbar_background_activerJ   scrollbar_gutterintscrollbar_size_verticalscrollbar_size_horizontalalign_horizontalrC   align_verticalcontent_align_horizontalcontent_align_verticalgrid_size_rowsgrid_size_columnsgrid_gutter_horizontalgrid_gutter_verticalztuple[Scalar, ...]	grid_rowsgrid_columnsrow_spancolumn_spanrM   
text_align
link_colorauto_link_colorlink_background
link_stylelink_color_hoverauto_link_color_hoverlink_background_hoverlink_style_hoverauto_border_title_colorborder_title_colorborder_title_backgroundborder_title_styleauto_border_subtitle_colorborder_subtitle_colorborder_subtitle_backgroundborder_subtitle_stylez#tuple[str, Color] | Literal['none']hatchrI   overlayrE   constrain_xconstrain_yrO   	text_wraprN   text_overflowrG   expandline_padN)__name__
__module____qualname____doc____annotations__     J/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/css/styles.pyrW   rW   T   s    LNOM!!##$$""''**""$$%%##MN
IJJ&&
K  !!!! %%!&&%%  ""%%!!--))!!$$M  !!"" $$   %%  ..NMr   rW   F)totalc                  t   e Zd ZU dZh dZdZded<    eeddd      Z		  ee
d	d
      Z	  e       Z	  ed      Z	  e eddd            Z	  e edddd            Z	  e edddd            Z	  e       Z	  ed      Z	  e       Z	  e       Z	  e       Z	  e       Z	  eed      Z 	  e!d
      Z"	  e# eddd            Z$	  e# eddd            Z%	  e# eddd            Z&	  e# eddd            Z'	  ee(d      Z)	  ee(d      Z*	  e!d
      Z+	  e# eddd            Z,	  e# eddd            Z-	  e# eddd            Z.	  e# eddd            Z/	  e0       Z1	  ee2dd
      Z3	  e4e5jl                        Z7	  e4e5jp                        Z9	  e4e5jl                  d      Z:	  e4e5jp                  d      Z;	  e4e5jl                  d      Z<	  e4e5jp                  d      Z=	  e>       Z?	  e@       ZA eBeCd      ZD	  eBeCd      ZE	  eF       ZG eH       ZI eJ       ZK ed      ZL	  eMd      ZN	  eMd      ZO	  eMd      ZP	  eMd      ZQ	  eMd      ZR	  eMd      ZS	  eMd      ZT	  eeUddd       ZV	  eWd!d"      ZX	  eWd#d"      ZY	  ee(ddd       ZZ ee[d$dd       Z\ e]       Z^ ee(d      Z_ ee[d$      Z` e]       Za ebe5jp                  d%      Zc ebe5jl                  d%      Zd eWd#dd&      Ze eWddd&      Zf eWddd&      Zg eWddd&      Zh eWd#d"      Zi eWd#d"      Zj eekd'      Zld(ed)<    ed      Zm ed      Zn ed      Zo e       Zp ed      Zq ed      Zr ed      Zs e       Zt ed      Zu e edddd            Zv e edddd            Zw e       Zx ed      Zy e edddd            Zz e edddd            Z{ e       Z| e}       Z~	  eed*dd+      Z eed*      Zd,ed-<    eed*      Zd,ed.<    eed/      Zd0ed1<    eed2      Zd3ed4<    eed5      Zd6ed7<    eWdd"      Z	 	 	 d^	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d_d8Zd`d9Zdad:Zdbdcd;Zddd<Zded=Zdfd>Zdgd?Zdhd@ZdidAZedjdB       ZedkdC       Zee5j0                  e5j2                  hfdkdD       Zee5j0                  e5j2                  hfdkdE       Zee5j8                  fdkdF       Zee5j8                  fdkdG       Zee5j8                  e5j0                  e5j2                  hf	 dkdH       ZedkdI       ZedkdJ       ZdldKZdldLZdmdMZdndNZdbdodOZdddddP	 	 	 	 	 	 	 	 	 dpdQZdqdRZdrdSZdsdTZdmdUZedtdV       ZeddW	 	 	 	 	 	 	 dudX       ZdvdYZdwdZZdxd[Zdyd\Zedzd]       Zy){
StylesBasez/A common base class for Styles and RenderStyles>   r   r]   ru   rv   re   rf   rb   rd   r   rh   ry   rw   r   r\   r^   r   rz   rx   rc   r   r`   r   r   r   r   r   r   r   r   r   NDOMNode | NonenodeblockT)rZ   rX   visiblerZ   F)default   r   )childrenrelativeleftrightz
border-box)percent_unit)r   
allow_autohiddentransparentansi_bright_magentaansi_yellowansi_bright_yellowz#666666z#555555z#444444blackauto)rZ   refresh_children   )r   rZ      top)r   r   )r   rZ   r   startzStringEnumProperty[TextAlign]r   none)rZ   refresh_parentzStringEnumProperty[Constrain]r   r   wrapzStringEnumProperty[TextWrap]r   foldz StringEnumProperty[TextOverflow]r   greedyzStringEnumProperty[Expand]r   c
                   | j                   y t        |t        t        f      rt        |t        t
        f      r)t        |t        j                  t        j                        }t        |t        t        f      sy ddlm	}
 t        | j                   |
      sJ t        | j                   | |||||||0t        | j                   j                  j                  |      |	
      S d |	
      S y )Nr   )Widget)durationspeedeasingon_completelevel)r   
isinstancer=   r>   r   ra   r?   CELLStextual.widgetr   r@   r   app
call_later)self	attributestart_valuevalue
start_timer   r   r   r   r   r   s              r   __textual_animation__z StylesBase.__textual_animation__  s     99 kFL#9:%#u.udjj$**= efl%;<-dii000"		! #. DIIMM44kB      r   c                p    t        |t              st        S | j                         |j                         k(  S )z*Check that Styles contains the same rules.)r   r   NotImplemented	get_rules)r   styless     r   __eq__zStylesBase.__eq__$  s-    &*-!!~~6#3#3#555r   c                @    |t         vrt        |      t        | |      S N)RULE_NAMES_SETKeyErrorgetattrr   keys     r   __getitem__zStylesBase.__getitem__*  s!    n$3-tS!!r   c                .    |t         v rt        | |      S |S r   )r   r   )r   r   r   s      r   getzStylesBase.get/  s    %(N%:wtS!GGr   c                     t        t              S r   )len
RULE_NAMESr   s    r   __len__zStylesBase.__len__2  s    :r   c                     t        t              S r   )iterr   r   s    r   __iter__zStylesBase.__iter__5  s    Jr   c                    |t         v S r   )r   r   s     r   __contains__zStylesBase.__contains__8  s    n$$r   c                    t         S r   )r   r   s    r   keyszStylesBase.keys;  s    r   c              #  >   K   t         D ]  }t        | |        y wr   r   r   r   s     r   valueszStylesBase.values>  s"      	%C$$$	%s   c              #  B   K   t         D ]  }|t        | |      f  y wr   r
  r   s     r   itemszStylesBase.itemsB  s'      	,Cc*++	,s   c                H    | j                   | j                  j                  z   S )z\Get space around widget.

        Returns:
            Space around widget content.
        )rd   borderspacingr   s    r   gutterzStylesBase.gutterF  s     ||dkk1111r   c                    | j                   } |d      xr | j                  j                  xs   |d      xr | j                  j                  S )z+Check if width or height are set to 'auto'.ru   rv   )has_ruleru   is_autorv   )r   r  s     r   auto_dimensionszStylesBase.auto_dimensionsO  sE     ==!8djj&8&8 
X64;;#6#6	
r   c                B    | j                   }|duxr |j                  |v S z$Does the node have a relative width?Nru   unit)r   _relative_unitsru   s      r   is_relative_widthzStylesBase.is_relative_widthW  s&     

D BUZZ?%BBr   c                B    | j                   }|duxr |j                  |v S r  rv   r  )r   r  rv   s      r   is_relative_heightzStylesBase.is_relative_height]  s&     T!Dfkk_&DDr   c                D    | j                   }|duxr |j                  |k(  S )z#Does the node have automatic width?Nr  )r   _autoru   s      r   is_auto_widthzStylesBase.is_auto_widthc  s&     

D 8UZZ5%88r   c                D    | j                   }|duxr |j                  |k(  S )z$Does the node have automatic height?Nr  )r   r   rv   s      r   is_auto_heightzStylesBase.is_auto_heighti  s&     T!:fkkU&::r   c                B    | j                   }|duxr |j                  |v S )z0Does the node have a dynamic (not fixed) height?Nr  )r   _dynamic_unitsrv   s      r   is_dynamic_heightzStylesBase.is_dynamic_heighto  s&    
 T!Cfkk^&CCr   c                     | j                   dk7  S )zIs the node docked?r   )r{   r   s    r   	is_dockedzStylesBase.is_dockedw  s     yyF""r   c                     | j                   dk7  S )zIs the node split?r   )r|   r   s    r   is_splitzStylesBase.is_split|  s     zzV##r   c                    t               )zCheck if a rule is set on this Styles object.

        Args:
            rule_name: Rule name.

        Returns:
            ``True`` if the rules is present, otherwise ``False``.
        NotImplementedErrorr   	rule_names     r   r  zStylesBase.has_rule       "##r   c                    t               )zRemoves the rule from the Styles object, as if it had never been set.

        Args:
            rule_name: Rule name.

        Returns:
            ``True`` if a rule was cleared, or ``False`` if the rule is already not set.
        r,  r.  s     r   
clear_rulezStylesBase.clear_rule  r0  r   c                    t               )z\Get the rules in a mapping.

        Returns:
            A TypedDict of the rules.
        r,  r   s    r   r   zStylesBase.get_rules  s     "##r   c                    t               )zSet a rule.

        Args:
            rule_name: Rule name.
            value: New rule value.

        Returns:
            ``True`` if the rule changed, otherwise ``False``.
        r,  r   r/  r   s      r   set_rulezStylesBase.set_rule       "##r   c                    t               )zGet an individual rule.

        Args:
            rule_name: Name of rule.
            default: Default if rule does not exists.

        Returns:
            Rule value or default.
        r,  r   r/  r   s      r   get_rulezStylesBase.get_rule  r7  r   rZ   r   parentrepaintc                    y)zMark the styles as requiring a refresh.

        Args:
            layout: Also require a layout.
            children: Also refresh children.
            parent: Also refresh the parent.
            repaint: Repaint the widgets.
        Nr   r   rZ   r   r<  r=  s        r   refreshzStylesBase.refresh      r   c                     y)!Reset the rules to initial state.Nr   r   s    r   resetzStylesBase.reset  rA  r   c                     y]Merge values from another Styles.

        Args:
            other: A Styles object.
        Nr   r   others     r   mergezStylesBase.merge  rA  r   c                     y)zWMerge rules into Styles.

        Args:
            rules: A mapping of rules.
        Nr   r   ruless     r   merge_ruleszStylesBase.merge_rules  rA  r   c                f    t        t        t        t        |                   }t	        t
        |      S )zGet rules map with defaults.)dictzipr   _rule_getterr   rW   rL  s     r   get_render_ruleszStylesBase.get_render_rules  s'     S\$%789He$$r   c                    || j                   v S )zCheck if a given rule may be animated.

        Args:
            rule: Name of the rule.

        Returns:
            ``True`` if the rule may be animated, otherwise ``False``.
        )
ANIMATABLE)clsrules     r   is_animatablezStylesBase.is_animatable  s     s~~%%r   )r   c               2    ddl m}  |||      }||_        |S )a  Parse CSS and return a Styles object.

        Args:
            css: Textual CSS.
            read_from: Location where the CSS was read from.
            node: Node to associate with the Styles.

        Returns:
            A Styles instance containing result of parsing CSS.
        r   )parse_declarations)textual.css.parserZ  r   )rV  css	read_fromr   rZ  r   s         r   parsezStylesBase.parse  s     	9#C3r   c                X    || j                   v r| j                  j                  |d      S y)zGet a transition.

        Args:
            key: Transition key.

        Returns:
            Transition object or None it no transition exists.
        N)rU  r   r   r   s     r   _get_transitionzStylesBase._get_transition  s,     $//!##''T22r   c                T    d}| j                   }|dk7  r|dk(  r
||z
  dz  }|S ||z
  }|S )zAlign the width dimension.

        Args:
            width: Width of the content.
            parent_width: Width of the parent container.

        Returns:
            An offset to add to the X coordinate.
        r   r   centerr   )r   )r   ru   parent_widthoffset_xr   s        r   _align_widthzStylesBase._align_width  sL     00v%8+(50Q6  (%/r   c                T    d}| j                   }|dk7  r|dk(  r
||z
  dz  }|S ||z
  }|S )zAlign the height dimensions

        Args:
            height: Height of the content.
            parent_height: Height of the parent container.

        Returns:
            An offset to add to the Y coordinate.
        r   r   middler   )r   )r   rv   parent_heightoffset_yr   s        r   _align_heightzStylesBase._align_height!  sK     ,,U"))F2q8  )61r   c                n    |\  }}|\  }}t        | j                  ||      | j                  ||            S )zAlign a size according to alignment rules.

        Args:
            child: The size of the child (width, height)
            parent: The size of the parent (width, height)

        Returns:
            Offset required to align the child.
        )rQ   re  rj  )r   childr<  ru   rv   rc  rh  s          r   _align_sizezStylesBase._align_size4  sD     v&,#me\2v}5
 	
r   c                >   t        | j                  d      r/| j                  j                  dkD  r| j                  j                  nd| j                  d      r/| j
                  j                  dkD  r| j
                  j                  nd      }|| j                  z  }|S )zGet the style properties associated with this node only (not including parents in the DOM).

        Returns:
            Rich Style object.
        r]   r   Nr^   )r]   bgcolor)r   r  r]   a
rich_colorr^   r_   )r   styles     r   partial_rich_stylezStylesBase.partial_rich_styleE  s      ==)djjllQ.> 

%% ==.4??3D3Dq3H **
 	 r   )Nfull)r   rg   r   objectr   ru  r   ra   r   float | Noner   rv  r   r   r   CallbackType | Noner   r   returnzScalarAnimation | None)r   ru  rx  r[   )r   rg   rx  ru  r   )r   rg   r   object | Nonerx  ru  rx  r   )rx  zIterator[str])r   ru  rx  r[   )rx  zIterable[str])rx  zIterable[object])rx  zIterable[tuple[str, object]]rx  rR   )rx  r[   r/  rg   rx  r[   rx  rW   r/  rg   r   ry  rx  r[   r/  rg   r   ru  rx  ru  
rZ   r[   r   r[   r<  r[   r=  r[   rx  Nonerx  r  rI  r   rx  r  rM  rW   rx  r  )rW  rg   rx  r[   )r\  rg   r]  rS   r   r   rx  Styles)r   rg   rx  zTransition | None)ru   r   rc  r   rx  r   )rv   r   rh  r   rx  r   )rl  tuple[int, int]r<  r  rx  rQ   rx  r   )r   r   r   r   rU  r   r   r,   r3   rX   r<   rY   r"   rZ   r   r\   r   r   r]   r^   r`   r-   r_   r   rb   rc   r*   rd   re   r%   rf   r7   rh   r   r  r   ri   rj   rk   rl   r/   rm   rn   outlinero   rp   rq   rr   r!   rs   r1   rt   r(   r?   WIDTHru   HEIGHTrv   rw   rx   ry   rz   r   r{   r+   r|   r&   r5   r}   r~   r$   r   r#   r   r.   r   r   r)   r   r   r   r   r   r   r   r8   r   r    r   r   r   r0   r   r   alignr   r   content_alignr'   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r2   r   r   r;   r   r:   r   r4   r   r   r   r   r   r   r  r  r  r  r  r  propertyr  r  FRACTIONPERCENTr  r  AUTOr!  r#  r&  r(  r*  r  r2  r   r6  r:  r@  rD  rJ  rN  rS  classmethodrX  r^  r`  re  rj  rm  rs  r   r   r   r   r      sx   9JB  D. dSG
 $$4iMJ F !/J=%S#./E uQ1a01J $E!Q1$56O $%J !$/GP%'L[GMFDFV!.*=Hm4(FIU1c1-.JMuQQ/0LOaa 01MPeAsA./KN+,BFK1./EwO4E*G eAsA./KNaa 01MP q#q!12NQuQQ/0LOG#$4l4PJ;

3E&5F'DJJ5II.T[[UKJ/DJJ5II.T[[UKJ/>DOE!.(;J
 ".(;J
 NEF%'K'D --BCO72=AD34HIS3I>T1)<X!7	!BA"8"AP)td .aEF /$ GI)td (eD4N OE12H&Q/0DeL!OM"dSI%4::PTUL'$QUV$QtdSN,$ +$ q6H!!D9K0B'1J-  }-J%e,O#M2O#%J$]3+E2)-8)+-e<&uS#sA'>?+E!Q1,=>+-!0!?)%S#q*AB!.uQ1a/@!A.0OE !vd4G 2D2K.  2D2K.  /A/I+  7IV7M3  *<L()SF&Sq6H3 ,0 &,, , 	,
 , , , , ), , 
 ,\6"
H %%, 2 2 
 
 150M C C
 26--1N E E
 "&)) 9 9
 #'99 ; ;
 "iiED	D D # # $ $	$	$$
$
$   	
   
"0% 	& 	& IM"-8F	 &(&
"  r   r   c                      e Zd ZU dZded<    ee      Zded<   dZded	<    ee	      Z
d
ed<   ddZddZddZd dZd!dZddddd	 	 	 	 	 	 	 d"dZddZd#dZd$dZ	 	 d%	 	 	 	 	 	 	 d&dZd'dZ	 	 	 	 	 	 d(dZed)d       Zed*d       Zy)+r  Nr   r   )default_factoryrW   _rulesr   r   _updateszset[str]	importantc                p    | j                   j                  | _        | j                   j                  | _        y r   )r  r   r:  r  r  r   s    r   __post_init__zStyles.__post_init__e  s"    9=/3{{/G/Gr   c                b    t        | j                  | j                         | j                        S )z!Get a copy of this Styles object.)r   r  r  )r  r   r   r  r   s    r   copyzStyles.copyi  s'    >>#nn
 	
r   c                p    | j                   j                  |d      du}|r| xj                  dz  c_        |S )zRemoves the rule from the Styles object, as if it had never been set.

        Args:
            rule_name: Rule name.

        Returns:
            ``True`` if a rule was cleared, or ``False`` if it was already not set.
        Nr   )r  popr  )r   r/  changeds      r   r2  zStyles.clear_ruleq  s3     ++//)T2$>MMQMr   c                6    | j                   j                         S r   )r  r  r   s    r   r   zStyles.get_rules  s    {{!!r   c                   |7| j                   j                  |d      du}|r| xj                  dz  c_        |S | j                   j                  |      }|| j                   |<   ||k7  }|r| xj                  dz  c_        |S )zSet a rule.

        Args:
            rule: Rule name.
            value: New rule value.

        Returns:
            ``True`` if the rule changed, otherwise ``False``.
        Nr   )r  r  r  r   )r   rW  r   r  currents        r   r6  zStyles.set_rule  sx     =kkoodD1=G"N++//$'!DU"MMQMr   FTr;  c                  | j                   }||j                  sy |r(|j                  |j                  j                  |       |j                  |       |r,|j	                  dd      D ]  }|j                  ||        y y )N)r=  r   FT)	with_selfreverse)rZ   r=  )r   _is_mounted_parentr@  walk_children)r   rZ   r   r<  r=  r   rl  s          r   r@  zStyles.refresh  s     yy<t//dll.LL   1F#++eT+J >VW=> r   c                b    | xj                   dz  c_         | j                  j                          yrC  r   N)r  r  clearr   s    r   rD  zStyles.reset  s     r   c                    | xj                   dz  c_         | j                  j                  |j                                y)rG  r   N)r  r  updater   rH  s     r   rJ  zStyles.merge  s+     	5??,-r   c                d    | xj                   dz  c_         | j                  j                  |       y Nr   )r  r  r  rL  s     r   rN  zStyles.merge_rules  s"    5!r   c           	         | j                   j                  }|rdnd}| j                  j                         D cg c]  \  }}|| ||      rdndg|||f }}}|S c c}}w )a  Extract rules from Styles object, and apply !important css specificity as
        well as higher specificity of user CSS vs widget CSS.

        Args:
            specificity: A node specificity.
            is_default_rules: True if the rules we're extracting are
                default (i.e. in Widget.DEFAULT_CSS) rules. False if they're from user defined CSS.

        Returns:
            A list containing a tuple of <RULE NAME>, <SPECIFICITY> <RULE VALUE>.
        r   r   )r  r  r  r  )	r   specificityis_default_rulestie_breakeris_importantdefault_rulesr/  
rule_valuerM  s	            r   extract_ruleszStyles.extract_rules  s    " ~~22-1 *.):):)<6
 &	: !%i0Aa !  	 	6
 6
 6
s    Ac              #     K   | j                   }t        D ]  } ||      s|t        | |      f  | j                  rd| j                  f y y w)Nr  )r  r   r   r  )r   r  names      r   __rich_repr__zStyles.__rich_repr__  sT     == 	0D~GD$///	0 >>t~~-- s
   A0Ac              #    K   |j                   }|j                  } || d      } || d      } || d      } || d      }t        ||||f      syt        ||||f      r\ || d      }	 || d      }
 || d      } || d      }|	|
k(  r+|
|k(  r&||k(  r!|| d   \  }}|| d|j                   f y|r#|| d   \  }}| d| d|j                   f |r#|| d   \  }}| d| d|j                   f |r#|| d   \  }}| d	| d|j                   f |r$|| d   \  }}| d
| d|j                   f yyw)a  Get pairs of strings containing <RULE NAME>, <RULE VALUE> for border css declarations.

        Args:
            rules: A rules map.
            name: Name of rules (border or outline)

        Returns:
            An iterable of CSS declarations.
        _top_right_bottom_leftN z-topz-rightz-bottomz-left)r  r   anyallhex)r   rM  r  r  r:  has_top	has_right
has_bottomhas_leftr   r   bottomr   border_typeborder_colors                  r   _get_border_css_lineszStyles._get_border_css_lines  s     %%$$dV4=)vV_-	g./
tfEN+GY
H=>J9: dV4=)CvV_-Eg./FtfEN+De|FdN,1TF$-,@)\{m1\-=-=,>??? (-dm(<%KF$-K=,2B2B1C!DDD(-fo(>%KF&/k]!L4D4D3E#FFF(-g.>(?%KF'"{m1\5E5E4F$GGG(-en(=%KF%.[M<3C3C2D"EEE s   EEc                h    g }|j                   d fd} j                         }|j                  }d|v r |d|d          d|v r |d|d          d|v r |d|d   j                         d|v r |d|d   j                          j	                  |d      D ]  \  }} |||         j	                  |d      D ]  \  }} |||        d|v r j
                  \  }} |d| d	|        d
|v r |d
 j                         d|v r |d|d          d|v r |d|d          d|v r" |dd	j                   j                               d|v r |d j                         d|v r+ j                  J  |d j                  j                         d|v r |d j                  j                         d|v r |d j                  j                         d|v r |d j                  j                         d|v r |dt!         |d                   d|v r |d j"                  j                         d|v r |d j$                         d|v r |d j&                         d|v r |d j(                  j                         d|v r |d j*                  j                         d|v r |d  j,                  j                         d!|v r |d" j.                  j                         d#|v r |d$ j0                  j                         d%|v r |d& j2                  j                         d'|v r |d( j4                  j                         d)|v r |d* j6                         d+|v r# |d, j8                   d	 j:                          n@d-|v r |d.t!         j8                               d/|v r |d0t!         j:                               d1|v r |d2 j<                         d3|v r |d3t!         j>                               d4|v r |d4t!         j@                               d5|v r |d6t!         jB                               d7|v r |d8t!         jD                               d9|v r |d:t!         jF                               d;|v r |d<t!         jH                               d=|v r7 |d>d?j                  d@  jJ                  jM                         D                     dA|v r'dB|v r# |dC jN                   d	 jP                          n/dA|v r |dD jN                         ndB|v r |dE jP                         dF|v r'dG|v r# |dH jR                   d	 jT                          n/dF|v r |dI jR                         ndG|v r |dJ jT                         dK|v r |dL jV                         dM|v r |dN jX                         dO|v r |dP jZ                         dQ|v r |dQt!         j\                               dR|v r |dSt!         j^                               dT|v r- |dUd	j                  dV  j`                  xs dWD                     dX|v r- |dYd	j                  dZ  jb                  xs dWD                     d[|v r |d\t!         jd                               d]|v r |d^t!         jf                               d_|v r |d`t!         jh                               da|v r |dbt!         jj                               dc|v r |ddt!         jl                               de|v r |dft!         jn                               dg|v r |dh jp                  j                         di|v r |dj jr                  j                         dk|v r |dlt!         jt                               dm|v r |dn jv                  j                         do|v r |dp jx                  j                         dq|v r |drt!         jz                               ds|v r |dt j|                  j                         du|v r |dv j~                  j                         dw|v r |dxt!         j                               dy|v r |dz j                  j                         d{|v r |d| j                  j                         d}|v r |d~t!         j                               d|v r |dt!         j                               d|v rTd|v rP j                   j                  k(  r |d j                         nR |d j                   d	 j                          n/d|v r |d j                         nd|v r |d j                         d|v r, j                  \  }	}
|	dk7  r |d|	 d?|
j                          d|v r( j                  \  }} |dd| d|j                          d|v r |d j                         d|v r |d j                         d|v r |d j                         d|v r |dt!         j                               |j                          |S )Nc                \    | j                   v r |  d| d       y  |  d| d       y )Nz: z !important;;)r  )r  r   appendr   s     r   append_declarationz,Styles.css_lines.<locals>.append_declaration"  s9    t~~%$r%56$r%*+r   rX   rY   rd   re   r  r  rf   r  rh   r{   r|   r   r   rZ   r]   r^   r`   zbackground-tintr_   z
text-styler   r}   z
overflow-xr~   z
overflow-yr   zscrollbar-colorr   zscrollbar-color-hoverr   zscrollbar-color-activer   zscrollbar-corner-colorr   zscrollbar-backgroundr   zscrollbar-background-hoverr   zscrollbar-background-activer   zscrollbar-gutterscrollbar_sizezscrollbar-sizer   zscrollbar-size-horizontalr   zscrollbar-size-verticalrt   z
box-sizingru   rv   rw   z	min-widthrx   z
min-heightry   z	max-widthrz   z
max-heightr   
transitionz, c              3  0   K   | ]  \  }}| d |   yw)r  Nr   ).0r  r  s      r   	<genexpr>z#Styles.css_lines.<locals>.<genexpr>  s'      (j fAj\*s   r   r   r  zalign-horizontalzalign-verticalr   r   zcontent-alignzcontent-align-horizontalzcontent-align-verticalr   z
text-alignrm   zborder-title-alignrn   zborder-subtitle-alignrb   rc   ztext-opacityr   zgrid-columnsc              3  2   K   | ]  }t        |        y wr   rg   r  scalars     r   r  z#Styles.css_lines.<locals>.<genexpr>  s     KVK   r   r   z	grid-rowsc              3  2   K   | ]  }t        |        y wr   r  r  s     r   r  z#Styles.css_lines.<locals>.<genexpr>  s     HVHr  r   zgrid-size-columnsr   zgrid-size-rowsr   zgrid-gutter-horizontalr   zgrid-gutter-verticalr   zrow-spanr   zcolumn-spanr   z
link-colorr   zlink-backgroundr   z
link-styler   zlink-color-hoverr   zlink-background-hoverr   zlink-style-hoverr   ztitle-colorr   ztitle-backgroundr   ztitle-text-styler   zsubtitle-colorr   zsubtitle-backgroundborder_subtitle_text_stylezsubtitle-text-styler   r   r   	constrainzconstrain-xzconstrain-yrs   r   r   "z" r   z	text-wrapr   ztext-overflowr   r   zline-pad)r  rg   r   rg   rx  r  )Nr  r   r   r\  r  rf   rh   joinr   r   rZ   r  r]   r  r^   r`   rg   r   r}   r~   r   r   r   r   r   r   r   r   r   r   rt   ru   rv   rw   rx   ry   rz   r   r  r   r   r   r   r   rm   rn   rb   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r   sort)r   linesr  rM  r:  r  rW  xykeyline_typekeyline_colorhatch_characterhatch_colorr  s   `            @r   	css_lineszStyles.css_lines  s4
   	,  99y%	*:;5 |U<-@Ay%	*:*>*>?uxx)<)<=44UHE 	+JD$tT*	+ 44UIF 	+JD$tT*	+ u;;DAqxA3as4z4==9U?vuV}5ewg7ux$++)>?ew

3u;;***x)9)9:ew

75 |T__-@-@A%0$2F2F2J2JK5 |S,1G-HIU?vtyy}}55 |T__=5 |T__=%0$2F2F2J2JK"e+68R8R8V8VW#u,($*E*E*I*I $u,($*E*E*I*I "U*5t7P7P7T7TU'50,d.M.M.Q.Q )E1-t/O/O/S/S &143H3HIu$ 112!D4P4P3QR
 +e3"/T5S5S1T )E1"-s43O3O/P 5 |T__=ewDJJ8uxT[[)9:%{C,?@5 |S-AB%{C,?@5 |S-ABE!		 ,0,<,<,B,B,D  &+;u+DD112!D4G4G3HI  5(143H3HI&/1D1DE%.3Ku3T00143N3N2OP (50*D,I,I &.79T9TU5 |T__=5(3T5L5LM"e+68R8RSy#dll*;<U"~s43D3D/EFU"K43D3D3JKK %H4>>3GRHH %'2C8N8N4OPu$/T5H5H1IJ#u,(#d.I.I*J "U*5s4;T;T7UVz3t}}+=>E!}c$2B2B.CD5 |T__-@-@A%0$2F2F2J2JK5 |S-AB&143H3H3L3LM"e+68R8R8V8VW&13t7L7L3MN5(}d.E.E.I.IJ$-143O3O3S3ST5(13t7N7N3OP"e+/1K1K1O1OP'50%t'F'F'J'J (504c$:T:T6UVy#dll*;<E!mu&<4#3#33";0@0@A"D$4$4#5Qt7G7G6H!I e#}d.>.>?e#}d.>.>?*.,,'L-v%"9bARAR@S.TUe+/::(O[w!O+<B{>O(PQ%{DNN;e#0B0BCux5z3t}}+=>

r   c                8    dj                  | j                        S )N
)r  r  r   s    r   r\  z
Styles.css  s    yy((r   r  rx  r  r|  r}  )rW  rg   r   ry  rx  r[   )rZ   r[   r   r[   r<  r[   rx  r  r  r  )Fr   )r  rK   r  r[   r  r   rx  z#list[tuple[str, Specificity6, Any]]rx  zrich.repr.Result)rM  rW   r  rg   rx  zIterable[tuple[str, str]])rx  z	list[str]rx  rg   )r   r   r   r   r   r   rW   r  r  setr  r  r  r2  r   r6  r@  rD  rJ  rN  r  r  r  r  r  r\  r   r   r   r  r  \  s      D.X6FH6Hc4Ix4H
"2 > > 	>
 > 
>$
." "'	!!! ! 	!
 
-!F.4F4F%(4F	"4Fl v vp ) )r   r  c                  D   e Zd ZdZddZddZed d       Zed!d       Zed!d       Z	ed"d       Z
ed#d       Zd	d
d
ded
dd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d$dZd%dZddddd	 	 	 	 	 	 	 	 	 d&dZd'dZd(dZd)dZd*dZd+dZd,dZd-d.dZd*dZd/dZed0d       Zy
)1RenderStyleszOPresents a combined view of two Styles object: a base Styles and inline Styles.c                f    || _         || _        || _        d | _        d| _        d | _        d | _        y )Nr   )r   _base_styles_inline_styles_animater  _rich_style_gutter)r   r   baseinline_styless       r   __init__zRenderStyles.__init__  s6    	 +.25937r   c                    t        |t              r\| j                  j                  |j                  j                  k(  xr- | j                  j                  |j                  j                  k(  S t
        S r   )r   r  r  r  r  r   rH  s     r   r   zRenderStyles.__eq__(  s_    e\*!!((E,>,>,E,EE N''..%2F2F2M2MM r   c                v    | j                   | j                  j                   z   | j                  j                   z   S )znA cache key, that changes when any style is changed.

        Returns:
            An opaque integer.
        )r  r  r  r   s    r   
_cache_keyzRenderStyles._cache_key0  s0     }}t00999D<O<O<X<XXXr   c                    | j                   S )z!Quick access to base (css) style.)r  r   s    r   r  zRenderStyles.base9  s        r   c                    | j                   S )z"Quick access to the inline styles.)r  r   s    r   inlinezRenderStyles.inline>  s     """r   c                J    | j                   J | j                   j                  S )z(Get a Rich style for this Styles object.)r   
rich_styler   s    r   r  zRenderStyles.rich_styleC  s$     yy$$$yy###r   c                    | j                    | j                   \  }}|| j                  k(  r|S | j                  | j                  j                  z   }| j                  |f| _         |S )znGet space around widget (padding + border)

        Returns:
            Space around widget content.
        )r  r  rd   r  r  )r   	cache_keyr  s      r   r  zRenderStyles.gutterI  sZ     <<# $IvDOO+ 3 330r   .Ng        rt  final_valuer   r   delayr   r   r   c                   | j                   B| j                  J | j                  j                  j                  j	                  |       | _         | j                   J | j                  |||||||||		       y)an  Animate an attribute.

        Args:
            attribute: Name of the attribute to animate.
            value: The value to animate to.
            final_value: The final value of the animation. Defaults to `value` if not set.
            duration: The duration (in seconds) of the animation.
            speed: The speed of the animation.
            delay: A delay (in seconds) before the animation starts.
            easing: An easing method.
            on_complete: A callable to invoke when the animation is finished.
            level: Minimum level required for the animation to take place (inclusive).
        Nr  )r  r   r   animatorbind)
r   r   r   r  r   r   r  r   r   r   s
             r   animatezRenderStyles.animateY  sz    4 == 99((( IIMM2277=DM}}(((## 	 
	
r   c              #     K   | j                    t        D ]$  }| j                  |      s|t        | |      f & y wr   )r   r   r  r   r.  s     r   r  zRenderStyles.__rich_repr__  s<     ii# 	:I}}Y'y!999	:s   )??FTr;  c               B    | j                   j                  ||||       y )Nr;  )r  r@  r?  s        r   r@  zRenderStyles.refresh  s&     	##HVW 	$ 	
r   c                :    | j                   j                  |       yrF  )r  rJ  rH  s     r   rJ  zRenderStyles.merge  s     	!!%(r   c                d    | j                   j                  |       | xj                  dz  c_        y r  )r  rN  r  rL  s     r   rN  zRenderStyles.merge_rules  s$    ''.r   c                b    | j                   j                          | xj                  dz  c_        yr  )r  rD  r  r   s    r   rD  zRenderStyles.reset  s"    !!#r   c                r    | j                   j                  |      xs | j                  j                  |      S )zCheck if a rule has been set.)r  r  r  r.  s     r   r  zRenderStyles.has_rule  s6    ""++I6 
$:K:K:T:T;
 	
r   c                    | j                   j                  | j                  j                  t        fd|D              S )zCheck if any of the supplied rules have been set.

        Args:
            rule_names: Number of rules.

        Returns:
            `True` if any of the supplied rules have been set, `False` if none have.
        c              3  B   K   | ]  } |      xs  |        y wr   r   )r  r  base_has_ruleinline_has_rules     r   r  z-RenderStyles.has_any_rules.<locals>.<genexpr>  s#     WD?4(?M$,??Ws   )r  r  r  r  )r   
rule_namesr  r  s     @@r   has_any_ruleszRenderStyles.has_any_rules  s8     --66))22WJWWWr   c                :    | j                   j                  ||      S r   )r  r6  r5  s      r   r6  zRenderStyles.set_rule  s    ""++Iu==r   c                    | j                   j                  |      r| j                   j                  ||      S | j                  j                  ||      S r   )r  r  r:  r  r9  s      r   r:  zRenderStyles.get_rule  sH    ''	2&&//	7CC  )))W==r   c                8    | j                   j                  |      S )zClear a rule (from inline).)r  r2  r.  s     r   r2  zRenderStyles.clear_rule  s    ""--i88r   c                ~    i | j                   j                  | j                  j                  }t        t        |      S )zGet rules as a dictionary)r  r  r  r   rW   rL  s     r   r   zRenderStyles.get_rules  s6    J4$$++Jt/B/B/I/IJHe$$r   c                    t               }|j                  | j                         |j                  | j                         |j                  }|S )z$Get the CSS for the combined styles.)r  rJ  r  r  r\  )r   r   combined_csss      r   r\  zRenderStyles.css  s>     T&&'T(()zzr   )r   rT   r  r  r  r  rx  r  )rI  ru  rx  r[   rz  r  r  r{  )r   rg   r   zstr | float | Animatabler  ru  r   rv  r   rv  r  ra   r   zEasingFunction | strr   rw  r   r   rx  r  r  r  r  r  r  r|  )r  rg   rx  r[   r~  r   r  r}  r  )r   r   r   r   r  r   r  r  r  r  r  r  r   r  r  r@  rJ  rN  rD  r  r  r6  r:  r2  r   r\  r   r   r   r  r    s   Y8 Y Y ! ! # # $ $
  ( "!%"'5+/ &(
(
 ((

 (
 (
 (
 (
 %(
 )(
 (
 
(
T: 

 

 	


 

 

 


)

X>>
9%
  r   r  )u
__future__r   dataclassesr   r   	functoolsr   operatorr   typingr   r	   r
   r   r   r   r   	rich.reprrich
rich.styler   typing_extensionsr   textual._animatorr   r   r   r   textual._typesr   r   textual.colorr   textual.css._style_propertiesr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   textual.css.constantsr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   textual.css.scalarr=   r>   r?   textual.css.scalar_animationr@   textual.css.transitionrA   textual.css.typesrB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   textual.geometryrQ   rR   rS   textual.domrT   textual.layoutrU   rW   listr   r  r   	frozensetr   rR  r   reprr   r  r  r   r   r   <module>r3     s@   " (   R R R   ' W W 7       2     : 9 8 -    " --#%~y ~B (**//12
:&:&	 	D 
z)Z z)  z)z u: u ur   