
    AHj*                       d dl m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 d dlmZ d dlmZ d dlmZ d d	lmZ erd d
lmZ dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotations)Fraction)
accumulate)TYPE_CHECKINGIterableSequencecast)Literal)BoxModel)Scalar)RenderStyles)Size)WidgetFN)expandshrinkminimumsc          
       ! | D cg c]&  }|j                   r|dfn||j                  ||      f( }	}t        j                  }
 |
t	        |	D cg c]  \  }}|	|j
                   c}}            }|t        |       dz
  z  }|r}t	        |	D cg c]
  \  }}|	| c}}      }t        t        d      t        ||z
        |z
        }t        ||      }|	D cg c]  \  }}| |
|j
                        |z  n|  }}}nt        d|	D cg c]  \  }}|	 c}}      }t        |      !|s|r||z
  }t	        |      }|r)||z
  }|dkD  r|D cg c]  }|t        ||      |z  z    }}|rt        d      }||z
  }||dkD  rt        t        t        t        |      |            D ]I  \  }\  }}t        t        ||      |      |z  }t        |||z
        }|||<   ||z
  |z   }||z
  }|dk  sI n t	        |      }||z
  }|dkD  r|D cg c]  }|t        ||      |z  z
   }}dgt        !fd|D              D cg c]  }|j                          c}z   }t        |ddd   |ddd         D cg c]  \  }}|||z
  f } }}| S c c}w c c}}w c c}}w c c}}w c c}}w c c}w c c}w c c}w c c}}w )a.  Resolve a list of dimensions.

    Args:
        dimensions: Scalars for column / row sizes.
        total: Total space to divide.
        gutter: Gutter between rows / columns.
        size: Size of container.
        viewport: Size of viewport.

    Returns:
        List of (<OFFSET>, <LENGTH>)
    N   r   zlist[Fraction]c              3  4   K   | ]  }|fD ]  }|   y wN ).0fractionvaluefraction_gutters      H/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/_resolve.py	<genexpr>zresolve.<locals>.<genexpr>k   s3      #
"O4#
  #
#
s      )is_fractionresolver   
from_floatsumr   lenmaxr	   	enumeratezipmapr   	__floor__)"
dimensionstotalguttersizeviewportr   r   r   scalarresolvedr!   r   total_fractiontotal_gutter_consumed	remainingfraction_unitresolved_fractionstotal_space
used_spaceremaining_spacewidthoneexcess_spaceindexminimum_widthremove_spaceupdated_widthoffsetsoffset1offset2resultsr   s"                                    @r   r    r       sj   : !6  !! TN&..x89:6H 6 $$J(O.fhh>NV\\OPN S_q01LHU[Q@TUVXel.B%Ch%NO	 N; %-
  9A8HJv||$}4hV
 

 "8DKAxxD
 v&Ol*+,
)J6O" "4& HUJ7/II&" & 1+C%3L#q(85>Hh/1CD6 	1E1M5 $'xz'BC#H<#WL$'u|7K$LM0=&u-!+e!3m!CJ#-#;L#q(	 !!34
)K7a "4& HUJ7,FF&" &
 c" #
.#
 
 	 G !$GCaCL'!$Q$- @GW 
'G#$G 
 N[6 P
 V
 E&.&
sA   +J
JJ
J
J
#JJ%J+J0J58J:c                   t         }|r| s |d      S |}t        d      f	 	 	 	 	 d
fd}g }|dk(  rZ| D 	cg c]N  }	|	j                  dk7  r=t        t        |	j                         ||	j
                         ||	j                        fP }}	nY| D 	cg c]N  }	|	j                  dk7  r=t        t        |	j                         ||	j                         ||	j                        fP }}	dgt        |      z  }
t        t        d |D                    }|dkD  rd} |||      }t        |      D ]w  \  }\  }}}|
|   }||j                  |      }|'||k  r"||z  }| ||j                        z  }||
|<   d	}N|Q||kD  sW||z  }| ||j                        z  }||
|<   d	}y |sn|dkD  r|dkD  rt        ||      S |S c c}	w c c}	w )a@  Calculate the fraction.

    Args:
        widget_styles: Styles for widgets with fraction units.
        size: Container size.
        viewport_size: Viewport size.
        remaining_space: Remaining space for fr units.
        resolve_dimension: Which dimension to resolve.

    Returns:
        The value of 1fr.
    r   c                2    | dS | j                  |      S )zResolve a scalar if it is not None.

        Args:
            scalar: Optional scalar to resolve.
            fraction_unit: Size of 1fr.

        Returns:
            Fraction if resolved, otherwise None.
        N)r    )r.   r5   r,   viewport_sizes     r   resolve_scalarz-resolve_fraction_unit.<locals>.resolve_scalar   s+     ~ 	
 m]C	
    r:   screenNc              3  <   K   | ]  \  }}}|j                     y wr   )r   )r   r.   r2   s      r   r   z(resolve_fraction_unit.<locals>.<genexpr>   s     %O|vq!fll%Os   r   FT)r.   zScalar | Noner5   r   returnzFraction | None)r   overlayr	   r   r:   	min_width	max_widthheight
