
    +i,                        d Z ddlZddlZddlmZ ddlmZ ddlmZ  ee	      j                  j                  dz  ZdZdg d	g d
ddddgg dddg dg dddg dg dddg dg dddg dg dddg dg dddg d g d!dd"g d#g ddd$g d#g ddd%g d&g d'dd(Zd)d*d+iiZg d,g d-d.Z eej#                               Z G d/ d0      Zd1 Zd2 Zd3 Zdefd4Zefd5Zy)6z@
UI/UX Pro Max Core - BM25 search engine for UI/UX style guides
    N)Path)log)defaultdictdata   z
styles.csv)Style CategoryKeywordsBest ForTypeAI Prompt Keywords)r   r   r	   zPrimary ColorszEffects & Animationr
   PerformanceAccessibilityzFramework Compatibility
Complexityr   zCSS/Technical KeywordszImplementation ChecklistzDesign System Variables)filesearch_colsoutput_colsz
colors.csvProduct TypeNotes)r   Primaryz
On Primary	SecondaryzOn SecondaryAccentz	On Accent
Background
ForegroundCardzCard ForegroundMutedzMuted ForegroundBorderDestructivezOn DestructiveRingr   z
charts.csv)	Data Typer	   Best Chart TypeWhen to UseWhen NOT to UseAccessibility Notes)r   r	   r    zSecondary Optionsr!   r"   zData Volume ThresholdzColor GuidancezAccessibility Grader#   zA11y FallbackzLibrary RecommendationzInteractive Levelzlanding.csv)Pattern Namer	   Conversion OptimizationSection Order)r$   r	   r&   zPrimary CTA PlacementzColor Strategyr%   zproducts.csv)r   r	   Primary Style RecommendationzKey Considerations)r   r	   r'   zSecondary StyleszLanding Page PatternzDashboard Style (if applicable)zColor Palette Focuszux-guidelines.csv)CategoryIssueDescriptionPlatform)	r(   r)   r+   r*   DoDon'tzCode Example GoodzCode Example BadSeverityztypography.csv)Font Pairing Namer(   Mood/Style Keywordsr
   Heading Font	Body Font)
r/   r(   r1   r2   r0   r
   Google Fonts URLz
CSS ImportzTailwind Configr   z	icons.csv)r(   	Icon Namer	   r
   )r(   r4   r	   LibraryzImport CodeUsager
   Stylezreact-performance.csv)r(   r)   r	   r*   zapp-interface.csvzgoogle-fonts.csv)Familyr(   StrokeClassificationsr	   Subsets	Designers)
r8   r(   r9   r:   StyleszVariable Axesr;   r<   zPopularity Rankr3   )stylecolorchartlandingproductux
typographyiconsreactwebgoogle-fontszreact-nativer   zstacks/react-native.csv)r(   	Guideliner*   r,   r-   )	r(   rI   r*   r,   r-   z	Code GoodzCode Badr.   zDocs URL)r   r   c                   *    e Zd ZdZddZd Zd Zd Zy)BM25z&BM25 ranking algorithm for text searchc                     || _         || _        g | _        g | _        d| _        i | _        t        t              | _        d| _	        y )Nr   )
k1bcorpusdoc_lengthsavgdlidfr   int	doc_freqsN)selfrM   rN   s      8/home/jay/.agents/skills/frontend-design/scripts/core.py__init__zBM25.__init__\   s@    
$S)    c                     t        j                  ddt        |      j                               }|j	                         D cg c]  }t        |      dkD  s| c}S c c}w )z8Lowercase, split, remove punctuation, filter short wordsz[^\w\s]    )resubstrlowersplitlen)rV   textws      rW   tokenizezBM25.tokenizef   sC    vvj#s4y'89::<6a3q6A:666s   AAc                    |D cg c]  }| j                  |       c}| _        t        | j                        | _        | j                  dk(  ry| j                  D cg c]  }t        |       c}| _        t        | j                        | j                  z  | _        | j                  D ]@  }t               }|D ]/  }||vs| j                  |xx   dz  cc<   |j                  |       1 B | j                  j                         D ]6  \  }}t        | j                  |z
  dz   |dz   z  dz         | j                  |<   8 yc c}w c c}w )zBuild BM25 index from documentsr   N   g      ?)re   rO   rb   rU   rP   sumrQ   setrT   additemsr   rR   )rV   	documentsdocseenwordfreqs         rW   fitzBM25.fitk   s   5>?ct}}S)?T[[!66Q;04<CH<))*TVV3
;; 	#C5D #t#NN4(A-(HHTN#	# ....0 	KJD$ $&&4-#"5$*!E!IJDHHTN	K @ =s   EEc                    | j                  |      }g }t        | j                        D ]  \  }}d}| j                  |   }t	        t
              }|D ]  }	||	xx   dz  cc<    |D ]~  }
|
| j                  v s||
   }| j                  |
   }|| j                  dz   z  }|| j                  d| j                  z
  | j                  |z  | j                  z  z   z  z   }|||z  |z  z  } |j                  ||f        t        |d d      S )z!Score all documents against queryr   rg   c                     | d   S )Nrg    )xs    rW   <lambda>zBM25.score.<locals>.<lambda>   s
    AaD rY   T)keyreverse)re   	enumeraterO   rP   r   rS   rR   rM   rN   rQ   appendsorted)rV   queryquery_tokensscoresidxrm   scoredoc_len
