
    Cj&                       % S SK Jr  S SKJr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JrJrJr  S SKJr  \(       a  S S	KJr  S S
KJr  SrS\S'   \ " S S5      5       r " S S\5      r " S S\5      r g)    )annotations)ABCabstractmethod)	dataclass)TYPE_CHECKINGClassVarIterable
NamedTuple)
SpatialMap)Canvas	Rectangle)OffsetRegionSizeSpacing)StripRenderable)	TypeAlias)Widgetlist[WidgetPlacement]r   ArrangeResultc                      \ rS rSr% SrS\S'    S\S'    S\S'    S	rS
\S'    \SS j5       r\SS j5       r	SS jr
Srg	)DockArrangeResult   z:Result of [Layout.arrange][textual.layout.Layout.arrange].r   
placementszset[Widget]widgetsr   scroll_spacingNz"SpatialMap[WidgetPlacement] | None_spatial_mapc                    U R                   c;  [        5       U l         U R                   R                  S U R                   5       5        U R                   $ )zA lazy-calculated spatial map.c              3     #    U  HM  nUR                   R                  UR                  5      UR                  UR                  UR
                  U4v   MO     g 7fN)regiongrowmarginoffsetfixedoverlay).0	placements     `/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/layout.py	<genexpr>0DockArrangeResult.spatial_map.<locals>.<genexpr>'   sS      	% "1I $$)))*:*:;$$OO%% "1s   AA)r   r   insertr   selfs    r)   spatial_mapDockArrangeResult.spatial_map"   sO     $ *D$$ 	% "&	% 	        c                p    U R                   u  pp4U R                  R                  R                  SX#S45      $ )zDThe total area occupied by the arrangement.

Returns:
    A Region.
r   )r   r/   total_regionr"   )r.   _toprightbottom_lefts        r)   r3   DockArrangeResult.total_region4   s8     &*%8%8"V,,111eQ2GHHr1   c                (   U R                   U;   a  U R                  $ U R                  R                  U5      nUR                  nU Vs/ s H<  nUR
                  (       d&  U" UR                  UR                  -   5      (       d  M:  UPM>     nnU$ s  snf )zrGet the placements visible within the given region.

Args:
    region: A region.

Returns:
    Set of placements.
)r3   r   r/   get_values_in_regionoverlapsr%   r!   r$   )r.   r!   visible_placementsr;   r(   culled_placementss         r)   get_visible_placements(DockArrangeResult.get_visible_placements>   s     &??"!--BB6J?? 0
/	(9+;+;i>N>N+N"O / 	 

 ! 
s   9BB)r   )returnzSpatialMap[WidgetPlacement])r@   r   )r!   r   r@   r   )__name__
__module____qualname____firstlineno____doc____annotations__r   propertyr/   r3   r>   __static_attributes__ r1   r)   r   r      s[    D%%R.,7;L4;3! !" I I!r1   r   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   SrS\S'   SrS\S'   SrS\S'   Sr	S\S'   \
SS j5       r\      SS j5       r\SS j5       r\SS j5       r      SS jrSrg)WidgetPlacementT   zEThe position, size, and relative order of a widget within its parent.r   r!   r   r$   r   r#   r   widgetr   intorderFboolr%   r&   absolutec                H    U R                  U R                  R                  S9$ )z7Reset the origin in the placement (moves it to (0, 0)).)r!   )_replacer!   reset_offsetr-   s    r)   reset_originWidgetPlacement.reset_origin`   s     }}DKK$<$<}==r1   c                    U(       aD  U VVVVVVV	V
s	/ s H(  u  p4pVpxpU " UR                   c  X2-   OUUUUUUU	U
5      PM*     s	n
n	nnnnnn$ U$ s  s	n
n	nnnnnnf )zMove all non-absolute placements by a given offset.

Args:
    placements: List of placements.
    offset: Offset to add to placements.

Returns:
    Placements with adjusted region, or same instance if offset is null.
)absolute_offset)clsr   translate_offsetr!   r$   r#   layout_widgetrO   r%   r&   rQ   s              r)   	translateWidgetPlacement.translatee   s       _i  _iZFF5  )88@ 1#! _i  " # s   /Ac                n    [        U5       H&  u  p#UR                  (       d  M  UR                  X'   M(     g)zRApplies absolute offsets (in place).

Args:
    placements: A list of placements.
N)	enumeraterQ   rU   )rY   r   indexr(   s       r)   apply_absoluteWidgetPlacement.apply_absolute   s0     !** 5E!!!$-$:$:
! !6r1   c                    [         R                  " U Vs/ s H'  o"R                  R                  UR                  5      PM)     sn5      nU$ s  snf )zGet a bounding region around all placements.

Args:
    placements: A number of placements.

