o
    o›Xjc«  ã                	   @  s|  U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ dZdZi dd	“d
d	“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“i d!d"“d#d"“d$d"“d%d&“d'd&“d(d)“d*d)“d+d,“d-d,“d.d/“d0d/“d1d2“d3d2“d4d5“d6d5“d7d8“d9d8“¥d8d:d:d;d;d<d<d=œ¥Zd>ed?< dOdFdG„ZdPdKdL„ZG dMdN„ dNƒZdS )Qé    )ÚannotationsN)ÚPath)ÚImageÚ	ImageDrawÚImageEnhanceÚImageFilterÚ	ImageFont)Ú
hex_to_rgbÚ	wrap_text)é8  r   )Úmagazine_coverÚeditorial_overlayÚapple_keynoteÚ
pitch_deckÚ
bento_gridÚhero_bannerÚinfographicÚnews_broadcastÚtimelineÚdashboard_uiÚsplit_comparisonÚ
glass_cardÚminimal_premiumÚ	neon_techÚ	bold_statÚgradient_storyÚcorporate_linkedinÚ	cyberpunkÚsplit_diagonalÚkeynoter   ÚappleÚdeckr   ÚpitchÚbentor   ÚgridÚbannerr   ÚheroÚinfor   Úinfographic_cardÚnewsr   Ú	broadcastÚliveÚtimeline_cardr   Ú	dashboardr   ÚuiÚ	analyticsÚ
comparisonr   ÚversusÚvsÚsplitr   ÚdiagonalÚglassr   ÚcardÚminimalr   ÚpremiumÚneonr   ÚtechÚstatr   ÚboldÚgradientr   ÚstoryÚlinkedinr   Ú	corporater   r   r   )ÚbusinessÚcyberÚpunkÚmagazineÚcoverÚ	editorialÚoverlayzdict[str, str]Ú_LAYOUT_ALIASESÚaÚintÚbÚtÚfloatÚreturnc                 C  s   t | ||  |  ƒS ©N)rJ   )rI   rK   rL   © rP   úC/home/esfera/Documents/content_generation/src/generators/visuals.pyÚ_lerpQ   s   rR   Úc1útuple[int, int, int]Úc2c                 C  s:   t | d |d |ƒt | d |d |ƒt | d |d |ƒfS )Nr   é   é   )rR   )rS   rU   rL   rP   rP   rQ   Ú
_blend_rgbU   s   :rX   c                   @  s¬  e Zd ZdZ	d©dªd
d„Zd«d¬dd„Zd­dd„Zdddœd®d"d#„Z	$d¯d°d)d*„Zd±d.d/„Z	d²d1d2„Z
d3d4d5d6d7œd³d@dA„ZdBdCdDdEdFœd´dKdL„ZdµdOdP„Zd¶dRdS„Zd·dUdV„Zd¸dZd[„Zd¹d^d_„Zdºdjdk„Zd»dodp„Zddqdddreddsœd¼dzd{„Zdefd½d|d}„Zefd¾d�d‚„Zdƒd„„ Zd…d†„ Zd‡dˆ„ Zd‰dŠ„ Zd‹dŒ„ Zd�dŽ„ Zd�d�„ Zd‘d’„ Zd“d”„ Z d•d–„ Z!d—d˜„ Z"d™dš„ Z#d›dœ„ Z$d�dž„ Z%dŸd „ Z&d¡d¢„ Z'd£d¤„ Z(d¥d¦„ Z)d§d¨„ Z*dS )¿ÚVisualRendererzAAgency-grade multi-layout compositor for premium social graphics.NÚ
brand_nameÚstrÚprimaryÚaccentÚbgÚ	fonts_dirúPath | Nonec                 C  s.   || _ t|ƒ| _t|ƒ| _t|ƒ| _|| _d S rO   )rZ   r	   r\   r]   r^   r_   )ÚselfrZ   r\   r]   r^   r_   rP   rP   rQ   Ú__init__\   s
   



zVisualRenderer.__init__FÚsizerJ   r<   ÚboolrN   úImageFont.ImageFontc              	   C  s¸   g }| j r | j  ¡ r | t| j  d¡ƒ¡ | t| j  d¡ƒ¡ tdƒtdƒg}tdƒtdƒg}| |r6|n|¡ |D ]}| ¡ rWztjt|ƒ|d�W   S  t	yV   Y q;w q;t 
¡ S )Nz*.ttfz*.otfz4/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttfz</usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttfz//usr/share/fonts/truetype/dejavu/DejaVuSans.ttfz?/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf)rc   )r_   ÚexistsÚextendÚsortedÚglobr   r   Útruetyper[   ÚOSErrorÚload_default)ra   rc   r<   Ú
candidatesÚ
bold_pathsÚregular_pathsÚpathrP   rP   rQ   Ú_fontl   s(   þþÿýzVisualRenderer._fontÚkeyúrandom.Randomc                 C  s*   t t | ¡ ¡ ¡ d d… dƒ}t |¡S )Né   é   )rJ   ÚhashlibÚmd5ÚencodeÚ	hexdigestÚrandomÚRandom)ra   rr   ÚhrP   rP   rQ   Ú_seed‚   s    
zVisualRenderer._seedT)r4   Úverticalútuple[int, int]rS   rT   rU   r4   r~   úImage.Imagec                C  sÌ   |\}}t  d|¡}| ¡ }	t|ƒD ]Q}
td|dƒD ]H}|r(|
t|d dƒ }n |r?|t|d dƒ |
t|d dƒ  d }n	|t|d dƒ }t|||ƒ}||	||
f< |d |k rb||	|d |
f< qq|S )NÚRGBr   rW   rV   )r   ÚnewÚloadÚrangeÚmaxrX   )ra   rc   rS   rU   r4   r~   Úwr|   ÚimgÚpxÚyÚxrL   ÚcolorrP   rP   rQ   Ú	_gradient†   s"   	*€özVisualRenderer._gradient©ç      à?çš™™™™™Ù?ÚinnerÚouterÚcenterútuple[float, float]c              	   C  sü   |\}}t  d|¡}| ¡ }|d | |d | }	}
t ||¡}td|dƒD ]T}td|dƒD ]K}tdt ||	 ||
 ¡|d  ƒ}t|||ƒ}||||f< |d |k r\|||d |f< |d |k rz||||d f< |d |k rz|||d |d f< q/q'|S )Nr�   r   rV   rW   ç      ð?gÍÌÌÌÌÌä?)r   r‚   rƒ   ÚmathÚhypotr„   ÚminrX   )ra   rc   r�   r‘   r’   r†   r|   r‡   rˆ   ÚcxÚcyÚmax_rr‰   rŠ   rL   r‹   rP   rP   rQ   Ú_radial_gradient    s&   "€÷
