
    CjU#                    >   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JrJrJrJr  S SKJrJr  \	(       a  S S	KJr  S
rSS jr\" S5      r\" S5      r\" S5      r S           SS jjr S         SS jjr         SS jr!g)    )annotations)defaultdict)Fraction)
attrgetter)TYPE_CHECKINGIterableMappingSequence)	partition)NULL_OFFSETNULL_SPACINGRegionSizeSpacing)DockArrangeResultWidgetPlacement)Widgetic                p    [        [        5      nU  H   nXR                     R                  U5        M"     U$ )zOrganize widgets into layers.

Args:
    widgets: The widgets.

Returns:
    A mapping of layer name onto the widgets within the layer.
)r   listlayerappend)widgetslayerswidgets      b/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/_arrange.py_build_layersr      s2     .9->F||##F+ M    zstyles.is_dockedzstyles.is_splitdisplayc           
        / n[         nU R                  n[        [        [        U5      5      n[        U5      n	U	R                  5        GH  n
[        [        U
5      u  pU(       a   [        XU5      u  pUR                  U5        OUR                  nUR                  R                  U5      n[        [        U5      u  nnU(       a6  [        UXU(       + S9u  nnUR                  U5        UR                  U5      nO
[!        5       nUU-  nU(       d  M  U R#                  U R$                  R'                  U UUR(                  U(       + S95      nUR+                  U5      nUR,                  nUR.                  S:w  d  UR0                  S:w  a  [2        R4                  " U5      nUR(                  u  nnUUR7                  UR(                  U R8                  R;                  UR<                  (       a  SOUUR>                  (       a  SOU5      5      R@                  -  nU(       a  [2        RB                  " UU5      n[2        RD                  " U5        UR                  U5        GM     [G        U[I        U5      U5      $ )zArrange widgets by applying docks and calling layouts

Args:
    widget: The parent (container) widget.
    size: The size of the available area.
    viewport: The size of the viewport (terminal).

Returns:
    Widget arrangement information.
greedylefttopr   )%r   stylesr   filter_get_displayr   valuesr   
_get_split_arrange_split_widgetsextendregionget_spacing_between	_get_dock_arrange_dock_widgetsshrinkr   process_layoutlayoutarrangesizegrow_maximumoffsetalign_horizontalalign_verticalr   
get_bounds_align_size_extremaapply_dimensionsis_auto_widthis_auto_heightclamped	translateapply_absoluter   set)r   childrenr3   viewportoptimal
placementsscroll_spacingr$   display_widgetsr   r   non_split_widgetssplit_widgets_split_placementsdock_regionsplit_spacinglayout_widgetsdock_widgets_dock_placementsdock_spacinglayout_placementsplacement_offsetbounding_regioncontainer_widthcontainer_heights                            r   r2   r2   '   s>   " )+J!N]]F 6,9:O?+F==?+4Z+I(-CX.* /0++K77D (1<M'N$ -BkK.*l ./%,,\:K"9L%> & 5 5%%NK,<,<[ & !
 ,88FN*11&&&0F4I4IU4R"1"<"<=N"O4?4D4D1!1 F$6$6#((OO44#11#228H% '   $3$=$=%'7%! **+<=/0s #v Z_)=~NNr   c                   [         n[        nUR                  nUR                  nUu  p[        n
S=n=n=p/ nUR
                  nU  GH  nUR                  R                  nUR                  Xr[        UR                  5      [        UR                  5      US9nUu  nnn[        U5      UR                  -   n[        U5      UR                  -   nUS:X  a  [        SU	U-
  UU5      n[        UU5      nOqUS:X  a  [        SSUU5      n[        UU5      nOPUS:X  a  [        SSUU5      n[        UU5      nO/US:X  a  [        UU-
  SUU5      n[        UU5      nO[        S5      eUR!                  U5      nUR                  nUR#                  S5      (       a  UR                  R%                  UU5      O[&        nU" U" UR)                  U5      UU
UUS	S
5      5        GM     [+        XX5      nUU4$ )zArrange widgets which are *docked*.

Args:
    dock_widgets: Widgets with a non-empty dock.
    region: Region to dock within.
    viewport: Size of the viewport.

Returns:
    A tuple of widget placements, and additional spacing around them.
r   r    bottomr#   r"   rightzinvalid value for dock edger5   TF)r   TOP_Zr5   r3   r   r   r$   dock_get_box_modelr   widthheightintr   maxAssertionErrorr/   has_ruleresolver   r?   r   )rN   r+   rC   r!   _WidgetPlacementtop_zregion_offsetr3   r\   r]   null_spacingr#   rX   rW   r"   rE   append_placementdock_widgetedge	box_modelwidget_width_fractionwidget_height_fractionmarginwidget_widthwidget_heightrK   r$   r5   rP   s                                r   r.   r.      s    'EMMM;;DMEL"##C#%#&(*J!((#!!&&..HTZZ0(4;;2GPV / 
	 AJ=5v01FLL@23fmmC8 F]$:L-XK/FU] A|]CKc=)CV^ A|]CKt\*DW_ !5q,VK|,E !!>??!((0## x((	 MM!!
  	 	%%m4
	
I $` 3v4L%%r   c                   [         n/ nUR                  nUR                  n[        n[        nU  GHD  n	U	R
                  R                  n
U	R                  X[        UR                  5      [        UR                  5      5      nUu  pnU
S:X  a.  [        U5      UR                  -   nUR                  U* 5      u  nnOU
S:X  a-  [        U5      UR                  -   nUR                  U5      u  nnOrU
S:X  a-  [        U5      UR                  -   nUR                  U5      u  nnO?U
S:X  a.  [        U5      UR                  -   nUR                  U* 5      u  nnO[        S5      eU" U" UXU	SSS5      5        GMG     XF4$ )	a2  Arrange split widgets.

Split widgets are "docked" but also reduce the area available for regular widgets.

Args:
    split_widgets: Widgets to arrange.
    size: Available area to arrange.
    viewport: Viewport (size of terminal).

Returns:
    A tuple of widget placements, and the remaining view area.
rW   r#   r"   rX   zinvalid value for split edge   TF)r   r   r+   r   r   r$   splitr[   r   r\   r]   r^   split_horizontalsplit_verticalr`   )rI   r3   rC   rc   rE   rg   view_regionrf   null_offsetsplit_widgetrr   rj   rk   rl   rm   ro   split_regionrn   s                     r   r)   r)      s|    '(*J!((++KLK%##)) //HTZZ0(4;;2G
	 AJ=vH 67&--GM(3(D(Dm^(T%Ke^ 67&--GM(3(D(D](S%L+f_45DL(3(B(B<(P%L+g45DL(3(B(BL=(Q%K !?@@kq$PU	
+ &6 ""r   N)r   zIterable[Widget]returnzMapping[str, Sequence[Widget]])F)r   r   rB   Sequence[Widget]r3   r   rC   r   rD   boolry   r   )T)
rN   rz   r+   r   rC   r   r!   r{   ry   z%tuple[list[WidgetPlacement], Spacing])rI   rz   r3   r   rC   r   ry   z$tuple[list[WidgetPlacement], Region])"
__future__r   collectionsr   	fractionsr   operatorr   typingr   r   r	   r
   textual._partitionr   textual.geometryr   r   r   r   r   textual.layoutr   r   textual.widgetr   rY   r   r-   r(   r&   r2   r.   r)    r   r   <module>r      s   " #   = = ( M M =% 	 )*	)*
)$ UOUOUO UO 	UO
 UO UOr TXJ&"J&,2J&>BJ&LPJ&*J&Z1##1#+/1#;?1#)1#r   