Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Generate complete design systems with styles, colors, fonts, and UX rules for web and mobile apps
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
scripts/search.py
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4UI/UX Pro Max Search - BM25 search engine for UI/UX style guides5Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]6python search.py "<query>" --design-system [-p "Project Name"]7python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]89Domains: style, prompt, color, chart, landing, product, ux, typography, google-fonts10Stacks: react, nextjs, vue, svelte, astro, swiftui, react-native, flutter, nuxtjs, nuxt-ui, html-tailwind, shadcn, jetpack-compose, threejs1112Persistence (Master + Overrides pattern):13--persist Save design system to design-system/MASTER.md14--page Also create a page-specific override file in design-system/pages/15"""1617import argparse18import sys19import io20from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack21from design_system import generate_design_system, persist_design_system2223# Force UTF-8 for stdout/stderr to handle emojis on Windows (cp1252 default)24if sys.stdout.encoding and sys.stdout.encoding.lower() != 'utf-8':25sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')26if sys.stderr.encoding and sys.stderr.encoding.lower() != 'utf-8':27sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')282930def format_output(result):31"""Format results for Claude consumption (token-optimized)"""32if "error" in result:33return f"Error: {result['error']}"3435output = []36if result.get("stack"):37output.append(f"## UI Pro Max Stack Guidelines")38output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")39else:40output.append(f"## UI Pro Max Search Results")41output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")42output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")4344for i, row in enumerate(result['results'], 1):45output.append(f"### Result {i}")46for key, value in row.items():47value_str = str(value)48if len(value_str) > 300:49value_str = value_str[:300] + "..."50output.append(f"- **{key}:** {value_str}")51output.append("")5253return "\n".join(output)545556if __name__ == "__main__":57parser = argparse.ArgumentParser(description="UI Pro Max Search")58parser.add_argument("query", help="Search query")59parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")60parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help=f"Stack-specific search. Available: {', '.join(AVAILABLE_STACKS)}")61parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")62parser.add_argument("--json", action="store_true", help="Output as JSON")63# Design system generation64parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")65parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")66parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")67# Persistence (Master + Overrides pattern)68parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")69parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")70parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")7172args = parser.parse_args()7374# Design system takes priority75if args.design_system:76result = generate_design_system(77args.query,78args.project_name,79args.format,80persist=args.persist,81page=args.page,82output_dir=args.output_dir83)84print(result)8586# Print persistence confirmation87if args.persist:88project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"89print("\n" + "=" * 60)90print(f"โ Design system persisted to design-system/{project_slug}/")91print(f" ๐ design-system/{project_slug}/MASTER.md (Global Source of Truth)")92if args.page:93page_filename = args.page.lower().replace(' ', '-')94print(f" ๐ design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")95print("")96print(f"๐ Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")97print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")98print("=" * 60)99# Stack search100elif args.stack:101result = search_stack(args.query, args.stack, args.max_results)102if args.json:103import json104print(json.dumps(result, indent=2, ensure_ascii=False))105else:106print(format_output(result))107# Domain search108else:109result = search(args.query, args.domain, args.max_results)110if args.json:111import json112print(json.dumps(result, indent=2, ensure_ascii=False))113else:114print(format_output(result))115