zVisualRenderer._radial_gradientÚpaletteúlist[str] | Noneúlist[tuple[int, int, int]]c              	   C  sb   g }|pg d d… D ]}z	|  t|ƒ¡ W q
 ty   Y q
w t|ƒdk r/| j| j| j| jg}|S )Né   rW   )Úappendr	   Ú	ExceptionÚlenr^   r\   r]   )ra   rœ   ÚcolorsÚhex_crP   rP   rQ   Ú_parse_palette¹   s   ÿzVisualRenderer._parse_paletter‡   c                 C  s„   |\}}|j \}}t|| || ƒ}t|| ƒt|| ƒ}}	| ||	ftjj¡}|| d }
|	| d }| |
||
| || f¡S )NrW   )rc   r…   rJ   Úresizer   Ú
ResamplingÚLANCZOSÚcrop)ra   r‡   rc   ÚtwÚthÚiwÚihÚscaleÚnwÚnhÚleftÚtoprP   rP   rQ   Ú
_fit_coverÄ   s   
zVisualRenderer._fit_coveré    )é   é   é*   é   )éÿ   r¹   r¹   é2   )ÚalphaÚtintÚradiusÚborderÚbaseÚboxútuple[int, int, int, int]r»   r¼   r½   r¾   ú tuple[int, int, int, int] | Nonec                C  s‚   |  d¡}t d|jd¡}t |¡}	|\}
}}}|	j|
|||g|g |¢|‘R d� |r8|	j|
|||g||dd� t ||¡  d¡S )NÚRGBA©r   r   r   r   ©r½   ÚfillrW   ©r½   ÚoutlineÚwidthr�   )Úconvertr   r‚   rc   r   ÚDrawÚrounded_rectangleÚalpha_composite)ra   r¿   rÀ   r»   r¼   r½   r¾   ÚrgbarG   ÚdrawÚx0Úy0Úx1Úy1rP   rP   rQ   Ú_glass_panelÎ   s   


"zVisualRenderer._glass_panelÚbottoméà  ©r   r   r   éæ   )Ú	directionÚheightr‹   Ú	max_alpharÙ   rÚ   r‹   rÛ   c             
   C  s  |\}}t  d|d¡}t |¡}	t||ƒ}
t|
ƒD ]f}t||t|
d dƒ  ƒ}|dkrE||
 | }|	jd|f||fgg |¢|‘R d� q|dkr\|	jd|f||fgg |¢|‘R d� q|dkr|	jd|f||fgg |¢t|d	 |t|
d dƒ  ƒ‘R d� q|S )
NrÃ   rÄ   rV   rÕ   r   ©rÆ   r²   Úfullçš™™™™™á?)	r   r‚   r   rË   r—   r„   rJ   r…   Úline)ra   rc   rÙ   rÚ   r‹   rÛ   r†   r|   ÚscrimÚsdÚspanÚirI   r‰   rP   rP   rQ   Ú_scrimá   s   	

&&>€zVisualRenderer._scrimrà   ÚNonec                 C  s"   |  t | d¡|¡ d¡¡ d S )NrÃ   r�   )Úpaster   rÍ   rÊ   )ra   r¿   rà   rP   rP   rQ   Ú_apply_scrimù   s   "zVisualRenderer._apply_scrimÚrngc                 C  s¶   |\}}t dƒD ]P}| d|¡| d|¡}}	| dd¡}
t d|d¡}t |¡}|j||
 |	|
 ||
 |	|
 gg |¢d‘R d� | t 	d	¡¡}| 