term_freqsro   tokentfrR   	numeratordenominators                  rW   r   z
BM25.score~   s    }}U+!$++. 	(HCE&&s+G$S)J &4 A% & & ;DHH$#E*B((5/C "dggk 2I"$tww!dff*tvv?ORVR\R\?\2\']"]KS9_{::E; MM3,'	(" f.$??rY   N)g      ?g      ?)__name__
__module____qualname____doc__rX   re   rq   r   rt   rY   rW   rK   rK   Y   s    07
K&@rY   rK   c                     t        | dd      5 }t        t        j                  |            cddd       S # 1 sw Y   yxY w)z!Load CSV and return list of dictsrzutf-8)encodingN)openlistcsv
DictReader)filepathfs     rW   	_load_csvr      s6    	hg	. '!CNN1%&' ' 's	   7A c                    | j                         sg S t        |       }|D cg c]  dj                  fd|D               }}t               }|j	                  |       |j                  |      }	g }
|	d| D ]E  \  }}|dkD  s||   |
j                  |D ci c]  }|v s|j                  |d       c}       G |
S c c}w c c}w )zCore search function using BM25r[   c              3   T   K   | ]  }t        j                  |d              ! yw) N)r_   get).0colrows     rW   	<genexpr>z_search_csv.<locals>.<genexpr>   s!     GC#cggc2./Gs   %(Nr   r   )existsr   joinrK   rq   r   rz   r   )r   r   r   r|   max_resultsr   r   rl   bm25rankedresultsr   r   r   s         `       rW   _search_csvr      s    ??	XD TXXCG;GGXIX 6DHHYZZF G\k* Y
U19s)CNN[WcCSVJCb!11WXY
 N Y Xs   !C	C	
$C	
c                 (   | j                         g dg dg dg dg dg dg dg dg d	g d
g dd}|j                         D ci c]  \  }}|t        fd|D               }}}t        ||j                        }||   dkD  r|S dS c c}}w )z/Auto-detect the most relevant domain from query)r?   palettehex#rgbr   semanticaccentdestructivemuted
foreground)	r@   graphvisualizationtrendbarpiescatterheatmapfunnel)rA   pagecta
conversionherotestimonialpricingsection)Rsaas	ecommercez
e-commercefintech
healthcaregaming	portfoliocrypto	dashboardfitness
restauranthoteltravelmusic	educationlearninglegal	insurancemedicalbeautypharmacydentalpetdatingweddingrecipedeliveryridebookingcalendartimertrackerdiarynotechat	messengercrminvoiceparkingtransitvpnalarmweathersleep
meditationfastinghabitgrocerymemewardrobez
plant carereading	flashcardpuzzletriviaarcadephotography	streamingpodcast
newslettermarketplace
freelancer	coworkingairlinemuseumtheaterchurchz
non-profitcharitykindergartendaycarezsenior care
veterinaryfloristbakerybreweryconstruction
automotivezreal estate	logisticsagriculturezcoding bootcamp)r>   designui
minimalismglassmorphismneumorphism	brutalismz	dark modeflataurorapromptcssimplementationvariable	checklisttailwind)
rC   	usabilityaccessibilitywcagtouchscroll	animationkeyboard
navigationmobile)zfont pairingztypography pairingzheading fontz	body font)zgoogle fontzfont familyzfont weightz
font stylezvariable fontnotozfont forz	find fontzfont subsetzfont languagezmonospace fontz
serif fontzsans serif fontzdisplay fontzhandwriting fontfontrD   serifsans)iconrE   lucide	heroiconssymbolglyph	pictogramzsvg icon)rF   znext.jsnextjssuspensememousecallback	useeffectrerenderbundle	waterfallbarrelzdynamic importrsczserver component)	ariafocusoutliner   
virtualizeautocompleteformz
input type
preconnect)r?   r@   rA   rB   r>   rC   rD   rH   rE   rF   rG   c              3      K   | ]6  }t        j                  d t        j                  |      z   d z         s3d 8 yw)z\brg   N)r]   searchescape)r   kwquery_lowers     rW   r   z detect_domain.<locals>.<genexpr>   s2     h"))EBIIbM<QTY<Y[f2g!hs   4??)rw   r   r>   )r`   rk   rh   maxr   )r|   domain_keywordsdomainkeywordsr~   bestr?  s         @rW   detect_domainrE     s    ++-K ~kh  M~Y de zyO BQ  BW  BW  BY  Zm}msu}fchhhhh  ZF  Zv6::&D$<!#400 Zs   	Bc                     |t        |       }t        j                  |t        d         }t        |d   z  }|j	                         sd| |dS t        ||d   |d   | |      }|| |d   t        |      |dS )z/Main search function with auto-domain detectionr>   r   zFile not found: )errorrB  r   r   )rB  r|   r   countr   )rE  
CSV_CONFIGr   DATA_DIRr   r   rb   )r|   rB  r   configr   r   s         rW   r<  r<     s    ~u%^^FJw$78F&.(H??+H:6&II(F=$96-;PRWYdeG vW rY   c                    |t         vrdd| ddj                  t               iS t        t         |   d   z  }|j	                         sd| |dS t        |t        d   t        d	   | |      }d
|| t         |   d   t        |      |dS )z Search stack-specific guidelinesrG  zUnknown stack: z. Available: z, r   zStack file not found: )rG  stackr   r   rM  )rB  rM  r|   r   rH  r   )STACK_CONFIGr   AVAILABLE_STACKSrJ  r   r   _STACK_COLSrb   )r|   rM  r   r   r   s        rW   search_stackrQ     s    L ?5'tyyIY?Z>[\]],u-f55H??1(<uMM(K$>M@Z\acnoG U#F+W rY   )r   r   r]   pathlibr   mathr   collectionsr   __file__parentrJ  MAX_RESULTSrI  rN  rP  r   keysrO  rK   r   r   rE  r<  rQ  rt   rY   rW   <module>rY     s    	   # >  ''&0 _ c &0 E | T _ K i z $G L !x w Ht (G L $G L #n eg8
v V67 K{
 ))+, ;@ ;@~'21. ; , ,7 rY   