Returns:
    An optimal binding box around all placements.
)r   
from_unionr!   r"   r#   )rY   r   r(   bounding_regions       r)   
get_boundsWidgetPlacement.get_bounds   sI     !++FPQj""9#3#34jQ
  Rs   .Ac           
     V   U R                   nUR                  nUR                  (       d  UR                  SS5      (       d  U $ U R                  nU R
                  nUR                  b+  UR                  UR                  UR                  -   U-
  5      nUR                  U R                  5      R                  UR                  UR                  U R
                  X-
  5      nUR                  U R                  R                  -
  nXpR                  :w  a  U u  pXpcpp[        XWXcXX5      nU$ U $ )a%  Apply any absolute offset or constrain rules to the placement.

Args:
    constrain_region: The container region when applying constrain rules.
    absolute_offset: Default absolute offset that moves widget into screen coordinates.

Returns:
    Processes placement, may be the same instance.
constrain_xconstrain_y)rM   stylesrX   has_any_rulesr!   r#   	at_offsettop_leftr\   r$   	constrainri   rj   rK   )r.   constrain_regionrX   rM   rk   r!   r#   r$   _offsetrO   r%   r&   rQ   r(   s                 r)   process_offsetWidgetPlacement.process_offset   s    %%f.B.B=/
 /
 K!!-%%&&8?JF !!$++.88KK.	
 !3!33[[ OSLFVU7'gI r1   rI   N)r@   rK   )r   r   rZ   r   r@   r   )r   r   r@   None)r   zIterable[WidgetPlacement]r@   r   )rp   r   rX   r   r@   rK   )rA   rB   rC   rD   rE   rF   rO   r%   r&   rQ   rG   rU   classmethodr\   ra   rf   rr   rH   rI   r1   r)   rK   rK   T   s    ONNONE3NE4GTHd> > .BH	 @ ; ;  ( &(9?(	(r1   rK   c                      \ rS rSr% SrSrS\S'   SS jr\ S         SS jj5       r	SS jr
          SS	 jrSS
 jrSrg)Layout   zNBase class of the object responsible for arranging Widgets within a container. zClassVar[str]namec                "    SU R                    S3$ )N<>)rz   r-   s    r)   __repr__Layout.__repr__   s    499+Qr1   c                    g)zGenerate a layout map that defines where on the screen the widgets will be drawn.

Args:
    parent: Parent widget.
    size: Size of container.

Returns:
    An iterable of widget location
NrI   )r.   parentchildrensizegreedys        r)   arrangeLayout.arrange   s    r1   c                    UR                   (       d  SnU$ UR                  [        UR                  (       a  SOUR                  S5      SS9nUR
                  R                  nU$ )zGet the optimal content width by arranging children.

Args:
    widget: The container widget.
    container: The container size.
    viewport: The viewport size.

Returns:
    Width of the content.
r   T)optimal)_nodesr   r   shrinkwidthr3   r5   )r.   rM   	containerviewportr   arrangements         r)   get_content_widthLayout.get_content_width   s]     }}E  !..&--QY__a@ ) K  ,,22Er1   c                T   UR                   (       a  UR                  R                  (       dF  [        S UR                   5       5      (       a%  UR                  [        XBR                  5      5      nOUR                  [        US5      5      nUR                  R                  nU$ SnU$ )zGet the content height.

Args:
    widget: The container widget.
    container: The container size.
    viewport: The viewport.
    width: The content width.

Returns:
    Content height (in lines).
c              3  L   #    U  H  oR                   R                  v   M     g 7fr    )rk   is_dynamic_height)r'   childs     r)   r*   ,Layout.get_content_height.<locals>.<genexpr>	  s      3<U5..<Us   "$r   )	r   rk   	is_dockedalldisplayed_childrenr   r   heightr3   )r.   rM   r   r   r   r   r   s          r)   get_content_heightLayout.get_content_height   s     ====**s 3<B<U<U3 0 0 %nnT%9I9I-JK$nnT%^< --44F  Fr1   c                  ^	^
^ UR                   u  p#[        X#5      nUR                  R                  u  mm
T
(       a  UR                  S   T
-   m
UR
                  R                  m	SU	U
U4S jjnUR                   Vs/ s H(  nUR                  (       d  M  U" UR                  5      PM*     nnUR                  XqR                  5      nU$ s  snf )zRender keylines around all widgets.

Args:
    container: The container widget.

Returns:
    A renderable to draw the keylines.
r   c                l   > U R                   T-
  S-
  nU R                  u  p#[        XS-   US-   TT5      $ )zGet a canvas Rectangle that wraps a region.

Args:
    region: Widget region.

Returns:
    A Rectangle that encloses the widget.
)   r      )r$   r   r   )r!   r$   r   r   container_offsetkeyline_color
line_styles       r)   get_rectangle,Layout.render_keyline.<locals>.get_rectangle'  s=     ]]%55>F"KKMEVQY
M:VVr1   )r!   r   r@   r   )
outer_sizer   rk   keylinebackground_colorscontent_regionr$   r   visibler!   render
rich_style)r.   r   r   r   canvasr   rM   
primitivescanvas_renderabler   r   r   s            @@@r)   render_keylineLayout.render_keyline  s     ",,&$-$4$4$<$<!
M%77:]JM$33::	W 	W $,,
,~~ )M&--(, 	 

 #MM*6J6JK  
s   =CCrI   N)r@   str)T)
r   r   r   zlist[Widget]r   r   r   rP   r@   r   )rM   r   r   r   r   r   r@   rN   )
rM   r   r   r   r   r   r   rN   r@   rN   )r   r   r@   r   )rA   rB   rC   rD   rE   rz   rF   r~   r   r   r   r   r   rH   rI   r1   r)   rw   rw      s    XD-     	
  
 "*)-9=FI	6%!r1   rw   N)!
__future__r   abcr   r   dataclassesr   typingr   r   r	   r
   textual._spatial_mapr   textual.canvasr   r   textual.geometryr   r   r   r   textual.stripr   typing_extensionsr   textual.widgetr   r   rF   r   rK   rw   rI   r1   r)   <module>r      sm    " # ! @ @ + , : : )+%2y 2 <! <! <!~tj tno!S o!r1   