t | d¡|¡ d
¡¡ qd S )Né   r   éd   é  rÃ   rÄ   rº   rÜ   é$   r�   )r„   Úrandintr   r‚   r   rË   ÚellipseÚfilterr   ÚGaussianBlurræ   rÍ   rÊ   )ra   r¿   r]   rè   rc   r†   r|   Ú_r˜   r™   ÚrÚblobÚbdrP   rP   rQ   Ú_decorative_blobsü   s   
0 ùz VisualRenderer._decorative_blobsÚlayoutc                 C  sb   |pd  ¡  dd¡ ¡ }|tv r|S |tv rt| S t ¡ D ]\}}||v s*||v r.|  S qdS )Nr   Ú-rñ   )ÚlowerÚreplaceÚstripÚLAYOUTSrH   Úitems)ra   rö   rr   ÚtokenÚtargetrP   rP   rQ   Ú_resolve_layout  s   ÿzVisualRenderer._resolve_layoutÚ
typographyú
str | NoneÚdictc                 C  sŠ   |pd  ¡  dd¡}dddddœddd	ddœd
ddddœdddd	dœdddddœdd
dddœdddddœdd
dddœdœ}| ||d ¡S )NÚmodern_startupr÷   rñ   r”   T)Úhook_mulÚbody_mulÚ
brand_capsÚ	hook_boldgffffffò?g)\�Âõ(ì?Fgffffffî?gq=
×£pí?gÍÌÌÌÌÌì?g333333ë?gš™™™™™ñ?gÍÌÌÌÌÌð?g\�Âõ(\ï?)r  Úapple_minimalÚswissÚluxuryÚ	brutalistÚ	newspaperÚ
futuristicrF   )rø   rù   Úget)ra   r   rr   ÚprofilesrP   rP   rQ   Ú_typography_profile  s   ø
z"VisualRenderer._typography_profileÚhas_bgúdict[str, int]c                 C  s    |r	dddddœS dddd	dœS )
Nré   é   rW   é"   )Ú
hook_linesÚ	hook_wrapÚ
body_linesÚ	body_wraprŸ   é   é   r·   rP   )ra   r  rP   rP   rQ   Ú_text_limits   s   zVisualRenderer._text_limitsrÏ   úImageDraw.ImageDrawrŠ   r‰   ÚtextÚfontrÆ   ÚwrapÚ	max_linesÚline_heightc                C  s:   t ||ƒd |… D ]}
|j||f|
||d� ||	7 }q	|S )N©rÆ   r  )r
   r  )ra   rÏ   rŠ   r‰   r  r  rÆ   r  r   r!  rß   rP   rP   rQ   Ú_draw_lines%  s   
zVisualRenderer._draw_linesr£   Úbg_imageútuple[Image.Image, bool]c                 C  s  |\}}t |o
| ¡ ƒ}|r<|  t |¡ d¡|¡}t |¡ d¡}t 	|¡ d¡}t 
d|d¡}	t ||	d¡}||fS | g d¢¡}
|d |tdt|ƒd ƒ }}|
d	kr_|  |||¡}n|
d
krm| j|||dd�}n	| j|||dd�}|  ||d ||¡ ||fS )Nr�   g¤p=
×£à?gáz®Gáò?r×   gìQ¸…ëÑ?)ÚdiagÚvertÚradialr   rV   r(  r'  T)r~   )r4   éÿÿÿÿ)rd   rf   r³   r   ÚopenrÊ   r   Ú
BrightnessÚenhanceÚContrastr‚   ÚblendÚchoicer—   r¢   r›   rŒ   rõ   )ra   rc   r£   r$  rè   r†   r|   r  r¿   ÚshadeÚstylerS   rU   rP   rP   rQ   Ú_build_base7  s$   ÷ zVisualRenderer._build_baser   Údefault)Úfooterrö   rœ   r$  Úcreative_keyrc   r   Úout_pathr   ÚhookÚbodyr4  r5  c       	         C  sÂ   |   |¡}|  |¡}|  || ¡}|  |
¡}|  t|o| ¡ ƒ¡}|  |	|||¡\}}t 	|¡}t
| d|› �| jƒ}||||||pC| j|||	|||d� |jjddd� | d¡j|ddd� |S )NÚ_layout_)	r7  r8  r4  r£   rè   rc   ÚtypoÚlimitsr  T)ÚparentsÚexist_okr�   ÚPNG)ÚformatÚoptimize)rÿ   r¥   r}   r  r  rd   rf   r2  r   rË   ÚgetattrÚ_layout_editorial_overlayrZ   ÚparentÚmkdirrÊ   Úsave)ra   r6  r7  r8  r4  rö   rœ   r$  r5  rc   r   r£   rè   r:  r;  r¿   r  rÏ   ÚrendererrP   rP   rQ   Úcompose_heroT  s0   



õzVisualRenderer.compose_heroc                 K  s@   | j ||||| dd¡| d¡| d¡| d|¡|| d¡d�
S )Nrö   r   rœ   r$  r5  r   ©	r7  r8  r4  rö   rœ   r$  r5  rc   r   )rG  r  )ra   r6  r7  r8  r4  rc   ÚkwargsrP   rP   rQ   Úrender_single}  s   	

özVisualRenderer.render_singleÚindexÚtotalÚtitlec                 K  sn   t tƒ}| d¡p||t|ƒ  }	|d › d|› �}
| j||||
|	| d¡| d¡|› d|› �|| d¡d�
S )	Nrö   rV   z / rœ   r$  r÷   r   rH  )Úlistrû   r  r¢   rG  )ra   r6  rK  rL  rM  r8  rc   rI  Úlayoutsrö   r4  rP   rP   rQ   Úrender_carousel_slide“  s   
öz$VisualRenderer.render_carousel_slidec       	         C  s˜  |\}}|d }| j td|	d  ƒ|	d d�}|   td|	d  ƒ¡}|	d r+| j ¡ n| j}|jd	d	|d
gdd� |jd|d| j ddd�d� |jd|d dfg|dd� |j|d dfd|| j ddd�d� |rkdnd}|jd	|| ||gdd� || d }| j|d|||d|
d  |
d! td"|	d  ƒd#�	}|d$7 }| j|d|||d%|
d& |
d' td|	d  ƒd#�	 |jd|d" f|d d(… || j d)dd�d� d S )*Nr)  é.   r  r  ©r<   é   r  r  r   rê   ©r¹   r¹   r¹   rÜ   )é,   é    )é   rW  rW  r  Tr"  )rU  éX   rU  rX  rŸ   ©rÆ   rÉ   rë   é&   ÚBRIEFINGr  éT  i|  )éü   éû   éø   rì   )r  r  r  r  r  é4   ©r  rÆ   r  r   r!  rt   )éF   rb  éP   r  r  éA   é   )rq   rJ   rZ   ÚupperÚ	rectangler  rß   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   Úhook_fÚbody_fÚbrandÚblock_hr‰   rP   rP   rQ   Ú_layout_magazine_cover¯  s    $000z%VisualRenderer._layout_magazine_coverc       	         C  sœ  |\}}|d }|rdnd}|   || j|d|d�¡ | | j|d|| d |d |d fd	d
d�¡ t |¡}|jd|| d |d |d gd
|dd� |jd|	d rX| j 	¡ n| j|| j
d
dd�d� | j
td|	d  ƒ|	d d�}|  
td|	d  ƒ¡}|| d }| j|d|||d|
d |
d td|	d  ƒd�	}|d7 }| j|d|||d |
d! |
d" td|	d  ƒd�	 |jd|d# f|d d$… d%|  
d¡d� d S )&Nr)  i¤  rÖ   rÕ   )rÙ   rÚ   é(   re  rì   é²   é   ©r»   r½   rW   rÇ   )é@   é0   r  TrR  r"  rº   r  r  r¸   r  é8   rq  rT  r  r  é:   ra  é
   ©éÃ   éÍ   éá   r  r  éH   rb  )é–   r´   é´   )rç   rä   ræ   rÔ   r   rË   rÌ   r  rZ   rf  rq   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   Úpanel_hrh  ri  r‰   rP   rP   rQ   rB  Ã  s   0