min_height
max_heightr#   r"   r%   r    r   )widget_stylesr,   rG   r9   resolve_dimension	_Fractioninitial_spacerH   r    stylesr/   remaining_fractionremaining_space_changedresolve_fractionr=   r.   	min_value	max_valuer   resolved_scalars    ``                 r   resolve_fraction_unitr^   y   sD   & I-|#M :B!

.6
	
$ FHGG# (
 ~~) VV\\*v//0v//0
 
  (
 ~~) VV]]+v001v001
 
 (,fs7|&;H!#%Ow%O"OP
q
 "'$_6HI5>w5G 	31E1FIyUOE}"(..}FV"W(_y-H#y0O&)FLL*AA&&/HUO.2+*/J#y0O&)FLL*AA&&/HUO.2+	3 '' q
 . ! 	"45 Y

s   AGAGc                   |\  }}t        |j                        }	t        |j                        }
t        d      }||z
  }|D cg c]"  }|j                  j                  j
                  $ }}t        | ||      D cg c]G  \  }}\  }}||j                  rdn-|j                  |||	|z
  x}dk  r|n||
|z
  x}dk  r|n||      I }}}}}d|vrt        d|      S |D cg c]  }|j                   }}|dk(  rt        t        t        ||      D cg c],  \  }}|%|j                  j                  dk7  r|j                  . c}}            }t        t        d|j                  |z
  z
              }t        |D cg c]5  }|j                  '|j                  j                  r|j                  dk7  r|7 c}||t        |      |      }|}t        |j                        }nt        t        t        ||      D cg c],  \  }}|%|j                  j                  dk7  r|j                  . c}}            }t        t        d|j                  |z
  z
              }t        |D cg c]5  }|j                  '|j                  j                  r|j                  dk7  r|7 c}||t        |      |      }t        |j                        }|}t        ||      D cg c]  \  }}|xs |j                  |||||      ! }}}t        d|      S c c}w c c}}}}w c c}w c c}}w c c}w c c}}w c c}w c c}}w )a  Resolve box models for a list of dimensions

    Args:
        dimensions: A list of Scalars or Nones for each dimension.
        widgets: Widgets in resolve.
        size: Size of container.
        viewport_size: Viewport size.
        margin: Total space occupied by margin
        resolve_dimension: Which dimension to resolve.

    Returns:
        List of resolved box models.
    r   N)greedylist[BoxModel]r:   rJ   )r   r:   rP   rW   margintotalsr&   r   _get_box_modelr	   intr"   rM   r$   r^   )r)   widgetsr,   rG   rb   rT   r`   margin_widthmargin_heightfraction_widthfraction_heightfraction_zeromargin_sizewidgetmargins
_dimension_width_height
box_modelsrS   	box_modeltotal_remainingr9   rW   r5   width_fractionheight_fractions                              r   resolve_box_modelsrw      s   . #)L-djj)Nt{{+OQKM-K9@Avv}}##**AGA. DGD
)) )( @Z!>,# %**@*@ && #1<"??1D " $3]#BBaG "  ' )J )2 :$j11 299vV]]9M9G# .1*-E)	!-&--2G2G82S OO
 c!TZZ/%AL%PQR- ,<<+LL,,NNh.	  _%
 '";#5#56 .1*-E)	!-&--2G2G82S $$
 c!T[[?%B]%RST- ,==,MM--NNh.	  _%
 "+"3"34' "%Wj!9
 FI	 	 	
  - ! 
	
J   *--C B)< :"s1   'L?AL
$L 1L%:L+1L0,:L6 $L;)r)   zSequence[Scalar]r*   re   r+   re   r,   r   r-   r   r   boolr   rx   r   zlist[int] | NonerL   zlist[tuple[int, int]])r:   )rS   zIterable[RenderStyles]r,   r   rG   r   r9   r   rT   Literal['width', 'height']rL   r   )r:   T)r)   zlist[Scalar | None]rf   zlist[Widget]r,   r   rG   r   rb   r   rT   ry   r`   rx   rL   ra   )
__future__r   	fractionsr   	itertoolsr   typingr   r   r   r	   typing_extensionsr
   textual.box_modelr   textual.css.scalarr   textual.css.stylesr   textual.geometryr   textual.widgetr   r    r^   rw   r   rI   r   <module>r      sF   "    : : % & % + !% !%d dd d 	d
 d d d d dX 5<^)^
^ ^ 	^
 2^ ^N 5<~.#~.~. ~. 	~.
 ~. 2~. ~. ~.rI   