
    AHjZ              	          d dl Z d dlmZ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 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 d dlmZ d dlmZ d dlmZ  e j<                  d      dedededefd       Z  G d d      Z!y)    N)IterableTuplecast)cell_len)Color)ConsoleConsoleOptionsRenderableTypeRenderResult)Segment)Style)TerminalTheme)DEFAULT_TERMINAL_THEME)
active_app)TRANSPARENT)ANSIToTruecolor)blend_colorsi   )maxsizebg_colorfg_coloropacityreturnc                 H    t        j                  t        | ||      |       S )zBlend from one color to another.

    Cached because when a UI is static the opacity will be constant.

    Args:
        bg_color: Background color.
        fg_color: Foreground color.
        opacity: Opacity.

    Returns:
        Resulting style.
    )ratio)colorbgcolor)r   
from_colorr   )r   r   r   s      X/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/renderables/text_opacity.py_get_blended_style_cachedr      s&      8XW=     c            
       h    e Zd ZdZddededdfdZedee	   dede
dee	   fd	       Zd
ededefdZy)TextOpacityz!Blend foreground into background.
renderabler   r   Nc                      || _         || _        y)zWrap a renderable to blend foreground color into the background color.

        Args:
            renderable: The RenderableType to manipulate.
            opacity: The opacity as a float. A value of 1.0 means text is fully visible.
        N)r#   r   )selfr#   r   s      r   __init__zTextOpacity.__init__+   s     %r    segments
ansi_themec              #     K   t         }t        j                  }|dk(  r]t        t        t
        t        t        t        f      |      D ]0  \  }}} ||j                        }	 |t        |      dz  |	       2 y|dk(  r|E d{    yt        |      }
|
j                  t        |      t              D ]  }t        t
        t        t        t        f   |      \  }}}|s| 0|j                  }|j                  }|r6|j                  r*|r(|j                  rt!        |||      } ||||z          |  y7 w)a  Apply opacity to segments.

        Args:
            segments: Incoming segments.
            opacity: Opacity to apply.
            ansi_theme: Terminal theme.
            background: Color of background.

        Returns:
            Segments with applied opacity.
        r   )r       N)r   r   r   r   r   r   strobjectr   r   r   applylistr   r   tripletr   )clsr'   r   r(   _Segment_from_colortextstyle_controlinvisible_stylefiltersegmentcontrolr   r   color_styles                   r   process_segmentszTextOpacity.process_segments5   s*    & &&a<)-sE6123* F%eX
 #.emm"Dx~3_EEF \$Z0F!<<XD "'+E#uf2D,Ew'O$eW!M--U]]w7??";GUG"TK"4)<==!M"  s   BD>D<B7D>consoleoptionsc                     	 t        j                         }|j                  }|j                  | j                  |      }| j                  || j                  |      S # t        $ r	 t        }Y Jw xY w)N)	r   getr(   LookupErrorr   renderr#   r<   r   )r%   r=   r>   appr(   r'   s         r   __rich_console__zTextOpacity.__rich_console__e   sa    	(.."C J>>$//7;$$Xt||ZHH  	0/J	0s   A A-,A-)g      ?)__name__
__module____qualname____doc__r
   floatr&   classmethodr   r   r   r<   r   r	   r   rD    r    r   r"   r"   (   s    +> E D  -"7#-" -" "	-"
 
'	-" -"^
I
I)7
I	
Ir    r"   )"	functoolstypingr   r   r   
rich.cellsr   
rich.colorr   rich.consoler   r	   r
   r   rich.segmentr   
rich.styler   rich.terminal_themer   textual._ansi_themer   textual._contextr   textual.colorr   textual.filterr   !textual.renderables._blend_colorsr   	lru_cacherI   r   r"   rK   r    r   <module>rZ      s     ( (   N N    - 6 ' % * : T"$/4
 #*GI GIr    