*000,z(VisualRenderer._layout_editorial_overlayc       	      
   C  sî  |\}}|d }|s|  t |t d|d¡d¡¡ |  || j|d|dd�¡ t |¡}| jt	d|	d	  ƒ|	d
 d�}|  t	d|	d  ƒ¡}t
||
d ƒd |
d … }t|ƒt	d|	d	  ƒ t	d|	d  ƒ }|| d d }|D ]+}|jd||d�}|d |d  }|j|| d |f|d|d� |t	d|	d	  ƒ7 }qp|d7 }t
||
d d ƒd |
d … D ]+}|jd||d�}|d |d  }|j|| d |f|d|d� |t	d|	d  ƒ7 }q¯|j|d d |d f|d d … || jdd!d�d� d S )"Nr)  r�   )r  r  rt   çffffffÖ?rÝ   éŒ   ©rÙ   rÚ   rÛ   rq  r  r  rR  é   r  r  r  rz  rº   rW   re  ©r   r   )r  r   rT  r"  ru   r  é   r  )r|  é¹   rw  rZ  rc  rm  T)ræ   r   r.  r‚   rç   rä   r   rË   rq   rJ   r
   r¢   Útextbboxr  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rh  ri  r  Útotal_hr‰   rß   Úbboxrª   rP   rP   rQ   Ú_layout_apple_keynoteÔ  s.   
("8z$VisualRenderer._layout_apple_keynotec       	         C  sî  |\}}|d }t |ƒdkr|d n| j}|jddd|g|d� |jdd|dgt|ddƒd� |jd	|	d
 r;| j ¡ n| jd| jddd�d� |j|d dfdd|  d¡d� | | j	|dd|d |d fdddd�¡ t
 |¡}| jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}d}| j|d|||d|
d  |
d! td"|	d  ƒd#�	}|d7 }tt||
d$ ƒd |
d% … ƒD ](\}}|jd|d& d'|d( g|d� |jd)|f|d|d� |td*|	d  ƒ7 }q¸|jd|d+ f|d d,… d-|  d¡d� d S ).Nr)  rV   r   é   rÜ   éx   r×   ç333333Ã?)rr  r·   r  rT  r¸   TrR  r"  rr  ÚSLIDE©éÈ   éÒ   rØ   r  r´   rê   rŽ  )rW  ru   r¸   re  ©r»   r¼   r½   rU  r  r  rS  r  rc  r  r  r`  ra  r  r  rt   é`   ro  ép   rm  rz  é<   )é‚   r  r´   )r¢   r\   rg  rX   r  rZ   rf  rq   ræ   rÔ   r   rË   rJ   r#  Ú	enumerater
   rî   )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   r\   rh  ri  r‰   rã   rß   rP   rP   rQ   Ú_layout_pitch_deckí  s&   0 *
0&,z!VisualRenderer._layout_pitch_deckc       	         C  s²  |\}}|d }t |ƒdkr|d n| j}|r$|  || j|d|dd�¡ t |¡}d}|||d |d  |d |d  f|d |d  ||| |d |d  f||d |d  |d |d  || f|d |d  |d |d  d| d |d  || fd| d |d  |d |d  || || fg}||d	d
|g}g d¢}t|||ƒD ]?\}}}| | j||d|dd�¡ t |¡}|j	t
|ƒdddd� |d d |d d }}|j||f|d| jddd�d� q§|d }| jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}|d d }| j||d d |||dd|
d td |	d  ƒd!�	}| j||d d |d" ||d#d|
d$ td%|	d  ƒd!�	 |j|d" |d& f|d d'… d(|  d¡d� d S ))Nr)  rV   rÝ   rê   r€  ru   rW   ré   )r�  é#   rº   )rm  é-   é>   )ÚAIÚDATAõ   â€¢rœ  ÚGOé¾   r  r�  )r¹   r¹   r¹   rm  rÇ   r   re  rT  r  TrR  r"  rì   r  r  r  rs  ro  r‰  r  r·   ra  rt   )r�  é×   rØ   r  r¸   rr  rº   ©r|  rž  r�  )r¢   r\   rç   rä   r   rË   Úzipræ   rÔ   rÌ   rN  r  rq   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rU   ÚgapÚcellsÚfillsÚlabelsrÀ   rÆ   ÚlabelÚlxÚlyÚmainrh  ri  r‰   rP   rP   rQ   Ú_layout_bento_grid  s8   
"&&6.û
"480z!VisualRenderer._layout_bento_gridc       	         C  sÊ  |\}}|d }t |ƒdkr|d n| j}t|d ƒ}t|d ƒ}t d|d¡}t |¡}|jd|||gg |¢d‘R d	� |jd|||d
 gg |¢d‘R d	� | t 	| 
d¡|¡ 
d¡¡ t |¡}|jd|	d ro| j ¡ n| jd| jddd�d� | jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}|d }| j|d|||d|
d |
d td|	d  ƒd�	}|d7 }| j|d|||d|
d |
d  td!|	d  ƒd�	 |jd|d" f|d d#… || jd$dd�d� d S )%Nr)  rV   gR¸…ëQØ?g
×£p=
ç?rÃ   rÄ   r   rŸ  rÜ   rƒ  r¹   r�   ©rr  rr  r  rT  rS  TrR  r"  rr  r  r  r  rì   r  r  é6   ra  rt   ©éÜ   ry  éð   r  r  rV  rs  r“  re  )r¢   r\   rJ   r   r‚   r   rË   rg  ræ   rÍ   rÊ   r  rZ   rf  rq   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   r\   Ú	banner_y0Ú	banner_y1r%   rô   rh  ri  r‰   rP   rP   rQ   Ú_layout_hero_banner!  s&   
 $
0000z"VisualRenderer._layout_hero_bannerc       	         C  s   |\}}|d }t |ƒdkr|d n| j}|r$|  || j|dddd�¡ t |¡}|jdd|dgt|d	d
ƒd� |jdd|| j	ddd�d� |j|d df| j
d d…  ¡ d| j	ddd�d� d|d df|d dfg}t|ƒD ]b\}\}}d}|j|| || || || g|dkr�|n|ddd� |j|d |d f|d › d| j	ddd�d� |t |ƒd k rÒ||d  d }|j|| |f|| ||d  d fgddd� qp| | j|d d!|d  |d" fd#d$d%�¡ t |¡}| j	td |	d&  ƒ|	d' d�}|  	td|	d(  ƒ¡}d)}| j|d*|||d|
d+ |
d, td-|	d&  ƒd.�	}| j|d*|d/ ||d0|
d1 |
d2 td|	d(  ƒd.�	 |jd*|d f|d d3… ||  	d¡d� d S )4Nr)  rV   r²   rŽ  r|  r€  r   rX  r×   gš™™™™™É?rÜ   )rm  r¸   ÚINSIGHTro  TrR  r"  r�  re  rT  )rŠ  rŽ  rW   i  rŠ  rs  ©rÆ   rÈ   rÉ   rW  r  rV  ré   rY  rm  é�  rc  r„  r  rp  r  r  r  i®  rq  r  r  rr  ra  rt   ©rž  rŽ  r®  r  r  é7   )r¢   r\   rç   rä   r   rË   rg  rX   r  rq   rZ   rf  r•  rî   rß   ræ   rÔ   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rU   Únodesrã   r˜   r™   rò   Únxrh  ri  r‰   rP   rP   rQ   Ú_layout_infographic6  s4   
26.0€(
04,z"VisualRenderer._layout_infographicc       	         C  sÖ  |\}}|d }d}|   || j|dddd�¡ t |¡}|jdd|dgd	d
� |jddd| jddd�d� |j|d d|d dgdd
� |j|d d|d dg|d
� |j|d dfdd| jddd�d� |jd|d ||gdd
� |jd|d d |g|d
� | jtd|	d!  ƒdd�}|  td"|	d#  ƒ¡}|d }| j	|d$|||d|
d% |
d& td'|	d!  ƒd(�	}| j	|d$|d) ||d*|
d+ |
d, td$|	d#  ƒd(�	 |jd$|d- f| j
› d.|d d/… › �|| jd0dd�d� d S )1Nr)  )r®  rZ  rZ  rÕ   i@  r�  r€  r   rs  )r|  re  r�  rÜ   )re  r‰  ÚBREAKINGrT  ro  TrR  r"  r´   rW  re  rU  r×   r{  r  éˆ   rì   é€   ru   ÚLIVEr¯  )rW  r‰  r  rt   r  rS  r  rV  r  r  rº   ra  rƒ  r   r  r  rr  z  |  r˜  r  )rç   rä   r   rË   rg  r  rq   rî   rJ   r#  rZ   )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   Úlive_redrh  ri  r‰   rP   rP   rQ   Ú_layout_news_broadcastR  s$   
$04<z%VisualRenderer._layout_news_broadcastc       	      
   C  s¬  |\}}|d }|r|   || j|d|dd�¡ t |¡}|jd|	d r(| j ¡ n| j|| jddd	�d
� d}|j|df||d fgddd� d|dfd|dfd|dfg}| jt	d|	d  ƒ|	d d	�}|  t	d|	d  ƒ¡}|D ]c\}}}|j
|d |d |d |d g|ddd� |rŽ|n|}|r–|
d n|
d }|r |
d n|
d }|d  }tt||ƒd |… ƒD ]\}}|j||d! |t	d"|	d  ƒ  f||rÍdnd#|d
� q³qpd S )$Nr)  rÝ   éZ   r€  )rr  rm  r  ro  TrR  r"  rc  rŠ  rê   rT  rŸ   rY  r  r\  Fé  rZ  r  r  r  rW  rW   r´  r  r  r  r  rì   rt   r  r¶  )rç   rä   r   rË   r  rZ   rf  rq   rß   rJ   rî   r•  r
   )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   Úline_xÚstepsrh  ri  Úy_posr  Úis_hookr  r  Úmax_lÚtxrã   rß   rP   rP   rQ   Ú_layout_timelineh  s0   
0 ý*8ÿúzVisualRenderer._layout_timelinec       	         C  sÐ  |\}}|d }t |ƒdkr|d n| j}| t |t d|d¡|r$dnd¡¡ t |¡}|jddd|gd	d
� t	g d¢ƒD ]0\}}|j
dd|d  dd|d  gd|dkrX|ndd� |jdd|d  f|d|  d¡d� q>ddd|d dfddd|d dfg}t	|ƒD ]e\}}| | j||dd d!d"�¡ t |¡}|j|d d# |d d! fd$|d › �d%|  d#¡d� td&ƒD ]/}| dd'¡}|d d |d(  }|j||d) d | |d |d) d g|d*krå|n|d
� qºq…| | j|d+d,|d |d fd-d#d.�¡ t |¡}| jtd/|	d0  ƒ|	d1 d2�}|  td3|	d4  ƒ¡}d5}| j|d6|||d7|
d8 |
d9 td:|	d0  ƒd;�	}| j|d6|d< ||d=|
d> |
d? td(|	d4  ƒd;�	 |jd6|d@ f|d dA… ||  d#¡d� d S )BNr)  rV   r�   )r‰  ru   ro  çÍÌÌÌÌÌÜ?r‹  r   rŽ  )r  re  rV  rÜ   )ÚHomeÚMetricsÚFeedre  rc  rs  r|  rŠ  ru  )r¸   rV  rr  rÅ   rì   é\   r­  r  r"  )rØ   rm  rÂ  r|  i  rm  r�  )rØ   rŽ  rÂ  r\  r\  éª   ©r  rS  rm  r‰  r�  ru   zMetric ©r  r{  rÏ  r  rb  r¸   ré   rW   rØ   ir  rw  rp  r  r  r  rR  r  r  rµ  rë   rT  r  r  r·   ra  rƒ  ©rÏ  r|  rŽ  r  r  éD   rº   )r¢   r\   ræ   r   r.  r‚   r   rË   rg  r•  rÌ   r  rq   rÔ   r„   rí   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rU   rã   r¦  ÚcardsrÀ   ÚjÚbhÚbxrh  ri  r‰   rP   rP   rQ   Ú_layout_dashboard_ui�  s6   &
4&$
6<ý(
04,z#VisualRenderer._layout_dashboard_uic       	         C  s’  |\}}|d }t |ƒdkr|d n| j}|d }t d|d¡}t |¡}|jdd||gg t|ddƒ¢d	‘R d
� t d|d¡}t |¡}|j|d||gg t|ddƒ¢d	‘R d
� | t 	| 
d¡|¡ 
d¡¡ | t 	| 
d¡|¡ 
d¡¡ t |¡}|j|d |d d |d |d d gdd
� |j|d |d d fdd| jddd�d� | jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}t|dƒd d… }t|ƒD ]\}}|jdd|d  f|d|d� qÐt|dƒd |
d … }t|ƒD ]\}}|j|d d|d  f|d|d� qó|jd|d  fd!d"| jd#dd�d� |j|d |d  fd$d"| jd#dd�d� |j|d d% |d f|d d… ||  d&¡d� d S )'Nr)  rV   rW   rÃ   rÄ   r   r×   r~  rŽ  rÜ   rÊ  r�   rì   rT  r  re  ÚVS)re  re  r�  r¸   TrR  r"  rV  r  r  r  rW  r|  rm  r  r  rq  ÚBEFOREr�  r  ÚAFTERrê   ru   )r¢   r\   r   r‚   r   rË   rg  rX   ræ   rÍ   rÊ   r  rq   rJ   r
   r•  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rU   ÚmidÚ
left_panelÚlpÚright_panelÚrprh  ri  Ú	left_textrã   rß   Ú
right_textrP   rP   rQ   Ú_layout_split_comparison¡  s4   
(
(
., $$(4z'VisualRenderer._layout_split_comparisonc       	         C  sŒ  |\}}|d }|rdnd}|  | j||d|| |d fddd�¡ t |¡}|j|d|| |d gd|dd	� |j|d
 d|d dgd|d� |j|d dfdd| jddd�d� | jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}d}| j||d |||d|
d  |
d! td"|	d  ƒd#�	}|d$7 }| j||d |||d%|
d& |
d' td(|	d  ƒd#�	 |j|d |d f|d d)… d*|  d+¡d� d S ),Nr)  rb  rÁ  r  é¼   rV  rp  ré   rÇ   rì   r|  r®  éä   ru   rÅ   r`  éÀ   ÚUPDATE)rµ   re  r—  r  TrR  r"  rQ  r  r  rS  r  rë   rm  rT  r  r  r¬  ra  rW  rv  r  r  r  r·  rÑ  re  )	ræ   rÔ   r   rË   rÌ   r  rq   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   Úpadrh  ri  r‰   rP   rP   rQ   Ú_layout_glass_card½  s   (
" $440z!VisualRenderer._layout_glass_cardc       	         C  sp  |\}}|d }|s|  t |t d|d¡d¡¡ t |¡}|jdd|d |d gddd� |jd	d
g|dd� |	d rA| j 	¡ n| j}|j
d||| jddd�d� | jtd|	d  ƒ|	d d�}|  td|	d  ƒ¡}d}| j|d|||d|
d |
d td|	d  ƒd�	}|d7 }| j|d|||d|
d  |
d! td"|	d  ƒd�	 |j
d|d# f|d d$… d%|  d&¡d� d S )'Nr)  r�   )rt   rt   ru  g      Ð?rz  )rc  rc  rÁ  rV   ©rÈ   rÉ   )rz  r  )r®  r  rW   rY  r  )rz  r‘  re  FrR  r"  r`  r  r  rS  r  r|  )éõ   rë  r_  r  r  rt  ra  ro  )r´   é¥   é¯   r  r  rì   rê   r“  )rê   éi   és   r  )ræ   r   r.  r‚   r   rË   rg  rß   rZ   rf  r  rq   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rj  rh  ri  r‰   rP   rP   rQ   Ú_layout_minimal_premiumÎ  s    
 00,z&VisualRenderer._layout_minimal_premiumc       	         C  s‚  |\}}|d }t  d|d¡}| t  ||d¡¡ t |¡}d}dD ]\}}|j|| || || | || | gd||d� q"|jd	d
|| jddd�d� | jt	d|	d  ƒdd�}|  t	d|	d  ƒ¡}d}| j
|d|||d|
d |
d t	d|	d  ƒd�	}|jd|d d|d g|d� |d7 }| j
|d|||d|
d |
d  t	d!|	d  ƒd�	 |jd|d" f|d d#… d$|  d%¡d� d S )&Nr)  r�   )r  rt   ru   g�Âõ(\�â?rV  ))r   rŸ   )ru  rV   r  rÇ   )rs  rs  u   â—ˆ TECH SIGNALrS  TrR  r"  r¬  r  r¸   r  r|  rs  rT  r  r  r™  ra  rt   rŽ  r‰  rÜ   )r|  rŽ  r¹   r  r  rì   rz  r·  )r”  r{  rŽ  re  )r   r‚   ræ   r.  r   rË   rÌ   r  rq   rJ   r#  rg  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rG   ÚmÚoffsetrÉ   rh  ri  r‰   rP   rP   rQ   Ú_layout_neon_techà  s"   
400,z VisualRenderer._layout_neon_techc       	         C  s2  |\}}|d }|r|  d¡d d d… n	|  ¡ d d d…  ¡ }|r3| t |t d|d¡d¡¡ n
| t d|d	¡¡ t |¡}td|d
ƒD ]}|j	|df||fgddd� qHtd|d
ƒD ]}|j	d|f||fgddd� q_|j
|d d|d dg|dd� |jd|	d rŒ| j ¡ n| j|| jddd�d� |r¡t|dƒd nd}|jd||| jtd|	d  ƒdd�d� | jtd|	d  ƒdd�}|  td|	d   ƒ¡}d!}| j|d"|||d#|
d$ |
d% td&|	d  ƒd'�	}| j|d"|d ||d(|
d) |
d* td+|	d   ƒd'�	 |jd"|d, f|d d… d-|  d¡d� d S ).Nr)  Ú.r   re  rW  r�   )rƒ  rt   r‰  rŽ   )rt   ru  r  r¬  rÐ  rV   rY  rµ  iÄÿÿÿr“  rƒ  rê  )rq  rq  r  ro  TrR  r"  ru  ÚNOW)rq  rÏ  rX  r  rm  rS  r  r\  rq  rT  r  r  rr  ra  rÒ  r  r  rV  rz  )én   rŠ  r  )r3   rf  ræ   r   r.  r‚   r   rË   r„   rß   rî   r  rZ   rq   r
   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   r;   rã   Ú	stat_linerh  ri  r‰   rP   rP   rQ   Ú_layout_bold_stató  s*   2 
 0(04,z VisualRenderer._layout_bold_statc       	         C  s~  |\}}|d }|   || j|dddd�¡ t |¡}|j|d d|d dg|d� |j|d	 d
fdd| jddd�d� |jd|	d rG| j ¡ n| jd| jddd�d� | jt	d|	d  ƒdd�}|  t	d|	d  ƒ¡}|d }| j
|d|||d|
d |
d t	d|	d  ƒd�	}| j
|d|d ||d|
d  |
d! t	d"|	d  ƒd�	 |jd|d# f| j› d$|d d%… › �|| jddd�d� d S )&Nr)  rÕ   rÂ  éë   r€  rŽ  rr  rÜ   rì  éb   Ú01)rW  rW  re  rU  TrR  r"  )rr  r`  r  rT  r  rs  r  r¸   r  rµ  r  r  rq  ra  rt   )rx  r�  ry  r  r  rì   r“  u    Â· rZ  )rç   rä   r   rË   rî   r  rq   rZ   rf  rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   rh  ri  r‰   rP   rP   rQ   Ú_layout_gradient_story  s   
$004<z%VisualRenderer._layout_gradient_storyc       	         C  sæ  |\}}|d }t |ƒdkr|d n| j}|jdd|dg|d� |jdd|dg|d� t |¡}|jg d¢dd� |jd	| jd d…  ¡ || j	d
dd�d� |jd| jd| j	ddd�d� |jddd|  	d¡d� |rmdnd}| 
| j|d||d |d fdddd�¡ t |¡}| j	td|	d  ƒ|	d d�}|  	td|	d   ƒ¡}|d! }| j|d"|||d#|
d$ |
d% td&|	d  ƒd'�	}|d7 }| j|d"|||d(|
d) |
d* td+|	d   ƒd'�	 |jd"|d, f|d d-… || j	ddd�d� d S ).Nr)  rV   r   r”  rÜ   r¼  )rr  rì   él   r‘  rT  )rt  r`  rV  TrR  r"  )r”  rr  r�  )r”  rX  zIndustry Insights)r®  ry  rù  r  r|  rÏ  rr  rc  r�  )éú   r^  éý   rW  r�  rZ  r  r  rS  r  rì   rz  )re  é   r—  r  r  rQ  ra  )r“  rb  éU   r  r  r  rê   rd  )r¢   r\   rg  r   rË   rî   r  rZ   rf  rq   ræ   rÔ   rJ   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   r\   Ú	content_yrh  ri  r‰   rP   rP   rQ   Ú_layout_corporate_linkedin  s(   
**
000z)VisualRenderer._layout_corporate_linkedinc       	         C  s¼  |\}}|d }t |ƒdkr|d nd}t |ƒdkr|d nd}| t |t d|d¡d¡¡ t |¡}td	|d
ƒD ]}|jd	|f||fgddd� q:tdƒD ]-}| 	d	|d ¡}| 	dd¡}| 	dd¡}|j
|||| || g| ¡ dkrx|n|d� qO|jd|d	f|d dfdgt|ddƒd� |j||fd	|fd|d f||d fgt|ddƒd� t |¡}|jdd|| jddd�d� |jd| j ¡ || jddd�d� | jtd |	d!  ƒdd�}|  td"|	d#  ƒ¡}d$}tt||
d% ƒd |
d& … ƒD ]/\}}|d �rd'nd	}|jd(| |f|||d� |jd |f|d)|d� |td*|	d!  ƒ7 }qú|d7 }| j|d |||d+|
d, |
d- td.|	d#  ƒd/�	 |jd |d0 f|d d1… || jd2dd�d� d S )3Nr)  rW   )r¹   r   r½  rV   )r   r¹   r¹   r�   )ru  r  re  rŽ   r   rŸ   r×   rY  rt   re  rW  iØÿÿÿrm  rÜ   r‚  rc  rê   )r   r  rŠ  rÞ   r«  u	   â–¸ CYBERro  TrR  r"  )rÏ  rr  rr  r  rS  r  rŽ  r  r  ré   r`  rT  rs  )rŽ  r|  r®  r  r  r  ra  rq  r·  r  )r¢   ræ   r   r.  r‚   r   rË   r„   rß   rí   rg  rz   ÚpolygonrX   r  rq   rZ   rf  rJ   r•  r
   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   ÚmagentaÚcyanr‰   rñ   ÚgyÚghÚgxrh  ri  rã   rß   rò  rP   rP   rQ   Ú_layout_cyberpunk0  s:   
0*6
"&00z VisualRenderer._layout_cyberpunkc       	         C  s¨  |\}}|d }t  d|d¡}t |¡}|jdt|d ƒf|t|d ƒf||fd|fgdd� | t  | d¡|¡ d	¡¡ t |¡}|j	g d
¢|d� |j
d|	d rX| j ¡ n| jd| jddd�d� | jtd|	d  ƒdd�}|  td|	d  ƒ¡}t|d ƒ}| j|d|||d|
d |
d td|	d  ƒd�	}|d7 }| j|d|||d|
d |
d td |	d  ƒd�	 |j
d|d! f| j› d"|d d#… › �|| jddd�d� d S )$Nr)  rÃ   rÄ   r   g{®GázÔ?g¸…ëQ¸¾?)rt   rW  ro  rŸ  rÜ   r�   )rs  rU  é°   rº   )rs  rq  r  rT  r  TrR  r"  r¬  r  r¸   r  r�   rs  r  r  r™  ra  rW  )r„  rw  rŸ  r  r  rì   rq  u     Â·  rZ  )r   r‚   r   rË   r  rJ   ræ   rÍ   rÊ   rg  r  rZ   rf  rq   r#  )ra   rÏ   r¿   r7  r8  r4  r£   rè   rc   r:  r;  r  r†   r|   r]   ÚpanelÚpdrh  ri  r‰   rP   rP   rQ   Ú_layout_split_diagonalQ  s    
6
000<z%VisualRenderer._layout_split_diagonalrO   )
rZ   r[   r\   r[   r]   r[   r^   r[   r_   r`   )F)rc   rJ   r<   rd   rN   re   )rr   r[   rN   rs   )rc   r   rS   rT   rU   rT   r4   rd   r~   rd   rN   r€   )r�   )
rc   r   r�   rT   r‘   rT   r’   r“   rN   r€   )rœ   r�   rN   rž   )r‡   r€   rc   r   rN   r€   )r¿   r€   rÀ   rÁ   r»   rJ   r¼   rT   r½   rJ   r¾   rÂ   rN   r€   )rc   r   rÙ   r[   rÚ   rJ   r‹   rT   rÛ   rJ   rN   r€   )r¿   r€   rà   r€   rN   rå   )
r¿   r€   r]   rT   rè   rs   rc   r   rN   rå   )rö   r[   rN   r[   )r   r  rN   r  )r  rd   rN   r  )rÏ   r  rŠ   rJ   r‰   rJ   r  r[   r  re   rÆ   rT   r  rJ   r   rJ   r!  rJ   rN   rJ   )
rc   r   r£   rž   r$  r`   rè   rs   rN   r%  )r6  r   r7  r[   r8  r[   r4  r  rö   r[   rœ   r�   r$  r`   r5  r[   rc   r   r   r  rN   r   )
r6  r   r7  r[   r8  r[   r4  r  rN   r   )r6  r   rK  rJ   rL  rJ   rM  r[   r8  r[   rN   r   )+Ú__name__Ú
__module__Ú__qualname__Ú__doc__rb   rq   r}   rŒ   r›   r¥   r³   rÔ   rä   rç   rõ   rÿ   r  r  r#  r2  ÚSIZE_SQUARErG  rJ  rP  rl  rB  rˆ  r–  rª  r²  rº  rÀ  rÉ  rØ  rã  ré  rð  ró  rø  rü  r  r
  r  rP   rP   rP   rQ   rY   Y   s|    ú

ùû

øù






#ô.úù !rY   )rI   rJ   rK   rJ   rL   rM   rN   rJ   )rS   rT   rU   rT   rL   rM   rN   rT   )Ú
__future__r   rv   r•   rz   Úpathlibr   ÚPILr   r   r   r   r   Úsrc.util.textr	   r
   r  rû   rH   Ú__annotations__rR   rX   rY   rP   rP   rP   rQ   Ú<module>   s²    ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#×
-
